From 784cf098b0a45d9971fde658e7e1d09fa036093c Mon Sep 17 00:00:00 2001 From: ApoC Date: Mon, 29 Dec 2008 00:51:49 +0100 Subject: [PATCH 001/145] [6968] Replace check for spell category removed in 3.0.x with spellid. Should fix not interrupting wand casting by other spell cast. Signed-off-by: ApoC --- src/game/SharedDefines.h | 1 + src/game/Spell.cpp | 4 ++-- src/game/Unit.cpp | 8 ++++---- src/shared/revision_nr.h | 2 +- 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/game/SharedDefines.h b/src/game/SharedDefines.h index 882311934..58ebe242a 100644 --- a/src/game/SharedDefines.h +++ b/src/game/SharedDefines.h @@ -1904,6 +1904,7 @@ enum CorpseDynFlags #define SPELL_ID_PASSIVE_RESURRECTION_SICKNESS 15007 #define SPELL_ID_WEAPON_SWITCH_COOLDOWN_1_5s 6119 #define SPELL_ID_WEAPON_SWITCH_COOLDOWN_1_0s 6123 +#define SPELL_ID_AUTOSHOT 75 // used for checks in other spells interruption enum WeatherType { diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp index 325841e03..a658cd91f 100644 --- a/src/game/Spell.cpp +++ b/src/game/Spell.cpp @@ -724,7 +724,7 @@ void Spell::prepareDataForTriggerSystem() m_procAttacker = PROC_FLAG_SUCCESSFUL_POSITIVE_SPELL; m_procVictim = PROC_FLAG_TAKEN_POSITIVE_SPELL; } - else if (m_spellInfo->Id == 5019) // Wands + else if (m_spellInfo->Id != SPELL_ID_AUTOSHOT) // Wands { m_procAttacker = PROC_FLAG_SUCCESSFUL_RANGED_SPELL_HIT; m_procVictim = PROC_FLAG_TAKEN_RANGED_SPELL_HIT; @@ -2445,7 +2445,7 @@ void Spell::SendSpellCooldown() // shoot spells used equipped item cooldown values already assigned in GetAttackTime(RANGED_ATTACK) // prevent 0 cooldowns set by another way - if (rec <= 0 && catrec <= 0 && (cat == 76 || cat == 351)) + if (rec <= 0 && catrec <= 0 && (cat == 76 || m_spellInfo->Id != SPELL_ID_AUTOSHOT)) rec = _player->GetAttackTime(RANGED_ATTACK); // Now we have cooldown data (if found any), time to apply mods diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index a339e1baa..1a88e3245 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -2786,7 +2786,7 @@ void Unit::_UpdateAutoRepeatSpell() if ( (GetTypeId() == TYPEID_PLAYER && ((Player*)this)->isMoving()) || IsNonMeleeSpellCasted(false,false,true) ) { // cancel wand shoot - if(m_currentSpells[CURRENT_AUTOREPEAT_SPELL]->m_spellInfo->Category == 351) + if(m_currentSpells[CURRENT_AUTOREPEAT_SPELL]->m_spellInfo->Id != SPELL_ID_AUTOSHOT) InterruptSpell(CURRENT_AUTOREPEAT_SPELL); m_AutoRepeatFirstCast = true; return; @@ -2839,7 +2839,7 @@ void Unit::SetCurrentCastedSpell( Spell * pSpell ) if ( m_currentSpells[CURRENT_AUTOREPEAT_SPELL] ) { // break autorepeat if not Auto Shot - if (m_currentSpells[CURRENT_AUTOREPEAT_SPELL]->m_spellInfo->Category == 351) + if (m_currentSpells[CURRENT_AUTOREPEAT_SPELL]->m_spellInfo->Id != SPELL_ID_AUTOSHOT) InterruptSpell(CURRENT_AUTOREPEAT_SPELL); m_AutoRepeatFirstCast = true; } @@ -2853,14 +2853,14 @@ void Unit::SetCurrentCastedSpell( Spell * pSpell ) // it also does break autorepeat if not Auto Shot if ( m_currentSpells[CURRENT_AUTOREPEAT_SPELL] && - m_currentSpells[CURRENT_AUTOREPEAT_SPELL]->m_spellInfo->Category == 351 ) + m_currentSpells[CURRENT_AUTOREPEAT_SPELL]->m_spellInfo->Id != SPELL_ID_AUTOSHOT ) InterruptSpell(CURRENT_AUTOREPEAT_SPELL); } break; case CURRENT_AUTOREPEAT_SPELL: { // only Auto Shoot does not break anything - if (pSpell->m_spellInfo->Category == 351) + if (pSpell->m_spellInfo->Id != SPELL_ID_AUTOSHOT) { // generic autorepeats break generic non-delayed and channeled non-delayed spells InterruptSpell(CURRENT_GENERIC_SPELL,false); diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 299924ce0..03a261e0b 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 "6967" + #define REVISION_NR "6968" #endif // __REVISION_NR_H__ From 5793ae28eae021a986775c451708a142624a7f27 Mon Sep 17 00:00:00 2001 From: VladimirMangos Date: Mon, 29 Dec 2008 04:37:14 +0300 Subject: [PATCH 002/145] [6969] Prevent stacking presence auras. --- src/game/SpellMgr.cpp | 10 ++++++++-- src/game/SpellMgr.h | 3 ++- src/shared/revision_nr.h | 2 +- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/game/SpellMgr.cpp b/src/game/SpellMgr.cpp index 5ae1bc199..401da3cf3 100644 --- a/src/game/SpellMgr.cpp +++ b/src/game/SpellMgr.cpp @@ -182,9 +182,9 @@ SpellSpecific GetSpellSpecific(uint32 spellId) if ((spellInfo->SpellFamilyFlags & 0x00000820180400LL) && (spellInfo->AttributesEx3 & 0x200)) return SPELL_JUDGEMENT; - for (int i = 0; i < 3; i++) // TODO: fix it for WotLK!!! + for (int i = 0; i < 3; i++) { - // only paladin auras have this + // only paladin auras have this (for palaldin class family) if (spellInfo->Effect[i] == SPELL_EFFECT_APPLY_AREA_AURA_RAID) return SPELL_AURA; } @@ -200,6 +200,11 @@ SpellSpecific GetSpellSpecific(uint32 spellId) case SPELLFAMILY_POTION: return spellmgr.GetSpellElixirSpecific(spellInfo->Id); + + case SPELLFAMILY_DEATHKNIGHT: + if ((spellInfo->Attributes & 0x10) && (spellInfo->AttributesEx2 & 0x10) && (spellInfo->AttributesEx4 & 0x200000)) + return SPELL_PRESENCE; + break; } // only warlock armor/skin have this (in additional to family cases) @@ -245,6 +250,7 @@ bool IsSingleFromSpellSpecificPerCaster(uint32 spellSpec1,uint32 spellSpec2) case SPELL_MAGE_POLYMORPH: case SPELL_POSITIVE_SHOUT: case SPELL_JUDGEMENT: + case SPELL_PRESENCE: return spellSpec1==spellSpec2; case SPELL_BATTLE_ELIXIR: return spellSpec2==SPELL_BATTLE_ELIXIR diff --git a/src/game/SpellMgr.h b/src/game/SpellMgr.h index d7870cccc..72d35a0b6 100644 --- a/src/game/SpellMgr.h +++ b/src/game/SpellMgr.h @@ -273,7 +273,8 @@ enum SpellSpecific SPELL_JUDGEMENT = 13, SPELL_BATTLE_ELIXIR = 14, SPELL_GUARDIAN_ELIXIR = 15, - SPELL_FLASK_ELIXIR = 16 + SPELL_FLASK_ELIXIR = 16, + SPELL_PRESENCE = 17 }; SpellSpecific GetSpellSpecific(uint32 spellId); diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 03a261e0b..607cd426a 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 "6968" + #define REVISION_NR "6969" #endif // __REVISION_NR_H__ From da133b2618205263b3e45c4342a4993356a7e487 Mon Sep 17 00:00:00 2001 From: Grz3s Date: Mon, 29 Dec 2008 13:29:14 +0300 Subject: [PATCH 003/145] [6970] Fixing player staring coordinates in mangos.sql. --- sql/mangos.sql | 8 ++++---- sql/updates/6970_01_mangos_playercreateinfo.sql | 7 +++++++ sql/updates/Makefile.am | 2 ++ src/shared/revision_nr.h | 2 +- 4 files changed, 14 insertions(+), 5 deletions(-) create mode 100644 sql/updates/6970_01_mangos_playercreateinfo.sql diff --git a/sql/mangos.sql b/sql/mangos.sql index b529fb552..f9a7151c7 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_6961_01_mangos_command` bit(1) default NULL + `required_6970_01_mangos_playercreateinfo` bit(1) default NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Used DB version notes'; -- @@ -9288,10 +9288,10 @@ INSERT INTO `playercreateinfo` VALUES (6,7,1,215,-2917,-257,53), (6,11,1,215,-2917,-257,53), (7,1,0,1,-6240,331,383), -(7,4,0,1,-6340,331,383), +(7,4,0,1,-6240,331,383), (7,6,609,4298,2355.05,-5661.7, 426.026), -(7,8,0,1,-6340,331,383), -(7,9,0,1,-6340,331,383), +(7,8,0,1,-6240,331,383), +(7,9,0,1,-6240,331,383), (8,1,1,14,-618,-4251,39), (8,3,1,14,-618,-4251,39), (8,4,1,14,-618,-4251,39), diff --git a/sql/updates/6970_01_mangos_playercreateinfo.sql b/sql/updates/6970_01_mangos_playercreateinfo.sql new file mode 100644 index 000000000..a6d774738 --- /dev/null +++ b/sql/updates/6970_01_mangos_playercreateinfo.sql @@ -0,0 +1,7 @@ +ALTER TABLE db_version CHANGE COLUMN required_6961_01_mangos_command required_6970_01_mangos_playercreateinfo bit; + +DELETE FROM `playercreateinfo` WHERE `race`=7 AND `class` IN (4,8,9); +INSERT INTO `playercreateinfo` VALUES +(7,4,0,1,-6240,331,383), +(7,8,0,1,-6240,331,383), +(7,9,0,1,-6240,331,383); diff --git a/sql/updates/Makefile.am b/sql/updates/Makefile.am index 719867fa7..8f4f7dd8e 100644 --- a/sql/updates/Makefile.am +++ b/sql/updates/Makefile.am @@ -104,6 +104,7 @@ pkgdata_DATA = \ 6960_01_mangos_command.sql \ 6960_02_mangos_string.sql \ 6961_01_mangos_command.sql \ + 6970_01_mangos_playercreateinfo.sql \ README ## Additional files to include when running 'make dist' @@ -188,4 +189,5 @@ EXTRA_DIST = \ 6960_01_mangos_command.sql \ 6960_02_mangos_string.sql \ 6961_01_mangos_command.sql \ + 6970_01_mangos_playercreateinfo.sql \ README diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 607cd426a..7be6be17b 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 "6969" + #define REVISION_NR "6970" #endif // __REVISION_NR_H__ From e2b744f016265ec37facd4bf3e2c1b3e872ed062 Mon Sep 17 00:00:00 2001 From: arrai Date: Mon, 29 Dec 2008 14:18:48 +0100 Subject: [PATCH 004/145] [6971] Implemented summon type 1161. This will fix spell 51533 --- src/game/SharedDefines.h | 3 ++- src/game/SpellEffects.cpp | 1 + src/shared/revision_nr.h | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/game/SharedDefines.h b/src/game/SharedDefines.h index 58ebe242a..d02fd4319 100644 --- a/src/game/SharedDefines.h +++ b/src/game/SharedDefines.h @@ -2073,7 +2073,8 @@ enum SummonType SUMMON_TYPE_CRITTER3 = 307, SUMMON_TYPE_UNKNOWN5 = 409, SUMMON_TYPE_UNKNOWN2 = 427, - SUMMON_TYPE_POSESSED2 = 428 + SUMMON_TYPE_POSESSED2 = 428, + SUMMON_TYPE_GUARDIAN2 = 1161 }; enum ResponseCodes diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp index 91a88851f..74b59dc07 100644 --- a/src/game/SpellEffects.cpp +++ b/src/game/SpellEffects.cpp @@ -3163,6 +3163,7 @@ void Spell::EffectSummonType(uint32 i) case SUMMON_TYPE_GUARDIAN: case SUMMON_TYPE_POSESSED: case SUMMON_TYPE_POSESSED2: + case SUMMON_TYPE_GUARDIAN2: EffectSummonGuardian(i); break; case SUMMON_TYPE_WILD: diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 7be6be17b..3926b14bc 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 "6970" + #define REVISION_NR "6971" #endif // __REVISION_NR_H__ From 28ee9a7c39e7e34b223f7a9787625b9650a4ad58 Mon Sep 17 00:00:00 2001 From: arrai Date: Mon, 29 Dec 2008 14:37:36 +0100 Subject: [PATCH 005/145] [6972] Fixed teleporting players home at logging out in invalid instances --- src/game/WorldSession.cpp | 4 ++++ src/shared/revision_nr.h | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/game/WorldSession.cpp b/src/game/WorldSession.cpp index 858f33717..89dcfbb56 100644 --- a/src/game/WorldSession.cpp +++ b/src/game/WorldSession.cpp @@ -307,6 +307,10 @@ void WorldSession::LogoutPlayer(bool Save) if(_player->InBattleGround()) _player->LeaveBattleground(); + ///- Teleport to home if the player is in an invalid instance + if(!_player->m_InstanceValid && !_player->isGameMaster()) + _player->TeleportTo(_player->m_homebindMapId, _player->m_homebindX, _player->m_homebindY, _player->m_homebindZ, _player->GetOrientation()); + for (int i=0; i < PLAYER_MAX_BATTLEGROUND_QUEUES; i++) { if(int32 bgTypeId = _player->GetBattleGroundQueueId(i)) diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 3926b14bc..a22d0da1a 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 "6971" + #define REVISION_NR "6972" #endif // __REVISION_NR_H__ From 6b34b76426c4e920c9fcc98688ac810fb121d074 Mon Sep 17 00:00:00 2001 From: arrai Date: Mon, 29 Dec 2008 15:10:11 +0100 Subject: [PATCH 006/145] [6973] Fixed storing demotes in guild log. Patch provided by vdesai --- src/game/GuildHandler.cpp | 2 +- src/shared/revision_nr.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/game/GuildHandler.cpp b/src/game/GuildHandler.cpp index 1c7249362..fe50ccfed 100644 --- a/src/game/GuildHandler.cpp +++ b/src/game/GuildHandler.cpp @@ -373,7 +373,7 @@ void WorldSession::HandleGuildDemoteOpcode(WorldPacket& recvPacket) guild->ChangeRank(plGuid, (slot->RankId+1)); // Put record into guildlog - guild->LogGuildEvent(GUILD_EVENT_LOG_DEMOTE_PLAYER, GetPlayer()->GetGUIDLow(), GUID_LOPART(plGuid), (slot->RankId+1)); + guild->LogGuildEvent(GUILD_EVENT_LOG_DEMOTE_PLAYER, GetPlayer()->GetGUIDLow(), GUID_LOPART(plGuid), slot->RankId); WorldPacket data(SMSG_GUILD_EVENT, (2+30)); // guess size data << (uint8)GE_DEMOTION; diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index a22d0da1a..328f7d8c5 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 "6972" + #define REVISION_NR "6973" #endif // __REVISION_NR_H__ From 02cc37bcd0987922115430682a7d606853cee3f8 Mon Sep 17 00:00:00 2001 From: Charlie2025 Date: Mon, 29 Dec 2008 19:18:44 +0000 Subject: [PATCH 007/145] [6974] Set different loglevel for UpdateAchievementCriteria Signed-off-by: ApoC --- src/game/AchievementMgr.cpp | 2 +- src/shared/revision_nr.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/game/AchievementMgr.cpp b/src/game/AchievementMgr.cpp index e4e26dec1..ec1085d8a 100644 --- a/src/game/AchievementMgr.cpp +++ b/src/game/AchievementMgr.cpp @@ -363,7 +363,7 @@ void AchievementMgr::CheckAllAchievementCriteria() */ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, uint32 miscvalue1, uint32 miscvalue2, Unit *unit, uint32 time) { - sLog.outString("AchievementMgr::UpdateAchievementCriteria(%u, %u, %u, %u)", type, miscvalue1, miscvalue2, time); + sLog.outDetail("AchievementMgr::UpdateAchievementCriteria(%u, %u, %u, %u)", type, miscvalue1, miscvalue2, time); AchievementCriteriaEntryList const& achievementCriteriaList = objmgr.GetAchievementCriteriaByType(type); for(AchievementCriteriaEntryList::const_iterator i = achievementCriteriaList.begin(); i!=achievementCriteriaList.end(); ++i) { diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 328f7d8c5..d32f0262b 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 "6973" + #define REVISION_NR "6974" #endif // __REVISION_NR_H__ From c5976f93da0fbd9c2c77003eba0ca91e7fc36c0d Mon Sep 17 00:00:00 2001 From: VladimirMangos Date: Mon, 29 Dec 2008 22:55:03 +0300 Subject: [PATCH 008/145] [6975] Fixed spell damage calculation for negative EffectDieSides. Thanks to NoFantasy for testing. Also small code style apply to random generation functions. --- src/game/Unit.cpp | 7 +++++-- src/shared/Util.cpp | 10 +++++----- src/shared/revision_nr.h | 2 +- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index 1a88e3245..68fd00229 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -8757,8 +8757,11 @@ int32 Unit::CalculateSpellDamage(SpellEntry const* spellProto, uint8 effect_inde int32 randomPoints = int32(spellProto->EffectDieSides[effect_index] + level * randomPointsPerLevel); float comboDamage = spellProto->EffectPointsPerComboPoint[effect_index]; - // prevent random generator from getting confused by spells casted with Unit::CastCustomSpell - int32 randvalue = spellProto->EffectBaseDice[effect_index] >= randomPoints ? spellProto->EffectBaseDice[effect_index]:irand(spellProto->EffectBaseDice[effect_index], randomPoints); + // range can have possitive and negative values, so order its for irand + int32 randvalue = int32(spellProto->EffectBaseDice[effect_index]) >= randomPoints + ? irand(randomPoints, int32(spellProto->EffectBaseDice[effect_index])) + : irand(int32(spellProto->EffectBaseDice[effect_index]), randomPoints); + int32 value = basePoints + randvalue; //random damage if(comboDamage != 0 && unitPlayer && target && (target->GetGUID() == unitPlayer->GetComboTarget())) diff --git a/src/shared/Util.cpp b/src/shared/Util.cpp index eabd33ad0..73d75f78f 100644 --- a/src/shared/Util.cpp +++ b/src/shared/Util.cpp @@ -34,27 +34,27 @@ static MTRandTSS mtRand; int32 irand (int32 min, int32 max) { - return int32 (mtRand.get ().randInt (max - min)) + min; + return int32 (mtRand.get ().randInt (max - min)) + min; } uint32 urand (uint32 min, uint32 max) { - return mtRand.get ().randInt (max - min) + min; + return mtRand.get ().randInt (max - min) + min; } int32 rand32 () { - return mtRand.get ().randInt (); + return mtRand.get ().randInt (); } double rand_norm(void) { - return mtRand.get ().randExc (); + return mtRand.get ().randExc (); } double rand_chance (void) { - return mtRand.get ().randExc (100.0); + return mtRand.get ().randExc (100.0); } Tokens StrSplit(const std::string &src, const std::string &sep) diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index d32f0262b..4b0fdbee5 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 "6974" + #define REVISION_NR "6975" #endif // __REVISION_NR_H__ From 75b1db8cd04ba55410dfd9ea0df6aed2053445ce Mon Sep 17 00:00:00 2001 From: Wyk3d Date: Mon, 29 Dec 2008 22:18:52 +0200 Subject: [PATCH 009/145] [6976] Changed the db_version fields in realmd and characters databases to revision number format --- sql/characters.sql | 2 +- sql/realmd.sql | 2 +- sql/updates/6976_01_realmd_realmd_db_version.sql | 1 + sql/updates/6976_02_characters_character_db_version.sql | 1 + sql/updates/Makefile.am | 4 ++++ src/shared/revision_nr.h | 2 +- 6 files changed, 9 insertions(+), 3 deletions(-) create mode 100644 sql/updates/6976_01_realmd_realmd_db_version.sql create mode 100644 sql/updates/6976_02_characters_character_db_version.sql diff --git a/sql/characters.sql b/sql/characters.sql index 0dffc512e..4cbaab5da 100644 --- a/sql/characters.sql +++ b/sql/characters.sql @@ -21,7 +21,7 @@ DROP TABLE IF EXISTS `character_db_version`; CREATE TABLE `character_db_version` ( - `required_2008_12_22_19_characters_item_instance` bit(1) default NULL + `required_6976_02_characters_character_db_version` bit(1) default NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Last applied sql update to DB'; -- diff --git a/sql/realmd.sql b/sql/realmd.sql index b2b881499..4d08c776a 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_2008_11_07_04_realmd_account` bit(1) default NULL + `required_6976_01_realmd_realmd_db_version` bit(1) default NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Last applied sql update to DB'; -- diff --git a/sql/updates/6976_01_realmd_realmd_db_version.sql b/sql/updates/6976_01_realmd_realmd_db_version.sql new file mode 100644 index 000000000..0ebbb2c82 --- /dev/null +++ b/sql/updates/6976_01_realmd_realmd_db_version.sql @@ -0,0 +1 @@ +ALTER TABLE realmd_db_version CHANGE COLUMN required_2008_11_07_04_realmd_account required_6976_01_realmd_realmd_db_version bit; \ No newline at end of file diff --git a/sql/updates/6976_02_characters_character_db_version.sql b/sql/updates/6976_02_characters_character_db_version.sql new file mode 100644 index 000000000..5fc192058 --- /dev/null +++ b/sql/updates/6976_02_characters_character_db_version.sql @@ -0,0 +1 @@ +ALTER TABLE character_db_version CHANGE COLUMN required_2008_12_22_19_characters_item_instance required_6976_02_characters_character_db_version bit; \ No newline at end of file diff --git a/sql/updates/Makefile.am b/sql/updates/Makefile.am index 8f4f7dd8e..1aa8bee07 100644 --- a/sql/updates/Makefile.am +++ b/sql/updates/Makefile.am @@ -105,6 +105,8 @@ pkgdata_DATA = \ 6960_02_mangos_string.sql \ 6961_01_mangos_command.sql \ 6970_01_mangos_playercreateinfo.sql \ + 6976_01_realmd_realmd_db_version.sql \ + 6976_02_characters_character_db_version.sql \ README ## Additional files to include when running 'make dist' @@ -190,4 +192,6 @@ EXTRA_DIST = \ 6960_02_mangos_string.sql \ 6961_01_mangos_command.sql \ 6970_01_mangos_playercreateinfo.sql \ + 6976_01_realmd_realmd_db_version.sql \ + 6976_02_characters_character_db_version.sql \ README diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 4b0fdbee5..e004c22da 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 "6975" + #define REVISION_NR "6976" #endif // __REVISION_NR_H__ From 07394d45da83e6e98ef1d6fe1af573a986deeb25 Mon Sep 17 00:00:00 2001 From: Wyk3d Date: Mon, 29 Dec 2008 21:16:12 +0200 Subject: [PATCH 010/145] [6977] Fixed a crash caused by incorrect use of GetMap for corpses in other maps, and another one caused by SelectHostilTarget failing to notice the target is not in world, due to a fauly InSameMap check. --- src/game/Object.h | 2 +- src/game/QueryHandler.cpp | 2 +- src/shared/revision_nr.h | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/game/Object.h b/src/game/Object.h index 6abd05203..9ecbf7b1d 100644 --- a/src/game/Object.h +++ b/src/game/Object.h @@ -416,7 +416,7 @@ class MANGOS_DLL_SPEC WorldObject : public Object float GetDistance2d(const WorldObject* obj) const; float GetDistance2d(const float x, const float y) const; float GetDistanceZ(const WorldObject* obj) const; - bool IsInMap(const WorldObject* obj) const { return GetMapId()==obj->GetMapId() && GetInstanceId()==obj->GetInstanceId(); } + bool IsInMap(const WorldObject* obj) const { return IsInWorld() && obj->IsInWorld() && GetMapId()==obj->GetMapId() && GetInstanceId()==obj->GetInstanceId(); } bool IsWithinDistInMap(const WorldObject* obj, const float dist2compare, const bool is3D = true) const; bool IsWithinLOS(const float x, const float y, const float z ) const; bool IsWithinLOSInMap(const WorldObject* obj) const; diff --git a/src/game/QueryHandler.cpp b/src/game/QueryHandler.cpp index 08f4a4db7..a24ddb3a9 100644 --- a/src/game/QueryHandler.cpp +++ b/src/game/QueryHandler.cpp @@ -289,7 +289,7 @@ void WorldSession::HandleCorpseQueryOpcode(WorldPacket & /*recv_data*/) float z = corpse->GetPositionZ(); int32 corpsemapid = _player->GetMapId(); - if(Map *map = corpse->GetMap()) + if(Map *map = MapManager::Instance().FindMap(corpse->GetMapId(), corpse->GetInstanceId())) { if(map->IsDungeon()) { diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index e004c22da..ceeadb6e7 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 "6976" + #define REVISION_NR "6977" #endif // __REVISION_NR_H__ From 04af12e82a98e5e4a9f0354970b22c72426aa393 Mon Sep 17 00:00:00 2001 From: Machiavelli Date: Mon, 29 Dec 2008 23:24:34 +0300 Subject: [PATCH 011/145] [6978] Allow crashing blow only from auto-attack. Signed-off-by: Machiavelli Thanks to Dreamer for patch preparing for mangos. Signed-off-by: VladimirMangos --- src/game/Unit.cpp | 3 ++- src/shared/revision_nr.h | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index 68fd00229..c6eeaed54 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -2048,7 +2048,8 @@ MeleeHitOutcome Unit::RollMeleeOutcomeAgainst (const Unit *pVictim, WeaponAttack } } - if(GetTypeId()!=TYPEID_PLAYER && !(((Creature*)this)->GetCreatureInfo()->flags_extra & CREATURE_FLAG_EXTRA_NO_CRUSH) && !((Creature*)this)->isPet() ) + if ((GetTypeId()!=TYPEID_PLAYER && !(((Creature*)this)->GetCreatureInfo()->flags_extra & CREATURE_FLAG_EXTRA_NO_CRUSH) && !((Creature*)this)->isPet()) && + !SpellCasted /*Only autoattack can be crashing blow*/ ) { // mobs can score crushing blows if they're 3 or more levels above victim // or when their weapon skill is 15 or more above victim's defense skill diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index ceeadb6e7..7ad12b6ee 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 "6977" + #define REVISION_NR "6978" #endif // __REVISION_NR_H__ From acb50807331c8d80593f87977d58219d70a0a5cf Mon Sep 17 00:00:00 2001 From: Wyk3d Date: Thu, 25 Dec 2008 02:51:33 +0200 Subject: [PATCH 012/145] Cleaned up the buffer sizes and added started writing sql update support --- contrib/git_id/git_id.cpp | 113 ++++++++++++++++++++++++++------------ 1 file changed, 79 insertions(+), 34 deletions(-) diff --git a/contrib/git_id/git_id.cpp b/contrib/git_id/git_id.cpp index 7bef1f077..59591589f 100644 --- a/contrib/git_id/git_id.cpp +++ b/contrib/git_id/git_id.cpp @@ -16,35 +16,49 @@ #include #endif +// max string sizes + +#define MAX_REMOTE 256 +#define MAX_MSG 16384 +#define MAX_PATH 2048 +#define MAX_BUF 2048 +#define MAX_CMD 2048 + // config #define NUM_REMOTES 2 -char remotes[NUM_REMOTES][256] = { +char remotes[NUM_REMOTES][MAX_REMOTE] = { "git@github.com:mangos/mangos.git", "git://github.com/mangos/mangos.git" // used for fetch if present }; +char rev_file[] = "src/shared/revision_nr.h"; +char sql_update_dir[] = "sql/updates"; + bool allow_replace = false; bool local = false; bool do_fetch = false; +bool do_sql = false; // aux -char origins[NUM_REMOTES][256]; +char origins[NUM_REMOTES][MAX_REMOTE]; int rev; -char head_message[16384]; -char write_file[2048]; -char buffer[256]; +char head_message[MAX_MSG]; +char path_prefix[MAX_PATH] = ""; +char buffer[MAX_BUF]; +char cmd[MAX_CMD]; + FILE *cmd_pipe; bool find_path() { printf("+ finding path\n"); - char cur_path[2048], *ptr; - getcwd(cur_path, 2048); - int len = strnlen(cur_path, 2048); + char cur_path[MAX_PATH], *ptr; + getcwd(cur_path, MAX_PATH); + int len = strnlen(cur_path, MAX_PATH); if(cur_path[len-1] == '/' || cur_path[len-1] == '\\') { @@ -58,17 +72,16 @@ bool find_path() for(ptr = cur_path-1; ptr = strchr(ptr+1, '\\'); count_back++); int count = std::max(count_fwd, count_back); - char prefix[2048] = "", path[2048]; + char path[MAX_PATH]; for(int i = 0; i < count; i++) { - snprintf(path, 2048, "%s.git", prefix); + snprintf(path, MAX_PATH, "%s.git", path_prefix); if(0 == chdir(path)) { chdir(cur_path); - snprintf(write_file, 2048, "%ssrc/shared/revision_nr.h", prefix); return true; } - strncat(prefix, "../", 2048); + strncat(path_prefix, "../", MAX_PATH); } return false; @@ -81,15 +94,15 @@ bool find_origin() return false; bool ret = false; - while(fgets(buffer, 256, cmd_pipe)) + while(fgets(buffer, MAX_BUF, cmd_pipe)) { - char name[256], remote[256]; + char name[256], remote[MAX_REMOTE]; sscanf(buffer, "%s %s", name, remote); for(int i = 0; i < NUM_REMOTES; i++) { if(strcmp(remote, remotes[i]) == 0) { - strncpy(origins[i], name, 256); + strncpy(origins[i], name, MAX_REMOTE); ret = true; } } @@ -101,9 +114,8 @@ bool find_origin() bool fetch_origin() { printf("+ fetching origin\n"); - char cmd[256]; // use the public clone url if present because the private may require a password - sprintf(cmd, "git fetch %s master", origins[1][0] ? origins[1] : origins[0]); + snprintf(cmd, MAX_CMD, "git fetch %s master", origins[1][0] ? origins[1] : origins[0]); int ret = system(cmd); return true; } @@ -111,24 +123,23 @@ bool fetch_origin() bool check_fwd() { printf("+ checking fast forward\n"); - char cmd[256]; - sprintf(cmd, "git log -n 1 --pretty=\"format:%%H\" %s/master", origins[1][0] ? origins[1] : origins[0]); + snprintf(cmd, MAX_CMD, "git log -n 1 --pretty=\"format:%%H\" %s/master", origins[1][0] ? origins[1] : origins[0]); if( (cmd_pipe = popen( cmd, "r" )) == NULL ) return false; char hash[256]; - if(!fgets(buffer, 256, cmd_pipe)) return false; - strncpy(hash, buffer, 256); + if(!fgets(buffer, MAX_BUF, cmd_pipe)) return false; + strncpy(hash, buffer, MAX_BUF); pclose(cmd_pipe); if( (cmd_pipe = popen( "git log --pretty=\"format:%H\"", "r" )) == NULL ) return false; bool found = false; - while(fgets(buffer, 256, cmd_pipe)) + while(fgets(buffer, MAX_BUF, cmd_pipe)) { - buffer[strnlen(buffer, 256) - 1] = '\0'; - if(strncmp(hash, buffer, 256) == 0) + buffer[strnlen(buffer, MAX_BUF) - 1] = '\0'; + if(strncmp(hash, buffer, MAX_BUF) == 0) { found = true; break; @@ -157,14 +168,13 @@ bool find_rev() { if(!local && !origins[i][0]) continue; - char cmd[512]; - if(local) sprintf(cmd, "git log HEAD --pretty=\"format:%%s\""); + if(local) snprintf(cmd, MAX_CMD, "git log HEAD --pretty=\"format:%%s\""); else sprintf(cmd, "git log %s/master --pretty=\"format:%%s\"", origins[i]); if( (cmd_pipe = popen( cmd, "r" )) == NULL ) continue; int nr; - while(fgets(buffer, 256, cmd_pipe)) + while(fgets(buffer, MAX_BUF, cmd_pipe)) { nr = get_rev(buffer); if(nr >= rev) @@ -195,7 +205,10 @@ bool write_rev() sprintf(rev_str, "%d", rev); std::string header = generateHeader(rev_str); - if(FILE* OutputFile = fopen(write_file,"wb")) + char prefixed_file[MAX_PATH]; + snprintf(prefixed_file, MAX_PATH, "%s%s", path_prefix, rev_file); + + if(FILE* OutputFile = fopen(prefixed_file, "wb")) { fprintf(OutputFile,"%s", header.c_str()); fclose(OutputFile); @@ -240,8 +253,7 @@ bool find_head_msg() bool amend_commit() { printf("+ amending last commit\n"); - char cmd[512]; - sprintf(cmd, "git commit --amend -F- %s", write_file); + snprintf(cmd, MAX_CMD, "git commit --amend -F- %s%s", path_prefix, rev_file); if( (cmd_pipe = popen( cmd, "w" )) == NULL ) return false; @@ -251,6 +263,30 @@ bool amend_commit() return true; } +bool find_sql_updates() +{ + printf("+ finding sql updates on HEAD\n"); + snprintf(cmd, MAX_CMD, "git ls-tree HEAD %s%s/", path_prefix, sql_update_dir); + if( (cmd_pipe = popen( cmd, "r" )) == NULL ) + return false; + + int dummy; + char hash[256], filename[MAX_PATH]; + + while(fgets(buffer, MAX_BUF, cmd_pipe)) + { + sscanf(buffer, "%d tree %s %s", &dummy, hash, filename); + } + + pclose(cmd_pipe); + return true; +} + +bool rename_sql_updates() +{ + return true; +} + #define DO(cmd) if(!cmd) { printf("FAILED\n"); return 1; } int main(int argc, char *argv[]) @@ -258,13 +294,15 @@ int main(int argc, char *argv[]) for(int i = 1; i < argc; i++) { if(argv[i] == NULL) continue; - if(strncmp(argv[i], "-r", 2) == 0 || strncmp(argv[i], "--replace", 2) == 0) + if(strncmp(argv[i], "-r", 2) == 0 || strncmp(argv[i], "--replace", 9) == 0) allow_replace = true; - if(strncmp(argv[i], "-l", 2) == 0 || strncmp(argv[i], "--local", 2) == 0) + if(strncmp(argv[i], "-l", 2) == 0 || strncmp(argv[i], "--local", 7) == 0) local = true; - if(strncmp(argv[i], "-f", 2) == 0 || strncmp(argv[i], "--fetch", 2) == 0) + if(strncmp(argv[i], "-f", 2) == 0 || strncmp(argv[i], "--fetch", 7) == 0) do_fetch = true; - if(strncmp(argv[i], "-h", 2) == 0 || strncmp(argv[i], "--help", 2) == 0) + if(strncmp(argv[i], "-s", 2) == 0 || strncmp(argv[i], "--sql", 5) == 0) + do_sql = true; + if(strncmp(argv[i], "-h", 2) == 0 || strncmp(argv[i], "--help", 6) == 0) { printf("Usage: git_id [OPTION]\n"); printf("Generates a new rev number and updates revision_nr.h and the commit message.\n"); @@ -274,6 +312,7 @@ int main(int argc, char *argv[]) printf(" commit\n"); printf(" -l, --local search for the highest rev number on HEAD\n"); printf(" -f, --fetch fetch from origin before searching for the new rev\n"); + printf(" -s, --sql "); return 0; } } @@ -290,7 +329,13 @@ int main(int argc, char *argv[]) } DO( find_rev() ); DO( find_head_msg() ); + if(do_sql) + DO( find_sql_updates() ); DO( write_rev() ); + if(do_sql) + { + DO( rename_sql_updates() ); + } DO( amend_commit() ); return 0; From dcb4d9d6d57d0fb6a78e6267718ca34afbaef1c1 Mon Sep 17 00:00:00 2001 From: Wyk3d Date: Thu, 25 Dec 2008 15:33:10 +0200 Subject: [PATCH 013/145] Fixed finding sql updates --- contrib/git_id/git_id.cpp | 47 ++++++++++++++++++++++++++++++--------- 1 file changed, 37 insertions(+), 10 deletions(-) diff --git a/contrib/git_id/git_id.cpp b/contrib/git_id/git_id.cpp index 59591589f..1b59d4533 100644 --- a/contrib/git_id/git_id.cpp +++ b/contrib/git_id/git_id.cpp @@ -4,6 +4,7 @@ #include #include #include +#include #include "../../src/framework/Platform/CompilerDefs.h" #if PLATFORM == PLATFORM_WINDOWS @@ -23,6 +24,7 @@ #define MAX_PATH 2048 #define MAX_BUF 2048 #define MAX_CMD 2048 +#define MAX_HASH 256 // config @@ -50,6 +52,9 @@ char head_message[MAX_MSG]; char path_prefix[MAX_PATH] = ""; char buffer[MAX_BUF]; char cmd[MAX_CMD]; +char origin_hash[MAX_HASH]; + +std::set sql_updates; FILE *cmd_pipe; @@ -127,9 +132,8 @@ bool check_fwd() if( (cmd_pipe = popen( cmd, "r" )) == NULL ) return false; - char hash[256]; if(!fgets(buffer, MAX_BUF, cmd_pipe)) return false; - strncpy(hash, buffer, MAX_BUF); + strncpy(origin_hash, buffer, MAX_HASH); pclose(cmd_pipe); if( (cmd_pipe = popen( "git log --pretty=\"format:%H\"", "r" )) == NULL ) @@ -139,7 +143,7 @@ bool check_fwd() while(fgets(buffer, MAX_BUF, cmd_pipe)) { buffer[strnlen(buffer, MAX_BUF) - 1] = '\0'; - if(strncmp(hash, buffer, MAX_BUF) == 0) + if(strncmp(origin_hash, buffer, MAX_BUF) == 0) { found = true; break; @@ -266,16 +270,41 @@ bool amend_commit() bool find_sql_updates() { printf("+ finding sql updates on HEAD\n"); - snprintf(cmd, MAX_CMD, "git ls-tree HEAD %s%s/", path_prefix, sql_update_dir); + // add all updates from HEAD + snprintf(cmd, MAX_CMD, "git show HEAD:%s", sql_update_dir); if( (cmd_pipe = popen( cmd, "r" )) == NULL ) return false; - int dummy; - char hash[256], filename[MAX_PATH]; + // skip first two lines + if(!fgets(buffer, MAX_BUF, cmd_pipe)) { pclose(cmd_pipe); return false; } + if(!fgets(buffer, MAX_BUF, cmd_pipe)) { pclose(cmd_pipe); return false; } + + int nr; + char db_table[MAX_BUF]; while(fgets(buffer, MAX_BUF, cmd_pipe)) { - sscanf(buffer, "%d tree %s %s", &dummy, hash, filename); + buffer[strnlen(buffer, MAX_BUF) - 1] = '\0'; + if(sscanf(buffer, "%d_%s.sql", &nr, db_table) == 2) + sql_updates.insert(buffer); + } + + pclose(cmd_pipe); + + // remove updates from the last commit also found on origin + snprintf(cmd, MAX_CMD, "git show %s:%s", origin_hash, sql_update_dir); + if( (cmd_pipe = popen( cmd, "r" )) == NULL ) + return false; + + // skip first two lines + if(!fgets(buffer, MAX_BUF, cmd_pipe)) { pclose(cmd_pipe); return false; } + if(!fgets(buffer, MAX_BUF, cmd_pipe)) { pclose(cmd_pipe); return false; } + + while(fgets(buffer, MAX_BUF, cmd_pipe)) + { + buffer[strnlen(buffer, MAX_BUF) - 1] = '\0'; + if(sscanf(buffer, "%d_%s.sql", &nr, db_table) == 2) + sql_updates.erase(buffer); } pclose(cmd_pipe); @@ -322,10 +351,8 @@ int main(int argc, char *argv[]) { DO( find_origin() ); if(do_fetch) - { DO( fetch_origin() ); - DO( check_fwd() ); - } + DO( check_fwd() ); } DO( find_rev() ); DO( find_head_msg() ); From 0a480670c9f337ec451f8dd1c2bb50345d5f48d0 Mon Sep 17 00:00:00 2001 From: Wyk3d Date: Thu, 25 Dec 2008 16:30:21 +0200 Subject: [PATCH 014/145] Added an option to set the remote branch --- contrib/git_id/git_id.cpp | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/contrib/git_id/git_id.cpp b/contrib/git_id/git_id.cpp index 1b59d4533..d94b146f2 100644 --- a/contrib/git_id/git_id.cpp +++ b/contrib/git_id/git_id.cpp @@ -35,8 +35,9 @@ char remotes[NUM_REMOTES][MAX_REMOTE] = { "git://github.com/mangos/mangos.git" // used for fetch if present }; -char rev_file[] = "src/shared/revision_nr.h"; -char sql_update_dir[] = "sql/updates"; +char remote_branch[MAX_REMOTE] = "master"; +char rev_file[MAX_PATH] = "src/shared/revision_nr.h"; +char sql_update_dir[MAX_PATH] = "sql/updates"; bool allow_replace = false; bool local = false; @@ -120,7 +121,7 @@ bool fetch_origin() { printf("+ fetching origin\n"); // use the public clone url if present because the private may require a password - snprintf(cmd, MAX_CMD, "git fetch %s master", origins[1][0] ? origins[1] : origins[0]); + snprintf(cmd, MAX_CMD, "git fetch %s %s", (origins[1][0] ? origins[1] : origins[0]), remote_branch); int ret = system(cmd); return true; } @@ -128,7 +129,7 @@ bool fetch_origin() bool check_fwd() { printf("+ checking fast forward\n"); - snprintf(cmd, MAX_CMD, "git log -n 1 --pretty=\"format:%%H\" %s/master", origins[1][0] ? origins[1] : origins[0]); + snprintf(cmd, MAX_CMD, "git log -n 1 --pretty=\"format:%%H\" %s/%s", (origins[1][0] ? origins[1] : origins[0]), remote_branch); if( (cmd_pipe = popen( cmd, "r" )) == NULL ) return false; @@ -173,7 +174,7 @@ bool find_rev() if(!local && !origins[i][0]) continue; if(local) snprintf(cmd, MAX_CMD, "git log HEAD --pretty=\"format:%%s\""); - else sprintf(cmd, "git log %s/master --pretty=\"format:%%s\"", origins[i]); + else sprintf(cmd, "git log %s/%s --pretty=\"format:%%s\"", origins[i], remote_branch); if( (cmd_pipe = popen( cmd, "r" )) == NULL ) continue; @@ -325,13 +326,15 @@ int main(int argc, char *argv[]) if(argv[i] == NULL) continue; if(strncmp(argv[i], "-r", 2) == 0 || strncmp(argv[i], "--replace", 9) == 0) allow_replace = true; - if(strncmp(argv[i], "-l", 2) == 0 || strncmp(argv[i], "--local", 7) == 0) + else if(strncmp(argv[i], "-l", 2) == 0 || strncmp(argv[i], "--local", 7) == 0) local = true; - if(strncmp(argv[i], "-f", 2) == 0 || strncmp(argv[i], "--fetch", 7) == 0) + else if(strncmp(argv[i], "-f", 2) == 0 || strncmp(argv[i], "--fetch", 7) == 0) do_fetch = true; - if(strncmp(argv[i], "-s", 2) == 0 || strncmp(argv[i], "--sql", 5) == 0) + else if(strncmp(argv[i], "-s", 2) == 0 || strncmp(argv[i], "--sql", 5) == 0) do_sql = true; - if(strncmp(argv[i], "-h", 2) == 0 || strncmp(argv[i], "--help", 6) == 0) + else if(strncmp(argv[i], "--branch=", 9) == 0) + snprintf(remote_branch, MAX_REMOTE, "%s", argv[i] + 9); + else if(strncmp(argv[i], "-h", 2) == 0 || strncmp(argv[i], "--help", 6) == 0) { printf("Usage: git_id [OPTION]\n"); printf("Generates a new rev number and updates revision_nr.h and the commit message.\n"); @@ -342,6 +345,7 @@ int main(int argc, char *argv[]) printf(" -l, --local search for the highest rev number on HEAD\n"); printf(" -f, --fetch fetch from origin before searching for the new rev\n"); printf(" -s, --sql "); + printf(" --branch=BRANCH"); return 0; } } From 6574ca17a4d0d89ee762e0c0a68c6c82ed7a4be8 Mon Sep 17 00:00:00 2001 From: Wyk3d Date: Thu, 25 Dec 2008 20:07:38 +0200 Subject: [PATCH 015/145] Implemented renaming sql updates. --- contrib/git_id/git_id.cpp | 43 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/contrib/git_id/git_id.cpp b/contrib/git_id/git_id.cpp index d94b146f2..bd065ef51 100644 --- a/contrib/git_id/git_id.cpp +++ b/contrib/git_id/git_id.cpp @@ -270,7 +270,7 @@ bool amend_commit() bool find_sql_updates() { - printf("+ finding sql updates on HEAD\n"); + printf("+ finding new sql updates on HEAD\n"); // add all updates from HEAD snprintf(cmd, MAX_CMD, "git show HEAD:%s", sql_update_dir); if( (cmd_pipe = popen( cmd, "r" )) == NULL ) @@ -309,11 +309,52 @@ bool find_sql_updates() } pclose(cmd_pipe); + + if(!sql_updates.empty()) + { + for(std::set::iterator itr = sql_updates.begin(); itr != sql_updates.end(); ++itr) + printf("%s\n", itr->c_str()); + } + else + printf("WARNING: no new sql updates found.\n"); + + return true; +} + +bool copy_file(const char *src, const char *dst) +{ + FILE * fin = fopen( src, "r" ); + if(!fin) return false; + FILE * fout = fopen( dst, "w" ); + if(!fout) { fclose(fin); return false; } + + char c; + while( (c = getc(fin)) != EOF ) + putc(c, fout); + + fclose(fin); + fclose(fout); + return true; } bool rename_sql_updates() { + if(!sql_updates.empty()) + { + printf("+ renaming sql updates\n"); + for(std::set::iterator itr = sql_updates.begin(); itr != sql_updates.end(); ++itr) + { + char src_file[MAX_PATH], dst_file[MAX_PATH]; + snprintf(src_file, MAX_PATH, "%ssql/updates/%s", path_prefix, itr->c_str()); + snprintf(dst_file, MAX_PATH, "%ssql/updates/%d_%s", path_prefix, rev, itr->c_str()); + if(!copy_file(src_file, dst_file)) return false; + snprintf(cmd, MAX_CMD, "git add %s", dst_file); + system(cmd); + snprintf(cmd, MAX_CMD, "git rm %s", src_file); + system(cmd); + } + } return true; } From 5d2595d7e7059ce0c90d651889cb1de8df5cbd8f Mon Sep 17 00:00:00 2001 From: Wyk3d Date: Thu, 25 Dec 2008 22:16:32 +0200 Subject: [PATCH 016/145] Implemented makefile generation --- contrib/git_id/git_id.cpp | 123 ++++++++++++++++++++++++++++++++------ 1 file changed, 106 insertions(+), 17 deletions(-) diff --git a/contrib/git_id/git_id.cpp b/contrib/git_id/git_id.cpp index bd065ef51..c0a4becaa 100644 --- a/contrib/git_id/git_id.cpp +++ b/contrib/git_id/git_id.cpp @@ -55,7 +55,7 @@ char buffer[MAX_BUF]; char cmd[MAX_CMD]; char origin_hash[MAX_HASH]; -std::set sql_updates; +std::set new_sql_updates; FILE *cmd_pipe; @@ -287,7 +287,7 @@ bool find_sql_updates() { buffer[strnlen(buffer, MAX_BUF) - 1] = '\0'; if(sscanf(buffer, "%d_%s.sql", &nr, db_table) == 2) - sql_updates.insert(buffer); + new_sql_updates.insert(buffer); } pclose(cmd_pipe); @@ -305,14 +305,14 @@ bool find_sql_updates() { buffer[strnlen(buffer, MAX_BUF) - 1] = '\0'; if(sscanf(buffer, "%d_%s.sql", &nr, db_table) == 2) - sql_updates.erase(buffer); + new_sql_updates.erase(buffer); } pclose(cmd_pipe); - if(!sql_updates.empty()) + if(!new_sql_updates.empty()) { - for(std::set::iterator itr = sql_updates.begin(); itr != sql_updates.end(); ++itr) + for(std::set::iterator itr = new_sql_updates.begin(); itr != new_sql_updates.end(); ++itr) printf("%s\n", itr->c_str()); } else @@ -340,21 +340,109 @@ bool copy_file(const char *src, const char *dst) bool rename_sql_updates() { - if(!sql_updates.empty()) + if(new_sql_updates.empty()) return true; + + printf("+ renaming sql updates\n"); + for(std::set::iterator itr = new_sql_updates.begin(); itr != new_sql_updates.end(); ++itr) { - printf("+ renaming sql updates\n"); - for(std::set::iterator itr = sql_updates.begin(); itr != sql_updates.end(); ++itr) + char src_file[MAX_PATH], dst_file[MAX_PATH]; + snprintf(src_file, MAX_PATH, "%s%s/%s", path_prefix, sql_update_dir, itr->c_str()); + snprintf(dst_file, MAX_PATH, "%s%s/%d_%s", path_prefix, sql_update_dir, rev, itr->c_str()); + if(!copy_file(src_file, dst_file)) return false; + snprintf(cmd, MAX_CMD, "git add %s", dst_file); + system(cmd); + snprintf(cmd, MAX_CMD, "git rm %s", src_file); + system(cmd); + } + + return true; +} + +bool generate_sql_makefile() +{ + if(new_sql_updates.empty()) return true; + + // find all files in the update dir + snprintf(cmd, MAX_CMD, "git show HEAD:%s", sql_update_dir); + if( (cmd_pipe = popen( cmd, "r" )) == NULL ) + return false; + + // skip first two lines + if(!fgets(buffer, MAX_BUF, cmd_pipe)) { pclose(cmd_pipe); return false; } + if(!fgets(buffer, MAX_BUF, cmd_pipe)) { pclose(cmd_pipe); return false; } + + char newname[MAX_PATH]; + std::set file_list; + + while(fgets(buffer, MAX_BUF, cmd_pipe)) + { + buffer[strnlen(buffer, MAX_BUF) - 1] = '\0'; + if(buffer[strnlen(buffer, MAX_BUF) - 1] != '/' && + strncmp(buffer, "Makefile.am", MAX_BUF) != 0) { - char src_file[MAX_PATH], dst_file[MAX_PATH]; - snprintf(src_file, MAX_PATH, "%ssql/updates/%s", path_prefix, itr->c_str()); - snprintf(dst_file, MAX_PATH, "%ssql/updates/%d_%s", path_prefix, rev, itr->c_str()); - if(!copy_file(src_file, dst_file)) return false; - snprintf(cmd, MAX_CMD, "git add %s", dst_file); - system(cmd); - snprintf(cmd, MAX_CMD, "git rm %s", src_file); - system(cmd); + if(new_sql_updates.find(buffer) != new_sql_updates.end()) + { + snprintf(newname, MAX_PATH, "%d_%s", rev, buffer); + file_list.insert(newname); + } + else + file_list.insert(buffer); } } + + pclose(cmd_pipe); + + // write the makefile + char file_name[MAX_PATH]; + snprintf(file_name, MAX_PATH, "%s%s/Makefile.am", path_prefix, sql_update_dir); + FILE *fout = fopen(file_name, "w"); + if(!fout) { pclose(cmd_pipe); return false; } + + fprintf(fout, + "# Copyright (C) 2005-2008 MaNGOS \n" + "#\n" + "# This program is free software; you can redistribute it and/or modify\n" + "# it under the terms of the GNU General Public License as published by\n" + "# the Free Software Foundation; either version 2 of the License, or\n" + "# (at your option) any later version.\n" + "#\n" + "# This program is distributed in the hope that it will be useful,\n" + "# but WITHOUT ANY WARRANTY; without even the implied warranty of\n" + "# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" + "# GNU General Public License for more details.\n" + "#\n" + "# You should have received a copy of the GNU General Public License\n" + "# along with this program; if not, write to the Free Software\n" + "# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n" + "\n" + "## Process this file with automake to produce Makefile.in\n" + "\n" + "## Sub-directories to parse\n" + "\n" + "## Change installation location\n" + "# datadir = mangos/%s\n" + "pkgdatadir = $(datadir)/mangos/%s\n" + "\n" + "## Files to be installed\n" + "# Install basic SQL files to datadir\n" + "pkgdata_DATA = \\\n", + sql_update_dir, sql_update_dir + ); + + for(std::set::iterator itr = file_list.begin(); itr != file_list.end(); ++itr) + fprintf(fout, "\t%s \\\n", itr->c_str()); + + fprintf(fout, + "\n## Additional files to include when running 'make dist'\n" + "# SQL update files, to upgrade database schema from older revisions\n" + "EXTRA_DIST = \\\n" + ); + + for(std::set::iterator itr = file_list.begin(); itr != file_list.end(); ++itr) + fprintf(fout, "\t%s \\\n", itr->c_str()); + + fclose(fout); + return true; } @@ -406,7 +494,8 @@ int main(int argc, char *argv[]) DO( write_rev() ); if(do_sql) { - DO( rename_sql_updates() ); + DO( rename_sql_updates() ); + DO( generate_sql_makefile() ); } DO( amend_commit() ); From c733c0f70c78955033ab7e991876b93cd076cc36 Mon Sep 17 00:00:00 2001 From: Wyk3d Date: Fri, 26 Dec 2008 01:21:44 +0200 Subject: [PATCH 017/145] Implemented adding the alter table table statement for the last required sql update to the new sql update. --- contrib/git_id/git_id.cpp | 84 ++++++++++++++++++++++++++++++++------- 1 file changed, 70 insertions(+), 14 deletions(-) diff --git a/contrib/git_id/git_id.cpp b/contrib/git_id/git_id.cpp index c0a4becaa..0413c3337 100644 --- a/contrib/git_id/git_id.cpp +++ b/contrib/git_id/git_id.cpp @@ -25,10 +25,12 @@ #define MAX_BUF 2048 #define MAX_CMD 2048 #define MAX_HASH 256 +#define MAX_DB 256 // config #define NUM_REMOTES 2 +#define NUM_DATABASES 3 char remotes[NUM_REMOTES][MAX_REMOTE] = { "git@github.com:mangos/mangos.git", @@ -39,6 +41,18 @@ char remote_branch[MAX_REMOTE] = "master"; char rev_file[MAX_PATH] = "src/shared/revision_nr.h"; char sql_update_dir[MAX_PATH] = "sql/updates"; +char databases[NUM_DATABASES][MAX_DB] = { + "characters", + "mangos", + "realmd" +}; + +char db_version_table[NUM_DATABASES][MAX_DB] = { + "character_db_version", + "db_version", + "realmd_db_version", +}; + bool allow_replace = false; bool local = false; bool do_fetch = false; @@ -48,12 +62,14 @@ bool do_sql = false; char origins[NUM_REMOTES][MAX_REMOTE]; int rev; +int last_sql_rev[NUM_DATABASES] = {0,0,0}; char head_message[MAX_MSG]; char path_prefix[MAX_PATH] = ""; char buffer[MAX_BUF]; char cmd[MAX_CMD]; char origin_hash[MAX_HASH]; +char last_sql_update[NUM_DATABASES][MAX_PATH]; std::set new_sql_updates; @@ -280,14 +296,39 @@ bool find_sql_updates() if(!fgets(buffer, MAX_BUF, cmd_pipe)) { pclose(cmd_pipe); return false; } if(!fgets(buffer, MAX_BUF, cmd_pipe)) { pclose(cmd_pipe); return false; } - int nr; - char db_table[MAX_BUF]; + int nr, cur_rev, i; + char db[MAX_BUF], table[MAX_BUF]; while(fgets(buffer, MAX_BUF, cmd_pipe)) { buffer[strnlen(buffer, MAX_BUF) - 1] = '\0'; - if(sscanf(buffer, "%d_%s.sql", &nr, db_table) == 2) - new_sql_updates.insert(buffer); + if(sscanf(buffer, "%d_%d_%[^_]_%[^.].sql", &cur_rev, &nr, db, table) == 4 || + sscanf(buffer, "%d_%d_%[^.].sql", &cur_rev, &nr, db) == 3) + { + // find the update with the highest rev for each database + // (will be the required version for the new update) + // new updates should not have a rev number already + for(i = 0; i < NUM_DATABASES; i++) + if(cur_rev > last_sql_rev[i] && + strncmp(db, databases[i], MAX_DB) == 0) + break; + + if(i < NUM_DATABASES) + { + last_sql_rev[i] = cur_rev; + strncpy(last_sql_update[i], buffer, MAX_PATH); + } + } + else if(sscanf(buffer, "%d_%[^_]_%[^.].sql", &nr, db, table) == 3 || + sscanf(buffer, "%d_%[^.].sql", &nr, db) == 2) + { + for(i = 0; i < NUM_DATABASES; i++) + if(strncmp(db, databases[i], MAX_DB) == 0) break; + if(i == NUM_DATABASES) + printf("WARNING: incorrect database name for sql update %s\n", buffer); + else + new_sql_updates.insert(buffer); + } } pclose(cmd_pipe); @@ -304,7 +345,7 @@ bool find_sql_updates() while(fgets(buffer, MAX_BUF, cmd_pipe)) { buffer[strnlen(buffer, MAX_BUF) - 1] = '\0'; - if(sscanf(buffer, "%d_%s.sql", &nr, db_table) == 2) + if(sscanf(buffer, "%d_%[^.].sql", &nr, db) == 2) new_sql_updates.erase(buffer); } @@ -321,13 +362,26 @@ bool find_sql_updates() return true; } -bool copy_file(const char *src, const char *dst) +bool convert_sql_update(const char *src_file, const char *dst_file, const char *dst_name) { - FILE * fin = fopen( src, "r" ); + FILE * fin = fopen( src_file, "r" ); if(!fin) return false; - FILE * fout = fopen( dst, "w" ); + FILE * fout = fopen( dst_file, "w" ); if(!fout) { fclose(fin); return false; } + int cur_rev, nr, i; + char db[MAX_PATH], table[MAX_PATH]; + if(sscanf(dst_name, "%d_%d_%[^_]_%[^.].sql", &cur_rev, &nr, db, table) != 4 && + sscanf(dst_name, "%d_%d_%[^.].sql", &cur_rev, &nr, db) != 3) + return false; + + for(i = 0; i < NUM_DATABASES; i++) + if(strncmp(db, databases[i], MAX_DB) == 0) break; + if(i == NUM_DATABASES) return false; + + fprintf(fout, "ALTER TABLE %s CHANGE COLUMN required_%s required_%s bit;\n\n", + db_version_table[i], last_sql_update[i], dst_name); + char c; while( (c = getc(fin)) != EOF ) putc(c, fout); @@ -338,17 +392,19 @@ bool copy_file(const char *src, const char *dst) return true; } -bool rename_sql_updates() +bool convert_sql_updates() { if(new_sql_updates.empty()) return true; - printf("+ renaming sql updates\n"); + printf("+ converting sql updates\n"); + for(std::set::iterator itr = new_sql_updates.begin(); itr != new_sql_updates.end(); ++itr) { - char src_file[MAX_PATH], dst_file[MAX_PATH]; + char src_file[MAX_PATH], dst_file[MAX_PATH], dst_name[MAX_PATH]; snprintf(src_file, MAX_PATH, "%s%s/%s", path_prefix, sql_update_dir, itr->c_str()); - snprintf(dst_file, MAX_PATH, "%s%s/%d_%s", path_prefix, sql_update_dir, rev, itr->c_str()); - if(!copy_file(src_file, dst_file)) return false; + snprintf(dst_name, MAX_PATH, "%d_%s", rev, itr->c_str()); + snprintf(dst_file, MAX_PATH, "%s%s/%s", path_prefix, sql_update_dir, dst_name); + if(!convert_sql_update(src_file, dst_file, dst_name)) return false; snprintf(cmd, MAX_CMD, "git add %s", dst_file); system(cmd); snprintf(cmd, MAX_CMD, "git rm %s", src_file); @@ -494,7 +550,7 @@ int main(int argc, char *argv[]) DO( write_rev() ); if(do_sql) { - DO( rename_sql_updates() ); + DO( convert_sql_updates() ); DO( generate_sql_makefile() ); } DO( amend_commit() ); From 1e824ba2d9d5da1cef6693528378123cf08c62ff Mon Sep 17 00:00:00 2001 From: Wyk3d Date: Sat, 27 Dec 2008 01:39:37 +0200 Subject: [PATCH 018/145] Fixed the db_version queries, added code to remove the updates from previous commits, other cleanups. --- contrib/git_id/git_id.cpp | 194 +++++++++++++++++++++++++------------- 1 file changed, 131 insertions(+), 63 deletions(-) diff --git a/contrib/git_id/git_id.cpp b/contrib/git_id/git_id.cpp index 0413c3337..a1901449a 100644 --- a/contrib/git_id/git_id.cpp +++ b/contrib/git_id/git_id.cpp @@ -5,6 +5,8 @@ #include #include #include +#include +#include #include "../../src/framework/Platform/CompilerDefs.h" #if PLATFORM == PLATFORM_WINDOWS @@ -72,6 +74,7 @@ char origin_hash[MAX_HASH]; char last_sql_update[NUM_DATABASES][MAX_PATH]; std::set new_sql_updates; +std::ostringstream str_updates; FILE *cmd_pipe; @@ -274,7 +277,7 @@ bool find_head_msg() bool amend_commit() { printf("+ amending last commit\n"); - snprintf(cmd, MAX_CMD, "git commit --amend -F- %s%s", path_prefix, rev_file); + snprintf(cmd, MAX_CMD, "git commit --amend -F- %s%s%s", path_prefix, rev_file, str_updates.str().c_str()); if( (cmd_pipe = popen( cmd, "w" )) == NULL ) return false; @@ -284,6 +287,34 @@ bool amend_commit() return true; } +struct sql_update_info +{ + int rev; + int nr; + int db_idx; + char db[MAX_BUF]; + char table[MAX_BUF]; + bool has_table; +}; + +bool get_sql_update_info(const char *buffer, sql_update_info &info) +{ + info.table[0] = '\0'; + if(sscanf(buffer, "%d_%d_%[^_]_%[^.].sql", &info.rev, &info.nr, info.db, info.table) != 4 && + sscanf(buffer, "%d_%d_%[^.].sql", &info.rev, &info.nr, info.db) != 3) + { + info.rev = 0; // this may be set by the first scans, even if they fail + if(sscanf(buffer, "%d_%[^_]_%[^.].sql", &info.nr, info.db, info.table) != 3 && + sscanf(buffer, "%d_%[^.].sql", &info.nr, info.db) != 2) + return false; + } + + for(info.db_idx = 0; info.db_idx < NUM_DATABASES; info.db_idx++) + if(strncmp(info.db, databases[info.db_idx], MAX_DB) == 0) break; + info.has_table = (info.table[0] != '\0'); + return true; +} + bool find_sql_updates() { printf("+ finding new sql updates on HEAD\n"); @@ -296,39 +327,34 @@ bool find_sql_updates() if(!fgets(buffer, MAX_BUF, cmd_pipe)) { pclose(cmd_pipe); return false; } if(!fgets(buffer, MAX_BUF, cmd_pipe)) { pclose(cmd_pipe); return false; } - int nr, cur_rev, i; - char db[MAX_BUF], table[MAX_BUF]; + sql_update_info info; while(fgets(buffer, MAX_BUF, cmd_pipe)) { buffer[strnlen(buffer, MAX_BUF) - 1] = '\0'; - if(sscanf(buffer, "%d_%d_%[^_]_%[^.].sql", &cur_rev, &nr, db, table) == 4 || - sscanf(buffer, "%d_%d_%[^.].sql", &cur_rev, &nr, db) == 3) - { - // find the update with the highest rev for each database - // (will be the required version for the new update) - // new updates should not have a rev number already - for(i = 0; i < NUM_DATABASES; i++) - if(cur_rev > last_sql_rev[i] && - strncmp(db, databases[i], MAX_DB) == 0) - break; - if(i < NUM_DATABASES) + if(get_sql_update_info(buffer, info)) + { + if(info.rev > 0) { - last_sql_rev[i] = cur_rev; - strncpy(last_sql_update[i], buffer, MAX_PATH); + // find the update with the highest rev for each database + // (will be the required version for the new update) + // new updates should not have a rev number already + + if(info.db_idx < NUM_DATABASES && info.rev > last_sql_rev[info.db_idx]) + { + last_sql_rev[info.db_idx] = info.rev; + sscanf(buffer, "%[^.]", last_sql_update[info.db_idx]); + } + } + else + { + if(info.db_idx == NUM_DATABASES) + printf("WARNING: incorrect database name for sql update %s\n", buffer); + else + new_sql_updates.insert(buffer); } } - else if(sscanf(buffer, "%d_%[^_]_%[^.].sql", &nr, db, table) == 3 || - sscanf(buffer, "%d_%[^.].sql", &nr, db) == 2) - { - for(i = 0; i < NUM_DATABASES; i++) - if(strncmp(db, databases[i], MAX_DB) == 0) break; - if(i == NUM_DATABASES) - printf("WARNING: incorrect database name for sql update %s\n", buffer); - else - new_sql_updates.insert(buffer); - } } pclose(cmd_pipe); @@ -345,8 +371,7 @@ bool find_sql_updates() while(fgets(buffer, MAX_BUF, cmd_pipe)) { buffer[strnlen(buffer, MAX_BUF) - 1] = '\0'; - if(sscanf(buffer, "%d_%[^.].sql", &nr, db) == 2) - new_sql_updates.erase(buffer); + new_sql_updates.erase(buffer); } pclose(cmd_pipe); @@ -354,7 +379,11 @@ bool find_sql_updates() if(!new_sql_updates.empty()) { for(std::set::iterator itr = new_sql_updates.begin(); itr != new_sql_updates.end(); ++itr) + { printf("%s\n", itr->c_str()); + // store the deleted files to be amended to the commit later + str_updates << ' ' << path_prefix << "sql/updates/" << itr->c_str(); + } } else printf("WARNING: no new sql updates found.\n"); @@ -362,36 +391,6 @@ bool find_sql_updates() return true; } -bool convert_sql_update(const char *src_file, const char *dst_file, const char *dst_name) -{ - FILE * fin = fopen( src_file, "r" ); - if(!fin) return false; - FILE * fout = fopen( dst_file, "w" ); - if(!fout) { fclose(fin); return false; } - - int cur_rev, nr, i; - char db[MAX_PATH], table[MAX_PATH]; - if(sscanf(dst_name, "%d_%d_%[^_]_%[^.].sql", &cur_rev, &nr, db, table) != 4 && - sscanf(dst_name, "%d_%d_%[^.].sql", &cur_rev, &nr, db) != 3) - return false; - - for(i = 0; i < NUM_DATABASES; i++) - if(strncmp(db, databases[i], MAX_DB) == 0) break; - if(i == NUM_DATABASES) return false; - - fprintf(fout, "ALTER TABLE %s CHANGE COLUMN required_%s required_%s bit;\n\n", - db_version_table[i], last_sql_update[i], dst_name); - - char c; - while( (c = getc(fin)) != EOF ) - putc(c, fout); - - fclose(fin); - fclose(fout); - - return true; -} - bool convert_sql_updates() { if(new_sql_updates.empty()) return true; @@ -400,15 +399,44 @@ bool convert_sql_updates() for(std::set::iterator itr = new_sql_updates.begin(); itr != new_sql_updates.end(); ++itr) { - char src_file[MAX_PATH], dst_file[MAX_PATH], dst_name[MAX_PATH]; + sql_update_info info; + if(!get_sql_update_info(itr->c_str(), info)) return false; + if(info.db_idx == NUM_DATABASES) return false; + + // generating the new name should work for updates with or without a rev + char src_file[MAX_PATH], new_name[MAX_PATH], dst_file[MAX_PATH]; snprintf(src_file, MAX_PATH, "%s%s/%s", path_prefix, sql_update_dir, itr->c_str()); - snprintf(dst_name, MAX_PATH, "%d_%s", rev, itr->c_str()); - snprintf(dst_file, MAX_PATH, "%s%s/%s", path_prefix, sql_update_dir, dst_name); - if(!convert_sql_update(src_file, dst_file, dst_name)) return false; + snprintf(new_name, MAX_PATH, "%d_%0*d_%s%s%s", rev, 2, info.nr, info.db, info.has_table ? "_" : "", info.table); + snprintf(dst_file, MAX_PATH, "%s%s/%s.sql", path_prefix, sql_update_dir, new_name); + + FILE * fin = fopen( src_file, "r" ); + if(!fin) return false; + FILE * fout = fopen( dst_file, "w" ); + if(!fout) { fclose(fin); return false; } + + // add the update requirements + fprintf(fout, "ALTER TABLE %s CHANGE COLUMN required_%s required_%s bit;\n\n", + db_version_table[info.db_idx], last_sql_update[info.db_idx], new_name); + + // copy the rest of the file + char c; + while( (c = getc(fin)) != EOF ) + putc(c, fout); + + fclose(fin); + fclose(fout); + + // rename the file in git snprintf(cmd, MAX_CMD, "git add %s", dst_file); system(cmd); snprintf(cmd, MAX_CMD, "git rm %s", src_file); system(cmd); + + // update the last sql update for the current database + strncpy(last_sql_update[info.db_idx], new_name, MAX_PATH); + + // store the new files to be amended to the commit later + str_updates << ' ' << dst_file; } return true; @@ -502,6 +530,44 @@ bool generate_sql_makefile() return true; } +bool change_sql_history() +{ + snprintf(cmd, MAX_CMD, "git log HEAD --pretty=\"format:%%H\""); + if( (cmd_pipe = popen( cmd, "r" )) == NULL ) + return false; + + std::list hashes; + while(fgets(buffer, MAX_BUF, cmd_pipe)) + { + buffer[strnlen(buffer, MAX_BUF) - 1] = '\0'; + if(strncmp(origin_hash, buffer, MAX_HASH) == 0) + break; + + hashes.push_back(buffer); + } + pclose(cmd_pipe); + if(hashes.empty()) return false; // must have at least one commit + if(hashes.size() < 2) return true; // only one commit, ok but nothing to do + + snprintf(cmd, MAX_CMD, "git reset --hard %s", origin_hash); + system(cmd); + + for(std::list::reverse_iterator next = hashes.rbegin(), itr = next++; next != hashes.rend(); ++itr, ++next) + { + snprintf(cmd, MAX_CMD, "git cherry-pick %s", itr->c_str()); + system(cmd); + snprintf(cmd, MAX_CMD, "git checkout %s %s%s", origin_hash, path_prefix, sql_update_dir); + system(cmd); + snprintf(cmd, MAX_CMD, "git commit --amend -C HEAD %s%s", path_prefix, sql_update_dir); + system(cmd); + } + + snprintf(cmd, MAX_CMD, "git cherry-pick %s", hashes.begin()); + system(cmd); + + return true; +} + #define DO(cmd) if(!cmd) { printf("FAILED\n"); return 1; } int main(int argc, char *argv[]) @@ -551,9 +617,11 @@ int main(int argc, char *argv[]) if(do_sql) { DO( convert_sql_updates() ); - DO( generate_sql_makefile() ); + DO( generate_sql_makefile() ); } DO( amend_commit() ); + if(do_sql) + DO( change_sql_history() ); return 0; } From 38b5c0af7fdb726e1ed93e1cd284dd623c9c27cb Mon Sep 17 00:00:00 2001 From: Wyk3d Date: Sun, 28 Dec 2008 00:07:47 +0200 Subject: [PATCH 019/145] Switch the index to preserve the original one, other fixed and cleanups --- contrib/git_id/git_id.cpp | 119 +++++++++++++++++++++++++++++--------- 1 file changed, 92 insertions(+), 27 deletions(-) diff --git a/contrib/git_id/git_id.cpp b/contrib/git_id/git_id.cpp index a1901449a..e25cba49f 100644 --- a/contrib/git_id/git_id.cpp +++ b/contrib/git_id/git_id.cpp @@ -14,6 +14,7 @@ #define popen _popen #define pclose _pclose #define snprintf _snprintf +#define putenv _putenv #pragma warning (disable:4996) #else #include @@ -42,6 +43,7 @@ char remotes[NUM_REMOTES][MAX_REMOTE] = { char remote_branch[MAX_REMOTE] = "master"; char rev_file[MAX_PATH] = "src/shared/revision_nr.h"; char sql_update_dir[MAX_PATH] = "sql/updates"; +char new_index_file[MAX_PATH] = ".git/git_id_index"; char databases[NUM_DATABASES][MAX_DB] = { "characters", @@ -68,22 +70,26 @@ int last_sql_rev[NUM_DATABASES] = {0,0,0}; char head_message[MAX_MSG]; char path_prefix[MAX_PATH] = ""; +char base_path[MAX_PATH]; char buffer[MAX_BUF]; char cmd[MAX_CMD]; char origin_hash[MAX_HASH]; char last_sql_update[NUM_DATABASES][MAX_PATH]; +char old_index_cmd[MAX_CMD]; +char new_index_cmd[MAX_CMD]; std::set new_sql_updates; -std::ostringstream str_updates; FILE *cmd_pipe; bool find_path() { printf("+ finding path\n"); - char cur_path[MAX_PATH], *ptr; + char *ptr; + char cur_path[MAX_PATH]; getcwd(cur_path, MAX_PATH); int len = strnlen(cur_path, MAX_PATH); + strncpy(base_path, cur_path, len+1); if(cur_path[len-1] == '/' || cur_path[len-1] == '\\') { @@ -107,6 +113,14 @@ bool find_path() return true; } strncat(path_prefix, "../", MAX_PATH); + + ptr = strrchr(base_path, '\\'); + if(ptr) *ptr = '\0'; + else + { + ptr = strrchr(base_path, '/'); + if(ptr) *ptr = '\0'; + } } return false; @@ -222,6 +236,18 @@ std::string generateHeader(char const* rev_str) return newData.str(); } +void system_switch_index(const char *cmd) +{ + // do the command for the original index and then for the new index + // both need to be updated with the changes before commit + // but the new index will contains only the desired changes + // while the old may contain others + system(cmd); + if(putenv(new_index_cmd) != 0) return; + system(cmd); + if(putenv(old_index_cmd) != 0) return; +} + bool write_rev() { printf("+ writing revision_nr.h\n"); @@ -236,8 +262,13 @@ bool write_rev() { fprintf(OutputFile,"%s", header.c_str()); fclose(OutputFile); + + // add the file to both indices, to be committed later + snprintf(cmd, MAX_CMD, "git add %s", prefixed_file); + system_switch_index(cmd); + return true; - } + } return false; } @@ -277,13 +308,16 @@ bool find_head_msg() bool amend_commit() { printf("+ amending last commit\n"); - snprintf(cmd, MAX_CMD, "git commit --amend -F- %s%s%s", path_prefix, rev_file, str_updates.str().c_str()); + + // commit the contents of the new index + if(putenv(new_index_cmd) != 0) return false; + snprintf(cmd, MAX_CMD, "git commit --amend -F-"); if( (cmd_pipe = popen( cmd, "w" )) == NULL ) return false; fprintf(cmd_pipe, "[%d] %s", rev, head_message); pclose(cmd_pipe); - + return true; } @@ -379,11 +413,7 @@ bool find_sql_updates() if(!new_sql_updates.empty()) { for(std::set::iterator itr = new_sql_updates.begin(); itr != new_sql_updates.end(); ++itr) - { printf("%s\n", itr->c_str()); - // store the deleted files to be amended to the commit later - str_updates << ' ' << path_prefix << "sql/updates/" << itr->c_str(); - } } else printf("WARNING: no new sql updates found.\n"); @@ -428,15 +458,12 @@ bool convert_sql_updates() // rename the file in git snprintf(cmd, MAX_CMD, "git add %s", dst_file); - system(cmd); + system_switch_index(cmd); snprintf(cmd, MAX_CMD, "git rm %s", src_file); - system(cmd); + system_switch_index(cmd); // update the last sql update for the current database strncpy(last_sql_update[info.db_idx], new_name, MAX_PATH); - - // store the new files to be amended to the commit later - str_updates << ' ' << dst_file; } return true; @@ -527,6 +554,9 @@ bool generate_sql_makefile() fclose(fout); + snprintf(cmd, MAX_CMD, "git add %s%s/Makefile.am", path_prefix, sql_update_dir); + system_switch_index(cmd); + return true; } @@ -568,6 +598,40 @@ bool change_sql_history() return true; } +bool prepare_indices() +{ + printf("+ preparing new index\n"); + // copy the existing index file to a new one + char src_file[MAX_PATH], dst_file[MAX_PATH]; + + char *old_index = getenv("GIT_INDEX_FILE"); + if(old_index) strncpy(src_file, old_index, MAX_PATH); + else snprintf(src_file, MAX_PATH, "%s.git/index", path_prefix); + snprintf(dst_file, MAX_PATH, "%s%s", path_prefix, new_index_file); + + FILE * fin = fopen( src_file, "rb" ); + if(!fin) return false; + FILE * fout = fopen( dst_file, "wb" ); + if(!fout) { fclose(fin); return false; } + + for(char c = getc(fin); !feof(fin); putc(c, fout), c = getc(fin)); + + fclose(fin); + fclose(fout); + + // doesn't seem to work with path_prefix + snprintf(new_index_cmd, MAX_CMD, "GIT_INDEX_FILE=%s/%s", base_path, new_index_file); + if(putenv(new_index_cmd) != 0) return false; + + // clear the new index + system("git reset --mixed HEAD"); + + // revert to old index + snprintf(old_index_cmd, MAX_CMD, "GIT_INDEX_FILE="); + if(putenv(old_index_cmd) != 0) return false; + return true; +} + #define DO(cmd) if(!cmd) { printf("FAILED\n"); return 1; } int main(int argc, char *argv[]) @@ -601,27 +665,28 @@ int main(int argc, char *argv[]) } } - DO( find_path() ); + DO( find_path() ); if(!local) { - DO( find_origin() ); + DO( find_origin() ); if(do_fetch) - DO( fetch_origin() ); - DO( check_fwd() ); + DO( fetch_origin() ); + DO( check_fwd() ); } - DO( find_rev() ); - DO( find_head_msg() ); + DO( find_rev() ); + DO( find_head_msg() ); if(do_sql) - DO( find_sql_updates() ); - DO( write_rev() ); + DO( find_sql_updates() ); + DO( prepare_indices() ); + DO( write_rev() ); if(do_sql) { - DO( convert_sql_updates() ); - DO( generate_sql_makefile() ); + DO( convert_sql_updates() ); + DO( generate_sql_makefile() ); } - DO( amend_commit() ); - if(do_sql) - DO( change_sql_history() ); + DO( amend_commit() ); + //if(do_sql) + // DO( change_sql_history() ); return 0; } From fe16b28b2d320e4f5acfb7d4e7e0014893b4d19f Mon Sep 17 00:00:00 2001 From: Wyk3d Date: Sun, 28 Dec 2008 18:33:36 +0200 Subject: [PATCH 020/145] Implemented changing the sql database files --- contrib/git_id/git_id.cpp | 80 ++++++++++++++++++++++++++++++++++----- 1 file changed, 71 insertions(+), 9 deletions(-) diff --git a/contrib/git_id/git_id.cpp b/contrib/git_id/git_id.cpp index e25cba49f..05c6d7f45 100644 --- a/contrib/git_id/git_id.cpp +++ b/contrib/git_id/git_id.cpp @@ -57,6 +57,12 @@ char db_version_table[NUM_DATABASES][MAX_DB] = { "realmd_db_version", }; +char db_sql_file[NUM_DATABASES][MAX_PATH] = { + "sql/characters.sql", + "sql/mangos.sql", + "sql/realmd.sql" +}; + bool allow_replace = false; bool local = false; bool do_fetch = false; @@ -421,12 +427,27 @@ bool find_sql_updates() return true; } +bool copy_file(const char *src_file, const char *dst_file) +{ + FILE * fin = fopen( src_file, "rb" ); + if(!fin) return false; + FILE * fout = fopen( dst_file, "wb" ); + if(!fout) { fclose(fin); return false; } + + for(char c = getc(fin); !feof(fin); putc(c, fout), c = getc(fin)); + + fclose(fin); + fclose(fout); + return true; +} + bool convert_sql_updates() { if(new_sql_updates.empty()) return true; printf("+ converting sql updates\n"); + // rename the sql update files and add the required update statement for(std::set::iterator itr = new_sql_updates.begin(); itr != new_sql_updates.end(); ++itr) { sql_update_info info; @@ -560,6 +581,54 @@ bool generate_sql_makefile() return true; } +bool change_sql_database() +{ + if(new_sql_updates.empty()) return true; + printf("+ changing database sql files\n"); + + // rename the database files, copy their contents back + // and change the required update line + for(int i = 0; i < NUM_DATABASES; i++) + { + if(last_sql_update[i][0] == '\0') continue; + + char old_file[MAX_PATH], tmp_file[MAX_PATH]; + + snprintf(old_file, MAX_PATH, "%s%s", path_prefix, db_sql_file[i]); + snprintf(tmp_file, MAX_PATH, "%s%stmp", path_prefix, db_sql_file[i]); + + rename(old_file, tmp_file); + + FILE *fin = fopen( tmp_file, "r" ); + if(!fin) return false; + FILE *fout = fopen( old_file, "w" ); + if(!fout) return false; + + while(fgets(buffer, MAX_BUF, fin)) + { + fputs(buffer, fout); + if(strncmp(buffer, "CREATE TABLE `db_version` (\n", MAX_BUF) == 0) + break; + } + + if(!fgets(buffer, MAX_BUF, fin)) return false; + fputs(buffer, fout); + if(!fgets(buffer, MAX_BUF, fin)) return false; + + fprintf(fout, " `required_%s` bit(1) default NULL\n", last_sql_update[i]); + while(fgets(buffer, MAX_BUF, fin)) + fputs(buffer, fout); + + fclose(fin); + fclose(fout); + remove(tmp_file); + + snprintf(cmd, MAX_CMD, "git add %s", old_file); + system_switch_index(cmd); + } + return true; +} + bool change_sql_history() { snprintf(cmd, MAX_CMD, "git log HEAD --pretty=\"format:%%H\""); @@ -609,15 +678,7 @@ bool prepare_indices() else snprintf(src_file, MAX_PATH, "%s.git/index", path_prefix); snprintf(dst_file, MAX_PATH, "%s%s", path_prefix, new_index_file); - FILE * fin = fopen( src_file, "rb" ); - if(!fin) return false; - FILE * fout = fopen( dst_file, "wb" ); - if(!fout) { fclose(fin); return false; } - - for(char c = getc(fin); !feof(fin); putc(c, fout), c = getc(fin)); - - fclose(fin); - fclose(fout); + copy_file(src_file, dst_file); // doesn't seem to work with path_prefix snprintf(new_index_cmd, MAX_CMD, "GIT_INDEX_FILE=%s/%s", base_path, new_index_file); @@ -683,6 +744,7 @@ int main(int argc, char *argv[]) { DO( convert_sql_updates() ); DO( generate_sql_makefile() ); + DO( change_sql_database() ); } DO( amend_commit() ); //if(do_sql) From ca3f2720406d5ccfe268e0cfb26a3e9613da2efd Mon Sep 17 00:00:00 2001 From: Wyk3d Date: Sun, 28 Dec 2008 19:18:56 +0200 Subject: [PATCH 021/145] Fixed replacing the rev number and did other cleanups. --- contrib/git_id/git_id.cpp | 84 ++++++++++++++++++++++++++++----------- 1 file changed, 60 insertions(+), 24 deletions(-) diff --git a/contrib/git_id/git_id.cpp b/contrib/git_id/git_id.cpp index 05c6d7f45..2a799fc2e 100644 --- a/contrib/git_id/git_id.cpp +++ b/contrib/git_id/git_id.cpp @@ -1,3 +1,21 @@ +/* + * Copyright (C) 2005-2008 MaNGOS + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + #include #include #include @@ -73,6 +91,7 @@ bool do_sql = false; char origins[NUM_REMOTES][MAX_REMOTE]; int rev; int last_sql_rev[NUM_DATABASES] = {0,0,0}; +int last_sql_nr[NUM_DATABASES] = {0,0,0}; char head_message[MAX_MSG]; char path_prefix[MAX_PATH] = ""; @@ -191,7 +210,13 @@ bool check_fwd() } pclose(cmd_pipe); - if(!found) printf("WARNING: non-fastforward, use rebase!\n"); + if(!found) + { + // with fetch you still get the latest rev, you just rebase afterwards and push + // without it you may not get the right rev + if(do_fetch) printf("WARNING: non-fastforward, use rebase!\n"); + else { printf("ERROR: non-fastforward, use rebase!\n"); return false; } + } return true; } @@ -372,29 +397,15 @@ bool find_sql_updates() while(fgets(buffer, MAX_BUF, cmd_pipe)) { buffer[strnlen(buffer, MAX_BUF) - 1] = '\0'; + if(!get_sql_update_info(buffer, info)) continue; - if(get_sql_update_info(buffer, info)) + if(info.db_idx == NUM_DATABASES) { - if(info.rev > 0) - { - // find the update with the highest rev for each database - // (will be the required version for the new update) - // new updates should not have a rev number already - - if(info.db_idx < NUM_DATABASES && info.rev > last_sql_rev[info.db_idx]) - { - last_sql_rev[info.db_idx] = info.rev; - sscanf(buffer, "%[^.]", last_sql_update[info.db_idx]); - } - } - else - { - if(info.db_idx == NUM_DATABASES) - printf("WARNING: incorrect database name for sql update %s\n", buffer); - else - new_sql_updates.insert(buffer); - } + if(info.rev > 0) printf("WARNING: incorrect database name for sql update %s\n", buffer); + continue; } + + new_sql_updates.insert(buffer); } pclose(cmd_pipe); @@ -411,7 +422,22 @@ bool find_sql_updates() while(fgets(buffer, MAX_BUF, cmd_pipe)) { buffer[strnlen(buffer, MAX_BUF) - 1] = '\0'; - new_sql_updates.erase(buffer); + if(!get_sql_update_info(buffer, info)) continue; + + // find the old update with the highest rev for each database + // (will be the required version for the new update) + std::set::iterator itr = new_sql_updates.find(buffer); + if(itr != new_sql_updates.end() ) + { + if(info.rev > 0 && (info.rev > last_sql_rev[info.db_idx] || + (info.rev == last_sql_rev[info.db_idx] && info.nr > last_sql_nr[info.db_idx]))) + { + last_sql_rev[info.db_idx] = info.rev; + last_sql_nr[info.db_idx] = info.nr; + sscanf(buffer, "%[^.]", last_sql_update[info.db_idx]); + } + new_sql_updates.erase(itr); + } } pclose(cmd_pipe); @@ -667,7 +693,7 @@ bool change_sql_history() return true; } -bool prepare_indices() +bool prepare_new_index() { printf("+ preparing new index\n"); // copy the existing index file to a new one @@ -693,6 +719,15 @@ bool prepare_indices() return true; } +bool cleanup_new_index() +{ + printf("+ cleaning up the new index\n"); + char idx_file[MAX_PATH]; + snprintf(idx_file, MAX_PATH, "%s%s", path_prefix, new_index_file); + remove(idx_file); + return true; +} + #define DO(cmd) if(!cmd) { printf("FAILED\n"); return 1; } int main(int argc, char *argv[]) @@ -738,7 +773,7 @@ int main(int argc, char *argv[]) DO( find_head_msg() ); if(do_sql) DO( find_sql_updates() ); - DO( prepare_indices() ); + DO( prepare_new_index() ); DO( write_rev() ); if(do_sql) { @@ -747,6 +782,7 @@ int main(int argc, char *argv[]) DO( change_sql_database() ); } DO( amend_commit() ); + DO( cleanup_new_index() ); //if(do_sql) // DO( change_sql_history() ); From 0aed37f0078e09b0ce9ccdddd505a81d77d98b81 Mon Sep 17 00:00:00 2001 From: Wyk3d Date: Mon, 29 Dec 2008 00:08:15 +0200 Subject: [PATCH 022/145] Corrected rewrting history, but still disabled. --- contrib/git_id/git_id.cpp | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/contrib/git_id/git_id.cpp b/contrib/git_id/git_id.cpp index 2a799fc2e..27c0d72a0 100644 --- a/contrib/git_id/git_id.cpp +++ b/contrib/git_id/git_id.cpp @@ -348,6 +348,7 @@ bool amend_commit() fprintf(cmd_pipe, "[%d] %s", rev, head_message); pclose(cmd_pipe); + if(putenv(old_index_cmd) != 0) return false; return true; } @@ -660,7 +661,7 @@ bool change_sql_history() snprintf(cmd, MAX_CMD, "git log HEAD --pretty=\"format:%%H\""); if( (cmd_pipe = popen( cmd, "r" )) == NULL ) return false; - + std::list hashes; while(fgets(buffer, MAX_BUF, cmd_pipe)) { @@ -679,11 +680,30 @@ bool change_sql_history() for(std::list::reverse_iterator next = hashes.rbegin(), itr = next++; next != hashes.rend(); ++itr, ++next) { - snprintf(cmd, MAX_CMD, "git cherry-pick %s", itr->c_str()); + // stage the changes from the orignal commit + snprintf(cmd, MAX_CMD, "git cherry-pick -n %s", itr->c_str()); system(cmd); - snprintf(cmd, MAX_CMD, "git checkout %s %s%s", origin_hash, path_prefix, sql_update_dir); + + // remove changed and deleted files + snprintf(cmd, MAX_CMD, "git checkout HEAD %s%s", path_prefix, sql_update_dir); system(cmd); - snprintf(cmd, MAX_CMD, "git commit --amend -C HEAD %s%s", path_prefix, sql_update_dir); + + // remove the newly added files + snprintf(cmd, MAX_CMD, "git diff --cached --diff-filter=A --name-only %s%s", path_prefix, sql_update_dir); + if( (cmd_pipe = popen( cmd, "r" )) == NULL ) + return false; + + while(fgets(buffer, MAX_BUF, cmd_pipe)) + { + buffer[strnlen(buffer, MAX_BUF) - 1] = '\0'; + snprintf(cmd, MAX_CMD, "git rm -f %s%s", path_prefix, buffer); + system(cmd); + } + + pclose(cmd_pipe); + + // make a commit with the same author and message as the original one + snprintf(cmd, MAX_CMD, "git commit -C %s", itr->c_str()); system(cmd); } From 391fc65ffb5ff9b59eee6aec06a48fa6a7035613 Mon Sep 17 00:00:00 2001 From: Wyk3d Date: Mon, 29 Dec 2008 02:37:40 +0200 Subject: [PATCH 023/145] Fixed a bug that caused warnings, other cleanups --- contrib/git_id/git_id.cpp | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/contrib/git_id/git_id.cpp b/contrib/git_id/git_id.cpp index 27c0d72a0..3b75a167d 100644 --- a/contrib/git_id/git_id.cpp +++ b/contrib/git_id/git_id.cpp @@ -113,7 +113,7 @@ bool find_path() char *ptr; char cur_path[MAX_PATH]; getcwd(cur_path, MAX_PATH); - int len = strnlen(cur_path, MAX_PATH); + int len = strlen(cur_path); strncpy(base_path, cur_path, len+1); if(cur_path[len-1] == '/' || cur_path[len-1] == '\\') @@ -201,7 +201,7 @@ bool check_fwd() bool found = false; while(fgets(buffer, MAX_BUF, cmd_pipe)) { - buffer[strnlen(buffer, MAX_BUF) - 1] = '\0'; + buffer[strlen(buffer) - 1] = '\0'; if(strncmp(origin_hash, buffer, MAX_BUF) == 0) { found = true; @@ -366,6 +366,10 @@ struct sql_update_info bool get_sql_update_info(const char *buffer, sql_update_info &info) { info.table[0] = '\0'; + int dummy[3]; + if(sscanf(buffer, "%d_%d_%d", &dummy[0], &dummy[1], &dummy[2]) == 3) + return false; + if(sscanf(buffer, "%d_%d_%[^_]_%[^.].sql", &info.rev, &info.nr, info.db, info.table) != 4 && sscanf(buffer, "%d_%d_%[^.].sql", &info.rev, &info.nr, info.db) != 3) { @@ -397,7 +401,7 @@ bool find_sql_updates() while(fgets(buffer, MAX_BUF, cmd_pipe)) { - buffer[strnlen(buffer, MAX_BUF) - 1] = '\0'; + buffer[strlen(buffer) - 1] = '\0'; if(!get_sql_update_info(buffer, info)) continue; if(info.db_idx == NUM_DATABASES) @@ -422,7 +426,7 @@ bool find_sql_updates() while(fgets(buffer, MAX_BUF, cmd_pipe)) { - buffer[strnlen(buffer, MAX_BUF) - 1] = '\0'; + buffer[strlen(buffer) - 1] = '\0'; if(!get_sql_update_info(buffer, info)) continue; // find the old update with the highest rev for each database @@ -507,7 +511,7 @@ bool convert_sql_updates() // rename the file in git snprintf(cmd, MAX_CMD, "git add %s", dst_file); system_switch_index(cmd); - snprintf(cmd, MAX_CMD, "git rm %s", src_file); + snprintf(cmd, MAX_CMD, "git rm --quiet %s", src_file); system_switch_index(cmd); // update the last sql update for the current database @@ -535,8 +539,8 @@ bool generate_sql_makefile() while(fgets(buffer, MAX_BUF, cmd_pipe)) { - buffer[strnlen(buffer, MAX_BUF) - 1] = '\0'; - if(buffer[strnlen(buffer, MAX_BUF) - 1] != '/' && + buffer[strlen(buffer) - 1] = '\0'; + if(buffer[strlen(buffer) - 1] != '/' && strncmp(buffer, "Makefile.am", MAX_BUF) != 0) { if(new_sql_updates.find(buffer) != new_sql_updates.end()) @@ -665,7 +669,7 @@ bool change_sql_history() std::list hashes; while(fgets(buffer, MAX_BUF, cmd_pipe)) { - buffer[strnlen(buffer, MAX_BUF) - 1] = '\0'; + buffer[strlen(buffer) - 1] = '\0'; if(strncmp(origin_hash, buffer, MAX_HASH) == 0) break; @@ -695,14 +699,15 @@ bool change_sql_history() while(fgets(buffer, MAX_BUF, cmd_pipe)) { - buffer[strnlen(buffer, MAX_BUF) - 1] = '\0'; - snprintf(cmd, MAX_CMD, "git rm -f %s%s", path_prefix, buffer); + buffer[strlen(buffer) - 1] = '\0'; + snprintf(cmd, MAX_CMD, "git rm -f --quiet %s%s", path_prefix, buffer); system(cmd); } pclose(cmd_pipe); // make a commit with the same author and message as the original one + snprintf(cmd, MAX_CMD, "git commit -C %s", itr->c_str()); system(cmd); } @@ -731,7 +736,7 @@ bool prepare_new_index() if(putenv(new_index_cmd) != 0) return false; // clear the new index - system("git reset --mixed HEAD"); + system("git reset -q --mixed HEAD"); // revert to old index snprintf(old_index_cmd, MAX_CMD, "GIT_INDEX_FILE="); From 749d108443ea404ba211f6ea8bba5feadfb2d4c9 Mon Sep 17 00:00:00 2001 From: Wyk3d Date: Mon, 29 Dec 2008 02:45:46 +0200 Subject: [PATCH 024/145] Fixed replacing the revision in the makefile and the updates, other cleanups. --- contrib/git_id/git_id.cpp | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/contrib/git_id/git_id.cpp b/contrib/git_id/git_id.cpp index 3b75a167d..7ef24dfb3 100644 --- a/contrib/git_id/git_id.cpp +++ b/contrib/git_id/git_id.cpp @@ -500,6 +500,20 @@ bool convert_sql_updates() fprintf(fout, "ALTER TABLE %s CHANGE COLUMN required_%s required_%s bit;\n\n", db_version_table[info.db_idx], last_sql_update[info.db_idx], new_name); + // skip the first one or two lines from the input + // if it already contains update requirements + if(fgets(buffer, MAX_BUF, fin)) + { + char dummy[MAX_BUF]; + if(sscanf(buffer, "ALTER TABLE %s CHANGE COLUMN required_%s required_%s bit", dummy, dummy, dummy) == 3) + { + if(fgets(buffer, MAX_BUF, fin) && buffer[0] != '\n') + fputs(buffer, fout); + } + else + fputs(buffer, fout); + } + // copy the rest of the file char c; while( (c = getc(fin)) != EOF ) @@ -536,6 +550,7 @@ bool generate_sql_makefile() char newname[MAX_PATH]; std::set file_list; + sql_update_info info; while(fgets(buffer, MAX_BUF, cmd_pipe)) { @@ -545,7 +560,8 @@ bool generate_sql_makefile() { if(new_sql_updates.find(buffer) != new_sql_updates.end()) { - snprintf(newname, MAX_PATH, "%d_%s", rev, buffer); + if(!get_sql_update_info(buffer, info)) return false; + snprintf(newname, MAX_PATH, "%d_%0*d_%s%s%s", rev, 2, info.nr, info.db, info.has_table ? "_" : "", info.table); file_list.insert(newname); } else @@ -712,7 +728,7 @@ bool change_sql_history() system(cmd); } - snprintf(cmd, MAX_CMD, "git cherry-pick %s", hashes.begin()); + snprintf(cmd, MAX_CMD, "git cherry-pick %s", hashes.begin()->c_str()); system(cmd); return true; @@ -729,7 +745,7 @@ bool prepare_new_index() else snprintf(src_file, MAX_PATH, "%s.git/index", path_prefix); snprintf(dst_file, MAX_PATH, "%s%s", path_prefix, new_index_file); - copy_file(src_file, dst_file); + if(!copy_file(src_file, dst_file)) return false; // doesn't seem to work with path_prefix snprintf(new_index_cmd, MAX_CMD, "GIT_INDEX_FILE=%s/%s", base_path, new_index_file); From 5709c3cb200022e817c2dade8ddf2103a69573ec Mon Sep 17 00:00:00 2001 From: Wyk3d Date: Mon, 29 Dec 2008 16:26:17 +0200 Subject: [PATCH 025/145] Updated the help --- contrib/git_id/git_id.cpp | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/contrib/git_id/git_id.cpp b/contrib/git_id/git_id.cpp index 7ef24dfb3..efaafde7e 100644 --- a/contrib/git_id/git_id.cpp +++ b/contrib/git_id/git_id.cpp @@ -791,13 +791,14 @@ int main(int argc, char *argv[]) printf("Usage: git_id [OPTION]\n"); printf("Generates a new rev number and updates revision_nr.h and the commit message.\n"); printf("Should be used just before push.\n"); - printf(" -h, --help show the usage\n"); - printf(" -r, --replace replace the rev number if it was already applied to the last\n"); - printf(" commit\n"); - printf(" -l, --local search for the highest rev number on HEAD\n"); - printf(" -f, --fetch fetch from origin before searching for the new rev\n"); - printf(" -s, --sql "); - printf(" --branch=BRANCH"); + printf(" -h, --help show the usage\n"); + printf(" -r, --replace replace the rev number if it was already applied\n"); + printf(" to the last commit\n"); + printf(" -l, --local search for the highest rev number on HEAD\n"); + printf(" -f, --fetch fetch from origin before searching for the new rev\n"); + printf(" -s, --sql search for new sql updates and do all of the changes\n"); + printf(" for the new rev\n"); + printf(" --branch=BRANCH specify which remote branch to use"); return 0; } } From 1f6d6929f622f15c7274936495c60ee71aca97f6 Mon Sep 17 00:00:00 2001 From: Wyk3d Date: Mon, 29 Dec 2008 18:37:38 +0200 Subject: [PATCH 026/145] Only use the new index if there are staged changes that need to be preserved --- contrib/git_id/git_id.cpp | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/contrib/git_id/git_id.cpp b/contrib/git_id/git_id.cpp index efaafde7e..a01c7439e 100644 --- a/contrib/git_id/git_id.cpp +++ b/contrib/git_id/git_id.cpp @@ -85,6 +85,7 @@ bool allow_replace = false; bool local = false; bool do_fetch = false; bool do_sql = false; +bool use_new_index = true; // aux @@ -274,6 +275,7 @@ void system_switch_index(const char *cmd) // but the new index will contains only the desired changes // while the old may contain others system(cmd); + if(!use_new_index) return; if(putenv(new_index_cmd) != 0) return; system(cmd); if(putenv(old_index_cmd) != 0) return; @@ -340,15 +342,15 @@ bool amend_commit() { printf("+ amending last commit\n"); - // commit the contents of the new index - if(putenv(new_index_cmd) != 0) return false; + // commit the contents of the (new) index + if(use_new_index && putenv(new_index_cmd) != 0) return false; snprintf(cmd, MAX_CMD, "git commit --amend -F-"); if( (cmd_pipe = popen( cmd, "w" )) == NULL ) return false; fprintf(cmd_pipe, "[%d] %s", rev, head_message); pclose(cmd_pipe); - if(putenv(old_index_cmd) != 0) return false; + if(use_new_index && putenv(old_index_cmd) != 0) return false; return true; } @@ -736,7 +738,23 @@ bool change_sql_history() bool prepare_new_index() { + if(!use_new_index) return true; + + // only use a new index if there are staged changes that should be preserved + if( (cmd_pipe = popen( "git diff --cached", "r" )) == NULL ) + return false; + + if(!fgets(buffer, MAX_BUF, cmd_pipe)) + { + use_new_index = false; + pclose(cmd_pipe); + return true; + } + + pclose(cmd_pipe); + printf("+ preparing new index\n"); + // copy the existing index file to a new one char src_file[MAX_PATH], dst_file[MAX_PATH]; @@ -762,6 +780,7 @@ bool prepare_new_index() bool cleanup_new_index() { + if(!use_new_index) return true; printf("+ cleaning up the new index\n"); char idx_file[MAX_PATH]; snprintf(idx_file, MAX_PATH, "%s%s", path_prefix, new_index_file); From fb9c4a74c0b48020cad2b2e411e54b02f0e1f025 Mon Sep 17 00:00:00 2001 From: Wyk3d Date: Mon, 29 Dec 2008 23:45:30 +0200 Subject: [PATCH 027/145] Fixed changing characters and realmd sql --- contrib/git_id/git_id.cpp | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/contrib/git_id/git_id.cpp b/contrib/git_id/git_id.cpp index a01c7439e..cc9ff2af4 100644 --- a/contrib/git_id/git_id.cpp +++ b/contrib/git_id/git_id.cpp @@ -641,7 +641,7 @@ bool change_sql_database() { if(last_sql_update[i][0] == '\0') continue; - char old_file[MAX_PATH], tmp_file[MAX_PATH]; + char old_file[MAX_PATH], tmp_file[MAX_PATH], dummy[MAX_BUF]; snprintf(old_file, MAX_PATH, "%s%s", path_prefix, db_sql_file[i]); snprintf(tmp_file, MAX_PATH, "%s%stmp", path_prefix, db_sql_file[i]); @@ -653,16 +653,20 @@ bool change_sql_database() FILE *fout = fopen( old_file, "w" ); if(!fout) return false; + snprintf(dummy, MAX_CMD, "CREATE TABLE `%s` (\n", db_version_table[i]); while(fgets(buffer, MAX_BUF, fin)) { - fputs(buffer, fout); - if(strncmp(buffer, "CREATE TABLE `db_version` (\n", MAX_BUF) == 0) + fputs(buffer, fout); + if(strncmp(buffer, dummy, MAX_BUF) == 0) break; } - if(!fgets(buffer, MAX_BUF, fin)) return false; - fputs(buffer, fout); - if(!fgets(buffer, MAX_BUF, fin)) return false; + while(1) + { + if(!fgets(buffer, MAX_BUF, fin)) return false; + if(sscanf(buffer, " `required_%s`", dummy) == 1) break; + fputs(buffer, fout); + } fprintf(fout, " `required_%s` bit(1) default NULL\n", last_sql_update[i]); while(fgets(buffer, MAX_BUF, fin)) From 12753049d1fb205e8d423b964546fbb779ed76a2 Mon Sep 17 00:00:00 2001 From: Wyk3d Date: Tue, 30 Dec 2008 00:32:04 +0200 Subject: [PATCH 028/145] [6979] Updated git_id Fixed some whitespace errors. --- contrib/git_id/git_id.cpp | 10 +++++----- src/shared/revision_nr.h | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/contrib/git_id/git_id.cpp b/contrib/git_id/git_id.cpp index cc9ff2af4..7fda2d227 100644 --- a/contrib/git_id/git_id.cpp +++ b/contrib/git_id/git_id.cpp @@ -301,7 +301,7 @@ bool write_rev() system_switch_index(cmd); return true; - } + } return false; } @@ -341,7 +341,7 @@ bool find_head_msg() bool amend_commit() { printf("+ amending last commit\n"); - + // commit the contents of the (new) index if(use_new_index && putenv(new_index_cmd) != 0) return false; snprintf(cmd, MAX_CMD, "git commit --amend -F-"); @@ -613,7 +613,7 @@ bool generate_sql_makefile() for(std::set::iterator itr = file_list.begin(); itr != file_list.end(); ++itr) fprintf(fout, "\t%s \\\n", itr->c_str()); - fprintf(fout, + fprintf(fout, "\n## Additional files to include when running 'make dist'\n" "# SQL update files, to upgrade database schema from older revisions\n" "EXTRA_DIST = \\\n" @@ -656,7 +656,7 @@ bool change_sql_database() snprintf(dummy, MAX_CMD, "CREATE TABLE `%s` (\n", db_version_table[i]); while(fgets(buffer, MAX_BUF, fin)) { - fputs(buffer, fout); + fputs(buffer, fout); if(strncmp(buffer, dummy, MAX_BUF) == 0) break; } @@ -729,7 +729,7 @@ bool change_sql_history() pclose(cmd_pipe); // make a commit with the same author and message as the original one - + snprintf(cmd, MAX_CMD, "git commit -C %s", itr->c_str()); system(cmd); } diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 7ad12b6ee..5906974dc 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 "6978" + #define REVISION_NR "6979" #endif // __REVISION_NR_H__ From a1494d29dce3fba28db9719000492b42eeb80ac3 Mon Sep 17 00:00:00 2001 From: DiSlord Date: Tue, 30 Dec 2008 01:45:50 +0300 Subject: [PATCH 029/145] [6980] Add some fixes to trigger system Allow proc from every kill Fix (and remove hack) priest 32379 and rank (backfire damage after 1 sec) Remove not need stack overflow protection Signed-off-by: DiSlord --- src/game/Spell.cpp | 15 +-------------- src/game/SpellEffects.cpp | 7 +++++++ src/game/SpellMgr.cpp | 2 +- src/game/SpellMgr.h | 2 +- src/game/Unit.cpp | 34 ++++++++++++++++------------------ src/game/Unit.h | 2 +- src/shared/revision_nr.h | 2 +- 7 files changed, 28 insertions(+), 36 deletions(-) diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp index a658cd91f..3d4e80c52 100644 --- a/src/game/Spell.cpp +++ b/src/game/Spell.cpp @@ -990,21 +990,8 @@ void Spell::DoAllEffectOnTarget(TargetInfo *target) caster->DealSpellDamage(&damageInfo, true); - // Shadow Word: Death - deals damage equal to damage done to caster if victim is not killed - if (m_spellInfo->SpellFamilyName == SPELLFAMILY_PRIEST && m_spellInfo->SpellFamilyFlags&0x0000000200000000LL && - caster != unitTarget && unitTarget->isAlive()) - { - // Redirect damage to caster if victim Alive - damageInfo.target = caster; - damageInfo.absorb = 0; - damageInfo.resist = 0; - damageInfo.blocked = 0; - // Send log damage message to client - caster->SendSpellNonMeleeDamageLog(&damageInfo); - caster->DealSpellDamage(&damageInfo, true); - } // Judgement of Blood - else if (m_spellInfo->SpellFamilyName == SPELLFAMILY_PALADIN && m_spellInfo->SpellFamilyFlags & 0x0000000800000000LL && m_spellInfo->SpellIconID==153) + if (m_spellInfo->SpellFamilyName == SPELLFAMILY_PALADIN && m_spellInfo->SpellFamilyFlags & 0x0000000800000000LL && m_spellInfo->SpellIconID==153) { int32 damagePoint = damageInfo.damage * 33 / 100; m_caster->CastCustomSpell(m_caster, 32220, &damagePoint, NULL, NULL, true); diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp index 74b59dc07..e50423662 100644 --- a/src/game/SpellEffects.cpp +++ b/src/game/SpellEffects.cpp @@ -397,6 +397,13 @@ void Spell::EffectSchoolDMG(uint32 effect_idx) } break; } + case SPELLFAMILY_PRIEST: + { + // Shadow Word: Death - deals damage equal to damage done to caster + if (m_spellInfo->SpellFamilyFlags & 0x0000000200000000LL) + m_caster->CastCustomSpell(m_caster, 32409, &damage, 0, 0, true); + break; + } case SPELLFAMILY_DRUID: { // Ferocious Bite diff --git a/src/game/SpellMgr.cpp b/src/game/SpellMgr.cpp index 401da3cf3..999f05f0f 100644 --- a/src/game/SpellMgr.cpp +++ b/src/game/SpellMgr.cpp @@ -897,7 +897,7 @@ bool SpellMgr::IsSpellProcEventCanTriggeredBy(SpellProcEventEntry const * spellP return false; // Always trigger for this - if (EventProcFlag & (PROC_FLAG_KILLED | PROC_FLAG_KILL_AND_GET_XP)) + if (EventProcFlag & (PROC_FLAG_KILLED | PROC_FLAG_KILL)) return true; if (spellProcEvent) // Exist event data diff --git a/src/game/SpellMgr.h b/src/game/SpellMgr.h index 72d35a0b6..c5d005b98 100644 --- a/src/game/SpellMgr.h +++ b/src/game/SpellMgr.h @@ -468,7 +468,7 @@ enum ProcFlags PROC_FLAG_NONE = 0x00000000, PROC_FLAG_KILLED = 0x00000001, // 00 Killed by agressor - PROC_FLAG_KILL_AND_GET_XP = 0x00000002, // 01 Kill that yields experience or honor + PROC_FLAG_KILL = 0x00000002, // 01 Kill target (in most cases need XP/Honor reward) PROC_FLAG_SUCCESSFUL_MILEE_HIT = 0x00000004, // 02 Successful melee auto attack PROC_FLAG_TAKEN_MELEE_HIT = 0x00000008, // 03 Taken damage from melee auto attack hit diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index c6eeaed54..eb3926c42 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -559,10 +559,8 @@ uint32 Unit::DealDamage(Unit *pVictim, uint32 damage, CleanDamage const* cleanDa // call kill spell proc event (before real die and combat stop to triggering auras removed at death/combat stop) if(player && player!=pVictim) { - if(player->RewardPlayerAndGroupAtKill(pVictim)) - player->ProcDamageAndSpell(pVictim, PROC_FLAG_KILL_AND_GET_XP, PROC_FLAG_KILLED, PROC_EX_NONE, 0); - else - player->ProcDamageAndSpell(pVictim, PROC_FLAG_NONE, PROC_FLAG_KILLED,PROC_EX_NONE, 0); + player->RewardPlayerAndGroupAtKill(pVictim); + player->ProcDamageAndSpell(pVictim, PROC_FLAG_KILL, PROC_FLAG_KILLED, PROC_EX_NONE, 0); } DEBUG_LOG("DealDamageAttackStop"); @@ -9582,6 +9580,7 @@ bool InitTriggerAuraData() isTriggerAura[i]=false; isNonTriggerAura[i] = false; } + isTriggerAura[SPELL_AURA_PERIODIC_DAMAGE] = true; isTriggerAura[SPELL_AURA_DUMMY] = true; isTriggerAura[SPELL_AURA_MOD_CONFUSE] = true; isTriggerAura[SPELL_AURA_MOD_THREAT] = true; @@ -9655,18 +9654,8 @@ uint32 createProcExtendMask(SpellNonMeleeDamage *damageInfo, SpellMissInfo missC return procEx; } -static int deep = 0; void Unit::ProcDamageAndSpellFor( bool isVictim, Unit * pTarget, uint32 procFlag, uint32 procExtra, WeaponAttackType attType, SpellEntry const * procSpell, uint32 damage ) { - deep ++; - if (deep > 5) - { - sLog.outError("Prevent possible stack owerflow in Unit::ProcDamageAndSpellFor"); - if (procSpell) - sLog.outError(" Spell %u", procSpell->Id); - deep--; - return; - } // For melee/ranged based attack need update skills and set some Aura states if (procFlag & MELEE_BASED_TRIGGER_MASK) { @@ -9750,7 +9739,7 @@ void Unit::ProcDamageAndSpellFor( bool isVictim, Unit * pTarget, uint32 procFlag for(AuraMap::const_iterator itr = GetAuras().begin(); itr!= GetAuras().end(); ++itr) { SpellProcEventEntry const* spellProcEvent = NULL; - if(!IsTriggeredAtSpellProcEvent(itr->second, procSpell, procFlag, procExtra, attType, isVictim, (damage > 0), spellProcEvent)) + if(!IsTriggeredAtSpellProcEvent(pTarget, itr->second, procSpell, procFlag, procExtra, attType, isVictim, (damage > 0), spellProcEvent)) continue; procTriggered.push_back( ProcTriggeredData(spellProcEvent, itr->second) ); @@ -9928,7 +9917,6 @@ void Unit::ProcDamageAndSpellFor( bool isVictim, Unit * pTarget, uint32 procFlag for(RemoveSpellList::const_iterator i = removedSpells.begin(); i != removedSpells.end();i++) RemoveAurasDueToSpell(*i); } - deep--; } SpellSchoolMask Unit::GetMeleeDamageSchoolMask() const @@ -10547,7 +10535,7 @@ Pet* Unit::CreateTamedPetFrom(Creature* creatureTarget,uint32 spell_id) return pet; } -bool Unit::IsTriggeredAtSpellProcEvent(Aura* aura, SpellEntry const* procSpell, uint32 procFlag, uint32 procExtra, WeaponAttackType attType, bool isVictim, bool active, SpellProcEventEntry const*& spellProcEvent ) +bool Unit::IsTriggeredAtSpellProcEvent(Unit *pVictim, Aura* aura, SpellEntry const* procSpell, uint32 procFlag, uint32 procExtra, WeaponAttackType attType, bool isVictim, bool active, SpellProcEventEntry const*& spellProcEvent ) { SpellEntry const* spellProto = aura->GetSpellProto (); @@ -10577,7 +10565,17 @@ bool Unit::IsTriggeredAtSpellProcEvent(Aura* aura, SpellEntry const* procSpell, if(!SpellMgr::IsSpellProcEventCanTriggeredBy(spellProcEvent, EventProcFlag, procSpell, procFlag, procExtra, active)) return false; - // Aura added by spell can`t trogger from self (prevent drop cahres/do triggers) + // In most cases req get honor or XP from kill + if (EventProcFlag & PROC_FLAG_KILL && GetTypeId() == TYPEID_PLAYER) + { + bool allow = ((Player*)this)->isHonorOrXPTarget(pVictim); + // Shadow Word: Death - can trigger from every kill + if (aura->GetId() == 32409) + allow = true; + if (!allow) + return false; + } + // Aura added by spell can`t trogger from self (prevent drop charges/do triggers) // But except periodic triggers (can triggered from self) if(procSpell && procSpell->Id == spellProto->Id && !(spellProto->procFlags&PROC_FLAG_ON_TAKE_PERIODIC)) return false; diff --git a/src/game/Unit.h b/src/game/Unit.h index f266130f4..77d9e3b35 100644 --- a/src/game/Unit.h +++ b/src/game/Unit.h @@ -1437,7 +1437,7 @@ class MANGOS_DLL_SPEC Unit : public WorldObject void SendAttackStop(Unit* victim); // only from AttackStop(Unit*) void SendAttackStart(Unit* pVictim); // only from Unit::AttackStart(Unit*) - bool IsTriggeredAtSpellProcEvent( Aura* aura, SpellEntry const* procSpell, uint32 procFlag, uint32 procExtra, WeaponAttackType attType, bool isVictim, bool active, SpellProcEventEntry const*& spellProcEvent ); + bool IsTriggeredAtSpellProcEvent(Unit *pVictim, Aura* aura, SpellEntry const* procSpell, uint32 procFlag, uint32 procExtra, WeaponAttackType attType, bool isVictim, bool active, SpellProcEventEntry const*& spellProcEvent ); bool HandleDummyAuraProc( Unit *pVictim, uint32 damage, Aura* triggredByAura, SpellEntry const *procSpell, uint32 procFlag, uint32 procEx, uint32 cooldown); bool HandleHasteAuraProc( Unit *pVictim, uint32 damage, Aura* triggredByAura, SpellEntry const *procSpell, uint32 procFlag, uint32 procEx, uint32 cooldown); bool HandleProcTriggerSpell(Unit *pVictim, uint32 damage, Aura* triggredByAura, SpellEntry const *procSpell, uint32 procFlag, uint32 procEx, uint32 cooldown); diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 5906974dc..0874a8c41 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 "6979" + #define REVISION_NR "6980" #endif // __REVISION_NR_H__ From bc0a840e6a518b8900a49ceaf8e44cdb288cb7f1 Mon Sep 17 00:00:00 2001 From: DiSlord Date: Tue, 30 Dec 2008 01:51:19 +0300 Subject: [PATCH 030/145] [6981] Fix send SMSG_PERIODICAURALOG Signed-off-by: DiSlord --- src/game/SpellAuras.cpp | 2 +- src/shared/revision_nr.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp index 89ec19055..21593a5f2 100644 --- a/src/game/SpellAuras.cpp +++ b/src/game/SpellAuras.cpp @@ -5780,10 +5780,10 @@ void Aura::PeriodicTick() data << uint32(1); data << uint32(m_modifier.m_auraname); data << (uint32)pdamage; + data << uint32(0); // overkill data << (uint32)GetSpellSchoolMask(GetSpellProto()); // will be mask in 2.4.x data << (uint32)absorb; data << (uint32)resist; - data << uint32(0); // wotlk m_target->SendMessageToSet(&data,true); Unit* target = m_target; // aura can be deleted in DealDamage diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 0874a8c41..6c76b9f2f 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 "6980" + #define REVISION_NR "6981" #endif // __REVISION_NR_H__ From 73ca2b7a54987502f1eac27330f20aac42d661cd Mon Sep 17 00:00:00 2001 From: freghar Date: Tue, 9 Dec 2008 15:04:56 +0100 Subject: [PATCH 031/145] [6982] Implemented gmlevel-based command security This is just a simple check if target's gmlevel is lesser than the caller's one. If it is, an error is returned. Offline checks for some commands are included. That in simple words means no further .goname to a gmlevel 3 player from a gmlevel 2 or 1 account, so gmlevel 3 can work in peace. Signed-off-by: freghar --- src/game/Chat.cpp | 33 ++++++++ src/game/Chat.h | 1 + src/game/Level1.cpp | 124 +++++++++++++++++++++++++++++++ src/game/Level2.cpp | 62 ++++++++++++++++ src/game/World.cpp | 1 + src/game/World.h | 1 + src/mangosd/mangosd.conf.dist.in | 6 ++ src/shared/revision_nr.h | 2 +- 8 files changed, 229 insertions(+), 1 deletion(-) diff --git a/src/game/Chat.cpp b/src/game/Chat.cpp index 2e0165ad6..0d972c985 100644 --- a/src/game/Chat.cpp +++ b/src/game/Chat.cpp @@ -31,6 +31,7 @@ #include "MapManager.h" #include "GridNotifiersImpl.h" #include "CellImpl.h" +#include "AccountMgr.h" bool ChatHandler::load_command_table = true; @@ -625,6 +626,38 @@ bool ChatHandler::isAvailable(ChatCommand const& cmd) const return m_session->GetSecurity() >= cmd.SecurityLevel; } +bool ChatHandler::HasLowerSecurity(Player* target, uint64 guid) +{ + uint32 target_sec; + + if (!sWorld.getConfig(CONFIG_GM_LOWER_SECURITY)) + return false; + + // allow everything from RA console + if (!m_session) + return false; + + if (target) + target_sec = target->GetSession()->GetSecurity(); + else if (guid) + target_sec = accmgr.GetSecurity(objmgr.GetPlayerAccountIdByGUID(guid)); + else + { + SendSysMessage(LANG_PLAYER_NOT_FOUND); + SetSentErrorMessage(true); + return true; + } + + if (m_session->GetSecurity() < target_sec) + { + SendSysMessage(LANG_YOURS_SECURITY_IS_LOW); + SetSentErrorMessage(true); + return true; + } + + return false; +} + bool ChatHandler::hasStringAbbr(const char* name, const char* part) { // non "" command diff --git a/src/game/Chat.h b/src/game/Chat.h index d8e93b2c1..bb29a3ad6 100644 --- a/src/game/Chat.h +++ b/src/game/Chat.h @@ -77,6 +77,7 @@ class ChatHandler virtual bool isAvailable(ChatCommand const& cmd) const; virtual bool needReportToTarget(Player* chr) const; + bool HasLowerSecurity(Player* target, uint64 guid); void SendGlobalSysMessage(const char *str); diff --git a/src/game/Level1.cpp b/src/game/Level1.cpp index f86ada89a..d42141d0d 100644 --- a/src/game/Level1.cpp +++ b/src/game/Level1.cpp @@ -111,6 +111,10 @@ bool ChatHandler::HandleNpcWhisperCommand(const char* args) uint64 receiver_guid= atol(receiver_str); + // check online security + if (HasLowerSecurity(objmgr.GetPlayer(receiver_guid), 0)) + return false; + pCreature->Whisper(text,receiver_guid); return true; @@ -342,6 +346,10 @@ bool ChatHandler::HandleNamegoCommand(const char* args) Player *chr = objmgr.GetPlayer(name.c_str()); if (chr) { + // check online security + if (HasLowerSecurity(chr, 0)) + return false; + if(chr->IsBeingTeleported()==true) { PSendSysMessage(LANG_IS_TELEPORTED, chr->GetName()); @@ -402,6 +410,10 @@ bool ChatHandler::HandleNamegoCommand(const char* args) } else if (uint64 guid = objmgr.GetPlayerGUIDByName(name)) { + // check offline security + if (HasLowerSecurity(NULL, guid)) + return false; + PSendSysMessage(LANG_SUMMONING, name.c_str(),GetMangosString(LANG_OFFLINE)); // in point where GM stay @@ -442,6 +454,10 @@ bool ChatHandler::HandleGonameCommand(const char* args) Player *chr = objmgr.GetPlayer(name.c_str()); if (chr) { + // check online security + if (HasLowerSecurity(chr, 0)) + return false; + Map* cMap = chr->GetMap(); if(cMap->IsBattleGroundOrArena()) { @@ -535,6 +551,10 @@ bool ChatHandler::HandleGonameCommand(const char* args) if (uint64 guid = objmgr.GetPlayerGUIDByName(name)) { + // check offline security + if (HasLowerSecurity(NULL, guid)) + return false; + PSendSysMessage(LANG_APPEARING_AT, name.c_str()); // to point where player stay (if loaded) @@ -574,6 +594,10 @@ bool ChatHandler::HandleRecallCommand(const char* args) chr = getSelectedPlayer(); if(!chr) chr = m_session->GetPlayer(); + + // check online security + else if (HasLowerSecurity(chr, 0)) + return false; } else { @@ -594,6 +618,10 @@ bool ChatHandler::HandleRecallCommand(const char* args) SetSentErrorMessage(true); return false; } + + // check online security + if (HasLowerSecurity(chr, 0)) + return false; } if(chr->IsBeingTeleported()) @@ -632,6 +660,10 @@ bool ChatHandler::HandleModifyKnownTitlesCommand(const char* args) return false; } + // check online security + if (HasLowerSecurity(chr, 0)) + return false; + uint64 titles2 = titles; for(int i=1; i < sCharTitlesStore.GetNumRows(); ++i) @@ -681,6 +713,10 @@ bool ChatHandler::HandleModifyHPCommand(const char* args) return false; } + // check online security + if (HasLowerSecurity(chr, 0)) + return false; + PSendSysMessage(LANG_YOU_CHANGE_HP, chr->GetName(), hp, hpm); if (needReportToTarget(chr)) ChatHandler(chr).PSendSysMessage(LANG_YOURS_HP_CHANGED, GetName(), hp, hpm); @@ -725,6 +761,10 @@ bool ChatHandler::HandleModifyManaCommand(const char* args) return false; } + // check online security + if (HasLowerSecurity(chr, 0)) + return false; + PSendSysMessage(LANG_YOU_CHANGE_MANA, chr->GetName(), mana, manam); if (needReportToTarget(chr)) ChatHandler(chr).PSendSysMessage(LANG_YOURS_MANA_CHANGED, GetName(), mana, manam); @@ -770,6 +810,10 @@ bool ChatHandler::HandleModifyEnergyCommand(const char* args) return false; } + // check online security + if (HasLowerSecurity(chr, 0)) + return false; + PSendSysMessage(LANG_YOU_CHANGE_ENERGY, chr->GetName(), energy/10, energym/10); if (needReportToTarget(chr)) ChatHandler(chr).PSendSysMessage(LANG_YOURS_ENERGY_CHANGED, GetName(), energy/10, energym/10); @@ -817,6 +861,10 @@ bool ChatHandler::HandleModifyRageCommand(const char* args) return false; } + // check online security + if (HasLowerSecurity(chr, 0)) + return false; + PSendSysMessage(LANG_YOU_CHANGE_RAGE, chr->GetName(), rage/10, ragem/10); if (needReportToTarget(chr)) ChatHandler(chr).PSendSysMessage(LANG_YOURS_RAGE_CHANGED, GetName(), rage/10, ragem/10); @@ -975,6 +1023,10 @@ bool ChatHandler::HandleModifySpellCommand(const char* args) return false; } + // check online security + if (HasLowerSecurity(chr, 0)) + return false; + PSendSysMessage(LANG_YOU_CHANGE_SPELLFLATID, spellflatid, val, mark, chr->GetName()); if (needReportToTarget(chr)) ChatHandler(chr).PSendSysMessage(LANG_YOURS_SPELLFLATID_CHANGED, GetName(), spellflatid, val, mark); @@ -1005,6 +1057,11 @@ bool ChatHandler::HandleModifyTalentCommand (const char* args) SetSentErrorMessage(true); return false; } + + // check online security + if (HasLowerSecurity(player, 0)) + return false; + player->SetFreeTalentPoints(tp); return true; } @@ -1029,6 +1086,10 @@ bool ChatHandler::HandleTaxiCheatCommand(const char* args) chr=m_session->GetPlayer(); } + // check online security + else if (HasLowerSecurity(chr, 0)) + return false; + if (argstr == "on") { chr->SetTaxiCheater(true); @@ -1076,6 +1137,10 @@ bool ChatHandler::HandleModifyASpeedCommand(const char* args) return false; } + // check online security + if (HasLowerSecurity(chr, 0)) + return false; + if(chr->isInFlight()) { PSendSysMessage(LANG_CHAR_IN_FLIGHT,chr->GetName()); @@ -1118,6 +1183,10 @@ bool ChatHandler::HandleModifySpeedCommand(const char* args) return false; } + // check online security + if (HasLowerSecurity(chr, 0)) + return false; + if(chr->isInFlight()) { PSendSysMessage(LANG_CHAR_IN_FLIGHT,chr->GetName()); @@ -1157,6 +1226,10 @@ bool ChatHandler::HandleModifySwimCommand(const char* args) return false; } + // check online security + if (HasLowerSecurity(chr, 0)) + return false; + if(chr->isInFlight()) { PSendSysMessage(LANG_CHAR_IN_FLIGHT,chr->GetName()); @@ -1196,6 +1269,10 @@ bool ChatHandler::HandleModifyBWalkCommand(const char* args) return false; } + // check online security + if (HasLowerSecurity(chr, 0)) + return false; + if(chr->isInFlight()) { PSendSysMessage(LANG_CHAR_IN_FLIGHT,chr->GetName()); @@ -1235,6 +1312,10 @@ bool ChatHandler::HandleModifyFlyCommand(const char* args) return false; } + // check online security + if (HasLowerSecurity(chr, 0)) + return false; + PSendSysMessage(LANG_YOU_CHANGE_FLY_SPEED, FSpeed, chr->GetName()); if (needReportToTarget(chr)) ChatHandler(chr).PSendSysMessage(LANG_YOURS_FLY_SPEED_CHANGED, GetName(), FSpeed); @@ -1266,6 +1347,10 @@ bool ChatHandler::HandleModifyScaleCommand(const char* args) return false; } + // check online security + if (HasLowerSecurity(chr, 0)) + return false; + PSendSysMessage(LANG_YOU_CHANGE_SIZE, Scale, chr->GetName()); if (needReportToTarget(chr)) ChatHandler(chr).PSendSysMessage(LANG_YOURS_SIZE_CHANGED, GetName(), Scale); @@ -1509,6 +1594,10 @@ bool ChatHandler::HandleModifyMountCommand(const char* args) return false; } + // check online security + if (HasLowerSecurity(chr, 0)) + return false; + PSendSysMessage(LANG_YOU_GIVE_MOUNT, chr->GetName()); if (needReportToTarget(chr)) ChatHandler(chr).PSendSysMessage(LANG_MOUNT_GIVED, GetName()); @@ -1546,6 +1635,10 @@ bool ChatHandler::HandleModifyMoneyCommand(const char* args) return false; } + // check online security + if (HasLowerSecurity(chr, 0)) + return false; + int32 addmoney = atoi((char*)args); uint32 moneyuser = chr->GetMoney(); @@ -1598,6 +1691,10 @@ bool ChatHandler::HandleModifyBitCommand(const char* args) return false; } + // check online security + if (HasLowerSecurity(chr, 0)) + return false; + char* pField = strtok((char*)args, " "); if (!pField) return false; @@ -1650,6 +1747,10 @@ bool ChatHandler::HandleModifyHonorCommand (const char* args) return false; } + // check online security + if (HasLowerSecurity(target, 0)) + return false; + int32 amount = (uint32)atoi(args); target->ModifyHonorPoints(amount); @@ -1990,6 +2091,9 @@ bool ChatHandler::HandleNameTeleCommand(const char * args) Player *chr = objmgr.GetPlayer(name.c_str()); if (chr) { + // check online security + if (HasLowerSecurity(chr, 0)) + return false; if(chr->IsBeingTeleported()==true) { @@ -2016,6 +2120,10 @@ bool ChatHandler::HandleNameTeleCommand(const char * args) } else if (uint64 guid = objmgr.GetPlayerGUIDByName(name.c_str())) { + // check offline security + if (HasLowerSecurity(NULL, guid)) + return false; + PSendSysMessage(LANG_TELEPORTING_TO, name.c_str(), GetMangosString(LANG_OFFLINE), tele->name.c_str()); Player::SavePositionInDB(tele->mapId,tele->position_x,tele->position_y,tele->position_z,tele->orientation,MapManager::Instance().GetZoneId(tele->mapId,tele->position_x,tele->position_y),guid); } @@ -2039,6 +2147,10 @@ bool ChatHandler::HandleGroupTeleCommand(const char * args) return false; } + // check online security + if (HasLowerSecurity(player, 0)) + return false; + // id, or string, or [name] Shift-click form |color|Htele:id|h[name]|h|r GameTele const* tele = extractGameTeleFromLink((char*)args); if(!tele) @@ -2063,6 +2175,10 @@ bool ChatHandler::HandleGroupTeleCommand(const char * args) if(!pl || !pl->GetSession() ) continue; + // check online security + if (HasLowerSecurity(pl, 0)) + return false; + if(pl->IsBeingTeleported()) { PSendSysMessage(LANG_IS_TELEPORTED, pl->GetName()); @@ -2112,6 +2228,10 @@ bool ChatHandler::HandleGroupgoCommand(const char* args) return false; } + // check online security + if (HasLowerSecurity(player, 0)) + return false; + Group *grp = player->GetGroup(); if(!grp) @@ -2142,6 +2262,10 @@ bool ChatHandler::HandleGroupgoCommand(const char* args) if(!pl || pl==m_session->GetPlayer() || !pl->GetSession() ) continue; + // check online security + if (HasLowerSecurity(pl, 0)) + return false; + if(pl->IsBeingTeleported()==true) { PSendSysMessage(LANG_IS_TELEPORTED, pl->GetName()); diff --git a/src/game/Level2.cpp b/src/game/Level2.cpp index 27ff8c291..d71300111 100644 --- a/src/game/Level2.cpp +++ b/src/game/Level2.cpp @@ -668,6 +668,10 @@ bool ChatHandler::HandleModifyRepCommand(const char * args) return false; } + // check online security + if (HasLowerSecurity(target, 0)) + return false; + char* factionTxt = extractKeyFromLink((char*)args,"Hfaction"); if(!factionTxt) return false; @@ -1239,6 +1243,11 @@ bool ChatHandler::HandleDeMorphCommand(const char* /*args*/) if(!target) target = m_session->GetPlayer(); + + // check online security + else if (target->GetTypeId() == TYPEID_PLAYER && HasLowerSecurity((Player*)target, 0)) + return false; + target->DeMorph(); return true; @@ -1632,6 +1641,10 @@ bool ChatHandler::HandleMorphCommand(const char* args) if(!target) target = m_session->GetPlayer(); + // check online security + else if (target->GetTypeId() == TYPEID_PLAYER && HasLowerSecurity((Player*)target, 0)) + return false; + target->SetDisplayId(display_id); return true; @@ -1700,6 +1713,10 @@ bool ChatHandler::HandleKickPlayerCommand(const char *args) return false; } + // check online security + if (HasLowerSecurity(player, 0)) + return false; + player->GetSession()->KickPlayer(); } else @@ -1719,6 +1736,11 @@ bool ChatHandler::HandleKickPlayerCommand(const char *args) return false; } + // check online security + Player* player = ObjectAccessor::Instance().FindPlayerByName(name.c_str()); + if (player && HasLowerSecurity(player, 0)) + return false; + if(sWorld.KickPlayer(name)) { PSendSysMessage(LANG_COMMAND_KICKMESSAGE,name.c_str()); @@ -1789,6 +1811,10 @@ bool ChatHandler::HandlePInfoCommand(const char* args) // get additional information from Player object if(target) { + // check online security + if (HasLowerSecurity(target, 0)) + return false; + targetGUID = target->GetGUID(); name = target->GetName(); // re-read for case getSelectedPlayer() target accId = target->GetSession()->GetAccountId(); @@ -1800,6 +1826,10 @@ bool ChatHandler::HandlePInfoCommand(const char* args) // get additional information from DB else { + // check offline security + if (HasLowerSecurity(NULL, targetGUID)) + return false; + // 0 QueryResult *result = CharacterDatabase.PQuery("SELECT totaltime FROM characters WHERE guid = '%u'", GUID_LOPART(targetGUID)); if (!result) @@ -3343,12 +3373,20 @@ bool ChatHandler::HandleRenameCommand(const char* args) if(target) { + // check online security + if (HasLowerSecurity(target, 0)) + return false; + PSendSysMessage(LANG_RENAME_PLAYER, target->GetName()); target->SetAtLoginFlag(AT_LOGIN_RENAME); CharacterDatabase.PExecute("UPDATE characters SET at_login = at_login | '1' WHERE guid = '%u'", target->GetGUIDLow()); } else { + // check offline security + if (HasLowerSecurity(NULL, targetGUID)) + return false; + PSendSysMessage(LANG_RENAME_PLAYER_GUID, oldname.c_str(), GUID_LOPART(targetGUID)); CharacterDatabase.PExecute("UPDATE characters SET at_login = at_login | '1' WHERE guid = '%u'", GUID_LOPART(targetGUID)); } @@ -3517,6 +3555,10 @@ bool ChatHandler::HandleAddHonorCommand(const char* args) return false; } + // check online security + if (HasLowerSecurity(target, 0)) + return false; + uint32 amount = (uint32)atoi(args); target->RewardHonor(NULL, 1, amount); return true; @@ -3532,6 +3574,10 @@ bool ChatHandler::HandleHonorAddKillCommand(const char* /*args*/) return false; } + // check online security + if (target->GetTypeId() == TYPEID_PLAYER && HasLowerSecurity((Player*)target, 0)) + return false; + m_session->GetPlayer()->RewardHonor(target, 1); return true; } @@ -3546,6 +3592,10 @@ bool ChatHandler::HandleUpdateHonorFieldsCommand(const char* /*args*/) return false; } + // check online security + if (HasLowerSecurity(target, 0)) + return false; + target->UpdateHonorFields(); return true; } @@ -3788,6 +3838,10 @@ bool ChatHandler::HandleCombatStopCommand(const char* args) player = m_session->GetPlayer(); } + // check online security + if (HasLowerSecurity(player, 0)) + return false; + player->CombatStop(); player->getHostilRefManager().deleteReferences(); return true; @@ -4025,6 +4079,10 @@ bool ChatHandler::HandleRepairitemsCommand(const char* /*args*/) return false; } + // check online security + if (HasLowerSecurity(target, 0)) + return false; + // Repair items target->DurabilityRepairAll(false, 0, false); @@ -4048,6 +4106,10 @@ bool ChatHandler::HandleWaterwalkCommand(const char* args) return false; } + // check online security + if (HasLowerSecurity(player, 0)) + return false; + if (strncmp(args, "on", 3) == 0) player->SetMovement(MOVE_WATER_WALK); // ON else if (strncmp(args, "off", 4) == 0) diff --git a/src/game/World.cpp b/src/game/World.cpp index c4771d945..c62d4cafd 100644 --- a/src/game/World.cpp +++ b/src/game/World.cpp @@ -796,6 +796,7 @@ void World::LoadConfigSettings(bool reload) sLog.outError("GM.StartLevel (%i) must be in range 1..%u. Set to %u.", m_configs[CONFIG_START_GM_LEVEL], MAX_LEVEL, MAX_LEVEL); m_configs[CONFIG_START_GM_LEVEL] = MAX_LEVEL; } + m_configs[CONFIG_GM_LOWER_SECURITY] = sConfig.GetBoolDefault("GM.LowerSecurity", false); m_configs[CONFIG_GROUP_VISIBILITY] = sConfig.GetIntDefault("Visibility.GroupMode",0); diff --git a/src/game/World.h b/src/game/World.h index 5ef3a9526..b1eecfca2 100644 --- a/src/game/World.h +++ b/src/game/World.h @@ -129,6 +129,7 @@ enum WorldConfigs CONFIG_GM_IN_WHO_LIST, CONFIG_GM_LOG_TRADE, CONFIG_START_GM_LEVEL, + CONFIG_GM_LOWER_SECURITY, CONFIG_GROUP_VISIBILITY, CONFIG_MAIL_DELIVERY_DELAY, CONFIG_UPTIME_UPDATE, diff --git a/src/mangosd/mangosd.conf.dist.in b/src/mangosd/mangosd.conf.dist.in index 3e5cc502a..c63ef9d4c 100644 --- a/src/mangosd/mangosd.conf.dist.in +++ b/src/mangosd/mangosd.conf.dist.in @@ -870,6 +870,11 @@ Channel.SilentlyGMJoin = 0 # GM starting level (1-100) # Default: 1 # +# GM.LowerSecurity +# Disallow a lower security member to interact with a higher one using commands +# Default: 0 (disable) +# 1 (enable) +# ################################################################################################################### GM.LoginState = 2 @@ -880,6 +885,7 @@ GM.InGMList = 0 GM.InWhoList = 0 GM.LogTrade = 1 GM.StartLevel = 1 +GM.LowerSecurity = 0 ################################################################################################################### # VISIBILITY AND RADIUSES diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 6c76b9f2f..ba1641164 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 "6981" + #define REVISION_NR "6982" #endif // __REVISION_NR_H__ From 71c67a5202430c956a9564f3cb7b317f6208e469 Mon Sep 17 00:00:00 2001 From: VladimirMangos Date: Tue, 30 Dec 2008 03:12:35 +0300 Subject: [PATCH 032/145] [6983] Revert [6978]. Useless for master branch. But ported to mangos-0.12 version will useful at branch. * Remove unused arg of Unit::RollMeleeOutcomeAgainst and cleanup related code: Block crit implemented for spell by another way, * Also comment out SPELL_AURA_IGNORE_COMBAT_RESULT aura check for block: not exist currently spell with this aura for bloc case. --- src/game/Unit.cpp | 23 +++++++---------------- src/game/Unit.h | 5 +++-- src/shared/revision_nr.h | 2 +- 3 files changed, 11 insertions(+), 19 deletions(-) diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index eb3926c42..55b12e3b7 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -1904,10 +1904,10 @@ MeleeHitOutcome Unit::RollMeleeOutcomeAgainst(const Unit *pVictim, WeaponAttackT // Useful if want to specify crit & miss chances for melee, else it could be removed DEBUG_LOG("MELEE OUTCOME: miss %f crit %f dodge %f parry %f block %f", miss_chance,crit_chance,dodge_chance,parry_chance,block_chance); - return RollMeleeOutcomeAgainst(pVictim, attType, int32(crit_chance*100), int32(miss_chance*100), int32(dodge_chance*100),int32(parry_chance*100),int32(block_chance*100), false); + return RollMeleeOutcomeAgainst(pVictim, attType, int32(crit_chance*100), int32(miss_chance*100), int32(dodge_chance*100),int32(parry_chance*100),int32(block_chance*100)); } -MeleeHitOutcome Unit::RollMeleeOutcomeAgainst (const Unit *pVictim, WeaponAttackType attType, int32 crit_chance, int32 miss_chance, int32 dodge_chance, int32 parry_chance, int32 block_chance, bool SpellCasted ) const +MeleeHitOutcome Unit::RollMeleeOutcomeAgainst (const Unit *pVictim, WeaponAttackType attType, int32 crit_chance, int32 miss_chance, int32 dodge_chance, int32 parry_chance, int32 block_chance) const { if(pVictim->GetTypeId()==TYPEID_UNIT && ((Creature*)pVictim)->IsInEvadeMode()) return MELEE_HIT_EVADE; @@ -2001,16 +2001,6 @@ MeleeHitOutcome Unit::RollMeleeOutcomeAgainst (const Unit *pVictim, WeaponAttack && ((tmp -= skillBonus) > 0) && (roll < (sum += tmp))) { - // Critical chance - tmp = crit_chance + skillBonus2; - if ( GetTypeId() == TYPEID_PLAYER && SpellCasted && tmp > 0 ) - { - if ( roll_chance_i(tmp/100)) - { - DEBUG_LOG ("RollMeleeOutcomeAgainst: BLOCKED CRIT"); - return MELEE_HIT_BLOCK_CRIT; - } - } DEBUG_LOG ("RollMeleeOutcomeAgainst: BLOCK <%d, %d)", sum-tmp, sum); return MELEE_HIT_BLOCK; } @@ -2027,7 +2017,7 @@ MeleeHitOutcome Unit::RollMeleeOutcomeAgainst (const Unit *pVictim, WeaponAttack } // Max 40% chance to score a glancing blow against mobs that are higher level (can do only players and pets and not with ranged weapon) - if( attType != RANGED_ATTACK && !SpellCasted && + if( attType != RANGED_ATTACK && (GetTypeId() == TYPEID_PLAYER || ((Creature*)this)->isPet()) && pVictim->GetTypeId() != TYPEID_PLAYER && !((Creature*)pVictim)->isPet() && getLevel() < pVictim->getLevelForTarget(this) ) @@ -2046,8 +2036,7 @@ MeleeHitOutcome Unit::RollMeleeOutcomeAgainst (const Unit *pVictim, WeaponAttack } } - if ((GetTypeId()!=TYPEID_PLAYER && !(((Creature*)this)->GetCreatureInfo()->flags_extra & CREATURE_FLAG_EXTRA_NO_CRUSH) && !((Creature*)this)->isPet()) && - !SpellCasted /*Only autoattack can be crashing blow*/ ) + if ((GetTypeId()!=TYPEID_PLAYER && !(((Creature*)this)->GetCreatureInfo()->flags_extra & CREATURE_FLAG_EXTRA_NO_CRUSH) && !((Creature*)this)->isPet())) { // mobs can score crushing blows if they're 3 or more levels above victim // or when their weapon skill is 15 or more above victim's defense skill @@ -2160,15 +2149,17 @@ bool Unit::isSpellBlocked(Unit *pVictim, SpellEntry const *spellProto, WeaponAtt { if (pVictim->HasInArc(M_PI,this)) { + /* Currently not exist spells with ignore block // Ignore combat result aura (parry/dodge check on prepare) AuraList const& ignore = GetAurasByType(SPELL_AURA_IGNORE_COMBAT_RESULT); for(AuraList::const_iterator i = ignore.begin(); i != ignore.end(); ++i) { if (!(*i)->isAffectedOnSpell(spellProto)) continue; - if ((*i)->GetModifier()->m_miscvalue == MELEE_HIT_BLOCK) + if ((*i)->GetModifier()->m_miscvalue == ) return false; } + */ float blockChance = GetUnitBlockChance(); blockChance += (GetWeaponSkillValue(attackType) - pVictim->GetMaxSkillValueForLevel() )*0.04; if (roll_chance_f(blockChance)) diff --git a/src/game/Unit.h b/src/game/Unit.h index 77d9e3b35..383993c22 100644 --- a/src/game/Unit.h +++ b/src/game/Unit.h @@ -584,8 +584,9 @@ struct DiminishingReturn enum MeleeHitOutcome { MELEE_HIT_EVADE, MELEE_HIT_MISS, MELEE_HIT_DODGE, MELEE_HIT_BLOCK, MELEE_HIT_PARRY, - MELEE_HIT_GLANCING, MELEE_HIT_CRIT, MELEE_HIT_CRUSHING, MELEE_HIT_NORMAL, MELEE_HIT_BLOCK_CRIT + MELEE_HIT_GLANCING, MELEE_HIT_CRIT, MELEE_HIT_CRUSHING, MELEE_HIT_NORMAL }; + struct CleanDamage { CleanDamage(uint32 _damage, WeaponAttackType _attackType, MeleeHitOutcome _hitOutCome) : @@ -946,7 +947,7 @@ class MANGOS_DLL_SPEC Unit : public WorldObject float GetPPMProcChance(uint32 WeaponSpeed, float PPM) const; MeleeHitOutcome RollMeleeOutcomeAgainst (const Unit *pVictim, WeaponAttackType attType) const; - MeleeHitOutcome RollMeleeOutcomeAgainst (const Unit *pVictim, WeaponAttackType attType, int32 crit_chance, int32 miss_chance, int32 dodge_chance, int32 parry_chance, int32 block_chance, bool SpellCasted ) const; + MeleeHitOutcome RollMeleeOutcomeAgainst (const Unit *pVictim, WeaponAttackType attType, int32 crit_chance, int32 miss_chance, int32 dodge_chance, int32 parry_chance, int32 block_chance) const; bool isVendor() const { return HasFlag( UNIT_NPC_FLAGS, UNIT_NPC_FLAG_VENDOR ); } bool isTrainer() const { return HasFlag( UNIT_NPC_FLAGS, UNIT_NPC_FLAG_TRAINER ); } diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index ba1641164..c7620c9cf 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 "6982" + #define REVISION_NR "6983" #endif // __REVISION_NR_H__ From 3f397ed035501e89a9665c575eacbffa0f5d111f Mon Sep 17 00:00:00 2001 From: VladimirMangos Date: Tue, 30 Dec 2008 03:58:52 +0300 Subject: [PATCH 033/145] [6984] Update crushing blow chance calculation for 3.0.3. Required 4 level difference. Player also can crushing blow if controlled and then considered as creature. --- src/game/Unit.cpp | 10 +++++++--- src/shared/revision_nr.h | 2 +- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index 55b12e3b7..63385c0d3 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -2036,10 +2036,14 @@ MeleeHitOutcome Unit::RollMeleeOutcomeAgainst (const Unit *pVictim, WeaponAttack } } - if ((GetTypeId()!=TYPEID_PLAYER && !(((Creature*)this)->GetCreatureInfo()->flags_extra & CREATURE_FLAG_EXTRA_NO_CRUSH) && !((Creature*)this)->isPet())) + // mobs can score crushing blows if they're 4 or more levels above victim + if (getLevelForTarget(pVictim) >= pVictim->getLevelForTarget(this) + 4 && + // can be from by creature (if can) or from controlled player that considered as creature + (GetTypeId()!=TYPEID_PLAYER && !((Creature*)this)->isPet() && + !(((Creature*)this)->GetCreatureInfo()->flags_extra & CREATURE_FLAG_EXTRA_NO_CRUSH) || + GetTypeId()==TYPEID_PLAYER && GetCharmerOrOwnerGUID())) { - // mobs can score crushing blows if they're 3 or more levels above victim - // or when their weapon skill is 15 or more above victim's defense skill + // when their weapon skill is 15 or more above victim's defense skill tmp = victimDefenseSkill; int32 tmpmax = victimMaxSkillValueForLevel; // having defense above your maximum (from items, talents etc.) has no effect diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index c7620c9cf..04e5279c8 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 "6983" + #define REVISION_NR "6984" #endif // __REVISION_NR_H__ From 0db6b31b70c318e8f87d06616ec102f68107b9b6 Mon Sep 17 00:00:00 2001 From: DiSlord Date: Tue, 30 Dec 2008 04:21:07 +0300 Subject: [PATCH 034/145] [6985] Fix crit chance calc Signed-off-by: DiSlord --- src/game/Unit.cpp | 7 ++++--- src/shared/revision_nr.h | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index 63385c0d3..0432b8006 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -1920,7 +1920,6 @@ MeleeHitOutcome Unit::RollMeleeOutcomeAgainst (const Unit *pVictim, WeaponAttack // bonus from skills is 0.04% int32 skillBonus = 4 * ( attackerWeaponSkill - victimMaxSkillValueForLevel ); - int32 skillBonus2 = 4 * ( attackerMaxSkillValueForLevel - victimDefenseSkill ); int32 sum = 0, tmp = 0; int32 roll = urand (0, 10000); @@ -2008,7 +2007,7 @@ MeleeHitOutcome Unit::RollMeleeOutcomeAgainst (const Unit *pVictim, WeaponAttack } // Critical chance - tmp = crit_chance + skillBonus2; + tmp = crit_chance; if (tmp > 0 && roll < (sum += tmp)) { @@ -2653,6 +2652,9 @@ float Unit::GetUnitCriticalChance(WeaponAttackType attackType, const Unit *pVict crit -= ((Player*)pVictim)->GetRatingBonusValue(CR_CRIT_TAKEN_MELEE); } + // Apply crit chance from defence skill + crit += (int32(GetMaxSkillValueForLevel(pVictim)) - int32(pVictim->GetDefenseSkillValue(this))) * 0.04f; + if (crit < 0.0f) crit = 0.0f; return crit; @@ -7250,7 +7252,6 @@ bool Unit::isSpellCrit(Unit *pVictim, SpellEntry const *spellProto, SpellSchoolM if (pVictim) { crit_chance = GetUnitCriticalChance(attackType, pVictim); - crit_chance+= (int32(GetMaxSkillValueForLevel(pVictim)) - int32(pVictim->GetDefenseSkillValue(this))) * 0.04f; crit_chance+= GetTotalAuraModifierByMiscMask(SPELL_AURA_MOD_SPELL_CRIT_CHANCE_SCHOOL, schoolMask); } break; diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 04e5279c8..e406aaf4b 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 "6984" + #define REVISION_NR "6985" #endif // __REVISION_NR_H__ From 2b7004a0ab1abd61dd6f9890a1dfb7f1a7305bb3 Mon Sep 17 00:00:00 2001 From: yad02 Date: Tue, 30 Dec 2008 18:37:17 +0300 Subject: [PATCH 035/145] [6986] Remove outdated for 3.0.3 area mount limitation. Signed-off-by: VladimirMangos --- src/game/Player.cpp | 5 +---- src/game/Spell.cpp | 3 --- src/shared/revision_nr.h | 2 +- 3 files changed, 2 insertions(+), 8 deletions(-) diff --git a/src/game/Player.cpp b/src/game/Player.cpp index 5457be6c6..6db136d6c 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -18674,11 +18674,8 @@ void Player::UpdateAreaDependentAuras( uint32 newArea ) ++iter; } - // unmount if enter in this subzone - if( newArea == 35) - RemoveSpellsCausingAura(SPELL_AURA_MOUNTED); // Dragonmaw Illusion - else if( newArea == 3759 || newArea == 3966 || newArea == 3939 ) + if( newArea == 3759 || newArea == 3966 || newArea == 3939 ) { if( GetDummyAura(40214) ) { diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp index 3d4e80c52..1ba090982 100644 --- a/src/game/Spell.cpp +++ b/src/game/Spell.cpp @@ -4278,9 +4278,6 @@ uint8 Spell::CanCast(bool strict) if (m_caster->GetTypeId()==TYPEID_PLAYER && !sMapStore.LookupEntry(m_caster->GetMapId())->IsMountAllowed() && !m_IsTriggeredSpell && !m_spellInfo->AreaId) return SPELL_FAILED_NO_MOUNTS_ALLOWED; - if (m_caster->GetAreaId()==35) - return SPELL_FAILED_NO_MOUNTS_ALLOWED; - ShapeshiftForm form = m_caster->m_form; if( form == FORM_CAT || form == FORM_TREE || form == FORM_TRAVEL || form == FORM_AQUA || form == FORM_BEAR || form == FORM_DIREBEAR || diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index e406aaf4b..8aa81ee4b 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 "6985" + #define REVISION_NR "6986" #endif // __REVISION_NR_H__ From 9a411858d0879c2a1c97b8e3bc4aadbeb536e007 Mon Sep 17 00:00:00 2001 From: arrai Date: Tue, 30 Dec 2008 19:16:08 +0100 Subject: [PATCH 036/145] [6987] Implemented aura dependent creature target prioritization more correctly --- src/game/ThreatManager.cpp | 2 +- src/game/Unit.cpp | 10 ++++++++++ src/game/Unit.h | 1 + src/shared/revision_nr.h | 2 +- 4 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/game/ThreatManager.cpp b/src/game/ThreatManager.cpp index 069115493..e3f496133 100644 --- a/src/game/ThreatManager.cpp +++ b/src/game/ThreatManager.cpp @@ -278,7 +278,7 @@ HostilReference* ThreatContainer::selectNextVictim(Creature* pAttacker, HostilRe // some units are prefered in comparison to others if(iter != lastRef && (target->IsImmunedToDamage(pAttacker->GetMeleeDamageSchoolMask(), false) || - target->hasUnitState(UNIT_STAT_CONFUSED | UNIT_STAT_FLEEING) + target->hasNegativeAuraWithInterruptFlag(AURA_INTERRUPT_FLAG_DAMAGE) ) ) { // current victim is a second choice target, so don't compare threat with it below diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index 0432b8006..f660b341e 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -10279,6 +10279,16 @@ Unit* Unit::SelectNearbyTarget() const return *tcIter; } +bool Unit::hasNegativeAuraWithInterruptFlag(uint32 flag) +{ + for (AuraMap::iterator iter = m_Auras.begin(); iter != m_Auras.end(); ++iter) + { + if (!iter->second->IsPositive() && iter->second->GetSpellProto()->AuraInterruptFlags & flag) + return true; + } + return false; +} + void Unit::ApplyAttackTimePercentMod( WeaponAttackType att,float val, bool apply ) { if(val > 0) diff --git a/src/game/Unit.h b/src/game/Unit.h index 383993c22..c2bc79099 100644 --- a/src/game/Unit.h +++ b/src/game/Unit.h @@ -824,6 +824,7 @@ class MANGOS_DLL_SPEC Unit : public WorldObject void CombatStop(bool cast = false); void CombatStopWithPets(bool cast = false); Unit* SelectNearbyTarget() const; + bool hasNegativeAuraWithInterruptFlag(uint32 flag); void addUnitState(uint32 f) { m_state |= f; } bool hasUnitState(const uint32 f) const { return (m_state & f); } diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 8aa81ee4b..4f70bfda4 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 "6986" + #define REVISION_NR "6987" #endif // __REVISION_NR_H__ From 61063ad94c1e1c59008862aaf38ffab485c3c5f7 Mon Sep 17 00:00:00 2001 From: megamage Date: Wed, 31 Dec 2008 00:24:28 +0300 Subject: [PATCH 037/145] [6988] Recheck UNIT_FLAG_NON_ATTACKABLE for delayed spells Signed-off-by: DiSlord --- src/game/Spell.cpp | 9 +++++++++ src/shared/revision_nr.h | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp index 1ba090982..c0eb85382 100644 --- a/src/game/Spell.cpp +++ b/src/game/Spell.cpp @@ -1067,6 +1067,15 @@ void Spell::DoSpellHitOnUnit(Unit *unit, const uint32 effectMask) if( m_caster != unit ) { + // Recheck UNIT_FLAG_NON_ATTACKABLE for delayed spells + if (m_spellInfo->speed > 0.0f && + unit->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE) && + unit->GetCharmerOrOwnerGUID() != m_caster->GetGUID()) + { + m_caster->SendSpellMiss(unit, m_spellInfo->Id, SPELL_MISS_EVADE); + return; + } + if( !m_caster->IsFriendlyTo(unit) ) { // for delayed spells ignore not visible explicit target diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 4f70bfda4..291d0b1f1 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 "6987" + #define REVISION_NR "6988" #endif // __REVISION_NR_H__ From 151e9e7012a85638cf06e6fec6e23d7e6a3d98c7 Mon Sep 17 00:00:00 2001 From: VladimirMangos Date: Wed, 31 Dec 2008 00:45:22 +0300 Subject: [PATCH 038/145] [6989] Always initilize WaypointBehavior pointer to NULL in WaypointNode. Small code Cleanup. --- src/game/WaypointManager.cpp | 17 +++++++++-------- src/game/WaypointManager.h | 2 +- src/shared/revision_nr.h | 2 +- 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/game/WaypointManager.cpp b/src/game/WaypointManager.cpp index 7478f8efe..0fefe4429 100644 --- a/src/game/WaypointManager.cpp +++ b/src/game/WaypointManager.cpp @@ -300,7 +300,8 @@ void WaypointManager::CheckTextsExistance(std::set& ids) { for (int i = 0; i < pmItr->second.size(); ++i) { - if (!pmItr->second[i].behavior) + WaypointBehavior* be = pmItr->second[i].behavior; + if (!be) continue; // Now we check text existence and put all zero texts ids to the end of array @@ -309,29 +310,29 @@ void WaypointManager::CheckTextsExistance(std::set& ids) int zeroCount = 0; for (int j = 0; j < MAX_WAYPOINT_TEXT; ++j) { - if (!pmItr->second[i].behavior->textid[j]) + if (!be->textid[j]) { ++zeroCount; continue; } else { - if (!objmgr.GetMangosStringLocale(pmItr->second[i].behavior->textid[j])) + if (!objmgr.GetMangosStringLocale(be->textid[j])) { - sLog.outErrorDb("ERROR: Some waypoint has textid%u with not existing %u text.", j, pmItr->second[i].behavior->textid[j]); - pmItr->second[i].behavior->textid[j] = 0; + sLog.outErrorDb("ERROR: Some waypoint has textid%u with not existing %u text.", j, be->textid[j]); + be->textid[j] = 0; ++zeroCount; continue; } else - ids.erase(pmItr->second[i].behavior->textid[j]); + ids.erase(be->textid[j]); // Shifting check if (zeroCount) { // Correct textid but some zeros leading, so move it forward. - pmItr->second[i].behavior->textid[j-zeroCount] = pmItr->second[i].behavior->textid[j]; - pmItr->second[i].behavior->textid[j] = 0; + be->textid[j-zeroCount] = be->textid[j]; + be->textid[j] = 0; } } } diff --git a/src/game/WaypointManager.h b/src/game/WaypointManager.h index 939d7f2af..3a6951643 100644 --- a/src/game/WaypointManager.h +++ b/src/game/WaypointManager.h @@ -45,7 +45,7 @@ struct WaypointNode float orientation; uint32 delay; WaypointBehavior * behavior; - WaypointNode() {} + WaypointNode() : x(0.0f), y(0.0f), z(0.0f), orientation(0.0f), delay(0), behavior(NULL) {} WaypointNode(float _x, float _y, float _z, float _o, uint32 _delay, WaypointBehavior * _behavior) : x(_x), y(_y), z(_z), orientation(_o), delay(_delay), behavior(_behavior) {} }; diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 291d0b1f1..b46aded87 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 "6988" + #define REVISION_NR "6989" #endif // __REVISION_NR_H__ From f5c4935ec35d7b72e1df4769919da028f57552d6 Mon Sep 17 00:00:00 2001 From: DiSlord Date: Wed, 31 Dec 2008 01:12:18 +0300 Subject: [PATCH 039/145] [6990] Check creatures flags_extra for disable melee spells block/parry Signed-off-by: DiSlord --- src/game/Unit.cpp | 14 +++++++++++++- src/shared/revision_nr.h | 2 +- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index f660b341e..f62caaac9 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -2163,6 +2163,12 @@ bool Unit::isSpellBlocked(Unit *pVictim, SpellEntry const *spellProto, WeaponAtt return false; } */ + + // Check creatures flags_extra for disable block + if(pVictim->GetTypeId()==TYPEID_UNIT && + ((Creature*)pVictim)->GetCreatureInfo()->flags_extra & CREATURE_FLAG_EXTRA_NO_BLOCK ) + return false; + float blockChance = GetUnitBlockChance(); blockChance += (GetWeaponSkillValue(attackType) - pVictim->GetMaxSkillValueForLevel() )*0.04; if (roll_chance_f(blockChance)) @@ -2257,7 +2263,13 @@ SpellMissInfo Unit::MeleeSpellHitResult(Unit *pVictim, SpellEntry const *spell) // Can`t parry canParry = false; } - + // Check creatures flags_extra for disable parry + if(pVictim->GetTypeId()==TYPEID_UNIT) + { + uint32 flagEx = ((Creature*)pVictim)->GetCreatureInfo()->flags_extra; + if( flagEx & CREATURE_FLAG_EXTRA_NO_PARRY ) + canParry = false; + } // Ignore combat result aura AuraList const& ignore = GetAurasByType(SPELL_AURA_IGNORE_COMBAT_RESULT); for(AuraList::const_iterator i = ignore.begin(); i != ignore.end(); ++i) diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index b46aded87..8336887a8 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 "6989" + #define REVISION_NR "6990" #endif // __REVISION_NR_H__ From 321ea2d9b62801e87588d2f980445a3513207900 Mon Sep 17 00:00:00 2001 From: ApoC Date: Wed, 31 Dec 2008 00:38:32 +0100 Subject: [PATCH 040/145] [6991] Fixed possible typo in setting cooldown for spells in same spell category. Signed-off-by: ApoC --- src/game/Spell.cpp | 2 +- src/shared/revision_nr.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp index c0eb85382..a778ecc9e 100644 --- a/src/game/Spell.cpp +++ b/src/game/Spell.cpp @@ -2479,7 +2479,7 @@ void Spell::SendSpellCooldown() if(*i_scset == m_spellInfo->Id) // skip main spell, already handled above continue; - _player->AddSpellCooldown(m_spellInfo->Id, m_CastItem ? m_CastItem->GetEntry() : 0, catrecTime); + _player->AddSpellCooldown(*i_scset, m_CastItem ? m_CastItem->GetEntry() : 0, catrecTime); } } } diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 8336887a8..391b89009 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 "6990" + #define REVISION_NR "6991" #endif // __REVISION_NR_H__ From 695a630cf384140767e36aa48c6ff2a6b3342cfe Mon Sep 17 00:00:00 2001 From: VladimirMangos Date: Wed, 31 Dec 2008 12:33:49 +0300 Subject: [PATCH 041/145] [6992] More strong checking to prevent stacking passive auras. This fix unexpected statking 16252 and ranks. Also this checking will prevent staking talent ranks if it will casted at character by some reason in any cases. TODO: non-talent passive spells like 16252 or 31785 with ranks still as before not reapplied in lesser rank form if higher rank unlearned. But this possible only at .unlearn command use and required re-loginning for activation lesser rank spell. --- src/game/Player.cpp | 2 ++ src/game/SpellMgr.h | 9 +++++++++ src/game/Unit.cpp | 31 +++++++++++++------------------ src/shared/revision_nr.h | 2 +- 4 files changed, 25 insertions(+), 19 deletions(-) diff --git a/src/game/Player.cpp b/src/game/Player.cpp index 6db136d6c..b65577b53 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -3008,6 +3008,8 @@ void Player::removeSpell(uint32 spell_id, bool disabled) for(SpellLearnSpellMap::const_iterator itr2 = spell_begin; itr2 != spell_end; ++itr2) removeSpell(itr2->second.spell, disabled); + + // TODO: recast if need lesser ranks spell for passive with IsPassiveSpellStackableWithRanks } void Player::RemoveArenaSpellCooldowns() diff --git a/src/game/SpellMgr.h b/src/game/SpellMgr.h index c5d005b98..24b277510 100644 --- a/src/game/SpellMgr.h +++ b/src/game/SpellMgr.h @@ -315,6 +315,15 @@ int32 CompareAuraRanks(uint32 spellId_1, uint32 effIndex_1, uint32 spellId_2, ui bool IsSingleFromSpellSpecificPerCaster(uint32 spellSpec1,uint32 spellSpec2); bool IsPassiveSpell(uint32 spellId); +inline bool IsPassiveSpellStackableWithRanks(SpellEntry const* spellProto) +{ + if(!IsPassiveSpell(spellProto->Id)) + return false; + + return !IsSpellHaveEffect(spellProto,SPELL_EFFECT_APPLY_AURA); +} + + inline bool IsDeathPersistentSpell(SpellEntry const *spellInfo) { switch(spellInfo->Id) diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index f62caaac9..e01d6ac92 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -68,20 +68,6 @@ static bool isNonTriggerAura[TOTAL_AURAS]; // Prepare lists static bool procPrepared = InitTriggerAuraData(); -bool IsPassiveStackableSpell( uint32 spellId ) -{ - if(!IsPassiveSpell(spellId)) - return false; - - SpellEntry const* spellProto = sSpellStore.LookupEntry(spellId); - if(!spellProto) - return false; - if (spellProto->procFlags) - return false; - - return true; -} - Unit::Unit() : WorldObject(), i_motionMaster(this), m_ThreatManager(this), m_HostilRefManager(this) { @@ -3256,9 +3242,8 @@ bool Unit::AddAura(Aura *Aur) } } - // passive auras stack with all (except passive spell proc auras) - if ((!Aur->IsPassive() || !IsPassiveStackableSpell(Aur->GetId())) && - !(Aur->GetId() == 20584 || Aur->GetId() == 8326)) + // passive auras not stacable with other ranks + if (!IsPassiveSpellStackableWithRanks(aurSpellInfo)) { if (!RemoveNoStackAurasDueToAura(Aur)) { @@ -3353,6 +3338,14 @@ bool Unit::RemoveNoStackAurasDueToAura(Aura *Aur) return false; uint32 spellId = Aur->GetId(); + + // passive spell special case (only non stackable with ranks) + if(IsPassiveSpell(spellId)) + { + if(IsPassiveSpellStackableWithRanks(spellProto)) + return true; + } + uint32 effIndex = Aur->GetEffIndex(); SpellSpecific spellId_spec = GetSpellSpecific(spellId); @@ -3371,9 +3364,11 @@ bool Unit::RemoveNoStackAurasDueToAura(Aura *Aur) uint32 i_spellId = i_spellProto->Id; + // early checks that spellId is passive non stackable spell if(IsPassiveSpell(i_spellId)) { - if(IsPassiveStackableSpell(i_spellId)) + // passive non-stackable spells not stackable only for same caster + if(Aur->GetCasterGUID()!=i->second->GetCasterGUID()) continue; // passive non-stackable spells not stackable only with another rank of same spell diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 391b89009..1382197f9 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 "6991" + #define REVISION_NR "6992" #endif // __REVISION_NR_H__ From 18fb4db8f2c5f4c5d7a3469a5c8be26ba7b7a33f Mon Sep 17 00:00:00 2001 From: VladimirMangos Date: Wed, 31 Dec 2008 14:09:49 +0300 Subject: [PATCH 042/145] [6993] Fixing FFA PvP player flags for 3.0.3 --- src/game/CharacterHandler.cpp | 2 +- src/game/MiscHandler.cpp | 2 +- src/game/Player.cpp | 21 +++++++++++---------- src/game/Player.h | 14 ++++++++------ src/game/Unit.cpp | 4 ++-- src/shared/revision_nr.h | 2 +- 6 files changed, 24 insertions(+), 21 deletions(-) diff --git a/src/game/CharacterHandler.cpp b/src/game/CharacterHandler.cpp index 4589dc60e..0f04318e6 100644 --- a/src/game/CharacterHandler.cpp +++ b/src/game/CharacterHandler.cpp @@ -809,7 +809,7 @@ void WorldSession::HandlePlayerLogin(LoginQueryHolder * holder) // Set FFA PvP for non GM in non-rest mode if(sWorld.IsFFAPvPRealm() && !pCurrChar->isGameMaster() && !pCurrChar->HasFlag(PLAYER_FLAGS,PLAYER_FLAGS_RESTING) ) - pCurrChar->SetFlag(PLAYER_FLAGS,PLAYER_FLAGS_FFA_PVP); + pCurrChar->SetByteFlag(UNIT_FIELD_BYTES_2, 1, UNIT_BYTE2_FLAG_FFA_PVP); if(pCurrChar->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_CONTESTED_PVP)) pCurrChar->SetContestedPvP(); diff --git a/src/game/MiscHandler.cpp b/src/game/MiscHandler.cpp index 3eed7737f..54a2ecbe6 100644 --- a/src/game/MiscHandler.cpp +++ b/src/game/MiscHandler.cpp @@ -808,7 +808,7 @@ void WorldSession::HandleAreaTriggerOpcode(WorldPacket & recv_data) GetPlayer()->SetRestType(REST_TYPE_IN_TAVERN); if(sWorld.IsFFAPvPRealm()) - GetPlayer()->RemoveFlag(PLAYER_FLAGS,PLAYER_FLAGS_FFA_PVP); + GetPlayer()->RemoveByteFlag(UNIT_FIELD_BYTES_2, 1, UNIT_BYTE2_FLAG_FFA_PVP); return; } diff --git a/src/game/Player.cpp b/src/game/Player.cpp index b65577b53..62cd36378 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -1983,7 +1983,7 @@ void Player::SetGameMaster(bool on) setFaction(35); SetFlag(PLAYER_FLAGS, PLAYER_FLAGS_GM); - RemoveFlag(PLAYER_FLAGS, PLAYER_FLAGS_FFA_PVP); + RemoveByteFlag(UNIT_FIELD_BYTES_2, 1, UNIT_BYTE2_FLAG_FFA_PVP); ResetContestedPvP(); getHostilRefManager().setOnlineOfflineState(false); @@ -1997,7 +1997,7 @@ void Player::SetGameMaster(bool on) // restore FFA PvP Server state if(sWorld.IsFFAPvPRealm()) - SetFlag(PLAYER_FLAGS,PLAYER_FLAGS_FFA_PVP); + SetByteFlag(UNIT_FIELD_BYTES_2, 1, UNIT_BYTE2_FLAG_FFA_PVP); // restore FFA PvP area state, remove not allowed for GM mounts UpdateArea(m_areaUpdateId); @@ -2372,9 +2372,10 @@ void Player::InitStatsForLevel(bool reapplyMods) SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE ); // must be set // cleanup player flags (will be re-applied if need at aura load), to avoid have ghost flag without ghost aura, for example. - RemoveFlag(PLAYER_FLAGS, PLAYER_FLAGS_AFK | PLAYER_FLAGS_DND | PLAYER_FLAGS_GM | PLAYER_FLAGS_GHOST | PLAYER_FLAGS_FFA_PVP); + RemoveFlag(PLAYER_FLAGS, PLAYER_FLAGS_AFK | PLAYER_FLAGS_DND | PLAYER_FLAGS_GM | PLAYER_FLAGS_GHOST); SetByteValue(UNIT_FIELD_BYTES_1, 2, 0x00); // one form stealth modified bytes + RemoveByteFlag(UNIT_FIELD_BYTES_2, 1, UNIT_BYTE2_FLAG_FFA_PVP | UNIT_BYTE2_FLAG_SANCTUARY); // restore if need some important flags SetUInt32Value(PLAYER_FIELD_BYTES2, 0 ); // flags empty by default @@ -6197,14 +6198,14 @@ void Player::UpdateArea(uint32 newArea) if(area && (area->flags & AREA_FLAG_ARENA)) { if(!isGameMaster()) - SetFlag(PLAYER_FLAGS, PLAYER_FLAGS_FFA_PVP); + SetByteFlag(UNIT_FIELD_BYTES_2, 1, UNIT_BYTE2_FLAG_FFA_PVP); } else { // remove ffa flag only if not ffapvp realm // removal in sanctuaries and capitals is handled in zone update - if(HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_FFA_PVP) && !sWorld.IsFFAPvPRealm()) - RemoveFlag(PLAYER_FLAGS, PLAYER_FLAGS_FFA_PVP); + if(HasByteFlag(UNIT_FIELD_BYTES_2, 1, UNIT_BYTE2_FLAG_FFA_PVP) && !sWorld.IsFFAPvPRealm()) + RemoveByteFlag(UNIT_FIELD_BYTES_2, 1, UNIT_BYTE2_FLAG_FFA_PVP); } UpdateAreaDependentAuras(newArea); @@ -6260,7 +6261,7 @@ void Player::UpdateZone(uint32 newZone) { SetByteFlag(UNIT_FIELD_BYTES_2, 1, UNIT_BYTE2_FLAG_SANCTUARY); if(sWorld.IsFFAPvPRealm()) - RemoveFlag(PLAYER_FLAGS,PLAYER_FLAGS_FFA_PVP); + RemoveByteFlag(UNIT_FIELD_BYTES_2, 1, UNIT_BYTE2_FLAG_FFA_PVP); } else { @@ -6274,7 +6275,7 @@ void Player::UpdateZone(uint32 newZone) InnEnter(time(0),GetMapId(),0,0,0); if(sWorld.IsFFAPvPRealm()) - RemoveFlag(PLAYER_FLAGS,PLAYER_FLAGS_FFA_PVP); + RemoveByteFlag(UNIT_FIELD_BYTES_2, 1, UNIT_BYTE2_FLAG_FFA_PVP); } else // anywhere else { @@ -6288,7 +6289,7 @@ void Player::UpdateZone(uint32 newZone) SetRestType(REST_TYPE_NO); if(sWorld.IsFFAPvPRealm()) - SetFlag(PLAYER_FLAGS,PLAYER_FLAGS_FFA_PVP); + SetByteFlag(UNIT_FIELD_BYTES_2, 1, UNIT_BYTE2_FLAG_FFA_PVP); } } else // not in tavern (leave city then) @@ -6298,7 +6299,7 @@ void Player::UpdateZone(uint32 newZone) // Set player to FFA PVP when not in rested environment. if(sWorld.IsFFAPvPRealm()) - SetFlag(PLAYER_FLAGS,PLAYER_FLAGS_FFA_PVP); + SetByteFlag(UNIT_FIELD_BYTES_2, 1, UNIT_BYTE2_FLAG_FFA_PVP); } } } diff --git a/src/game/Player.h b/src/game/Player.h index 60200d892..48fc02c82 100644 --- a/src/game/Player.h +++ b/src/game/Player.h @@ -417,16 +417,18 @@ enum PlayerFlags PLAYER_FLAGS_GM = 0x00000008, PLAYER_FLAGS_GHOST = 0x00000010, PLAYER_FLAGS_RESTING = 0x00000020, - PLAYER_FLAGS_FFA_PVP = 0x00000080, + PLAYER_FLAGS_UNK7 = 0x00000040, + PLAYER_FLAGS_UNK8 = 0x00000080, // pre-3.0.3 PLAYER_FLAGS_FFA_PVP flag for FFA PVP state PLAYER_FLAGS_CONTESTED_PVP = 0x00000100, // Player has been involved in a PvP combat and will be attacked by contested guards PLAYER_FLAGS_IN_PVP = 0x00000200, PLAYER_FLAGS_HIDE_HELM = 0x00000400, PLAYER_FLAGS_HIDE_CLOAK = 0x00000800, - PLAYER_FLAGS_UNK1 = 0x00001000, // played long time - PLAYER_FLAGS_UNK2 = 0x00002000, // played too long time - PLAYER_FLAGS_UNK3 = 0x00008000, // strange visual effect (2.0.1), looks like PLAYER_FLAGS_GHOST flag - PLAYER_FLAGS_UNK4 = 0x00010000, // pre-3.0.3 PLAYER_FLAGS_SANCTUARY flag for player entered sanctuary - PLAYER_FLAGS_UNK5 = 0x00020000, // taxi benchmark mode (on/off) (2.0.1) + PLAYER_FLAGS_UNK13 = 0x00001000, // played long time + PLAYER_FLAGS_UNK14 = 0x00002000, // played too long time + PLAYER_FLAGS_UNK15 = 0x00004000, + PLAYER_FLAGS_UNK16 = 0x00008000, // strange visual effect (2.0.1), looks like PLAYER_FLAGS_GHOST flag + PLAYER_FLAGS_UNK17 = 0x00010000, // pre-3.0.3 PLAYER_FLAGS_SANCTUARY flag for player entered sanctuary + PLAYER_FLAGS_UNK18 = 0x00020000, // taxi benchmark mode (on/off) (2.0.1) PLAYER_FLAGS_PVP_TIMER = 0x00040000, // 3.0.2, pvp timer active (after you disable pvp manually) }; diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index e01d6ac92..7b3499259 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -6239,7 +6239,7 @@ bool Unit::IsHostileTo(Unit const* unit) const return false; // PvP FFA state - if(pTester->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_FFA_PVP) && pTarget->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_FFA_PVP)) + if(pTester->HasByteFlag(UNIT_FIELD_BYTES_2, 1, UNIT_BYTE2_FLAG_FFA_PVP) && pTarget->HasByteFlag(UNIT_FIELD_BYTES_2, 1, UNIT_BYTE2_FLAG_FFA_PVP)) return true; //= PvP states @@ -6348,7 +6348,7 @@ bool Unit::IsFriendlyTo(Unit const* unit) const return true; // PvP FFA state - if(pTester->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_FFA_PVP) && pTarget->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_FFA_PVP)) + if(pTester->HasByteFlag(UNIT_FIELD_BYTES_2, 1, UNIT_BYTE2_FLAG_FFA_PVP) && pTarget->HasByteFlag(UNIT_FIELD_BYTES_2, 1, UNIT_BYTE2_FLAG_FFA_PVP)) return false; //= PvP states diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 1382197f9..3ed542f52 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 "6992" + #define REVISION_NR "6993" #endif // __REVISION_NR_H__ From 948d76800dcd5a31aac0b6cdbd636539c38bc0da Mon Sep 17 00:00:00 2001 From: GriffonHeart Date: Wed, 31 Dec 2008 15:04:47 +0300 Subject: [PATCH 043/145] [6994] Fixing "create all" items crafting and possible other spells unexpected colldowns. Note: auto-shoot still have problems with spell casting. Signed-off-by: VladimirMangos --- src/game/Spell.cpp | 12 +++++------- src/game/SpellMgr.h | 6 ++++++ src/shared/revision_nr.h | 2 +- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp index a778ecc9e..35788bbd8 100644 --- a/src/game/Spell.cpp +++ b/src/game/Spell.cpp @@ -341,11 +341,8 @@ Spell::Spell( Unit* Caster, SpellEntry const *info, bool triggered, uint64 origi m_glyphIndex = 0; m_triggeredByAuraSpell = NULL; - //Auto Shot & Shoot - if( m_spellInfo->AttributesEx2 == 0x000020 && !triggered ) - m_autoRepeat = true; - else - m_autoRepeat = false; + //Auto Shot & Shoot (wand) + m_autoRepeat = IsAutoRepeatRangedSpell(m_spellInfo); m_runesState = 0; m_powerCost = 0; // setup to correct value in Spell::prepare, don't must be used before. @@ -724,7 +721,8 @@ void Spell::prepareDataForTriggerSystem() m_procAttacker = PROC_FLAG_SUCCESSFUL_POSITIVE_SPELL; m_procVictim = PROC_FLAG_TAKEN_POSITIVE_SPELL; } - else if (m_spellInfo->Id != SPELL_ID_AUTOSHOT) // Wands + // Wands + else if (IsAutoRepeatRangedSpell(m_spellInfo) && m_spellInfo->Id != SPELL_ID_AUTOSHOT) { m_procAttacker = PROC_FLAG_SUCCESSFUL_RANGED_SPELL_HIT; m_procVictim = PROC_FLAG_TAKEN_RANGED_SPELL_HIT; @@ -2441,7 +2439,7 @@ void Spell::SendSpellCooldown() // shoot spells used equipped item cooldown values already assigned in GetAttackTime(RANGED_ATTACK) // prevent 0 cooldowns set by another way - if (rec <= 0 && catrec <= 0 && (cat == 76 || m_spellInfo->Id != SPELL_ID_AUTOSHOT)) + if (rec <= 0 && catrec <= 0 && (cat == 76 || IsAutoRepeatRangedSpell(m_spellInfo) && m_spellInfo->Id != SPELL_ID_AUTOSHOT)) rec = _player->GetAttackTime(RANGED_ATTACK); // Now we have cooldown data (if found any), time to apply mods diff --git a/src/game/SpellMgr.h b/src/game/SpellMgr.h index 24b277510..fa8f1e06c 100644 --- a/src/game/SpellMgr.h +++ b/src/game/SpellMgr.h @@ -414,6 +414,12 @@ inline bool isSpellBreakStealth(SpellEntry const* spellInfo) return !(spellInfo->AttributesEx & SPELL_ATTR_EX_NOT_BREAK_STEALTH); } +inline bool IsAutoRepeatRangedSpell(SpellEntry const* spellInfo) +{ + return (spellInfo->Attributes & SPELL_ATTR_RANGED) && (spellInfo->AttributesEx2 == 0x000020 /*autorepeat*/); +} + + uint8 GetErrorAtShapeshiftedCast (SpellEntry const *spellInfo, uint32 form); inline bool IsChanneledSpell(SpellEntry const* spellInfo) diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 3ed542f52..712de8185 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 "6993" + #define REVISION_NR "6994" #endif // __REVISION_NR_H__ From 896b10e39aafbce8d0a0321cee0c0893188de0e3 Mon Sep 17 00:00:00 2001 From: VladimirMangos Date: Wed, 31 Dec 2008 16:09:49 +0300 Subject: [PATCH 044/145] [6995] Fixed spell casting with active auto-repeat ranged weapon. --- src/game/Spell.cpp | 2 +- src/shared/revision_nr.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp index 35788bbd8..700117084 100644 --- a/src/game/Spell.cpp +++ b/src/game/Spell.cpp @@ -2050,7 +2050,7 @@ void Spell::prepare(SpellCastTargets * targets, Aura* triggeredByAura) m_caster->m_Events.AddEvent(Event, m_caster->m_Events.CalculateTime(1)); //Prevent casting at cast another spell (ServerSide check) - if(m_caster->IsNonMeleeSpellCasted(false, true) && m_cast_count) + if(m_caster->IsNonMeleeSpellCasted(false, true, true) && m_cast_count) { SendCastResult(SPELL_FAILED_SPELL_IN_PROGRESS); finish(false); diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 712de8185..49149eb00 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 "6994" + #define REVISION_NR "6995" #endif // __REVISION_NR_H__ From f6bd9ef67a4c2ebc31381b1e99642402e905baf9 Mon Sep 17 00:00:00 2001 From: VladimirMangos Date: Thu, 1 Jan 2009 16:27:29 +0300 Subject: [PATCH 045/145] [6996] Fixed 56 target mode work for 3.0.3. This fix for example warrior spell 6673 and ranks. --- src/game/SharedDefines.h | 2 +- src/game/Spell.cpp | 13 +++++-------- src/game/SpellMgr.h | 5 +++-- src/shared/revision_nr.h | 2 +- 4 files changed, 10 insertions(+), 12 deletions(-) diff --git a/src/game/SharedDefines.h b/src/game/SharedDefines.h index d02fd4319..412b85f50 100644 --- a/src/game/SharedDefines.h +++ b/src/game/SharedDefines.h @@ -829,7 +829,7 @@ enum Targets TARGET_SUMMON = 48, TARGET_AREAEFFECT_CUSTOM_2 = 52, TARGET_CURRENT_ENEMY_COORDINATES = 53, // set unit coordinates as dest, only 16 target B imlemented - TARGET_RANDOM_RAID_MEMBER = 56, + TARGET_ALL_RAID_AROUND_CASTER = 56, TARGET_SINGLE_FRIEND_2 = 57, TARGET_AREAEFFECT_PARTY_AND_CLASS = 61, TARGET_DUELVSPLAYER_COORDINATES = 63, diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp index 700117084..4ac59c53f 100644 --- a/src/game/Spell.cpp +++ b/src/game/Spell.cpp @@ -411,7 +411,7 @@ void Spell::FillTargetMap() case TARGET_ALL_AROUND_CASTER: if( m_spellInfo->EffectImplicitTargetB[i]==TARGET_ALL_PARTY || m_spellInfo->EffectImplicitTargetB[i]==TARGET_ALL_FRIENDLY_UNITS_AROUND_CASTER || - m_spellInfo->EffectImplicitTargetB[i]==TARGET_RANDOM_RAID_MEMBER ) + m_spellInfo->EffectImplicitTargetB[i]==TARGET_ALL_RAID_AROUND_CASTER ) { SetTargetMap(i,m_spellInfo->EffectImplicitTargetB[i],tmpUnitMap); } @@ -1505,6 +1505,7 @@ void Spell::SetTargetMap(uint32 i,uint32 cur,std::list &TagUnitMap) case TARGET_ALL_PARTY_AROUND_CASTER: case TARGET_ALL_PARTY_AROUND_CASTER_2: case TARGET_ALL_PARTY: + case TARGET_ALL_RAID_AROUND_CASTER: { Player *pTarget = m_caster->GetCharmerOrOwnerPlayerOrPlayerItself(); Group *pGroup = pTarget ? pTarget->GetGroup() : NULL; @@ -1518,7 +1519,9 @@ void Spell::SetTargetMap(uint32 i,uint32 cur,std::list &TagUnitMap) Player* Target = itr->getSource(); // IsHostileTo check duel and controlled by enemy - if( Target && Target->GetSubGroup()==subgroup && !m_caster->IsHostileTo(Target) ) + if( Target && + (cur==TARGET_ALL_RAID_AROUND_CASTER || Target->GetSubGroup()==subgroup) && + !m_caster->IsHostileTo(Target) ) { if( m_caster->IsWithinDistInMap(Target, radius) ) TagUnitMap.push_back(Target); @@ -1539,12 +1542,6 @@ void Spell::SetTargetMap(uint32 i,uint32 cur,std::list &TagUnitMap) TagUnitMap.push_back(pet); } }break; - case TARGET_RANDOM_RAID_MEMBER: - { - if (m_caster->GetTypeId() == TYPEID_PLAYER) - if(Player* target = ((Player*)m_caster)->GetNextRandomRaidMember(radius)) - TagUnitMap.push_back(target); - }break; case TARGET_SINGLE_FRIEND: case TARGET_SINGLE_FRIEND_2: { diff --git a/src/game/SpellMgr.h b/src/game/SpellMgr.h index fa8f1e06c..8154adf23 100644 --- a/src/game/SpellMgr.h +++ b/src/game/SpellMgr.h @@ -362,15 +362,16 @@ inline bool IsAreaEffectTarget( Targets target ) case TARGET_ALL_ENEMY_IN_AREA_INSTANT: case TARGET_ALL_PARTY_AROUND_CASTER: case TARGET_ALL_AROUND_CASTER: + case TARGET_IN_FRONT_OF_CASTER: case TARGET_ALL_ENEMY_IN_AREA_CHANNELED: case TARGET_ALL_FRIENDLY_UNITS_AROUND_CASTER: + case TARGET_ALL_FRIENDLY_UNITS_IN_AREA: case TARGET_ALL_PARTY: case TARGET_ALL_PARTY_AROUND_CASTER_2: case TARGET_AREAEFFECT_PARTY: case TARGET_AREAEFFECT_CUSTOM_2: + case TARGET_ALL_RAID_AROUND_CASTER: case TARGET_AREAEFFECT_PARTY_AND_CLASS: - case TARGET_IN_FRONT_OF_CASTER: - case TARGET_ALL_FRIENDLY_UNITS_IN_AREA: return true; default: break; diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 49149eb00..4175ffc05 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 "6995" + #define REVISION_NR "6996" #endif // __REVISION_NR_H__ From 2441c2a69fdf014564e80b776233051aeecc0a8a Mon Sep 17 00:00:00 2001 From: GriffonHeart Date: Thu, 1 Jan 2009 22:40:52 +0300 Subject: [PATCH 046/145] [6997] Fixed: In 3.0.3 spell data have area group id instead area id. Signed-off-by: VladimirMangos --- src/game/PetHandler.cpp | 3 --- src/game/Player.cpp | 2 +- src/game/Spell.cpp | 10 ++++---- src/game/SpellMgr.cpp | 41 ++++++++++++++++++++---------- src/game/SpellMgr.h | 2 +- src/shared/Database/DBCStores.cpp | 2 ++ src/shared/Database/DBCStores.h | 1 + src/shared/Database/DBCStructure.h | 8 +++++- src/shared/Database/DBCfmt.cpp | 1 + src/shared/revision_nr.h | 2 +- 10 files changed, 46 insertions(+), 26 deletions(-) diff --git a/src/game/PetHandler.cpp b/src/game/PetHandler.cpp index 1a34358f0..5af2384b4 100644 --- a/src/game/PetHandler.cpp +++ b/src/game/PetHandler.cpp @@ -246,9 +246,6 @@ void WorldSession::HandlePetAction( WorldPacket & recv_data ) case SPELL_FAILED_REQUIRES_SPELL_FOCUS: data << uint32(spellInfo->RequiresSpellFocus); break; - case SPELL_FAILED_REQUIRES_AREA: - data << uint32(spellInfo->AreaId); - break; } SendPacket(&data); } diff --git a/src/game/Player.cpp b/src/game/Player.cpp index 62cd36378..347c24305 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -18671,7 +18671,7 @@ void Player::UpdateAreaDependentAuras( uint32 newArea ) for(AuraMap::iterator iter = m_Auras.begin(); iter != m_Auras.end();) { // use m_zoneUpdateId for speed: UpdateArea called from UpdateZone or instead UpdateZone in both cases m_zoneUpdateId up-to-date - if(!IsSpellAllowedInLocation(iter->second->GetSpellProto(),GetMapId(),m_zoneUpdateId,newArea)) + if(GetSpellAllowedInLocationError(iter->second->GetSpellProto(),GetMapId(),m_zoneUpdateId,newArea)!=0) RemoveAura(iter); else ++iter; diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp index 4ac59c53f..0e6380c49 100644 --- a/src/game/Spell.cpp +++ b/src/game/Spell.cpp @@ -2713,8 +2713,8 @@ void Spell::SendCastResult(uint8 result) case 45373: // Bloodberry Elixir data << uint32(4075); break; - default: // default case - data << uint32(m_spellInfo->AreaId); + default: // default case (don't must be) + data << uint32(0); break; } break; @@ -3652,8 +3652,8 @@ uint8 Spell::CanCast(bool strict) return SPELL_FAILED_NOT_IN_ARENA; // zone check - if(!IsSpellAllowedInLocation(m_spellInfo,m_caster->GetMapId(),m_caster->GetZoneId(),m_caster->GetAreaId())) - return SPELL_FAILED_REQUIRES_AREA; + if(uint8 res= GetSpellAllowedInLocationError(m_spellInfo,m_caster->GetMapId(),m_caster->GetZoneId(),m_caster->GetAreaId())) + return res; // not let players cast spells at mount (and let do it to creatures) if( m_caster->IsMounted() && m_caster->GetTypeId()==TYPEID_PLAYER && !m_IsTriggeredSpell && @@ -4279,7 +4279,7 @@ uint8 Spell::CanCast(bool strict) return SPELL_FAILED_NO_MOUNTS_ALLOWED; // Ignore map check if spell have AreaId. AreaId already checked and this prevent special mount spells - if (m_caster->GetTypeId()==TYPEID_PLAYER && !sMapStore.LookupEntry(m_caster->GetMapId())->IsMountAllowed() && !m_IsTriggeredSpell && !m_spellInfo->AreaId) + if (m_caster->GetTypeId()==TYPEID_PLAYER && !sMapStore.LookupEntry(m_caster->GetMapId())->IsMountAllowed() && !m_IsTriggeredSpell && !m_spellInfo->AreaGroupId) return SPELL_FAILED_NO_MOUNTS_ALLOWED; ShapeshiftForm form = m_caster->m_form; diff --git a/src/game/SpellMgr.cpp b/src/game/SpellMgr.cpp index 999f05f0f..442c2d376 100644 --- a/src/game/SpellMgr.cpp +++ b/src/game/SpellMgr.cpp @@ -2257,11 +2257,24 @@ bool SpellMgr::IsSpellValid(SpellEntry const* spellInfo, Player* pl, bool msg) return true; } -bool IsSpellAllowedInLocation(SpellEntry const *spellInfo,uint32 map_id,uint32 zone_id,uint32 area_id) +uint8 GetSpellAllowedInLocationError(SpellEntry const *spellInfo,uint32 map_id,uint32 zone_id,uint32 area_id) { // normal case - if( spellInfo->AreaId > 0 && spellInfo->AreaId != zone_id && spellInfo->AreaId != area_id ) - return false; + if( spellInfo->AreaGroupId > 0) + { + bool found = false; + + AreaGroupEntry const* groupEntry = sAreaGroupStore.LookupEntry(spellInfo->AreaGroupId); + if(groupEntry) + { + for (uint8 i=0; i<7; i++) + if( groupEntry->AreaId[i] == zone_id || groupEntry->AreaId[i] == area_id ) + found = true; + } + + if(!found) + return SPELL_FAILED_INCORRECT_AREA; + } // elixirs (all area dependent elixirs have family SPELLFAMILY_POTION, use this for speedup) if(spellInfo->SpellFamilyName==SPELLFAMILY_POTION) @@ -2271,24 +2284,24 @@ bool IsSpellAllowedInLocation(SpellEntry const *spellInfo,uint32 map_id,uint32 z if(mask & ELIXIR_BATTLE_MASK) { if(spellInfo->Id==45373) // Bloodberry Elixir - return zone_id==4075; + return zone_id==4075 ? 0 : SPELL_FAILED_REQUIRES_AREA; } if(mask & ELIXIR_UNSTABLE_MASK) { // in the Blade's Edge Mountains Plateaus and Gruul's Lair. - return zone_id ==3522 || map_id==565; + return zone_id ==3522 || map_id==565 ? 0 : SPELL_FAILED_INCORRECT_AREA; } if(mask & ELIXIR_SHATTRATH_MASK) { // in Tempest Keep, Serpentshrine Cavern, Caverns of Time: Mount Hyjal, Black Temple, Sunwell Plateau if(zone_id ==3607 || map_id==534 || map_id==564 || zone_id==4075) - return true; + return 0; MapEntry const* mapEntry = sMapStore.LookupEntry(map_id); if(!mapEntry) - return false; + return SPELL_FAILED_INCORRECT_AREA; - return mapEntry->multimap_id==206; + return mapEntry->multimap_id==206 ? 0 : SPELL_FAILED_INCORRECT_AREA; } // elixirs not have another limitations @@ -2304,25 +2317,25 @@ bool IsSpellAllowedInLocation(SpellEntry const *spellInfo,uint32 map_id,uint32 z { MapEntry const* mapEntry = sMapStore.LookupEntry(map_id); if(!mapEntry) - return false; + return SPELL_FAILED_INCORRECT_AREA; - return mapEntry->multimap_id==206; + return mapEntry->multimap_id==206 ? 0 : SPELL_FAILED_REQUIRES_AREA; } case 41617: // Cenarion Mana Salve case 41619: // Cenarion Healing Salve { MapEntry const* mapEntry = sMapStore.LookupEntry(map_id); if(!mapEntry) - return false; + return SPELL_FAILED_INCORRECT_AREA; - return mapEntry->multimap_id==207; + return mapEntry->multimap_id==207 ? 0 : SPELL_FAILED_REQUIRES_AREA; } case 40216: // Dragonmaw Illusion case 42016: // Dragonmaw Illusion - return area_id == 3759 || area_id == 3966 || area_id == 3939; + return area_id == 3759 || area_id == 3966 || area_id == 3939 ? 0 : SPELL_FAILED_INCORRECT_AREA; } - return true; + return 0; } void SpellMgr::LoadSkillLineAbilityMap() diff --git a/src/game/SpellMgr.h b/src/game/SpellMgr.h index 8154adf23..5e9f41a6a 100644 --- a/src/game/SpellMgr.h +++ b/src/game/SpellMgr.h @@ -351,7 +351,7 @@ bool IsSingleTargetSpells(SpellEntry const *spellInfo1, SpellEntry const *spellI bool IsAuraAddedBySpell(uint32 auraType, uint32 spellId); -bool IsSpellAllowedInLocation(SpellEntry const *spellInfo,uint32 map_id,uint32 zone_id,uint32 area_id); +uint8 GetSpellAllowedInLocationError(SpellEntry const *spellInfo,uint32 map_id,uint32 zone_id,uint32 area_id); inline bool IsAreaEffectTarget( Targets target ) { diff --git a/src/shared/Database/DBCStores.cpp b/src/shared/Database/DBCStores.cpp index 0ae6f663b..c314c667c 100644 --- a/src/shared/Database/DBCStores.cpp +++ b/src/shared/Database/DBCStores.cpp @@ -30,6 +30,7 @@ typedef std::map AreaFlagByAreaID; typedef std::map AreaFlagByMapID; DBCStorage sAreaStore(AreaTableEntryfmt); +DBCStorage sAreaGroupStore(AreaGroupEntryfmt); static AreaFlagByAreaID sAreaFlagByAreaID; static AreaFlagByMapID sAreaFlagByMapID; // for instances without generated *.map files @@ -215,6 +216,7 @@ void LoadDBCStores(const std::string& dataPath) LoadDBC(availableDbcLocales,bar,bad_dbc_files,sAchievementStore, dbcPath,"Achievement.dbc"); LoadDBC(availableDbcLocales,bar,bad_dbc_files,sAchievementCriteriaStore, dbcPath,"Achievement_Criteria.dbc"); LoadDBC(availableDbcLocales,bar,bad_dbc_files,sAreaTriggerStore, dbcPath,"AreaTrigger.dbc"); + LoadDBC(availableDbcLocales,bar,bad_dbc_files,sAreaGroupStore, dbcPath,"AreaGroup.dbc"); LoadDBC(availableDbcLocales,bar,bad_dbc_files,sBankBagSlotPricesStore, dbcPath,"BankBagSlotPrices.dbc"); LoadDBC(availableDbcLocales,bar,bad_dbc_files,sBattlemasterListStore, dbcPath,"BattlemasterList.dbc"); LoadDBC(availableDbcLocales,bar,bad_dbc_files,sBarberShopStyleStore, dbcPath,"BarberShopStyle.dbc"); diff --git a/src/shared/Database/DBCStores.h b/src/shared/Database/DBCStores.h index 8143ec704..92b1eba83 100644 --- a/src/shared/Database/DBCStores.h +++ b/src/shared/Database/DBCStores.h @@ -133,6 +133,7 @@ class DBCStorage extern DBCStorage sAchievementStore; extern DBCStorage sAchievementCriteriaStore; extern DBCStorage sAreaStore;// recommend access using functions +extern DBCStorage sAreaGroupStore; extern DBCStorage sAreaTriggerStore; extern DBCStorage sBankBagSlotPricesStore; extern DBCStorage sBarberShopStyleStore; diff --git a/src/shared/Database/DBCStructure.h b/src/shared/Database/DBCStructure.h index 839687f3d..39873ef9b 100644 --- a/src/shared/Database/DBCStructure.h +++ b/src/shared/Database/DBCStructure.h @@ -485,6 +485,12 @@ struct AreaTableEntry uint32 team; // 28 }; +struct AreaGroupEntry +{ + uint32 AreaGroupId; // 0 + uint32 AreaId[7]; // 1-7 +}; + struct AreaTriggerEntry { uint32 id; // 0 m_ID @@ -1152,7 +1158,7 @@ struct SpellEntry //uint32 MinReputation; // 223 m_minReputation not used //uint32 RequiredAuraVision; // 224 m_requiredAuraVision not used uint32 TotemCategory[2]; // 225-226 m_requiredTotemCategoryID - int32 AreaId; // 227 m_requiredAreasID + int32 AreaGroupId; // 227 m_requiredAreaGroupId uint32 SchoolMask; // 228 m_schoolMask uint32 runeCostID; // 229 m_runeCostID //uint32 spellMissileID; // 230 m_spellMissileID not used diff --git a/src/shared/Database/DBCfmt.cpp b/src/shared/Database/DBCfmt.cpp index b78608c2d..00101f180 100644 --- a/src/shared/Database/DBCfmt.cpp +++ b/src/shared/Database/DBCfmt.cpp @@ -19,6 +19,7 @@ const char Achievementfmt[]="niixxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxiixixxxxxxxxxxxxxxxxxxxi"; const char AchievementCriteriafmt[]="niiiiiiiixxxxxxxxxxxxxxxxxiixix"; const char AreaTableEntryfmt[]="iiinixxxxxissssssssssssssssxixxxxxxx"; +const char AreaGroupEntryfmt[]="niiiiiii"; const char AreaTriggerEntryfmt[]="niffffffff"; const char BankBagSlotPricesEntryfmt[]="ni"; const char BarberShopStyleEntryfmt[]="nixxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxiii"; diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 4175ffc05..7e3804ea7 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 "6996" + #define REVISION_NR "6997" #endif // __REVISION_NR_H__ From 59f5472e3a0de67c9796a05e073de0266f999255 Mon Sep 17 00:00:00 2001 From: DiSlord Date: Fri, 2 Jan 2009 00:08:02 +0300 Subject: [PATCH 047/145] [6998] Add new formula for warlock 1454 and ranks Signed-off-by: DiSlord --- src/game/SpellEffects.cpp | 55 +++++++++++++++++++++++++-------------- src/shared/revision_nr.h | 2 +- 2 files changed, 37 insertions(+), 20 deletions(-) diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp index e50423662..d182ba99f 100644 --- a/src/game/SpellEffects.cpp +++ b/src/game/SpellEffects.cpp @@ -1296,38 +1296,55 @@ void Spell::EffectDummy(uint32 i) } break; case SPELLFAMILY_WARLOCK: - //Life Tap (only it have this with dummy effect) - if (m_spellInfo->SpellFamilyFlags == 0x40000) + // Life Tap + if (m_spellInfo->SpellFamilyFlags & 0x0000000000040000LL) { - float cost = m_currentBasePoints[0]+1; - - if(Player* modOwner = m_caster->GetSpellModOwner()) - modOwner->ApplySpellMod(m_spellInfo->Id, SPELLMOD_COST, cost,this); - - int32 dmg = m_caster->SpellDamageBonus(m_caster, m_spellInfo,uint32(cost > 0 ? cost : 0), SPELL_DIRECT_DAMAGE); - - if(int32(m_caster->GetHealth()) > dmg) + // In 303 exist spirit depend + uint32 spirit = m_caster->GetStat(STAT_SPIRIT); + switch (m_spellInfo->Id) + { + case 1454: damage+=spirit; break; + case 1455: damage+=spirit*15/10; break; + case 1456: damage+=spirit*2; break; + case 11687: damage+=spirit*25/10; break; + case 11688: + case 11689: + case 27222: + case 57946: damage+=spirit*3; break; + default: + sLog.outError("Spell::EffectDummy: Life Tap need set spirit multipler",m_triggeredByAuraSpell->Id); + return; + } +// Think its not need (also need remove Life Tap from SpellDamageBonus or add new value) +// damage = m_caster->SpellDamageBonus(m_caster, m_spellInfo,uint32(damage > 0 ? damage : 0), SPELL_DIRECT_DAMAGE); + if(int32(unitTarget->GetHealth()) > damage) { // Shouldn't Appear in Combat Log - m_caster->ModifyHealth(-dmg); - - int32 mana = dmg; + unitTarget->ModifyHealth(-damage); + int32 mana = damage; + // Improved Life Tap mod Unit::AuraList const& auraDummy = m_caster->GetAurasByType(SPELL_AURA_DUMMY); for(Unit::AuraList::const_iterator itr = auraDummy.begin(); itr != auraDummy.end(); ++itr) { - // only Imp. Life Tap have this in combination with dummy aura if((*itr)->GetSpellProto()->SpellFamilyName==SPELLFAMILY_WARLOCK && (*itr)->GetSpellProto()->SpellIconID == 208) mana = ((*itr)->GetModifier()->m_amount + 100)* mana / 100; } - - m_caster->CastCustomSpell(m_caster,31818,&mana,NULL,NULL,true,NULL); + m_caster->CastCustomSpell(unitTarget, 31818, &mana, NULL, NULL, true); // Mana Feed - int32 manaFeedVal = m_caster->CalculateSpellDamage(m_spellInfo,1, m_spellInfo->EffectBasePoints[1],m_caster); - manaFeedVal = manaFeedVal * mana / 100; + int32 manaFeedVal = 0; + Unit::AuraList const& mod = m_caster->GetAurasByType(SPELL_AURA_ADD_FLAT_MODIFIER); + for(Unit::AuraList::const_iterator itr = mod.begin(); itr != mod.end(); ++itr) + { + if((*itr)->GetSpellProto()->SpellFamilyName==SPELLFAMILY_WARLOCK && (*itr)->GetSpellProto()->SpellIconID == 1982) + manaFeedVal+= (*itr)->GetModifier()->m_amount; + } if(manaFeedVal > 0) - m_caster->CastCustomSpell(m_caster,32553,&manaFeedVal,NULL,NULL,true,NULL); + { + manaFeedVal = manaFeedVal * mana / 100; + m_caster->CastCustomSpell(m_caster, 32553, &manaFeedVal, NULL, NULL, true, NULL); + } } else SendCastResult(SPELL_FAILED_FIZZLE); diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 7e3804ea7..84d9855a8 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 "6997" + #define REVISION_NR "6998" #endif // __REVISION_NR_H__ From d49e934d41f173823cd2e28f1c622e72d014bb32 Mon Sep 17 00:00:00 2001 From: DiSlord Date: Fri, 2 Jan 2009 00:17:26 +0300 Subject: [PATCH 048/145] Fix debug message from last commit --- src/game/SpellEffects.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp index d182ba99f..e0abe79fc 100644 --- a/src/game/SpellEffects.cpp +++ b/src/game/SpellEffects.cpp @@ -1312,7 +1312,7 @@ void Spell::EffectDummy(uint32 i) case 27222: case 57946: damage+=spirit*3; break; default: - sLog.outError("Spell::EffectDummy: Life Tap need set spirit multipler",m_triggeredByAuraSpell->Id); + sLog.outError("Spell::EffectDummy: %u Life Tap need set spirit multipler", m_spellInfo->Id); return; } // Think its not need (also need remove Life Tap from SpellDamageBonus or add new value) From 802b35fbb8796da8d069f4673a3e72cc6eed03bd Mon Sep 17 00:00:00 2001 From: hectolight Date: Fri, 2 Jan 2009 00:04:33 +0100 Subject: [PATCH 049/145] [6999] Implemented ACHIEVEMENT_CRITERIA_TYPE_ROLL_GREED_ON_LOOT and ACHIEVEMENT_CRITERIA_TYPE_ROLL_NEED_ON_LOOT Signed-off-by: arrai --- src/game/AchievementMgr.cpp | 22 ++++++++++++++++++++++ src/game/Group.cpp | 4 ++++ src/shared/Database/DBCStructure.h | 6 ++++++ src/shared/revision_nr.h | 2 +- 4 files changed, 33 insertions(+), 1 deletion(-) diff --git a/src/game/AchievementMgr.cpp b/src/game/AchievementMgr.cpp index ec1085d8a..c198785e8 100644 --- a/src/game/AchievementMgr.cpp +++ b/src/game/AchievementMgr.cpp @@ -614,7 +614,26 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui SetCriteriaProgress(achievementCriteria, 1); break; } + case ACHIEVEMENT_CRITERIA_TYPE_ROLL_GREED_ON_LOOT: + case ACHIEVEMENT_CRITERIA_TYPE_ROLL_NEED_ON_LOOT: + { + // miscvalue1 = itemid + // miscvalue2 = diced value + if(!miscvalue1) + continue; + if(miscvalue2 != achievementCriteria->roll_greed_on_loot.rollValue) + continue; + ItemPrototype const *pProto = objmgr.GetItemPrototype( miscvalue1 ); + uint32 requiredItemLevel = 0; + if (achievementCriteria->ID == 2412 || achievementCriteria->ID == 2358) + requiredItemLevel = 185; + + if(!pProto || pProto->ItemLevel counter >= achievementCriteria->gain_exalted_reputation.numberOfExaltedFactions; case ACHIEVEMENT_CRITERIA_TYPE_EXPLORE_AREA: return progress->counter >= 1; + case ACHIEVEMENT_CRITERIA_TYPE_ROLL_GREED_ON_LOOT: + case ACHIEVEMENT_CRITERIA_TYPE_ROLL_NEED_ON_LOOT: + return progress->counter >= achievementCriteria->roll_greed_on_loot.count; // handle all statistic-only criteria here case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_BATTLEGROUND: diff --git a/src/game/Group.cpp b/src/game/Group.cpp index 8279f4c82..67e79bf47 100644 --- a/src/game/Group.cpp +++ b/src/game/Group.cpp @@ -727,6 +727,8 @@ void Group::CountTheRoll(Rolls::iterator rollI, uint32 NumberOfPlayers) if(player && player->GetSession()) { + player->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_ROLL_NEED_ON_LOOT, roll->itemid, maxresul); + ItemPosCountVec dest; LootItem *item = &(roll->getLoot()->items[roll->itemSlot]); uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, roll->itemid, item->count ); @@ -772,6 +774,8 @@ void Group::CountTheRoll(Rolls::iterator rollI, uint32 NumberOfPlayers) if(player && player->GetSession()) { + player->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_ROLL_GREED_ON_LOOT, roll->itemid, maxresul); + ItemPosCountVec dest; LootItem *item = &(roll->getLoot()->items[roll->itemSlot]); uint8 msg = player->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, roll->itemid, item->count ); diff --git a/src/shared/Database/DBCStructure.h b/src/shared/Database/DBCStructure.h index 39873ef9b..25b74b77a 100644 --- a/src/shared/Database/DBCStructure.h +++ b/src/shared/Database/DBCStructure.h @@ -325,6 +325,12 @@ struct AchievementCriteriaEntry uint32 rollValue; // 3 uint32 count; // 4 } roll_need_on_loot; + // ACHIEVEMENT_CRITERIA_TYPE_ROLL_GREEDON_LOOT= 51 + struct + { + uint32 rollValue; // 3 + uint32 count; // 4 + } roll_greed_on_loot; // ACHIEVEMENT_CRITERIA_TYPE_HK_CLASS = 52 struct diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 84d9855a8..11595c659 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 "6998" + #define REVISION_NR "6999" #endif // __REVISION_NR_H__ From 01e4f069e28ff050545be05a4c1cf5969bf9b214 Mon Sep 17 00:00:00 2001 From: arrai Date: Fri, 2 Jan 2009 12:21:47 +0100 Subject: [PATCH 050/145] [7000] Fixed creature target selection in case all possible targets have a low priority --- src/game/ThreatManager.cpp | 27 +++++++++++++++++++-------- src/shared/Database/DBCStructure.h | 2 +- src/shared/revision_nr.h | 2 +- 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/src/game/ThreatManager.cpp b/src/game/ThreatManager.cpp index e3f496133..68ddf098e 100644 --- a/src/game/ThreatManager.cpp +++ b/src/game/ThreatManager.cpp @@ -265,11 +265,12 @@ HostilReference* ThreatContainer::selectNextVictim(Creature* pAttacker, HostilRe { HostilReference* currentRef = NULL; bool found = false; + bool noPriorityTargetFound = false; std::list::iterator lastRef = iThreatList.end(); lastRef--; - for(std::list::iterator iter = iThreatList.begin(); iter != iThreatList.end() && !found; ++iter) + for(std::list::iterator iter = iThreatList.begin(); iter != iThreatList.end() && !found;) { currentRef = (*iter); @@ -277,14 +278,23 @@ HostilReference* ThreatContainer::selectNextVictim(Creature* pAttacker, HostilRe assert(target); // if the ref has status online the target must be there ! // some units are prefered in comparison to others - if(iter != lastRef && (target->IsImmunedToDamage(pAttacker->GetMeleeDamageSchoolMask(), false) || - target->hasNegativeAuraWithInterruptFlag(AURA_INTERRUPT_FLAG_DAMAGE) - ) ) + if(!noPriorityTargetFound && (target->IsImmunedToDamage(pAttacker->GetMeleeDamageSchoolMask(), false) || target->hasNegativeAuraWithInterruptFlag(AURA_INTERRUPT_FLAG_DAMAGE)) ) { - // current victim is a second choice target, so don't compare threat with it below - if(currentRef == pCurrentVictim) - pCurrentVictim = NULL; - continue; + if(iter != lastRef) + { + // current victim is a second choice target, so don't compare threat with it below + if(currentRef == pCurrentVictim) + pCurrentVictim = NULL; + ++iter; + continue; + } + else + { + // if we reached to this point, everyone in the threatlist is a second choice target. In such a situation the target with the highest threat should be attacked. + noPriorityTargetFound = true; + iter = iThreatList.begin(); + continue; + } } if(!pAttacker->IsOutOfThreatArea(target)) // skip non attackable currently targets @@ -312,6 +322,7 @@ HostilReference* ThreatContainer::selectNextVictim(Creature* pAttacker, HostilRe break; } } + ++iter; } if(!found) currentRef = NULL; diff --git a/src/shared/Database/DBCStructure.h b/src/shared/Database/DBCStructure.h index 25b74b77a..ebc33d629 100644 --- a/src/shared/Database/DBCStructure.h +++ b/src/shared/Database/DBCStructure.h @@ -325,7 +325,7 @@ struct AchievementCriteriaEntry uint32 rollValue; // 3 uint32 count; // 4 } roll_need_on_loot; - // ACHIEVEMENT_CRITERIA_TYPE_ROLL_GREEDON_LOOT= 51 + // ACHIEVEMENT_CRITERIA_TYPE_ROLL_GREED_ON_LOOT= 51 struct { uint32 rollValue; // 3 diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 11595c659..9ecba6676 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 "6999" + #define REVISION_NR "7000" #endif // __REVISION_NR_H__ From 8d549e8a82e757dd9d9a08c8c111ba5250f67bbf Mon Sep 17 00:00:00 2001 From: invliD Date: Fri, 2 Jan 2009 12:47:19 +0100 Subject: [PATCH 051/145] [7001] Fixed ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUEST_COUNT Signed-off-by: arrai --- src/game/AchievementMgr.cpp | 2 ++ src/shared/revision_nr.h | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/game/AchievementMgr.cpp b/src/game/AchievementMgr.cpp index c198785e8..90ae2dde0 100644 --- a/src/game/AchievementMgr.cpp +++ b/src/game/AchievementMgr.cpp @@ -697,6 +697,8 @@ bool AchievementMgr::IsCompletedCriteria(AchievementCriteriaEntry const* achieve return m_completedAchievements.find(achievementCriteria->complete_achievement.linkedAchievement) != m_completedAchievements.end(); case ACHIEVEMENT_CRITERIA_TYPE_REACH_SKILL_LEVEL: return progress->counter >= achievementCriteria->reach_skill_level.skillLevel; + case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUEST_COUNT: + return progress->counter >= achievementCriteria->complete_quest_count.totalQuestCount; case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUESTS_IN_ZONE: return progress->counter >= achievementCriteria->complete_quests_in_zone.questCount; case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_DAILY_QUEST: diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 9ecba6676..5530ff1e4 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 "7000" + #define REVISION_NR "7001" #endif // __REVISION_NR_H__ From 420331b2aedfa213da4644d140e98111f7437af2 Mon Sep 17 00:00:00 2001 From: Seizer Date: Fri, 2 Jan 2009 14:40:53 +0100 Subject: [PATCH 052/145] [7002] Fixed learning of spell 51490 and ranks Signed-off-by: arrai --- sql/mangos.sql | 7 ++++++- sql/updates/7002_01_mangos_spell_chain.sql | 9 +++++++++ sql/updates/Makefile.am | 6 ++++-- src/shared/revision_nr.h | 2 +- 4 files changed, 20 insertions(+), 4 deletions(-) create mode 100644 sql/updates/7002_01_mangos_spell_chain.sql diff --git a/sql/mangos.sql b/sql/mangos.sql index f9a7151c7..a4f244135 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_6970_01_mangos_playercreateinfo` bit(1) default NULL + `required_7002_01_mangos_spell_chain` bit(1) default NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Used DB version notes'; -- @@ -14842,6 +14842,11 @@ INSERT INTO spell_chain VALUES (57720,30706,30706,2,0), (57721,57720,30706,3,0), (57722,57721,30706,4,0), +/*Thunderstorm*/ +(51490,0,51490,1,0), +(59156,51490,51490,2,0), +(59158,59156,51490,3,0), +(59159,59158,51490,4,0), /*------------------ --(573)Restoration ------------------*/ diff --git a/sql/updates/7002_01_mangos_spell_chain.sql b/sql/updates/7002_01_mangos_spell_chain.sql new file mode 100644 index 000000000..1ec5c5c03 --- /dev/null +++ b/sql/updates/7002_01_mangos_spell_chain.sql @@ -0,0 +1,9 @@ +ALTER TABLE db_version CHANGE COLUMN required_6970_01_mangos_playercreateinfo required_7002_01_mangos_spell_chain bit; + +DELETE FROM `spell_chain` WHERE `spell_id` IN (51490,59156,59158,59159); + +INSERT INTO `spell_chain` VALUES +(51490,0,51490,1,0), +(59156,51490,51490,2,0), +(59158,59156,51490,3,0), +(59159,59158,51490,4,0); diff --git a/sql/updates/Makefile.am b/sql/updates/Makefile.am index 1aa8bee07..ce5dc6a41 100644 --- a/sql/updates/Makefile.am +++ b/sql/updates/Makefile.am @@ -107,7 +107,8 @@ pkgdata_DATA = \ 6970_01_mangos_playercreateinfo.sql \ 6976_01_realmd_realmd_db_version.sql \ 6976_02_characters_character_db_version.sql \ - README + 7002_01_mangos_spell_chain \ + README \ ## Additional files to include when running 'make dist' # SQL update files, to upgrade database schema from older revisions @@ -194,4 +195,5 @@ EXTRA_DIST = \ 6970_01_mangos_playercreateinfo.sql \ 6976_01_realmd_realmd_db_version.sql \ 6976_02_characters_character_db_version.sql \ - README + 7002_01_mangos_spell_chain \ + README \ diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 5530ff1e4..ef309a8ae 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 "7001" + #define REVISION_NR "7002" #endif // __REVISION_NR_H__ From c08ed134971babee6812baaa00c140362f7ed157 Mon Sep 17 00:00:00 2001 From: arrai Date: Fri, 2 Jan 2009 15:07:25 +0100 Subject: [PATCH 053/145] [7003] Fixed *nix build of previous commit --- sql/updates/Makefile.am | 4 ++-- src/shared/revision_nr.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/sql/updates/Makefile.am b/sql/updates/Makefile.am index ce5dc6a41..f01391ba9 100644 --- a/sql/updates/Makefile.am +++ b/sql/updates/Makefile.am @@ -108,7 +108,7 @@ pkgdata_DATA = \ 6976_01_realmd_realmd_db_version.sql \ 6976_02_characters_character_db_version.sql \ 7002_01_mangos_spell_chain \ - README \ + README ## Additional files to include when running 'make dist' # SQL update files, to upgrade database schema from older revisions @@ -196,4 +196,4 @@ EXTRA_DIST = \ 6976_01_realmd_realmd_db_version.sql \ 6976_02_characters_character_db_version.sql \ 7002_01_mangos_spell_chain \ - README \ + README diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index ef309a8ae..760e62ee4 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 "7002" + #define REVISION_NR "7003" #endif // __REVISION_NR_H__ From 1896ace8ff2ed052ba0a53f260e75c3080878d2a Mon Sep 17 00:00:00 2001 From: Wyk3d Date: Fri, 2 Jan 2009 16:16:20 +0200 Subject: [PATCH 054/145] [7004] Fixed generating makefile.am in git_id --- contrib/git_id/git_id.cpp | 14 ++++++++++---- src/shared/revision_nr.h | 2 +- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/contrib/git_id/git_id.cpp b/contrib/git_id/git_id.cpp index 7fda2d227..ee1f84a4b 100644 --- a/contrib/git_id/git_id.cpp +++ b/contrib/git_id/git_id.cpp @@ -610,8 +610,11 @@ bool generate_sql_makefile() sql_update_dir, sql_update_dir ); - for(std::set::iterator itr = file_list.begin(); itr != file_list.end(); ++itr) - fprintf(fout, "\t%s \\\n", itr->c_str()); + for(std::set::iterator itr = file_list.begin(), next; itr != file_list.end(); ++itr) + { + next = itr; ++next; + fprintf(fout, "\t%s %s\n", itr->c_str(), next == file_list.end() ? "" : "\\"); + } fprintf(fout, "\n## Additional files to include when running 'make dist'\n" @@ -619,8 +622,11 @@ bool generate_sql_makefile() "EXTRA_DIST = \\\n" ); - for(std::set::iterator itr = file_list.begin(); itr != file_list.end(); ++itr) - fprintf(fout, "\t%s \\\n", itr->c_str()); + for(std::set::iterator itr = file_list.begin(), next; itr != file_list.end(); ++itr) + { + next = itr; ++next; + fprintf(fout, "\t%s %s\n", itr->c_str(), next == file_list.end() ? "" : "\\"); + } fclose(fout); diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 760e62ee4..c60dc916b 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 "7003" + #define REVISION_NR "7004" #endif // __REVISION_NR_H__ From 8f0c7b4cf096e3a24b92621786d5e72aae57d63b Mon Sep 17 00:00:00 2001 From: Wyk3d Date: Fri, 2 Jan 2009 16:48:03 +0200 Subject: [PATCH 055/145] Added .sql extension to new updates in Makefile.am --- contrib/git_id/git_id.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contrib/git_id/git_id.cpp b/contrib/git_id/git_id.cpp index ee1f84a4b..b410fb7dd 100644 --- a/contrib/git_id/git_id.cpp +++ b/contrib/git_id/git_id.cpp @@ -563,7 +563,7 @@ bool generate_sql_makefile() if(new_sql_updates.find(buffer) != new_sql_updates.end()) { if(!get_sql_update_info(buffer, info)) return false; - snprintf(newname, MAX_PATH, "%d_%0*d_%s%s%s", rev, 2, info.nr, info.db, info.has_table ? "_" : "", info.table); + snprintf(newname, MAX_PATH, "%d_%0*d_%s%s%s.sql", rev, 2, info.nr, info.db, info.has_table ? "_" : "", info.table); file_list.insert(newname); } else From d2d5cb46433879d3a80ceee3a27fb0f1c2e29a0f Mon Sep 17 00:00:00 2001 From: Wyk3d Date: Fri, 2 Jan 2009 16:52:39 +0200 Subject: [PATCH 056/145] Fixed the existing makefile.am too --- sql/updates/Makefile.am | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sql/updates/Makefile.am b/sql/updates/Makefile.am index f01391ba9..fe090afa4 100644 --- a/sql/updates/Makefile.am +++ b/sql/updates/Makefile.am @@ -107,7 +107,7 @@ pkgdata_DATA = \ 6970_01_mangos_playercreateinfo.sql \ 6976_01_realmd_realmd_db_version.sql \ 6976_02_characters_character_db_version.sql \ - 7002_01_mangos_spell_chain \ + 7002_01_mangos_spell_chain.sql \ README ## Additional files to include when running 'make dist' @@ -195,5 +195,5 @@ EXTRA_DIST = \ 6970_01_mangos_playercreateinfo.sql \ 6976_01_realmd_realmd_db_version.sql \ 6976_02_characters_character_db_version.sql \ - 7002_01_mangos_spell_chain \ + 7002_01_mangos_spell_chain.sql \ README From bd4fc1b0ae665af4fbe46fb58aab5600dc1eea2b Mon Sep 17 00:00:00 2001 From: VladimirMangos Date: Fri, 2 Jan 2009 19:07:34 +0300 Subject: [PATCH 057/145] [7005] Request Area/Zone Ids using 3D coordinates. .map files not have 3D specifci area infor. So use hack way for update areaflag for some cases (areas 4281, 4342) where exist area dependent auras. --- src/game/Level1.cpp | 3 ++- src/game/Map.cpp | 25 ++++++++++++++++++++++--- src/game/Map.h | 10 +++++----- src/game/MapManager.h | 8 ++++---- src/game/Object.cpp | 4 ++-- src/game/ObjectMgr.cpp | 2 +- src/game/Player.cpp | 9 +++++---- src/shared/revision_nr.h | 2 +- 8 files changed, 42 insertions(+), 21 deletions(-) diff --git a/src/game/Level1.cpp b/src/game/Level1.cpp index d42141d0d..fb27666b6 100644 --- a/src/game/Level1.cpp +++ b/src/game/Level1.cpp @@ -2125,7 +2125,8 @@ bool ChatHandler::HandleNameTeleCommand(const char * args) return false; PSendSysMessage(LANG_TELEPORTING_TO, name.c_str(), GetMangosString(LANG_OFFLINE), tele->name.c_str()); - Player::SavePositionInDB(tele->mapId,tele->position_x,tele->position_y,tele->position_z,tele->orientation,MapManager::Instance().GetZoneId(tele->mapId,tele->position_x,tele->position_y),guid); + Player::SavePositionInDB(tele->mapId,tele->position_x,tele->position_y,tele->position_z,tele->orientation, + MapManager::Instance().GetZoneId(tele->mapId,tele->position_x,tele->position_y,tele->position_z),guid); } else PSendSysMessage(LANG_NO_PLAYER, name.c_str()); diff --git a/src/game/Map.cpp b/src/game/Map.cpp index d2f8c06a9..4d05e5e2e 100644 --- a/src/game/Map.cpp +++ b/src/game/Map.cpp @@ -1076,7 +1076,7 @@ float Map::GetHeight(float x, float y, float z, bool pUseVmaps) const } } -uint16 Map::GetAreaFlag(float x, float y ) const +uint16 Map::GetAreaFlag(float x, float y, float z) const { //local x,y coords float lx,ly; @@ -1094,11 +1094,30 @@ uint16 Map::GetAreaFlag(float x, float y ) const // ensure GridMap is loaded const_cast(this)->EnsureGridCreated(GridPair(63-gx,63-gy)); + uint16 areaflag; if(GridMaps[gx][gy]) - return GridMaps[gx][gy]->area_flag[(int)(lx)][(int)(ly)]; + areaflag = GridMaps[gx][gy]->area_flag[(int)(lx)][(int)(ly)]; // this used while not all *.map files generated (instances) else - return GetAreaFlagByMapId(i_id); + areaflag = GetAreaFlagByMapId(i_id); + + //FIXME: some hacks for areas above or underground for ground area + // required for area specific spells/etc, until map/vmap data + // not provided correct areaflag with this hacks + switch(areaflag) + { + // Acherus: The Ebon Hold (Plaguelands: The Scarlet Enclave) + case 1984: // Plaguelands: The Scarlet Enclave + case 2076: // Death's Breach (Plaguelands: The Scarlet Enclave) + case 2745: // The Noxious Pass (Plaguelands: The Scarlet Enclave) + if(z > 350.0f) areaflag = 2048; break; + // Acherus: The Ebon Hold (Eastern Plaguelands) + case 856: // The Noxious Glade (Eastern Plaguelands) + case 2456: // Death's Breach (Eastern Plaguelands) + if(z > 350.0f) areaflag = 1950; break; + } + + return areaflag; } uint8 Map::GetTerrainType(float x, float y ) const diff --git a/src/game/Map.h b/src/game/Map.h index 70137a614..21e2d7d01 100644 --- a/src/game/Map.h +++ b/src/game/Map.h @@ -182,7 +182,7 @@ class MANGOS_DLL_SPEC Map : public GridRefManager, public MaNGOS::Obj float GetHeight(float x, float y, float z, bool pCheckVMap=true) const; bool IsInWater(float x, float y, float z) const; // does not use z pos. This is for future use - uint16 GetAreaFlag(float x, float y ) const; + uint16 GetAreaFlag(float x, float y, float z) const; uint8 GetTerrainType(float x, float y ) const; float GetWaterLevel(float x, float y ) const; bool IsUnderWater(float x, float y, float z) const; @@ -190,14 +190,14 @@ class MANGOS_DLL_SPEC Map : public GridRefManager, public MaNGOS::Obj static uint32 GetAreaId(uint16 areaflag,uint32 map_id); static uint32 GetZoneId(uint16 areaflag,uint32 map_id); - uint32 GetAreaId(float x, float y) const + uint32 GetAreaId(float x, float y, float z) const { - return GetAreaId(GetAreaFlag(x,y),i_id); + return GetAreaId(GetAreaFlag(x,y,z),i_id); } - uint32 GetZoneId(float x, float y) const + uint32 GetZoneId(float x, float y, float z) const { - return GetZoneId(GetAreaFlag(x,y),i_id); + return GetZoneId(GetAreaFlag(x,y,z),i_id); } virtual void MoveAllCreaturesInMoveList(); diff --git a/src/game/MapManager.h b/src/game/MapManager.h index 43ba884a9..74312d602 100644 --- a/src/game/MapManager.h +++ b/src/game/MapManager.h @@ -45,13 +45,13 @@ class MANGOS_DLL_DECL MapManager : public MaNGOS::Singleton(this)->_GetBaseMap(id); } void DeleteInstance(uint32 mapid, uint32 instanceId); - inline uint16 GetAreaFlag(uint32 mapid, float x, float y) const + inline uint16 GetAreaFlag(uint32 mapid, float x, float y, float z) const { Map const* m = GetBaseMap(mapid); - return m->GetAreaFlag(x, y); + return m->GetAreaFlag(x, y, z); } - inline uint32 GetAreaId(uint32 mapid, float x, float y) { return Map::GetAreaId(GetAreaFlag(mapid, x, y),mapid); } - inline uint32 GetZoneId(uint32 mapid, float x, float y) { return Map::GetZoneId(GetAreaFlag(mapid, x, y),mapid); } + inline uint32 GetAreaId(uint32 mapid, float x, float y, float z) { return Map::GetAreaId(GetAreaFlag(mapid, x, y, z),mapid); } + inline uint32 GetZoneId(uint32 mapid, float x, float y, float z) { return Map::GetZoneId(GetAreaFlag(mapid, x, y, z),mapid); } void Initialize(void); void Update(time_t); diff --git a/src/game/Object.cpp b/src/game/Object.cpp index ebd2279b7..b2c9e16d5 100644 --- a/src/game/Object.cpp +++ b/src/game/Object.cpp @@ -1044,12 +1044,12 @@ void WorldObject::_Create( uint32 guidlow, HighGuid guidhigh, uint32 mapid ) uint32 WorldObject::GetZoneId() const { - return MapManager::Instance().GetBaseMap(m_mapId)->GetZoneId(m_positionX,m_positionY); + return MapManager::Instance().GetBaseMap(m_mapId)->GetZoneId(m_positionX,m_positionY,m_positionZ); } uint32 WorldObject::GetAreaId() const { - return MapManager::Instance().GetBaseMap(m_mapId)->GetAreaId(m_positionX,m_positionY); + return MapManager::Instance().GetBaseMap(m_mapId)->GetAreaId(m_positionX,m_positionY,m_positionZ); } InstanceData* WorldObject::GetInstanceData() diff --git a/src/game/ObjectMgr.cpp b/src/game/ObjectMgr.cpp index f492192e1..e33152c86 100644 --- a/src/game/ObjectMgr.cpp +++ b/src/game/ObjectMgr.cpp @@ -4858,7 +4858,7 @@ void ObjectMgr::LoadGraveyardZones() WorldSafeLocsEntry const *ObjectMgr::GetClosestGraveYard(float x, float y, float z, uint32 MapId, uint32 team) { // search for zone associated closest graveyard - uint32 zoneId = MapManager::Instance().GetZoneId(MapId,x,y); + uint32 zoneId = MapManager::Instance().GetZoneId(MapId,x,y,z); // Simulate std. algorithm: // found some graveyard associated to (ghost_zone,ghost_map) diff --git a/src/game/Player.cpp b/src/game/Player.cpp index 347c24305..7124023e0 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -1368,7 +1368,7 @@ void Player::BuildEnumData( QueryResult * result, WorldPacket * p_data ) *p_data << uint8(getLevel()); // player level // do not use GetMap! it will spawn a new instance since the bound instances are not loaded - uint32 zoneId = MapManager::Instance().GetZoneId(GetMapId(), GetPositionX(),GetPositionY()); + uint32 zoneId = MapManager::Instance().GetZoneId(GetMapId(), GetPositionX(),GetPositionY(),GetPositionZ()); sLog.outDebug("Player::BuildEnumData: m:%u, x:%f, y:%f, z:%f zone:%u", GetMapId(), GetPositionX(), GetPositionY(), GetPositionZ(), zoneId); *p_data << uint32(zoneId); *p_data << uint32(GetMapId()); @@ -5328,7 +5328,7 @@ void Player::CheckExploreSystem() if (isInFlight()) return; - uint16 areaFlag=MapManager::Instance().GetBaseMap(GetMapId())->GetAreaFlag(GetPositionX(),GetPositionY()); + uint16 areaFlag=MapManager::Instance().GetBaseMap(GetMapId())->GetAreaFlag(GetPositionX(),GetPositionY(),GetPositionZ()); if(areaFlag==0xffff) return; int offset = areaFlag / 32; @@ -6170,16 +6170,17 @@ uint32 Player::GetZoneIdFromDB(uint64 guid) if (!zone) { // stored zone is zero, use generic and slow zone detection - result = CharacterDatabase.PQuery("SELECT map,position_x,position_y FROM characters WHERE guid='%u'", guidLow); + result = CharacterDatabase.PQuery("SELECT map,position_x,position_y,position_z FROM characters WHERE guid='%u'", guidLow); if( !result ) return 0; fields = result->Fetch(); uint32 map = fields[0].GetUInt32(); float posx = fields[1].GetFloat(); float posy = fields[2].GetFloat(); + float posz = fields[3].GetFloat(); delete result; - zone = MapManager::Instance().GetZoneId(map,posx,posy); + zone = MapManager::Instance().GetZoneId(map,posx,posy,posz); CharacterDatabase.PExecute("UPDATE characters SET zone='%u' WHERE guid='%u'", zone, guidLow); } diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index c60dc916b..262124edd 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 "7004" + #define REVISION_NR "7005" #endif // __REVISION_NR_H__ From 4dbb744af43624d4f420f43c118bb4936fcb4061 Mon Sep 17 00:00:00 2001 From: VladimirMangos Date: Fri, 2 Jan 2009 19:19:02 +0300 Subject: [PATCH 058/145] [7006] Implement area limitations for spell 51721 (and auto apply for this in area) and 54055. --- src/game/Player.cpp | 30 +++++++++++++++++++++--------- src/game/SpellMgr.cpp | 3 +++ src/shared/revision_nr.h | 2 +- 3 files changed, 25 insertions(+), 10 deletions(-) diff --git a/src/game/Player.cpp b/src/game/Player.cpp index 7124023e0..d222d9d43 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -18678,16 +18678,28 @@ void Player::UpdateAreaDependentAuras( uint32 newArea ) ++iter; } - // Dragonmaw Illusion - if( newArea == 3759 || newArea == 3966 || newArea == 3939 ) + // some auras applied at subzone enter + switch(newArea) { - if( GetDummyAura(40214) ) - { - if( !HasAura(40216,0) ) - CastSpell(this,40216,true); - if( !HasAura(42016,0) ) - CastSpell(this,42016,true); - } + // Dragonmaw Illusion + case 3759: // Netherwing Ledge + case 3939: // Dragonmaw Fortress + case 3966: // Dragonmaw Base Camp + if( GetDummyAura(40214) ) + { + if( !HasAura(40216,0) ) + CastSpell(this,40216,true); + if( !HasAura(42016,0) ) + CastSpell(this,42016,true); + } + break; + // Dominion Over Acherus + case 4281: // Acherus: The Ebon Hold + case 4342: // Acherus: The Ebon Hold + if( HasSpell(51721) ) + if( !HasAura(51721,0) ) + CastSpell(this,51721,true); + break; } } diff --git a/src/game/SpellMgr.cpp b/src/game/SpellMgr.cpp index 442c2d376..39eb917dc 100644 --- a/src/game/SpellMgr.cpp +++ b/src/game/SpellMgr.cpp @@ -2333,6 +2333,9 @@ uint8 GetSpellAllowedInLocationError(SpellEntry const *spellInfo,uint32 map_id,u case 40216: // Dragonmaw Illusion case 42016: // Dragonmaw Illusion return area_id == 3759 || area_id == 3966 || area_id == 3939 ? 0 : SPELL_FAILED_INCORRECT_AREA; + case 51721: // Dominion Over Acherus + case 54055: // Dominion Over Acherus + return area_id == 4281 || area_id == 4342 ? 0 : SPELL_FAILED_INCORRECT_AREA; } return 0; diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 262124edd..3e3459cfe 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 "7005" + #define REVISION_NR "7006" #endif // __REVISION_NR_H__ From 48d6043eed030d88624476e7ba8243a0a471ff23 Mon Sep 17 00:00:00 2001 From: ApoC Date: Fri, 2 Jan 2009 17:36:50 +0100 Subject: [PATCH 059/145] [7007] Fix: Using enum value instead of numeric constant. Signed-off-by: ApoC --- src/game/SpellAuras.cpp | 2 +- src/shared/revision_nr.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp index 21593a5f2..9456fd858 100644 --- a/src/game/SpellAuras.cpp +++ b/src/game/SpellAuras.cpp @@ -4682,7 +4682,7 @@ void Aura::HandleModPowerRegen(bool apply, bool Real) // drinking else if( GetId() == 20577 ) { // cannibalize anim - m_target->HandleEmoteCommand(398); + m_target->HandleEmoteCommand(EMOTE_STATE_CANNIBALIZE); } // Warrior talent, gain 1 rage every 3 seconds while in combat diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 3e3459cfe..3c96138b0 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 "7006" + #define REVISION_NR "7007" #endif // __REVISION_NR_H__ From dc8649a86af1b403f6577c6445dfb19d29f1eb12 Mon Sep 17 00:00:00 2001 From: DiSlord Date: Fri, 2 Jan 2009 23:19:41 +0300 Subject: [PATCH 060/145] [7008] Remove not used in 303 aura states from code Signed-off-by: DiSlord --- src/game/SharedDefines.h | 14 ++++++++------ src/game/SpellAuras.cpp | 17 ----------------- src/game/SpellEffects.cpp | 34 +--------------------------------- src/game/Unit.cpp | 25 ------------------------- src/game/Unit.h | 10 ++++------ src/shared/revision_nr.h | 2 +- 6 files changed, 14 insertions(+), 88 deletions(-) diff --git a/src/game/SharedDefines.h b/src/game/SharedDefines.h index 412b85f50..ae6c2c54c 100644 --- a/src/game/SharedDefines.h +++ b/src/game/SharedDefines.h @@ -691,20 +691,22 @@ enum AuraState //AURA_STATE_UNKNOWN6 = 6, // | not used AURA_STATE_HUNTER_PARRY = 7, // C | AURA_STATE_ROGUE_ATTACK_FROM_STEALTH = 7, // C | FIX ME: not implemented yet! - //AURA_STATE_UNKNOWN7c = 7, // c | random/focused bursts spells (?) + //AURA_STATE_UNKNOWN7 = 7, // c | random/focused bursts spells (?) //AURA_STATE_UNKNOWN8 = 8, // | not used //AURA_STATE_UNKNOWN9 = 9, // | not used AURA_STATE_WARRIOR_VICTORY_RUSH = 10, // C | warrior victory rush - AURA_STATE_HUNTER_CRIT_STRIKE = 10, // C | hunter crit strike - AURA_STATE_CRIT = 11, // C | + //AURA_STATE_UNKNOWN11 = 11, // t| AURA_STATE_FAERIE_FIRE = 12, // c t| AURA_STATE_HEALTHLESS_35_PERCENT = 13, // C T | AURA_STATE_IMMOLATE = 14, // T | AURA_STATE_SWIFTMEND = 15, // T | AURA_STATE_DEADLY_POISON = 16, // T | - AURA_STATE_FORBEARANCE = 17, // c t| - AURA_STATE_WEAKENED_SOUL = 18, // t| - AURA_STATE_HYPOTHERMIA = 19, // c | + //AURA_STATE_UNKNOWN17 = 17, // C | + //AURA_STATE_UNKNOWN18 = 18, // C t| + //AURA_STATE_UNKNOWN19 = 19, // | not used + //AURA_STATE_UNKNOWN20 = 20, // c | only (45317 Suicide) + //AURA_STATE_UNKNOWN21 = 21, // | not used + //AURA_STATE_UNKNOWN22 = 22, // C | not implemented yet (Requires Evasive Charges to use) AURA_STATE_HEALTH_ABOVE_75_PERCENT = 23, // C | not implemented yet }; diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp index 9456fd858..ee2428156 100644 --- a/src/game/SpellAuras.cpp +++ b/src/game/SpellAuras.cpp @@ -2196,12 +2196,6 @@ void Aura::HandleAuraDummy(bool apply, bool Real) } case SPELLFAMILY_MAGE: { - // Hypothermia - if( GetId()==41425 ) - { - m_target->ModifyAuraState(AURA_STATE_HYPOTHERMIA,apply); - return; - } break; } case SPELLFAMILY_DRUID: @@ -3843,17 +3837,6 @@ void Aura::HandleModMechanicImmunity(bool apply, bool Real) m_target->ApplySpellImmune(GetId(),IMMUNITY_MECHANIC,m_modifier.m_miscvalue,apply); - // special cases - switch(m_modifier.m_miscvalue) - { - case MECHANIC_INVULNERABILITY: - m_target->ModifyAuraState(AURA_STATE_FORBEARANCE,apply); - break; - case MECHANIC_SHIELD: - m_target->ModifyAuraState(AURA_STATE_WEAKENED_SOUL,apply); - break; - } - // Bestial Wrath if ( GetSpellProto()->SpellFamilyName == SPELLFAMILY_HUNTER && GetSpellProto()->SpellIconID == 1680) { diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp index e0abe79fc..bdaf55205 100644 --- a/src/game/SpellEffects.cpp +++ b/src/game/SpellEffects.cpp @@ -1459,32 +1459,6 @@ void Spell::EffectDummy(uint32 i) m_damage+= damage; return; } - // Kill command - if(m_spellInfo->SpellFamilyFlags & 0x00080000000000LL) - { - if(m_caster->getClass()!=CLASS_HUNTER) - return; - - // clear hunter crit aura state - m_caster->ModifyAuraState(AURA_STATE_HUNTER_CRIT_STRIKE,false); - - // additional damage from pet to pet target - Pet* pet = m_caster->GetPet(); - if(!pet || !pet->getVictim()) - return; - - uint32 spell_id = 0; - switch (m_spellInfo->Id) - { - case 34026: spell_id = 34027; break; // rank 1 - default: - sLog.outError("Spell::EffectDummy: Spell %u not handled in KC",m_spellInfo->Id); - return; - } - - pet->CastSpell(pet->getVictim(), spell_id, true); - return; - } switch(m_spellInfo->Id) { @@ -2225,13 +2199,7 @@ void Spell::EffectApplyAura(uint32 i) if(unitTarget->GetTypeId()==TYPEID_PLAYER) // Negative buff should only be applied on players { uint32 spellId = 0; - if(m_spellInfo->CasterAuraStateNot==AURA_STATE_WEAKENED_SOUL || m_spellInfo->TargetAuraStateNot==AURA_STATE_WEAKENED_SOUL) - spellId = 6788; // Weakened Soul - else if(m_spellInfo->CasterAuraStateNot==AURA_STATE_FORBEARANCE || m_spellInfo->TargetAuraStateNot==AURA_STATE_FORBEARANCE) - spellId = 25771; // Forbearance - else if(m_spellInfo->CasterAuraStateNot==AURA_STATE_HYPOTHERMIA) - spellId = 41425; // Hypothermia - else if (m_spellInfo->Mechanic == MECHANIC_BANDAGE) // Bandages + if (m_spellInfo->Mechanic == MECHANIC_BANDAGE) // Bandages spellId = 11196; // Recently Bandaged else if( (m_spellInfo->AttributesEx & 0x20) && (m_spellInfo->AttributesEx2 & 0x20000) ) spellId = 23230; // Blood Fury - Healing Reduction diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index 7b3499259..90af6c6c3 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -9721,17 +9721,6 @@ void Unit::ProcDamageAndSpellFor( bool isVictim, Unit * pTarget, uint32 procFlag ((Player*)this)->AddComboPoints(pTarget, 1); StartReactiveTimer( REACTIVE_OVERPOWER ); } - // Enable AURA_STATE_CRIT on crit - if (procExtra & PROC_EX_CRITICAL_HIT) - { - ModifyAuraState(AURA_STATE_CRIT, true); - StartReactiveTimer( REACTIVE_CRIT ); - if(getClass()==CLASS_HUNTER) - { - ModifyAuraState(AURA_STATE_HUNTER_CRIT_STRIKE, true); - StartReactiveTimer( REACTIVE_HUNTER_CRIT ); - } - } } } } @@ -10172,7 +10161,6 @@ void Unit::ClearComboPointHolders() void Unit::ClearAllReactives() { - for(int i=0; i < MAX_REACTIVE; ++i) m_reactiveTimer[i] = 0; @@ -10180,11 +10168,6 @@ void Unit::ClearAllReactives() ModifyAuraState(AURA_STATE_DEFENSE, false); if (getClass() == CLASS_HUNTER && HasAuraState( AURA_STATE_HUNTER_PARRY)) ModifyAuraState(AURA_STATE_HUNTER_PARRY, false); - if (HasAuraState( AURA_STATE_CRIT)) - ModifyAuraState(AURA_STATE_CRIT, false); - if (getClass() == CLASS_HUNTER && HasAuraState( AURA_STATE_HUNTER_CRIT_STRIKE) ) - ModifyAuraState(AURA_STATE_HUNTER_CRIT_STRIKE, false); - if(getClass() == CLASS_WARRIOR && GetTypeId() == TYPEID_PLAYER) ((Player*)this)->ClearComboPoints(); } @@ -10212,14 +10195,6 @@ void Unit::UpdateReactives( uint32 p_time ) if ( getClass() == CLASS_HUNTER && HasAuraState(AURA_STATE_HUNTER_PARRY)) ModifyAuraState(AURA_STATE_HUNTER_PARRY, false); break; - case REACTIVE_CRIT: - if (HasAuraState(AURA_STATE_CRIT)) - ModifyAuraState(AURA_STATE_CRIT, false); - break; - case REACTIVE_HUNTER_CRIT: - if ( getClass() == CLASS_HUNTER && HasAuraState(AURA_STATE_HUNTER_CRIT_STRIKE) ) - ModifyAuraState(AURA_STATE_HUNTER_CRIT_STRIKE, false); - break; case REACTIVE_OVERPOWER: if(getClass() == CLASS_WARRIOR && GetTypeId() == TYPEID_PLAYER) ((Player*)this)->ClearComboPoints(); diff --git a/src/game/Unit.h b/src/game/Unit.h index c2bc79099..2d903e6e4 100644 --- a/src/game/Unit.h +++ b/src/game/Unit.h @@ -743,14 +743,12 @@ struct CharmInfo enum ReactiveType { - REACTIVE_DEFENSE = 1, - REACTIVE_HUNTER_PARRY = 2, - REACTIVE_CRIT = 3, - REACTIVE_HUNTER_CRIT = 4, - REACTIVE_OVERPOWER = 5 + REACTIVE_DEFENSE = 0, + REACTIVE_HUNTER_PARRY = 1, + REACTIVE_OVERPOWER = 2 }; -#define MAX_REACTIVE 6 +#define MAX_REACTIVE 3 #define MAX_TOTEM 4 // delay time next attack to prevent client attack animation problems diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 3c96138b0..8fd0f86b3 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 "7007" + #define REVISION_NR "7008" #endif // __REVISION_NR_H__ From c88dfbccb34634fa54438e6cfe7a1b71033d1718 Mon Sep 17 00:00:00 2001 From: VladimirMangos Date: Sat, 3 Jan 2009 00:05:39 +0300 Subject: [PATCH 061/145] [7009] Fixed spell 6991 work. Also fix max power limits in some miscvalue checks. --- src/game/Spell.cpp | 12 ++++++++---- src/game/SpellAuras.cpp | 4 ++-- src/game/SpellEffects.cpp | 13 +++++++------ src/shared/revision_nr.h | 2 +- 4 files changed, 18 insertions(+), 13 deletions(-) diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp index 0e6380c49..ef4a69293 100644 --- a/src/game/Spell.cpp +++ b/src/game/Spell.cpp @@ -577,6 +577,7 @@ void Spell::FillTargetMap() case SPELL_EFFECT_ADD_FARSIGHT: case SPELL_EFFECT_APPLY_GLYPH: case SPELL_EFFECT_STUCK: + case SPELL_EFFECT_FEED_PET: case SPELL_EFFECT_DESTROY_ALL_TOTEMS: case SPELL_EFFECT_SUMMON_DEMON: case SPELL_EFFECT_SKILL: @@ -589,7 +590,6 @@ void Spell::FillTargetMap() case SPELL_EFFECT_ENCHANT_ITEM: case SPELL_EFFECT_ENCHANT_ITEM_TEMPORARY: case SPELL_EFFECT_DISENCHANT: - case SPELL_EFFECT_FEED_PET: case SPELL_EFFECT_PROSPECTING: case SPELL_EFFECT_MILLING: if(m_targets.getItemTarget()) @@ -3916,7 +3916,11 @@ uint8 Spell::CanCast(bool strict) } case SPELL_EFFECT_FEED_PET: { - if (m_caster->GetTypeId() != TYPEID_PLAYER || !m_targets.getItemTarget() ) + if (m_caster->GetTypeId() != TYPEID_PLAYER) + return SPELL_FAILED_BAD_TARGETS; + + Item* foodItem = m_targets.getItemTarget(); + if(!foodItem) return SPELL_FAILED_BAD_TARGETS; Pet* pet = m_caster->GetPet(); @@ -3924,10 +3928,10 @@ uint8 Spell::CanCast(bool strict) if(!pet) return SPELL_FAILED_NO_PET; - if(!pet->HaveInDiet(m_targets.getItemTarget()->GetProto())) + if(!pet->HaveInDiet(foodItem->GetProto())) return SPELL_FAILED_WRONG_PET_FOOD; - if(!pet->GetCurrentFoodBenefitLevel(m_targets.getItemTarget()->GetProto()->ItemLevel)) + if(!pet->GetCurrentFoodBenefitLevel(foodItem->GetProto()->ItemLevel)) return SPELL_FAILED_FOOD_LOWLEVEL; if(m_caster->isInCombat() || pet->isInCombat()) diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp index ee2428156..ee7ab3226 100644 --- a/src/game/SpellAuras.cpp +++ b/src/game/SpellAuras.cpp @@ -6029,7 +6029,7 @@ void Aura::PeriodicTick() sLog.outDetail("PeriodicTick: %u (TypeId: %u) power leech of %u (TypeId: %u) for %u dmg inflicted by %u", GUID_LOPART(GetCasterGUID()), GuidHigh2TypeId(GUID_HIPART(GetCasterGUID())), m_target->GetGUIDLow(), m_target->GetTypeId(), pdamage, GetId()); - if(m_modifier.m_miscvalue < 0 || m_modifier.m_miscvalue > 4) + if(m_modifier.m_miscvalue < 0 || m_modifier.m_miscvalue >= MAX_POWERS) break; Powers power = Powers(m_modifier.m_miscvalue); @@ -6084,7 +6084,7 @@ void Aura::PeriodicTick() sLog.outDetail("PeriodicTick: %u (TypeId: %u) energize %u (TypeId: %u) for %u dmg inflicted by %u", GUID_LOPART(GetCasterGUID()), GuidHigh2TypeId(GUID_HIPART(GetCasterGUID())), m_target->GetGUIDLow(), m_target->GetTypeId(), pdamage, GetId()); - if(m_modifier.m_miscvalue < 0 || m_modifier.m_miscvalue > 4) + if(m_modifier.m_miscvalue < 0 || m_modifier.m_miscvalue >= MAX_POWERS) break; Powers power = Powers(m_modifier.m_miscvalue); diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp index bdaf55205..6cd8cc818 100644 --- a/src/game/SpellEffects.cpp +++ b/src/game/SpellEffects.cpp @@ -2688,6 +2688,8 @@ void Spell::EffectEnergize(uint32 i) if(m_spellInfo->EffectMiscValue[i] < 0 || m_spellInfo->EffectMiscValue[i] >= MAX_POWERS) return; + Powers power = Powers(m_spellInfo->EffectMiscValue[i]); + // Some level depends spells int multiplier = 0; int level_diff = 0; @@ -2718,8 +2720,6 @@ void Spell::EffectEnergize(uint32 i) if(damage < 0) return; - Powers power = Powers(m_spellInfo->EffectMiscValue[i]); - if(unitTarget->GetMaxPower(power) == 0) return; @@ -5402,7 +5402,8 @@ void Spell::EffectFeedPet(uint32 i) Player *_player = (Player*)m_caster; - if(!itemTarget) + Item* foodItem = m_targets.getItemTarget(); + if(!foodItem) return; Pet *pet = _player->GetPet(); @@ -5412,15 +5413,15 @@ void Spell::EffectFeedPet(uint32 i) if(!pet->isAlive()) return; - int32 benefit = pet->GetCurrentFoodBenefitLevel(itemTarget->GetProto()->ItemLevel); + int32 benefit = pet->GetCurrentFoodBenefitLevel(foodItem->GetProto()->ItemLevel); if(benefit <= 0) return; uint32 count = 1; - _player->DestroyItemCount(itemTarget,count,true); + _player->DestroyItemCount(foodItem,count,true); // TODO: fix crash when a spell has two effects, both pointed at the same item target - m_caster->CastCustomSpell(m_caster,m_spellInfo->EffectTriggerSpell[i],&benefit,NULL,NULL,true); + m_caster->CastCustomSpell(pet,m_spellInfo->EffectTriggerSpell[i],&benefit,NULL,NULL,true); } void Spell::EffectDismissPet(uint32 /*i*/) diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 8fd0f86b3..9ae2def5e 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 "7008" + #define REVISION_NR "7009" #endif // __REVISION_NR_H__ From 88208bc9a72776998fa2889d5f01472d2d5a299d Mon Sep 17 00:00:00 2001 From: arrai Date: Sat, 3 Jan 2009 00:36:48 +0100 Subject: [PATCH 062/145] [7010] Teleport players to the entrance of instances if they are in reset ones at login --- contrib/git_id/git_id.cpp | 2 +- src/game/ObjectMgr.cpp | 20 ++++++++++++++++++++ src/game/ObjectMgr.h | 1 + src/game/Player.cpp | 14 +++++++++++++- src/shared/revision_nr.h | 2 +- 5 files changed, 36 insertions(+), 3 deletions(-) diff --git a/contrib/git_id/git_id.cpp b/contrib/git_id/git_id.cpp index b410fb7dd..cad9bf2c4 100644 --- a/contrib/git_id/git_id.cpp +++ b/contrib/git_id/git_id.cpp @@ -827,7 +827,7 @@ int main(int argc, char *argv[]) printf(" -f, --fetch fetch from origin before searching for the new rev\n"); printf(" -s, --sql search for new sql updates and do all of the changes\n"); printf(" for the new rev\n"); - printf(" --branch=BRANCH specify which remote branch to use"); + printf(" --branch=BRANCH specify which remote branch to use\n"); return 0; } } diff --git a/src/game/ObjectMgr.cpp b/src/game/ObjectMgr.cpp index e33152c86..5efa2f127 100644 --- a/src/game/ObjectMgr.cpp +++ b/src/game/ObjectMgr.cpp @@ -5127,6 +5127,9 @@ void ObjectMgr::LoadAreaTriggerTeleports() sLog.outString( ">> Loaded %u area trigger teleport definitions", count ); } +/* + * Searches for the areatrigger which teleports players out of the given map + */ AreaTrigger const* ObjectMgr::GetGoBackTrigger(uint32 Map) const { const MapEntry *mapEntry = sMapStore.LookupEntry(Map); @@ -5143,6 +5146,23 @@ AreaTrigger const* ObjectMgr::GetGoBackTrigger(uint32 Map) const return NULL; } +/** + * Searches for the areatrigger which teleports players to the given map + */ +AreaTrigger const* ObjectMgr::GetMapEntranceTrigger(uint32 Map) const +{ + for (AreaTriggerMap::const_iterator itr = mAreaTriggers.begin(); itr != mAreaTriggers.end(); ++itr) + { + if(itr->second.target_mapId == Map) + { + AreaTriggerEntry const* atEntry = sAreaTriggerStore.LookupEntry(itr->first); + if(atEntry) + return &itr->second; + } + } + return NULL; +} + void ObjectMgr::SetHighestGuids() { QueryResult *result = CharacterDatabase.Query( "SELECT MAX(guid) FROM characters" ); diff --git a/src/game/ObjectMgr.h b/src/game/ObjectMgr.h index 825237bfc..bf5ca72a7 100644 --- a/src/game/ObjectMgr.h +++ b/src/game/ObjectMgr.h @@ -466,6 +466,7 @@ class ObjectMgr } AreaTrigger const* GetGoBackTrigger(uint32 Map) const; + AreaTrigger const* GetMapEntranceTrigger(uint32 Map) const; uint32 GetAreaTriggerScriptId(uint32 trigger_id); diff --git a/src/game/Player.cpp b/src/game/Player.cpp index d222d9d43..8e72dad01 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -13891,7 +13891,6 @@ bool Player::LoadFromDB( uint32 guid, SqlQueryHolder *holder ) uint32 transGUID = fields[24].GetUInt32(); Relocate(fields[6].GetFloat(),fields[7].GetFloat(),fields[8].GetFloat(),fields[10].GetFloat()); - SetFallInformation(0, fields[8].GetFloat()); SetMapId(fields[9].GetUInt32()); SetDifficulty(fields[32].GetUInt32()); // may be changed in _LoadGroup @@ -13944,6 +13943,16 @@ bool Player::LoadFromDB( uint32 guid, SqlQueryHolder *holder ) // getmap calls won't create new maps SetInstanceId(map->GetInstanceId()); + // if the player is in an instance and it has been reset in the meantime teleport him to the entrance + if(GetInstanceId() && !sInstanceSaveManager.GetInstanceSave(GetInstanceId())) + { + AreaTrigger const* at = objmgr.GetMapEntranceTrigger(GetMapId()); + if(at) + Relocate(at->target_X, at->target_Y, at->target_Z, at->target_Orientation); + else + sLog.outError("Player %s(GUID: %u) logged in to a reset instance (map: %u) and there is no aretrigger leading to this map. Thus he can't be ported back to the entrance. This _might_ be an exploit attempt.", GetName(), GetGUIDLow(), GetMapId()); + } + SaveRecallPosition(); if (transGUID != 0) @@ -14215,6 +14224,9 @@ bool Player::LoadFromDB( uint32 guid, SqlQueryHolder *holder ) // flight will started later } + // has to be called after last Relocate() in Player::LoadFromDB + SetFallInformation(0, GetPositionZ()); + _LoadSpellCooldowns(holder->GetResult(PLAYER_LOGIN_QUERY_LOADSPELLCOOLDOWNS)); // Spell code allow apply any auras to dead character in load time in aura/spell/item loading diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 9ae2def5e..8da13cd24 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 "7009" + #define REVISION_NR "7010" #endif // __REVISION_NR_H__ From 1f4b00a8489e702f2a5485dd9a9e4940f4f73e49 Mon Sep 17 00:00:00 2001 From: DiSlord Date: Sat, 3 Jan 2009 03:00:54 +0300 Subject: [PATCH 063/145] [7011] Add check Aura Spell req in Spell::CanCast Signed-off-by: DiSlord --- src/game/Spell.cpp | 12 ++++++++++++ src/game/Unit.cpp | 11 +++++++++++ src/game/Unit.h | 1 + src/shared/Database/DBCStructure.h | 8 ++++---- src/shared/Database/DBCfmt.cpp | 2 +- src/shared/revision_nr.h | 2 +- 6 files changed, 30 insertions(+), 6 deletions(-) diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp index ef4a69293..3abe79d1a 100644 --- a/src/game/Spell.cpp +++ b/src/game/Spell.cpp @@ -3516,6 +3516,12 @@ uint8 Spell::CanCast(bool strict) if(m_spellInfo->CasterAuraStateNot && m_caster->HasAuraState(AuraState(m_spellInfo->CasterAuraStateNot))) return SPELL_FAILED_CASTER_AURASTATE; + // Caster aura req check if need + if(m_spellInfo->casterAuraSpell && !m_caster->isAuraPresent(m_spellInfo->casterAuraSpell)) + return SPELL_FAILED_CASTER_AURASTATE; + if(m_spellInfo->excludeCasterAuraSpell && m_caster->isAuraPresent(m_spellInfo->excludeCasterAuraSpell)) + return SPELL_FAILED_CASTER_AURASTATE; + // cancel autorepeat spells if cast start when moving // (not wand currently autorepeat cast delayed to moving stop anyway in spell update code) if( m_caster->GetTypeId()==TYPEID_PLAYER && ((Player*)m_caster)->isMoving() ) @@ -3534,6 +3540,12 @@ uint8 Spell::CanCast(bool strict) if(m_spellInfo->TargetAuraStateNot && target->HasAuraState(AuraState(m_spellInfo->TargetAuraStateNot))) return SPELL_FAILED_TARGET_AURASTATE; + // Target aura req check if need + if(m_spellInfo->targetAuraSpell && !target->isAuraPresent(m_spellInfo->targetAuraSpell)) + return SPELL_FAILED_CASTER_AURASTATE; + if(m_spellInfo->excludeTargetAuraSpell && target->isAuraPresent(m_spellInfo->excludeTargetAuraSpell)) + return SPELL_FAILED_CASTER_AURASTATE; + if(target != m_caster) { // target state requirements (apply to non-self only), to allow cast affects to self like Dirty Deeds diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index 90af6c6c3..e4725a457 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -3803,6 +3803,17 @@ Aura* Unit::GetAura(uint32 spellId, uint32 effindex) return NULL; } +bool Unit::isAuraPresent(uint32 spellId) +{ + for (int i=0; i<3; ++i) + { + AuraMap::iterator iter = m_Auras.find(spellEffectPair(spellId, i)); + if (iter != m_Auras.end()) + return true; + } + return false; +} + void Unit::AddDynObject(DynamicObject* dynObj) { m_dynObjGUIDs.push_back(dynObj->GetGUID()); diff --git a/src/game/Unit.h b/src/game/Unit.h index 2d903e6e4..94f150236 100644 --- a/src/game/Unit.h +++ b/src/game/Unit.h @@ -1247,6 +1247,7 @@ class MANGOS_DLL_SPEC Unit : public WorldObject uint8 GetVisibleAurasCount() { return m_visibleAuras.size(); } Aura* GetAura(uint32 spellId, uint32 effindex); + bool isAuraPresent(uint32 spellId); AuraMap & GetAuras() { return m_Auras; } AuraMap const& GetAuras() const { return m_Auras; } AuraList const& GetAurasByType(AuraType type) const { return m_modAuras[type]; } diff --git a/src/shared/Database/DBCStructure.h b/src/shared/Database/DBCStructure.h index ebc33d629..4fc67cc01 100644 --- a/src/shared/Database/DBCStructure.h +++ b/src/shared/Database/DBCStructure.h @@ -1082,10 +1082,10 @@ struct SpellEntry uint32 TargetAuraState; // 18 m_targetAuraState uint32 CasterAuraStateNot; // 19 m_excludeCasterAuraState uint32 TargetAuraStateNot; // 20 m_excludeTargetAuraState - //uint32 casterAuraSpell; // 21 m_casterAuraSpell not used - //uint32 targetAuraSpell; // 22 m_targetAuraSpell not used - //uint32 excludeCasterAuraSpell; // 23 m_excludeCasterAuraSpell not used - //uint32 excludeTargetAuraSpell; // 24 m_excludeTargetAuraSpell not used + uint32 casterAuraSpell; // 21 m_casterAuraSpell + uint32 targetAuraSpell; // 22 m_targetAuraSpell + uint32 excludeCasterAuraSpell; // 23 m_excludeCasterAuraSpell + uint32 excludeTargetAuraSpell; // 24 m_excludeTargetAuraSpell uint32 CastingTimeIndex; // 25 m_castingTimeIndex uint32 RecoveryTime; // 26 m_recoveryTime uint32 CategoryRecoveryTime; // 27 m_categoryRecoveryTime diff --git a/src/shared/Database/DBCfmt.cpp b/src/shared/Database/DBCfmt.cpp index 00101f180..deca8d6b7 100644 --- a/src/shared/Database/DBCfmt.cpp +++ b/src/shared/Database/DBCfmt.cpp @@ -70,7 +70,7 @@ const char SkillLineAbilityfmt[]="niiiixxiiiiixx"; const char SoundEntriesfmt[]="nxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; const char SpellCastTimefmt[]="nixx"; const char SpellDurationfmt[]="niii"; -const char SpellEntryfmt[]="niiiiiiiiixiiiiiiiiiixxxxiiiiiiiiiiiiiiiiiiifxiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiffffffiiiiiiiiiiiiiiiiiiiiifffiiiiiiiiiiiiiiifffiiiiiiiiiiiiixssssssssssssssssxssssssssssssssssxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxiiiiiiiiiiixfffxxxiiiiix"; +const char SpellEntryfmt[]="niiiiiiiiixiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiifxiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiffffffiiiiiiiiiiiiiiiiiiiiifffiiiiiiiiiiiiiiifffiiiiiiiiiiiiixssssssssssssssssxssssssssssssssssxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxiiiiiiiiiiixfffxxxiiiiix"; const char SpellFocusObjectfmt[]="nxxxxxxxxxxxxxxxxx"; const char SpellItemEnchantmentfmt[]="nxiiiiiixxxiiissssssssssssssssxiiiixx"; const char SpellItemEnchantmentConditionfmt[]="nbbbbbxxxxxbbbbbbbbbbiiiiiXXXXX"; diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 8da13cd24..839c6d868 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 "7010" + #define REVISION_NR "7011" #endif // __REVISION_NR_H__ From ba5e3dabc6f8306bb4daf07dcdb07d8901f62f85 Mon Sep 17 00:00:00 2001 From: DiSlord Date: Sat, 3 Jan 2009 13:04:29 +0300 Subject: [PATCH 064/145] [7012] Fix use SpellVisual data Signed-off-by: DiSlord --- src/game/Spell.cpp | 2 +- src/game/SpellAuras.cpp | 2 +- src/game/SpellMgr.cpp | 4 ++-- src/shared/revision_nr.h | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp index 3abe79d1a..89eb3b841 100644 --- a/src/game/Spell.cpp +++ b/src/game/Spell.cpp @@ -5338,7 +5338,7 @@ Unit* Spell::SelectMagnetTarget() bool Spell::IsNeedSendToClient() const { - return m_spellInfo->SpellVisual!=0 || IsChanneledSpell(m_spellInfo) || + return m_spellInfo->SpellVisual[0] || m_spellInfo->SpellVisual[1] || IsChanneledSpell(m_spellInfo) || m_spellInfo->speed > 0.0f || !m_triggeredByAuraSpell && !m_IsTriggeredSpell; } diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp index ee7ab3226..6724b8e43 100644 --- a/src/game/SpellAuras.cpp +++ b/src/game/SpellAuras.cpp @@ -4120,7 +4120,7 @@ void Aura::HandlePeriodicDamage(bool apply, bool Real) case SPELLFAMILY_GENERIC: { // Pounce Bleed - if ( m_spellProto->SpellIconID == 147 && m_spellProto->SpellVisual == 0 ) + if ( m_spellProto->SpellIconID == 147 && m_spellProto->SpellVisual[0] == 0 ) { // $AP*0.18/6 bonus per tick if (apply && !loading && caster) diff --git a/src/game/SpellMgr.cpp b/src/game/SpellMgr.cpp index 39eb917dc..4a08b20f1 100644 --- a/src/game/SpellMgr.cpp +++ b/src/game/SpellMgr.cpp @@ -1137,7 +1137,7 @@ bool SpellMgr::IsNoStackSpellDueToSpell(uint32 spellId_1, uint32 spellId_2) cons case SPELLFAMILY_ROGUE: { // Garrote-Silence -> Garrote (multi-family check) - if( spellInfo_1->SpellIconID == 498 && spellInfo_1->SpellVisual == 0 && spellInfo_2->SpellIconID == 498 ) + if( spellInfo_1->SpellIconID == 498 && spellInfo_1->SpellVisual[0] == 0 && spellInfo_2->SpellIconID == 498 ) return false; break; @@ -1200,7 +1200,7 @@ bool SpellMgr::IsNoStackSpellDueToSpell(uint32 spellId_1, uint32 spellId_2) cons //Corruption & Seed of corruption if( spellInfo_1->SpellIconID == 313 && spellInfo_2->SpellIconID == 1932 || spellInfo_2->SpellIconID == 313 && spellInfo_1->SpellIconID == 1932 ) - if(spellInfo_1->SpellVisual != 0 && spellInfo_2->SpellVisual != 0) + if(spellInfo_1->SpellVisual[0] != 0 && spellInfo_2->SpellVisual[0] != 0) return true; // can't be stacked // Corruption and Unstable Affliction diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 839c6d868..db510b277 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 "7011" + #define REVISION_NR "7012" #endif // __REVISION_NR_H__ From 7e5c17b6c3564843cf8d37559f70acf891da7bd1 Mon Sep 17 00:00:00 2001 From: VladimirMangos Date: Sat, 3 Jan 2009 14:24:26 +0300 Subject: [PATCH 065/145] [7013] Rename recently added function for consistent with already existed. Use it for old cases. --- src/game/Level3.cpp | 2 +- src/game/Spell.cpp | 8 ++++---- src/game/Unit.cpp | 6 +++--- src/game/Unit.h | 6 ++++-- src/shared/revision_nr.h | 2 +- 5 files changed, 13 insertions(+), 11 deletions(-) diff --git a/src/game/Level3.cpp b/src/game/Level3.cpp index 5383ecfcb..479a5ee57 100644 --- a/src/game/Level3.cpp +++ b/src/game/Level3.cpp @@ -2718,7 +2718,7 @@ bool ChatHandler::HandleLookupSpellCommand(const char* args) bool talent = (talentCost > 0); bool passive = IsPassiveSpell(id); - bool active = target && (target->HasAura(id,0) || target->HasAura(id,1) || target->HasAura(id,2)); + bool active = target && target->HasAura(id); // unit32 used to prevent interpreting uint8 as char at output // find rank of learned spell for learning spell, or talent rank diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp index 89eb3b841..4800e35e8 100644 --- a/src/game/Spell.cpp +++ b/src/game/Spell.cpp @@ -3517,9 +3517,9 @@ uint8 Spell::CanCast(bool strict) return SPELL_FAILED_CASTER_AURASTATE; // Caster aura req check if need - if(m_spellInfo->casterAuraSpell && !m_caster->isAuraPresent(m_spellInfo->casterAuraSpell)) + if(m_spellInfo->casterAuraSpell && !m_caster->HasAura(m_spellInfo->casterAuraSpell)) return SPELL_FAILED_CASTER_AURASTATE; - if(m_spellInfo->excludeCasterAuraSpell && m_caster->isAuraPresent(m_spellInfo->excludeCasterAuraSpell)) + if(m_spellInfo->excludeCasterAuraSpell && m_caster->HasAura(m_spellInfo->excludeCasterAuraSpell)) return SPELL_FAILED_CASTER_AURASTATE; // cancel autorepeat spells if cast start when moving @@ -3541,9 +3541,9 @@ uint8 Spell::CanCast(bool strict) return SPELL_FAILED_TARGET_AURASTATE; // Target aura req check if need - if(m_spellInfo->targetAuraSpell && !target->isAuraPresent(m_spellInfo->targetAuraSpell)) + if(m_spellInfo->targetAuraSpell && !target->HasAura(m_spellInfo->targetAuraSpell)) return SPELL_FAILED_CASTER_AURASTATE; - if(m_spellInfo->excludeTargetAuraSpell && target->isAuraPresent(m_spellInfo->excludeTargetAuraSpell)) + if(m_spellInfo->excludeTargetAuraSpell && target->HasAura(m_spellInfo->excludeTargetAuraSpell)) return SPELL_FAILED_CASTER_AURASTATE; if(target != m_caster) diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index e4725a457..553b3628b 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -3803,11 +3803,11 @@ Aura* Unit::GetAura(uint32 spellId, uint32 effindex) return NULL; } -bool Unit::isAuraPresent(uint32 spellId) +bool Unit::HasAura(uint32 spellId) const { - for (int i=0; i<3; ++i) + for (int i = 0; i < 3 ; ++i) { - AuraMap::iterator iter = m_Auras.find(spellEffectPair(spellId, i)); + AuraMap::const_iterator iter = m_Auras.find(spellEffectPair(spellId, i)); if (iter != m_Auras.end()) return true; } diff --git a/src/game/Unit.h b/src/game/Unit.h index 94f150236..f4d40dda7 100644 --- a/src/game/Unit.h +++ b/src/game/Unit.h @@ -985,7 +985,10 @@ class MANGOS_DLL_SPEC Unit : public WorldObject bool HasAuraType(AuraType auraType) const; bool HasAura(uint32 spellId, uint32 effIndex) const - { return m_Auras.find(spellEffectPair(spellId, effIndex)) != m_Auras.end(); } + { + return m_Auras.find(spellEffectPair(spellId, effIndex)) != m_Auras.end(); + } + bool HasAura(uint32 spellId) const; bool virtual HasSpell(uint32 /*spellID*/) const { return false; } @@ -1247,7 +1250,6 @@ class MANGOS_DLL_SPEC Unit : public WorldObject uint8 GetVisibleAurasCount() { return m_visibleAuras.size(); } Aura* GetAura(uint32 spellId, uint32 effindex); - bool isAuraPresent(uint32 spellId); AuraMap & GetAuras() { return m_Auras; } AuraMap const& GetAuras() const { return m_Auras; } AuraList const& GetAurasByType(AuraType type) const { return m_modAuras[type]; } diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index db510b277..475581601 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 "7012" + #define REVISION_NR "7013" #endif // __REVISION_NR_H__ From 7864c9aee1fd4c754b61342b544171589c2b8ba4 Mon Sep 17 00:00:00 2001 From: arrai Date: Sat, 3 Jan 2009 14:51:09 +0100 Subject: [PATCH 066/145] [7014] Fixed setting initial value of achievement criteria counter, broken after 21df99d7. With that bug players had to complete an achievement criteria n+1 times --- src/game/AchievementMgr.cpp | 8 ++++---- src/shared/revision_nr.h | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/game/AchievementMgr.cpp b/src/game/AchievementMgr.cpp index 90ae2dde0..44df14bf1 100644 --- a/src/game/AchievementMgr.cpp +++ b/src/game/AchievementMgr.cpp @@ -788,7 +788,7 @@ AchievementCompletionState AchievementMgr::GetAchievementCompletionState(Achieve void AchievementMgr::SetCriteriaProgress(AchievementCriteriaEntry const* entry, uint32 newValue, bool relative) { - sLog.outString("AchievementMgr::SetCriteriaProgress(%u, %u)", entry->ID, newValue); + sLog.outDetail("AchievementMgr::SetCriteriaProgress(%u, %u)", entry->ID, newValue); CriteriaProgress *progress = NULL; CriteriaProgressMap::iterator iter = m_criteriaProgress.find(entry->ID); @@ -796,7 +796,7 @@ void AchievementMgr::SetCriteriaProgress(AchievementCriteriaEntry const* entry, if(iter == m_criteriaProgress.end()) { progress = &m_criteriaProgress[entry->ID]; - progress->counter = 0; + progress->counter = newValue; progress->date = time(NULL); } else @@ -826,7 +826,7 @@ void AchievementMgr::SetCriteriaProgress(AchievementCriteriaEntry const* entry, void AchievementMgr::CompletedAchievement(AchievementEntry const* achievement) { - sLog.outString("AchievementMgr::CompletedAchievement(%u)", achievement->ID); + sLog.outDetail("AchievementMgr::CompletedAchievement(%u)", achievement->ID); if(achievement->flags & ACHIEVEMENT_FLAG_COUNTER || m_completedAchievements.find(achievement->ID)!=m_completedAchievements.end()) return; @@ -843,6 +843,7 @@ void AchievementMgr::CompletedAchievement(AchievementEntry const* achievement) UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_ACHIEVEMENT); // reward items and titles + // TODO: rewards should be send by mail AchievementReward const* reward = NULL; for (uint32 i=0; iachievementId, reward->titleId[0], reward->titleId[1]); uint32 titleId = reward->titleId[GetPlayer()->GetTeam() == HORDE?0:1]; if(CharTitlesEntry const* titleEntry = sCharTitlesStore.LookupEntry(titleId)) GetPlayer()->SetTitle(titleEntry); diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 475581601..087432dda 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 "7013" + #define REVISION_NR "7014" #endif // __REVISION_NR_H__ From ee505ec9dab338fd12e65999374c3da4ec2e180f Mon Sep 17 00:00:00 2001 From: VladimirMangos Date: Sat, 3 Jan 2009 18:58:31 +0300 Subject: [PATCH 067/145] [7015] Implement support -1 in item_template.stackable and item_template.maxcount fields. Also disable incorrect used vanity pets/currences/quest items special slotes. All items in its will be send by mail to characters at re-login. Fixed code for item stacks operations with size > 255. --- sql/mangos.sql | 6 +- sql/updates/7015_01_mangos_item_template.sql | 14 +++ sql/updates/Makefile.am | 2 + src/game/Guild.h | 4 +- src/game/Item.cpp | 4 +- src/game/Item.h | 2 +- src/game/ItemHandler.cpp | 4 +- src/game/ItemPrototype.h | 6 +- src/game/Level3.cpp | 8 +- src/game/ObjectMgr.cpp | 13 ++- src/game/Player.cpp | 93 ++++++++++++-------- src/game/Player.h | 4 +- src/game/QuestHandler.cpp | 2 +- src/game/Spell.cpp | 2 +- src/game/SpellEffects.cpp | 4 +- src/shared/revision_nr.h | 2 +- 16 files changed, 109 insertions(+), 61 deletions(-) create mode 100644 sql/updates/7015_01_mangos_item_template.sql diff --git a/sql/mangos.sql b/sql/mangos.sql index a4f244135..2a041bba4 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_7002_01_mangos_spell_chain` bit(1) default NULL + `required_7015_01_mangos_item_template` bit(1) default NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Used DB version notes'; -- @@ -1539,8 +1539,8 @@ CREATE TABLE `item_template` ( `RequiredCityRank` mediumint(8) unsigned NOT NULL default '0', `RequiredReputationFaction` smallint(5) unsigned NOT NULL default '0', `RequiredReputationRank` smallint(5) unsigned NOT NULL default '0', - `maxcount` smallint(5) unsigned NOT NULL default '0', - `stackable` smallint(5) unsigned NOT NULL default '1', + `maxcount` smallint(5) NOT NULL default '-1', + `stackable` smallint(5) NOT NULL default '1', `ContainerSlots` tinyint(3) unsigned NOT NULL default '0', `StatsCount` tinyint(3) unsigned NOT NULL default '0', `stat_type1` tinyint(3) unsigned NOT NULL default '0', diff --git a/sql/updates/7015_01_mangos_item_template.sql b/sql/updates/7015_01_mangos_item_template.sql new file mode 100644 index 000000000..bdf9a92e7 --- /dev/null +++ b/sql/updates/7015_01_mangos_item_template.sql @@ -0,0 +1,14 @@ +ALTER TABLE db_version CHANGE COLUMN required_7002_01_mangos_spell_chain required_7015_01_mangos_item_template bit; + +UPDATE item_template + SET maxcount = 0 WHERE maxcount > 32000; + +UPDATE item_template + SET stackable = 0 WHERE stackable > 32000; + +ALTER TABLE item_template + CHANGE COLUMN maxcount maxcount smallint(5) NOT NULL default '-1', + CHANGE COLUMN stackable stackable smallint(5) NOT NULL default '1'; + +UPDATE item_template + SET stackable = -1 WHERE stackable = 0; diff --git a/sql/updates/Makefile.am b/sql/updates/Makefile.am index fe090afa4..4e7f74523 100644 --- a/sql/updates/Makefile.am +++ b/sql/updates/Makefile.am @@ -108,6 +108,7 @@ pkgdata_DATA = \ 6976_01_realmd_realmd_db_version.sql \ 6976_02_characters_character_db_version.sql \ 7002_01_mangos_spell_chain.sql \ + 7015_01_mangos_item_template.sql \ README ## Additional files to include when running 'make dist' @@ -196,4 +197,5 @@ EXTRA_DIST = \ 6976_01_realmd_realmd_db_version.sql \ 6976_02_characters_character_db_version.sql \ 7002_01_mangos_spell_chain.sql \ + 7015_01_mangos_item_template.sql \ README diff --git a/src/game/Guild.h b/src/game/Guild.h index 1a4cdf9a5..dc4b7998c 100644 --- a/src/game/Guild.h +++ b/src/game/Guild.h @@ -218,12 +218,12 @@ struct GuildBankTab struct GuildItemPosCount { - GuildItemPosCount(uint8 _slot, uint8 _count) : slot(_slot), count(_count) {} + GuildItemPosCount(uint8 _slot, uint32 _count) : slot(_slot), count(_count) {} bool isContainedIn(std::vector const& vec) const; uint8 slot; - uint8 count; + uint32 count; }; typedef std::vector GuildItemPosCountVec; diff --git a/src/game/Item.cpp b/src/game/Item.cpp index cbdcc0ca6..cf728f3d7 100644 --- a/src/game/Item.cpp +++ b/src/game/Item.cpp @@ -888,8 +888,8 @@ Item* Item::CreateItem( uint32 item, uint32 count, Player const* player ) ItemPrototype const *pProto = objmgr.GetItemPrototype( item ); if( pProto ) { - if ( count > pProto->Stackable ) - count = pProto->Stackable; + if ( count > pProto->GetMaxStackSize()) + count = pProto->GetMaxStackSize(); assert(count !=0 && "pProto->Stackable==0 but checked at loading already"); diff --git a/src/game/Item.h b/src/game/Item.h index de0b0c79c..7b93ed4ca 100644 --- a/src/game/Item.h +++ b/src/game/Item.h @@ -230,7 +230,7 @@ class MANGOS_DLL_SPEC Item : public Object uint32 GetCount() const { return GetUInt32Value (ITEM_FIELD_STACK_COUNT); } void SetCount(uint32 value) { SetUInt32Value (ITEM_FIELD_STACK_COUNT, value); } - uint32 GetMaxStackCount() const { return GetProto()->Stackable; } + uint32 GetMaxStackCount() const { return GetProto()->GetMaxStackSize(); } uint8 GetGemCountWithID(uint32 GemID) const; uint8 GetSlot() const {return m_slot;} diff --git a/src/game/ItemHandler.cpp b/src/game/ItemHandler.cpp index 795a76deb..ff1a4c983 100644 --- a/src/game/ItemHandler.cpp +++ b/src/game/ItemHandler.cpp @@ -344,8 +344,8 @@ void WorldSession::HandleItemQuerySingleOpcode( WorldPacket & recv_data ) data << pProto->RequiredCityRank; data << pProto->RequiredReputationFaction; data << pProto->RequiredReputationRank; - data << pProto->MaxCount; - data << pProto->Stackable; + data << int32(pProto->MaxCount); + data << int32(pProto->Stackable); data << pProto->ContainerSlots; data << pProto->StatsCount; // item stats count for(int i = 0; i < pProto->StatsCount; i++) diff --git a/src/game/ItemPrototype.h b/src/game/ItemPrototype.h index 5328308b4..f62d8fb97 100644 --- a/src/game/ItemPrototype.h +++ b/src/game/ItemPrototype.h @@ -509,8 +509,8 @@ struct ItemPrototype uint32 RequiredCityRank; uint32 RequiredReputationFaction; // id from Faction.dbc uint32 RequiredReputationRank; - uint32 MaxCount; - uint32 Stackable; + int32 MaxCount; // <=0: no limit + int32 Stackable; // 0: not allowed, -1: put in player coin info tab and don't limit stacking (so 1 slot) uint32 ContainerSlots; uint32 StatsCount; _ItemStat ItemStat[10]; @@ -619,6 +619,8 @@ struct ItemPrototype return 0; } + + uint32 GetMaxStackSize() const { return Stackable > 0 ? uint32(Stackable) : uint32(0x7FFFFFFF-1); } }; struct ItemLocale diff --git a/src/game/Level3.cpp b/src/game/Level3.cpp index 479a5ee57..d71121f2d 100644 --- a/src/game/Level3.cpp +++ b/src/game/Level3.cpp @@ -6289,17 +6289,17 @@ bool ChatHandler::HandleSendItemsCommand(const char* args) } uint32 item_count = itemCountStr ? atoi(itemCountStr) : 1; - if(item_count < 1 || item_proto->MaxCount && item_count > item_proto->MaxCount) + if(item_count < 1 || item_proto->MaxCount > 0 && item_count > uint32(item_proto->MaxCount)) { PSendSysMessage(LANG_COMMAND_INVALID_ITEM_COUNT, item_count,item_id); SetSentErrorMessage(true); return false; } - while(item_count > item_proto->Stackable) + while(item_count > item_proto->GetMaxStackSize()) { - items.push_back(ItemPair(item_id,item_proto->Stackable)); - item_count -= item_proto->Stackable; + items.push_back(ItemPair(item_id,item_proto->GetMaxStackSize())); + item_count -= item_proto->GetMaxStackSize(); } items.push_back(ItemPair(item_id,item_count)); diff --git a/src/game/ObjectMgr.cpp b/src/game/ObjectMgr.cpp index 5efa2f127..4c96a405d 100644 --- a/src/game/ObjectMgr.cpp +++ b/src/game/ObjectMgr.cpp @@ -1705,11 +1705,22 @@ void ObjectMgr::LoadItemPrototypes() else if(proto->RequiredReputationRank > MIN_REPUTATION_RANK) sLog.outErrorDb("Item (Entry: %u) has RequiredReputationFaction ==0 but RequiredReputationRank > 0, rank setting is useless.",i); + if(proto->MaxCount < -1) + { + sLog.outErrorDb("Item (Entry: %u) has too large negative in maxcount (%i), replace by value (-1) no storing limits.",i,proto->MaxCount); + const_cast(proto)->MaxCount = -1; + } + if(proto->Stackable==0) { - sLog.outErrorDb("Item (Entry: %u) has wrong value in stackable (%u), replace by default 1.",i,proto->Stackable); + sLog.outErrorDb("Item (Entry: %u) has wrong value in stackable (%i), replace by default 1.",i,proto->Stackable); const_cast(proto)->Stackable = 1; } + else if(proto->Stackable < -1) + { + sLog.outErrorDb("Item (Entry: %u) has too large negative in stackable (%i), replace by value (-1) no stacking limits.",i,proto->Stackable); + const_cast(proto)->Stackable = -1; + } else if(proto->Stackable > 255) { sLog.outErrorDb("Item (Entry: %u) has too large value in stackable (%u), replace by hardcoded upper limit (255).",i,proto->Stackable); diff --git a/src/game/Player.cpp b/src/game/Player.cpp index 8e72dad01..3c62ac89c 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -705,7 +705,9 @@ bool Player::Create( uint32 guidlow, const std::string& name, uint8 race, uint8 continue; } - uint32 count = iProto->Stackable; // max stack by default (mostly 1) + // max stack by default (mostly 1), 1 for infinity stackable + uint32 count = iProto->Stackable > 0 ? uint32(iProto->Stackable) : 1; + if(iProto->Class==ITEM_CLASS_CONSUMABLE && iProto->SubClass==ITEM_SUBCLASS_FOOD) { switch(iProto->Spells[0].SpellCategory) @@ -8603,12 +8605,12 @@ uint8 Player::_CanTakeMoreSimilarItems(uint32 entry, uint32 count, Item* pItem, } // no maximum - if(pProto->MaxCount == 0) + if(pProto->MaxCount <= 0) return EQUIP_ERR_OK; uint32 curcount = GetItemCount(pProto->ItemId,true,pItem); - if( curcount + count > pProto->MaxCount ) + if (curcount + count > uint32(pProto->MaxCount)) { if(no_space_count) *no_space_count = count +curcount - pProto->MaxCount; @@ -8667,16 +8669,16 @@ uint8 Player::_CanStoreItem_InSpecificSlot( uint8 bag, uint8 slot, ItemPosCountV if(slot >= KEYRING_SLOT_START && slot < KEYRING_SLOT_START+GetMaxKeyringSize() && !(pProto->BagFamily & BAG_FAMILY_MASK_KEYS)) return EQUIP_ERR_ITEM_DOESNT_GO_INTO_BAG; - // vanitypet case - if(slot >= VANITYPET_SLOT_START && slot < VANITYPET_SLOT_END && !(pProto->BagFamily & BAG_FAMILY_MASK_VANITY_PETS)) + // vanitypet case (disabled until proper implement) + if(slot >= VANITYPET_SLOT_START && slot < VANITYPET_SLOT_END && !(false /*pProto->BagFamily & BAG_FAMILY_MASK_VANITY_PETS*/)) return EQUIP_ERR_ITEM_DOESNT_GO_INTO_BAG; - // currencytoken case - if(slot >= CURRENCYTOKEN_SLOT_START && slot < CURRENCYTOKEN_SLOT_END && !(pProto->BagFamily & BAG_FAMILY_MASK_CURRENCY_TOKENS)) + // currencytoken case (disabled until proper implement) + if(slot >= CURRENCYTOKEN_SLOT_START && slot < CURRENCYTOKEN_SLOT_END && !(false /*pProto->BagFamily & BAG_FAMILY_MASK_CURRENCY_TOKENS*/)) return EQUIP_ERR_ITEM_DOESNT_GO_INTO_BAG; - // guestbag case - if(slot >= QUESTBAG_SLOT_START && slot < QUESTBAG_SLOT_END && !(pProto->BagFamily & BAG_FAMILY_MASK_QUEST_ITEMS)) + // guestbag case (disabled until proper implement) + if(slot >= QUESTBAG_SLOT_START && slot < QUESTBAG_SLOT_END && !(false /*pProto->BagFamily & BAG_FAMILY_MASK_QUEST_ITEMS*/)) return EQUIP_ERR_ITEM_DOESNT_GO_INTO_BAG; // prevent cheating @@ -8698,7 +8700,7 @@ uint8 Player::_CanStoreItem_InSpecificSlot( uint8 bag, uint8 slot, ItemPosCountV } // non empty stack with space - need_space = pProto->Stackable; + need_space = pProto->GetMaxStackSize(); } // non empty slot, check item type else @@ -8708,10 +8710,11 @@ uint8 Player::_CanStoreItem_InSpecificSlot( uint8 bag, uint8 slot, ItemPosCountV return EQUIP_ERR_ITEM_CANT_STACK; // check free space - if(pItem2->GetCount() >= pProto->Stackable) + if(pItem2->GetCount() >= pProto->GetMaxStackSize()) return EQUIP_ERR_ITEM_CANT_STACK; - need_space = pProto->Stackable - pItem2->GetCount(); + // free stack space or infinity + need_space = pProto->GetMaxStackSize() - pItem2->GetCount(); } if(need_space > count) @@ -8765,9 +8768,9 @@ uint8 Player::_CanStoreItem_InBag( uint8 bag, ItemPosCountVec &dest, ItemPrototy if( pItem2 ) { - if(pItem2->GetEntry() == pProto->ItemId && pItem2->GetCount() < pProto->Stackable ) + if(pItem2->GetEntry() == pProto->ItemId && pItem2->GetCount() < pProto->GetMaxStackSize()) { - uint32 need_space = pProto->Stackable - pItem2->GetCount(); + uint32 need_space = pProto->GetMaxStackSize() - pItem2->GetCount(); if(need_space > count) need_space = count; @@ -8784,7 +8787,7 @@ uint8 Player::_CanStoreItem_InBag( uint8 bag, ItemPosCountVec &dest, ItemPrototy } else { - uint32 need_space = pProto->Stackable; + uint32 need_space = pProto->GetMaxStackSize(); if(need_space > count) need_space = count; @@ -8822,9 +8825,9 @@ uint8 Player::_CanStoreItem_InInventorySlots( uint8 slot_begin, uint8 slot_end, if( pItem2 ) { - if(pItem2->GetEntry() == pProto->ItemId && pItem2->GetCount() < pProto->Stackable ) + if(pItem2->GetEntry() == pProto->ItemId && pItem2->GetCount() < pProto->GetMaxStackSize()) { - uint32 need_space = pProto->Stackable - pItem2->GetCount(); + uint32 need_space = pProto->GetMaxStackSize() - pItem2->GetCount(); if(need_space > count) need_space = count; ItemPosCount newPosition = ItemPosCount((INVENTORY_SLOT_BAG_0 << 8) | j, need_space); @@ -8840,7 +8843,7 @@ uint8 Player::_CanStoreItem_InInventorySlots( uint8 slot_begin, uint8 slot_end, } else { - uint32 need_space = pProto->Stackable; + uint32 need_space = pProto->GetMaxStackSize(); if(need_space > count) need_space = count; @@ -8919,7 +8922,7 @@ uint8 Player::_CanStoreItem( uint8 bag, uint8 slot, ItemPosCountVec &dest, uint3 if( bag != NULL_BAG ) { // search stack in bag for merge to - if( pProto->Stackable > 1 ) + if( pProto->Stackable != 1 ) { if( bag == INVENTORY_SLOT_BAG_0 ) // inventory { @@ -9010,6 +9013,7 @@ uint8 Player::_CanStoreItem( uint8 bag, uint8 slot, ItemPosCountVec &dest, uint3 return EQUIP_ERR_CANT_CARRY_MORE_OF_THIS; } } + /* until proper implementation else if(pProto->BagFamily & BAG_FAMILY_MASK_VANITY_PETS) { res = _CanStoreItem_InInventorySlots(VANITYPET_SLOT_START,VANITYPET_SLOT_END,dest,pProto,count,false,pItem,bag,slot); @@ -9030,6 +9034,8 @@ uint8 Player::_CanStoreItem( uint8 bag, uint8 slot, ItemPosCountVec &dest, uint3 return EQUIP_ERR_CANT_CARRY_MORE_OF_THIS; } } + */ + /* until proper implementation else if(pProto->BagFamily & BAG_FAMILY_MASK_CURRENCY_TOKENS) { res = _CanStoreItem_InInventorySlots(CURRENCYTOKEN_SLOT_START,CURRENCYTOKEN_SLOT_END,dest,pProto,count,false,pItem,bag,slot); @@ -9050,6 +9056,8 @@ uint8 Player::_CanStoreItem( uint8 bag, uint8 slot, ItemPosCountVec &dest, uint3 return EQUIP_ERR_CANT_CARRY_MORE_OF_THIS; } } + */ + /* until proper implementation else if(pProto->BagFamily & BAG_FAMILY_MASK_QUEST_ITEMS) { res = _CanStoreItem_InInventorySlots(QUESTBAG_SLOT_START,QUESTBAG_SLOT_END,dest,pProto,count,false,pItem,bag,slot); @@ -9070,6 +9078,7 @@ uint8 Player::_CanStoreItem( uint8 bag, uint8 slot, ItemPosCountVec &dest, uint3 return EQUIP_ERR_CANT_CARRY_MORE_OF_THIS; } } + */ res = _CanStoreItem_InInventorySlots(INVENTORY_SLOT_ITEM_START,INVENTORY_SLOT_ITEM_END,dest,pProto,count,false,pItem,bag,slot); if(res!=EQUIP_ERR_OK) @@ -9117,7 +9126,7 @@ uint8 Player::_CanStoreItem( uint8 bag, uint8 slot, ItemPosCountVec &dest, uint3 // not specific bag or have space for partly store only in specific bag // search stack for merge to - if( pProto->Stackable > 1 ) + if( pProto->Stackable != 1 ) { res = _CanStoreItem_InInventorySlots(KEYRING_SLOT_START,QUESTBAG_SLOT_END,dest,pProto,count,true,pItem,bag,slot); if(res!=EQUIP_ERR_OK) @@ -9217,7 +9226,8 @@ uint8 Player::_CanStoreItem( uint8 bag, uint8 slot, ItemPosCountVec &dest, uint3 return EQUIP_ERR_CANT_CARRY_MORE_OF_THIS; } } - else if(pProto->BagFamily & BAG_FAMILY_MASK_VANITY_PETS) + /* until proper implementation + else if(false pProto->BagFamily & BAG_FAMILY_MASK_VANITY_PETS) { res = _CanStoreItem_InInventorySlots(VANITYPET_SLOT_START,VANITYPET_SLOT_END,dest,pProto,count,false,pItem,bag,slot); if(res!=EQUIP_ERR_OK) @@ -9237,7 +9247,9 @@ uint8 Player::_CanStoreItem( uint8 bag, uint8 slot, ItemPosCountVec &dest, uint3 return EQUIP_ERR_CANT_CARRY_MORE_OF_THIS; } } - else if(pProto->BagFamily & BAG_FAMILY_MASK_CURRENCY_TOKENS) + */ + /* until proper implementation + else if(false pProto->BagFamily & BAG_FAMILY_MASK_CURRENCY_TOKENS) { res = _CanStoreItem_InInventorySlots(CURRENCYTOKEN_SLOT_START,CURRENCYTOKEN_SLOT_END,dest,pProto,count,false,pItem,bag,slot); if(res!=EQUIP_ERR_OK) @@ -9257,7 +9269,9 @@ uint8 Player::_CanStoreItem( uint8 bag, uint8 slot, ItemPosCountVec &dest, uint3 return EQUIP_ERR_CANT_CARRY_MORE_OF_THIS; } } - else if(pProto->BagFamily & BAG_FAMILY_MASK_QUEST_ITEMS) + */ + /* until proper implementation + else if(false pProto->BagFamily & BAG_FAMILY_MASK_QUEST_ITEMS) { res = _CanStoreItem_InInventorySlots(QUESTBAG_SLOT_START,QUESTBAG_SLOT_END,dest,pProto,count,false,pItem,bag,slot); if(res!=EQUIP_ERR_OK) @@ -9277,6 +9291,7 @@ uint8 Player::_CanStoreItem( uint8 bag, uint8 slot, ItemPosCountVec &dest, uint3 return EQUIP_ERR_CANT_CARRY_MORE_OF_THIS; } } + */ for(int i = INVENTORY_SLOT_BAG_START; i < INVENTORY_SLOT_BAG_END; i++) { @@ -9451,14 +9466,14 @@ uint8 Player::CanStoreItems( Item **pItems,int count) const return res; // search stack for merge to - if( pProto->Stackable > 1 ) + if( pProto->Stackable != 1 ) { bool b_found = false; for(int t = KEYRING_SLOT_START; t < KEYRING_SLOT_END; t++) { pItem2 = GetItemByPos( INVENTORY_SLOT_BAG_0, t ); - if( pItem2 && pItem2->GetEntry() == pItem->GetEntry() && inv_keys[t-KEYRING_SLOT_START] + pItem->GetCount() <= pProto->Stackable ) + if( pItem2 && pItem2->GetEntry() == pItem->GetEntry() && inv_keys[t-KEYRING_SLOT_START] + pItem->GetCount() <= pProto->GetMaxStackSize()) { inv_keys[t-KEYRING_SLOT_START] += pItem->GetCount(); b_found = true; @@ -9470,7 +9485,7 @@ uint8 Player::CanStoreItems( Item **pItems,int count) const for(int t = VANITYPET_SLOT_START; t < VANITYPET_SLOT_END; t++) { pItem2 = GetItemByPos( INVENTORY_SLOT_BAG_0, t ); - if( pItem2 && pItem2->GetEntry() == pItem->GetEntry() && inv_pets[t-VANITYPET_SLOT_START] + pItem->GetCount() <= pProto->Stackable ) + if( pItem2 && pItem2->GetEntry() == pItem->GetEntry() && inv_pets[t-VANITYPET_SLOT_START] + pItem->GetCount() <= pProto->GetMaxStackSize()) { inv_pets[t-VANITYPET_SLOT_START] += pItem->GetCount(); b_found = true; @@ -9482,7 +9497,7 @@ uint8 Player::CanStoreItems( Item **pItems,int count) const for(int t = CURRENCYTOKEN_SLOT_START; t < CURRENCYTOKEN_SLOT_END; t++) { pItem2 = GetItemByPos( INVENTORY_SLOT_BAG_0, t ); - if( pItem2 && pItem2->GetEntry() == pItem->GetEntry() && inv_tokens[t-CURRENCYTOKEN_SLOT_START] + pItem->GetCount() <= pProto->Stackable ) + if( pItem2 && pItem2->GetEntry() == pItem->GetEntry() && inv_tokens[t-CURRENCYTOKEN_SLOT_START] + pItem->GetCount() <= pProto->GetMaxStackSize()) { inv_tokens[t-CURRENCYTOKEN_SLOT_START] += pItem->GetCount(); b_found = true; @@ -9494,7 +9509,7 @@ uint8 Player::CanStoreItems( Item **pItems,int count) const for(int t = QUESTBAG_SLOT_START; t < QUESTBAG_SLOT_END; t++) { pItem2 = GetItemByPos( INVENTORY_SLOT_BAG_0, t ); - if( pItem2 && pItem2->GetEntry() == pItem->GetEntry() && inv_quests[t-QUESTBAG_SLOT_START] + pItem->GetCount() <= pProto->Stackable ) + if( pItem2 && pItem2->GetEntry() == pItem->GetEntry() && inv_quests[t-QUESTBAG_SLOT_START] + pItem->GetCount() <= pProto->GetMaxStackSize()) { inv_quests[t-QUESTBAG_SLOT_START] += pItem->GetCount(); b_found = true; @@ -9506,7 +9521,7 @@ uint8 Player::CanStoreItems( Item **pItems,int count) const for(int t = INVENTORY_SLOT_ITEM_START; t < INVENTORY_SLOT_ITEM_END; t++) { pItem2 = GetItemByPos( INVENTORY_SLOT_BAG_0, t ); - if( pItem2 && pItem2->GetEntry() == pItem->GetEntry() && inv_slot_items[t-INVENTORY_SLOT_ITEM_START] + pItem->GetCount() <= pProto->Stackable ) + if( pItem2 && pItem2->GetEntry() == pItem->GetEntry() && inv_slot_items[t-INVENTORY_SLOT_ITEM_START] + pItem->GetCount() <= pProto->GetMaxStackSize()) { inv_slot_items[t-INVENTORY_SLOT_ITEM_START] += pItem->GetCount(); b_found = true; @@ -9523,7 +9538,7 @@ uint8 Player::CanStoreItems( Item **pItems,int count) const for(uint32 j = 0; j < pBag->GetBagSize(); j++) { pItem2 = GetItemByPos( t, j ); - if( pItem2 && pItem2->GetEntry() == pItem->GetEntry() && inv_bags[t-INVENTORY_SLOT_BAG_START][j] + pItem->GetCount() <= pProto->Stackable ) + if( pItem2 && pItem2->GetEntry() == pItem->GetEntry() && inv_bags[t-INVENTORY_SLOT_BAG_START][j] + pItem->GetCount() <= pProto->GetMaxStackSize()) { inv_bags[t-INVENTORY_SLOT_BAG_START][j] += pItem->GetCount(); b_found = true; @@ -9555,6 +9570,7 @@ uint8 Player::CanStoreItems( Item **pItems,int count) const if (b_found) continue; + /* until proper implementation if(pProto->BagFamily & BAG_FAMILY_MASK_VANITY_PETS) { for(uint32 t = VANITYPET_SLOT_START; t < VANITYPET_SLOT_END; ++t) @@ -9569,7 +9585,8 @@ uint8 Player::CanStoreItems( Item **pItems,int count) const } if (b_found) continue; - + */ + /* until proper implementation if(pProto->BagFamily & BAG_FAMILY_MASK_CURRENCY_TOKENS) { for(uint32 t = CURRENCYTOKEN_SLOT_START; t < CURRENCYTOKEN_SLOT_END; ++t) @@ -9584,7 +9601,8 @@ uint8 Player::CanStoreItems( Item **pItems,int count) const } if (b_found) continue; - + */ + /* until proper implementation if(pProto->BagFamily & BAG_FAMILY_MASK_QUEST_ITEMS) { for(uint32 t = QUESTBAG_SLOT_START; t < QUESTBAG_SLOT_END; ++t) @@ -9599,6 +9617,7 @@ uint8 Player::CanStoreItems( Item **pItems,int count) const } if (b_found) continue; + */ for(int t = INVENTORY_SLOT_BAG_START; !b_found && t < INVENTORY_SLOT_BAG_END; t++) { @@ -9938,7 +9957,7 @@ uint8 Player::CanBankItem( uint8 bag, uint8 slot, ItemPosCountVec &dest, Item *p } // search stack in bag for merge to - if( pProto->Stackable > 1 ) + if( pProto->Stackable != 1 ) { if( bag == INVENTORY_SLOT_BAG_0 ) { @@ -9990,7 +10009,7 @@ uint8 Player::CanBankItem( uint8 bag, uint8 slot, ItemPosCountVec &dest, Item *p // not specific bag or have space for partly store only in specific bag // search stack for merge to - if( pProto->Stackable > 1 ) + if( pProto->Stackable != 1 ) { // in slots res = _CanStoreItem_InInventorySlots(BANK_SLOT_ITEM_START,BANK_SLOT_ITEM_END,dest,pProto,count,true,pItem,bag,slot); @@ -11178,7 +11197,7 @@ void Player::SwapItem( uint16 src, uint16 dst ) // can be merge/fill if(msg == EQUIP_ERR_OK) { - if( pSrcItem->GetCount() + pDstItem->GetCount() <= pSrcItem->GetProto()->Stackable ) + if( pSrcItem->GetCount() + pDstItem->GetCount() <= pSrcItem->GetProto()->GetMaxStackSize()) { RemoveItem(srcbag, srcslot, true); @@ -11194,8 +11213,8 @@ void Player::SwapItem( uint16 src, uint16 dst ) } else { - pSrcItem->SetCount( pSrcItem->GetCount() + pDstItem->GetCount() - pSrcItem->GetProto()->Stackable ); - pDstItem->SetCount( pSrcItem->GetProto()->Stackable ); + pSrcItem->SetCount( pSrcItem->GetCount() + pDstItem->GetCount() - pSrcItem->GetProto()->GetMaxStackSize()); + pDstItem->SetCount( pSrcItem->GetProto()->GetMaxStackSize()); pSrcItem->SetState(ITEM_CHANGED, this); pDstItem->SetState(ITEM_CHANGED, this); if( IsInWorld() ) diff --git a/src/game/Player.h b/src/game/Player.h index 48fc02c82..0c44b60d1 100644 --- a/src/game/Player.h +++ b/src/game/Player.h @@ -731,10 +731,10 @@ enum QuestBagSlots struct ItemPosCount { - ItemPosCount(uint16 _pos, uint8 _count) : pos(_pos), count(_count) {} + ItemPosCount(uint16 _pos, uint32 _count) : pos(_pos), count(_count) {} bool isContainedIn(std::vector const& vec) const; uint16 pos; - uint8 count; + uint32 count; }; typedef std::vector ItemPosCountVec; diff --git a/src/game/QuestHandler.cpp b/src/game/QuestHandler.cpp index bbb3fa764..d7217cb2e 100644 --- a/src/game/QuestHandler.cpp +++ b/src/game/QuestHandler.cpp @@ -176,7 +176,7 @@ void WorldSession::HandleQuestgiverAcceptQuestOpcode( WorldPacket & recv_data ) bool destroyItem = true; for(int i = 0; i < QUEST_OBJECTIVES_COUNT; i++) { - if ((qInfo->ReqItemId[i] == ((Item*)pObject)->GetEntry()) && (((Item*)pObject)->GetProto()->MaxCount != 0)) + if ((qInfo->ReqItemId[i] == ((Item*)pObject)->GetEntry()) && (((Item*)pObject)->GetProto()->MaxCount > 0)) { destroyItem = false; break; diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp index 4800e35e8..d93aa49bf 100644 --- a/src/game/Spell.cpp +++ b/src/game/Spell.cpp @@ -3189,7 +3189,7 @@ void Spell::TakeCastItem() if (charges) { (charges > 0) ? --charges : ++charges; // abs(charges) less at 1 after use - if (proto->Stackable < 2) + if (proto->Stackable == 1) m_CastItem->SetSpellCharges(i, charges); m_CastItem->SetState(ITEM_CHANGED, (Player*)m_caster); } diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp index 6cd8cc818..60e668114 100644 --- a/src/game/SpellEffects.cpp +++ b/src/game/SpellEffects.cpp @@ -2564,8 +2564,8 @@ void Spell::DoCreateItem(uint32 i, uint32 itemtype) if (num_to_add < 1) num_to_add = 1; - if (num_to_add > pProto->Stackable) - num_to_add = pProto->Stackable; + if (num_to_add > pProto->GetMaxStackSize()) + num_to_add = pProto->GetMaxStackSize(); // init items_count to 1, since 1 item will be created regardless of specialization int items_count=1; diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 087432dda..5d8c973db 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 "7014" + #define REVISION_NR "7015" #endif // __REVISION_NR_H__ From f4c728ea2d2ce6efe9fc0f476a91ce4da4b585af Mon Sep 17 00:00:00 2001 From: Wyk3d Date: Sat, 3 Jan 2009 18:23:36 +0200 Subject: [PATCH 068/145] Fixed a whitespace error in git_id's Makefile.am generation --- contrib/git_id/git_id.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/contrib/git_id/git_id.cpp b/contrib/git_id/git_id.cpp index cad9bf2c4..23cb9e806 100644 --- a/contrib/git_id/git_id.cpp +++ b/contrib/git_id/git_id.cpp @@ -613,7 +613,7 @@ bool generate_sql_makefile() for(std::set::iterator itr = file_list.begin(), next; itr != file_list.end(); ++itr) { next = itr; ++next; - fprintf(fout, "\t%s %s\n", itr->c_str(), next == file_list.end() ? "" : "\\"); + fprintf(fout, "\t%s%s\n", itr->c_str(), next == file_list.end() ? "" : " \\"); } fprintf(fout, @@ -625,7 +625,7 @@ bool generate_sql_makefile() for(std::set::iterator itr = file_list.begin(), next; itr != file_list.end(); ++itr) { next = itr; ++next; - fprintf(fout, "\t%s %s\n", itr->c_str(), next == file_list.end() ? "" : "\\"); + fprintf(fout, "\t%s%s\n", itr->c_str(), next == file_list.end() ? "" : " \\"); } fclose(fout); From f33b4098dce711a3e6c4bbdfae282704973bc8c9 Mon Sep 17 00:00:00 2001 From: NeatElves Date: Sat, 3 Jan 2009 19:52:59 +0300 Subject: [PATCH 069/145] [7016] Avoid table `areatrigger_teleport` double reload at .reload all command. Signed-off-by: VladimirMangos --- src/game/Level3.cpp | 1 - src/shared/revision_nr.h | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/game/Level3.cpp b/src/game/Level3.cpp index d71121f2d..f66c4ef45 100644 --- a/src/game/Level3.cpp +++ b/src/game/Level3.cpp @@ -54,7 +54,6 @@ //reload commands bool ChatHandler::HandleReloadAllCommand(const char*) { - HandleReloadAreaTriggerTeleportCommand(""); HandleReloadSkillFishingBaseLevelCommand(""); HandleReloadAllAreaCommand(""); diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 5d8c973db..d672824e6 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 "7015" + #define REVISION_NR "7016" #endif // __REVISION_NR_H__ From c6f48843ade8a40563173d4f640bb6bd973d4282 Mon Sep 17 00:00:00 2001 From: arrai Date: Sat, 3 Jan 2009 17:26:52 +0100 Subject: [PATCH 070/145] [7017] Updated copyright notice for new year --- Makefile.am | 2 +- NEWS | 2 +- README | 2 +- configure.ac | 2 +- contrib/Makefile.am | 2 +- contrib/git_id/git_id.cpp | 4 +-- doc/Makefile.am | 2 +- sql/Makefile.am | 2 +- sql/tools/Makefile.am | 2 +- sql/tools/README | 2 +- sql/updates/Makefile.am | 2 +- sql/updates/README | 2 +- src/Makefile.am | 2 +- src/bindings/Makefile.am | 2 +- src/bindings/universal/Makefile.am | 2 +- src/bindings/universal/ScriptMgr.cpp | 2 +- src/bindings/universal/ScriptMgr.h | 2 +- src/bindings/universal/Scripts/sc_default.cpp | 2 +- src/bindings/universal/Scripts/sc_defines.cpp | 2 +- src/bindings/universal/Scripts/sc_defines.h | 2 +- src/bindings/universal/config.h | 2 +- src/bindings/universal/system.cpp | 2 +- src/framework/Dynamic/FactoryHolder.h | 2 +- src/framework/Dynamic/ObjectRegistry.h | 2 +- src/framework/GameSystem/Grid.h | 2 +- src/framework/GameSystem/GridLoader.h | 2 +- src/framework/GameSystem/GridRefManager.h | 2 +- src/framework/GameSystem/GridReference.h | 2 +- src/framework/GameSystem/NGrid.h | 2 +- src/framework/GameSystem/TypeContainer.h | 2 +- .../GameSystem/TypeContainerFunctions.h | 2 +- .../GameSystem/TypeContainerFunctionsPtr.h | 2 +- .../GameSystem/TypeContainerVisitor.h | 2 +- src/framework/Makefile.am | 2 +- src/framework/Network/SocketDefines.h | 2 +- src/framework/Platform/CompilerDefs.h | 2 +- src/framework/Platform/Define.h | 2 +- src/framework/Policies/CreationPolicy.h | 2 +- src/framework/Policies/ObjectLifeTime.cpp | 2 +- src/framework/Policies/ObjectLifeTime.h | 2 +- src/framework/Policies/Singleton.h | 2 +- src/framework/Policies/SingletonImp.h | 2 +- src/framework/Policies/ThreadingModel.h | 2 +- src/framework/Utilities/ByteConverter.h | 2 +- src/framework/Utilities/Callback.h | 2 +- .../Utilities/CountedReference/Reference.h | 2 +- .../CountedReference/ReferenceHolder.h | 2 +- .../CountedReference/ReferenceImpl.h | 2 +- src/framework/Utilities/EventProcessor.cpp | 2 +- src/framework/Utilities/EventProcessor.h | 2 +- src/framework/Utilities/LinkedList.h | 2 +- .../Utilities/LinkedReference/RefManager.h | 2 +- .../Utilities/LinkedReference/Reference.h | 2 +- src/framework/Utilities/TypeList.h | 2 +- src/framework/Utilities/UnorderedMap.h | 2 +- src/game/AccountMgr.cpp | 2 +- src/game/AccountMgr.h | 2 +- src/game/AchievementMgr.cpp | 2 +- src/game/AchievementMgr.h | 2 +- src/game/AddonHandler.cpp | 2 +- src/game/AddonHandler.h | 2 +- src/game/AggressorAI.cpp | 2 +- src/game/AggressorAI.h | 2 +- src/game/AnimalRandomMovementGenerator.h | 2 +- src/game/ArenaTeam.cpp | 2 +- src/game/ArenaTeam.h | 2 +- src/game/ArenaTeamHandler.cpp | 2 +- src/game/AuctionHouse.cpp | 2 +- src/game/AuctionHouseObject.h | 2 +- src/game/Bag.cpp | 2 +- src/game/Bag.h | 2 +- src/game/BattleGround.cpp | 2 +- src/game/BattleGround.h | 2 +- src/game/BattleGroundAA.cpp | 2 +- src/game/BattleGroundAA.h | 2 +- src/game/BattleGroundAB.cpp | 2 +- src/game/BattleGroundAB.h | 2 +- src/game/BattleGroundAV.cpp | 2 +- src/game/BattleGroundAV.h | 2 +- src/game/BattleGroundBE.cpp | 2 +- src/game/BattleGroundBE.h | 2 +- src/game/BattleGroundEY.cpp | 2 +- src/game/BattleGroundEY.h | 2 +- src/game/BattleGroundHandler.cpp | 2 +- src/game/BattleGroundMgr.cpp | 2 +- src/game/BattleGroundMgr.h | 2 +- src/game/BattleGroundNA.cpp | 2 +- src/game/BattleGroundNA.h | 2 +- src/game/BattleGroundRL.cpp | 2 +- src/game/BattleGroundRL.h | 2 +- src/game/BattleGroundWS.cpp | 2 +- src/game/BattleGroundWS.h | 2 +- src/game/Calendar.cpp | 2 +- src/game/Calendar.h | 2 +- src/game/CalendarHandler.cpp | 2 +- src/game/Cell.h | 2 +- src/game/CellImpl.h | 2 +- src/game/Channel.cpp | 2 +- src/game/Channel.h | 2 +- src/game/ChannelHandler.cpp | 2 +- src/game/ChannelMgr.h | 2 +- src/game/CharacterHandler.cpp | 2 +- src/game/Chat.cpp | 2 +- src/game/Chat.h | 2 +- src/game/ChatHandler.cpp | 2 +- src/game/CombatHandler.cpp | 2 +- src/game/ConfusedMovementGenerator.cpp | 2 +- src/game/ConfusedMovementGenerator.h | 2 +- src/game/Corpse.cpp | 2 +- src/game/Corpse.h | 2 +- src/game/Creature.cpp | 2 +- src/game/Creature.h | 2 +- src/game/CreatureAI.cpp | 2 +- src/game/CreatureAI.h | 2 +- src/game/CreatureAIImpl.h | 2 +- src/game/CreatureAIRegistry.cpp | 2 +- src/game/CreatureAIRegistry.h | 2 +- src/game/CreatureAISelector.cpp | 2 +- src/game/CreatureAISelector.h | 2 +- src/game/DestinationHolder.cpp | 2 +- src/game/DestinationHolder.h | 2 +- src/game/DestinationHolderImp.h | 2 +- src/game/DuelHandler.cpp | 2 +- src/game/DynamicObject.cpp | 2 +- src/game/DynamicObject.h | 2 +- src/game/FleeingMovementGenerator.cpp | 2 +- src/game/FleeingMovementGenerator.h | 2 +- src/game/FollowerRefManager.h | 2 +- src/game/FollowerReference.cpp | 2 +- src/game/FollowerReference.h | 2 +- src/game/Formulas.h | 2 +- src/game/GMTicketHandler.cpp | 2 +- src/game/GMTicketMgr.cpp | 2 +- src/game/GMTicketMgr.h | 2 +- src/game/GameEvent.cpp | 2 +- src/game/GameEvent.h | 2 +- src/game/GameObject.cpp | 2 +- src/game/GameObject.h | 2 +- src/game/GlobalEvents.cpp | 2 +- src/game/GlobalEvents.h | 2 +- src/game/GossipDef.cpp | 2 +- src/game/GossipDef.h | 2 +- src/game/GridDefines.h | 2 +- src/game/GridNotifiers.cpp | 2 +- src/game/GridNotifiers.h | 2 +- src/game/GridNotifiersImpl.h | 2 +- src/game/GridStates.cpp | 2 +- src/game/GridStates.h | 2 +- src/game/Group.cpp | 2 +- src/game/Group.h | 2 +- src/game/GroupHandler.cpp | 2 +- src/game/GroupRefManager.h | 2 +- src/game/GroupReference.cpp | 2 +- src/game/GroupReference.h | 2 +- src/game/GuardAI.cpp | 2 +- src/game/GuardAI.h | 2 +- src/game/Guild.cpp | 2 +- src/game/Guild.h | 2 +- src/game/GuildHandler.cpp | 2 +- src/game/HomeMovementGenerator.cpp | 2 +- src/game/HomeMovementGenerator.h | 2 +- src/game/HostilRefManager.cpp | 2 +- src/game/HostilRefManager.h | 2 +- src/game/IdleMovementGenerator.cpp | 2 +- src/game/IdleMovementGenerator.h | 2 +- src/game/InstanceData.cpp | 2 +- src/game/InstanceData.h | 2 +- src/game/Item.cpp | 2 +- src/game/Item.h | 2 +- src/game/ItemEnchantmentMgr.cpp | 2 +- src/game/ItemEnchantmentMgr.h | 2 +- src/game/ItemHandler.cpp | 2 +- src/game/ItemPrototype.h | 2 +- src/game/LFGHandler.cpp | 2 +- src/game/Language.h | 2 +- src/game/Level0.cpp | 2 +- src/game/Level1.cpp | 2 +- src/game/Level2.cpp | 2 +- src/game/Level3.cpp | 2 +- src/game/LootHandler.cpp | 2 +- src/game/LootMgr.cpp | 2 +- src/game/LootMgr.h | 2 +- src/game/Mail.cpp | 2 +- src/game/Mail.h | 2 +- src/game/Makefile.am | 2 +- src/game/Map.cpp | 2 +- src/game/Map.h | 2 +- src/game/MapInstanced.cpp | 2 +- src/game/MapInstanced.h | 2 +- src/game/MapManager.cpp | 2 +- src/game/MapManager.h | 2 +- src/game/MapRefManager.h | 2 +- src/game/MapReference.h | 2 +- src/game/MiscHandler.cpp | 2 +- src/game/MotionMaster.cpp | 2 +- src/game/MotionMaster.h | 2 +- src/game/MovementGenerator.cpp | 2 +- src/game/MovementGenerator.h | 2 +- src/game/MovementGeneratorImpl.h | 2 +- src/game/MovementHandler.cpp | 2 +- src/game/NPCHandler.cpp | 2 +- src/game/NPCHandler.h | 2 +- src/game/NullCreatureAI.cpp | 2 +- src/game/NullCreatureAI.h | 2 +- src/game/Object.cpp | 2 +- src/game/Object.h | 2 +- src/game/ObjectAccessor.cpp | 2 +- src/game/ObjectAccessor.h | 2 +- src/game/ObjectDefines.h | 2 +- src/game/ObjectGridLoader.cpp | 2 +- src/game/ObjectGridLoader.h | 2 +- src/game/ObjectMgr.cpp | 2 +- src/game/ObjectMgr.h | 2 +- src/game/ObjectPosSelector.cpp | 2 +- src/game/ObjectPosSelector.h | 2 +- src/game/Opcodes.cpp | 2 +- src/game/Opcodes.h | 2 +- src/game/Path.h | 2 +- src/game/Pet.cpp | 2 +- src/game/Pet.h | 2 +- src/game/PetAI.cpp | 2 +- src/game/PetAI.h | 2 +- src/game/PetHandler.cpp | 2 +- src/game/PetitionsHandler.cpp | 2 +- src/game/Player.cpp | 2 +- src/game/Player.h | 2 +- src/game/PlayerDump.cpp | 2 +- src/game/PlayerDump.h | 2 +- src/game/PointMovementGenerator.cpp | 2 +- src/game/PointMovementGenerator.h | 2 +- src/game/QueryHandler.cpp | 2 +- src/game/QuestDef.cpp | 2 +- src/game/QuestDef.h | 2 +- src/game/QuestHandler.cpp | 2 +- src/game/RandomMovementGenerator.cpp | 2 +- src/game/RandomMovementGenerator.h | 2 +- src/game/ReactorAI.cpp | 2 +- src/game/ReactorAI.h | 2 +- src/game/ScriptCalls.cpp | 2 +- src/game/ScriptCalls.h | 2 +- src/game/SharedDefines.h | 2 +- src/game/SkillDiscovery.cpp | 2 +- src/game/SkillDiscovery.h | 2 +- src/game/SkillExtraItems.cpp | 2 +- src/game/SkillExtraItems.h | 2 +- src/game/SkillHandler.cpp | 2 +- src/game/SocialMgr.cpp | 2 +- src/game/SocialMgr.h | 2 +- src/game/Spell.cpp | 2 +- src/game/Spell.h | 2 +- src/game/SpellAuraDefines.h | 2 +- src/game/SpellAuras.cpp | 2 +- src/game/SpellAuras.h | 2 +- src/game/SpellEffects.cpp | 2 +- src/game/SpellHandler.cpp | 2 +- src/game/SpellMgr.cpp | 2 +- src/game/SpellMgr.h | 2 +- src/game/StatSystem.cpp | 2 +- src/game/TargetedMovementGenerator.cpp | 2 +- src/game/TargetedMovementGenerator.h | 2 +- src/game/TaxiHandler.cpp | 2 +- src/game/TemporarySummon.cpp | 2 +- src/game/TemporarySummon.h | 2 +- src/game/ThreatManager.cpp | 2 +- src/game/ThreatManager.h | 2 +- src/game/Totem.cpp | 2 +- src/game/Totem.h | 2 +- src/game/TotemAI.cpp | 2 +- src/game/TotemAI.h | 2 +- src/game/TradeHandler.cpp | 2 +- src/game/Transports.cpp | 2 +- src/game/Transports.h | 2 +- src/game/Traveller.h | 2 +- src/game/Unit.cpp | 2 +- src/game/Unit.h | 2 +- src/game/UnitEvents.h | 2 +- src/game/UpdateData.cpp | 2 +- src/game/UpdateData.h | 2 +- src/game/UpdateFields.h | 2 +- src/game/UpdateMask.h | 2 +- src/game/Vehicle.cpp | 2 +- src/game/Vehicle.h | 2 +- src/game/VoiceChatHandler.cpp | 2 +- src/game/WaypointManager.cpp | 2 +- src/game/WaypointManager.h | 2 +- src/game/WaypointMovementGenerator.cpp | 2 +- src/game/WaypointMovementGenerator.h | 2 +- src/game/Weather.cpp | 2 +- src/game/Weather.h | 2 +- src/game/World.cpp | 2 +- src/game/World.h | 2 +- src/game/WorldLog.cpp | 2 +- src/game/WorldLog.h | 2 +- src/game/WorldSession.cpp | 2 +- src/game/WorldSession.h | 2 +- src/game/WorldSocket.cpp | 2 +- src/game/WorldSocket.h | 2 +- src/game/WorldSocketMgr.cpp | 32 +++++++++---------- src/game/WorldSocketMgr.h | 2 +- src/game/debugcmds.cpp | 2 +- src/mangosd/CliRunnable.cpp | 2 +- src/mangosd/CliRunnable.h | 2 +- src/mangosd/Main.cpp | 2 +- src/mangosd/Makefile.am | 2 +- src/mangosd/Master.cpp | 2 +- src/mangosd/Master.h | 2 +- src/mangosd/RASocket.cpp | 2 +- src/mangosd/RASocket.h | 2 +- src/mangosd/WorldRunnable.cpp | 2 +- src/mangosd/WorldRunnable.h | 2 +- src/mangosd/mangosd.rc | 2 +- src/realmd/AuthCodes.h | 2 +- src/realmd/AuthSocket.cpp | 2 +- src/realmd/AuthSocket.h | 2 +- src/realmd/Main.cpp | 2 +- src/realmd/Makefile.am | 2 +- src/realmd/RealmList.cpp | 2 +- src/realmd/RealmList.h | 2 +- src/realmd/realmd.rc | 2 +- src/shared/Auth/AuthCrypt.cpp | 2 +- src/shared/Auth/AuthCrypt.h | 2 +- src/shared/Auth/BigNumber.cpp | 2 +- src/shared/Auth/BigNumber.h | 2 +- src/shared/Auth/Hmac.cpp | 2 +- src/shared/Auth/Hmac.h | 2 +- src/shared/Auth/Makefile.am | 2 +- src/shared/Auth/Sha1.cpp | 2 +- src/shared/Auth/Sha1.h | 2 +- src/shared/ByteBuffer.h | 2 +- src/shared/Common.cpp | 2 +- src/shared/Common.h | 2 +- src/shared/Config/Config.cpp | 2 +- src/shared/Config/Config.h | 2 +- src/shared/Config/ConfigEnv.h | 2 +- src/shared/Config/Makefile.am | 2 +- src/shared/Database/DBCEnums.h | 2 +- src/shared/Database/DBCStores.cpp | 2 +- src/shared/Database/DBCStores.h | 2 +- src/shared/Database/DBCStructure.h | 2 +- src/shared/Database/DBCfmt.cpp | 2 +- src/shared/Database/Database.cpp | 2 +- src/shared/Database/Database.h | 2 +- src/shared/Database/DatabaseEnv.h | 2 +- src/shared/Database/DatabaseImpl.h | 2 +- src/shared/Database/DatabaseMysql.cpp | 2 +- src/shared/Database/DatabaseMysql.h | 2 +- src/shared/Database/DatabasePostgre.cpp | 2 +- src/shared/Database/DatabasePostgre.h | 2 +- src/shared/Database/DatabaseSqlite.cpp | 2 +- src/shared/Database/DatabaseSqlite.h | 2 +- src/shared/Database/Field.cpp | 2 +- src/shared/Database/Field.h | 2 +- src/shared/Database/Makefile.am | 2 +- src/shared/Database/MySQLDelayThread.h | 2 +- src/shared/Database/PGSQLDelayThread.h | 2 +- src/shared/Database/QueryResult.h | 2 +- src/shared/Database/QueryResultMysql.cpp | 2 +- src/shared/Database/QueryResultMysql.h | 2 +- src/shared/Database/QueryResultPostgre.cpp | 2 +- src/shared/Database/QueryResultPostgre.h | 2 +- src/shared/Database/QueryResultSqlite.cpp | 2 +- src/shared/Database/QueryResultSqlite.h | 2 +- src/shared/Database/SQLStorage.cpp | 2 +- src/shared/Database/SQLStorage.h | 2 +- src/shared/Database/SQLStorageImpl.h | 2 +- src/shared/Database/SqlDelayThread.cpp | 2 +- src/shared/Database/SqlDelayThread.h | 2 +- src/shared/Database/SqlOperations.cpp | 2 +- src/shared/Database/SqlOperations.h | 2 +- src/shared/Database/dbcfile.cpp | 2 +- src/shared/Database/dbcfile.h | 2 +- src/shared/Errors.h | 2 +- src/shared/Log.cpp | 2 +- src/shared/Log.h | 2 +- src/shared/Makefile.am | 2 +- src/shared/MemoryLeaks.cpp | 2 +- src/shared/MemoryLeaks.h | 2 +- src/shared/PacketLog.cpp | 2 +- src/shared/PacketLog.h | 2 +- src/shared/ProgressBar.cpp | 2 +- src/shared/ProgressBar.h | 2 +- src/shared/ServiceWin32.cpp | 2 +- src/shared/ServiceWin32.h | 2 +- src/shared/Timer.h | 2 +- src/shared/Util.cpp | 2 +- src/shared/Util.h | 2 +- src/shared/WorldPacket.h | 2 +- src/shared/revision_nr.h | 2 +- src/shared/vmap/BaseModel.cpp | 2 +- src/shared/vmap/BaseModel.h | 2 +- src/shared/vmap/CoordModelMapping.cpp | 2 +- src/shared/vmap/CoordModelMapping.h | 2 +- src/shared/vmap/DebugCmdLogger.cpp | 2 +- src/shared/vmap/DebugCmdLogger.h | 2 +- src/shared/vmap/IVMapManager.h | 2 +- src/shared/vmap/Makefile.am | 2 +- src/shared/vmap/ManagedModelContainer.cpp | 2 +- src/shared/vmap/ManagedModelContainer.h | 2 +- src/shared/vmap/ModelContainer.cpp | 2 +- src/shared/vmap/ModelContainer.h | 2 +- src/shared/vmap/NodeValueAccess.h | 2 +- src/shared/vmap/ShortBox.h | 2 +- src/shared/vmap/ShortVector.h | 2 +- src/shared/vmap/SubModel.cpp | 2 +- src/shared/vmap/SubModel.h | 2 +- src/shared/vmap/TileAssembler.cpp | 2 +- src/shared/vmap/TileAssembler.h | 2 +- src/shared/vmap/TreeNode.cpp | 2 +- src/shared/vmap/TreeNode.h | 2 +- src/shared/vmap/VMapDefinitions.h | 2 +- src/shared/vmap/VMapFactory.cpp | 2 +- src/shared/vmap/VMapFactory.h | 2 +- src/shared/vmap/VMapManager.cpp | 2 +- src/shared/vmap/VMapManager.h | 2 +- src/shared/vmap/VMapTools.h | 2 +- src/tools/Makefile.am | 2 +- src/tools/genrevision/Makefile.am | 2 +- src/tools/genrevision/genrevision.cpp | 2 +- 418 files changed, 434 insertions(+), 434 deletions(-) diff --git a/Makefile.am b/Makefile.am index 0d815cf1e..3bf0ad9de 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,4 +1,4 @@ -# Copyright (C) 2005-2008 MaNGOS +# Copyright (C) 2005-2009 MaNGOS # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/NEWS b/NEWS index e4a7d1174..f897d58db 100644 --- a/NEWS +++ b/NEWS @@ -1,6 +1,6 @@ = MaNGOS -- History of visible changes = -Copyright (c) 2005-2008 MaNGOS project +Copyright (c) 2005-2009 MaNGOS project See the COPYING file for copying conditions. diff --git a/README b/README index 8a1bb4e73..dc49c8224 100644 --- a/README +++ b/README @@ -1,6 +1,6 @@ = MaNGOS -- README = -Copyright (C) 2005-2008 MaNGOS project +Copyright (C) 2005-2009 MaNGOS project MaNGOS is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/configure.ac b/configure.ac index ec2c84de2..b193e6fe0 100644 --- a/configure.ac +++ b/configure.ac @@ -1,4 +1,4 @@ -# Copyright (C) 2005-2008 MaNGOS project +# Copyright (C) 2005-2009 MaNGOS project # # This file is free software; as a special exception the author gives # unlimited permission to copy and/or distribute it, with or without diff --git a/contrib/Makefile.am b/contrib/Makefile.am index 653e691a1..d39f2caa8 100644 --- a/contrib/Makefile.am +++ b/contrib/Makefile.am @@ -1,4 +1,4 @@ -# Copyright (C) 2005-2008 MaNGOS +# Copyright (C) 2005-2009 MaNGOS # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/contrib/git_id/git_id.cpp b/contrib/git_id/git_id.cpp index 23cb9e806..05373165e 100644 --- a/contrib/git_id/git_id.cpp +++ b/contrib/git_id/git_id.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -580,7 +580,7 @@ bool generate_sql_makefile() if(!fout) { pclose(cmd_pipe); return false; } fprintf(fout, - "# Copyright (C) 2005-2008 MaNGOS \n" + "# Copyright (C) 2005-2009 MaNGOS \n" "#\n" "# This program is free software; you can redistribute it and/or modify\n" "# it under the terms of the GNU General Public License as published by\n" diff --git a/doc/Makefile.am b/doc/Makefile.am index c42b41298..ef6954dcd 100644 --- a/doc/Makefile.am +++ b/doc/Makefile.am @@ -1,4 +1,4 @@ -# Copyright (C) 2005-2008 MaNGOS +# Copyright (C) 2005-2009 MaNGOS # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/sql/Makefile.am b/sql/Makefile.am index b3d95a853..6577db6ef 100644 --- a/sql/Makefile.am +++ b/sql/Makefile.am @@ -1,4 +1,4 @@ -# Copyright (C) 2005-2008 MaNGOS +# Copyright (C) 2005-2009 MaNGOS # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/sql/tools/Makefile.am b/sql/tools/Makefile.am index dabcc67cd..49a79346e 100644 --- a/sql/tools/Makefile.am +++ b/sql/tools/Makefile.am @@ -1,4 +1,4 @@ -# Copyright (C) 2005-2008 MaNGOS +# Copyright (C) 2005-2009 MaNGOS # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/sql/tools/README b/sql/tools/README index f5953acef..1b9cdd79b 100644 --- a/sql/tools/README +++ b/sql/tools/README @@ -1,6 +1,6 @@ = MaNGOS -- README = -Copyright (c) 2005-2008 MaNGOS +Copyright (c) 2005-2009 MaNGOS See the COPYING file for copying conditions. diff --git a/sql/updates/Makefile.am b/sql/updates/Makefile.am index 4e7f74523..6cc9c3c4a 100644 --- a/sql/updates/Makefile.am +++ b/sql/updates/Makefile.am @@ -1,4 +1,4 @@ -# Copyright (C) 2005-2008 MaNGOS +# Copyright (C) 2005-2009 MaNGOS # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/sql/updates/README b/sql/updates/README index 2b0c8974b..6f14366c6 100644 --- a/sql/updates/README +++ b/sql/updates/README @@ -1,6 +1,6 @@ = MaNGOS -- README = -Copyright (c) 2005-2008 MaNGOS +Copyright (c) 2005-2009 MaNGOS See the COPYING file for copying conditions. diff --git a/src/Makefile.am b/src/Makefile.am index abf76a649..da5fc636f 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1,4 +1,4 @@ -# Copyright (C) 2005-2008 MaNGOS +# Copyright (C) 2005-2009 MaNGOS # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/src/bindings/Makefile.am b/src/bindings/Makefile.am index 9080b8d31..2cc0efde4 100644 --- a/src/bindings/Makefile.am +++ b/src/bindings/Makefile.am @@ -1,4 +1,4 @@ -# Copyright (C) 2005-2008 MaNGOS +# Copyright (C) 2005-2009 MaNGOS # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/src/bindings/universal/Makefile.am b/src/bindings/universal/Makefile.am index d2914329a..9c605004c 100644 --- a/src/bindings/universal/Makefile.am +++ b/src/bindings/universal/Makefile.am @@ -1,4 +1,4 @@ -# Copyright (C) 2005-2008 MaNGOS +# Copyright (C) 2005-2009 MaNGOS # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/src/bindings/universal/ScriptMgr.cpp b/src/bindings/universal/ScriptMgr.cpp index e2e7349cb..2045386ac 100644 --- a/src/bindings/universal/ScriptMgr.cpp +++ b/src/bindings/universal/ScriptMgr.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/bindings/universal/ScriptMgr.h b/src/bindings/universal/ScriptMgr.h index 415aa23cc..a05edf493 100644 --- a/src/bindings/universal/ScriptMgr.h +++ b/src/bindings/universal/ScriptMgr.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/bindings/universal/Scripts/sc_default.cpp b/src/bindings/universal/Scripts/sc_default.cpp index d4a98feaa..bcb0e3302 100644 --- a/src/bindings/universal/Scripts/sc_default.cpp +++ b/src/bindings/universal/Scripts/sc_default.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/bindings/universal/Scripts/sc_defines.cpp b/src/bindings/universal/Scripts/sc_defines.cpp index f0c732cdd..0f12248d2 100644 --- a/src/bindings/universal/Scripts/sc_defines.cpp +++ b/src/bindings/universal/Scripts/sc_defines.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/bindings/universal/Scripts/sc_defines.h b/src/bindings/universal/Scripts/sc_defines.h index 6343c02fb..d9c9fde22 100644 --- a/src/bindings/universal/Scripts/sc_defines.h +++ b/src/bindings/universal/Scripts/sc_defines.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/bindings/universal/config.h b/src/bindings/universal/config.h index 1541db505..a88e03cb8 100644 --- a/src/bindings/universal/config.h +++ b/src/bindings/universal/config.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/bindings/universal/system.cpp b/src/bindings/universal/system.cpp index a59b24c7d..6589f0fae 100644 --- a/src/bindings/universal/system.cpp +++ b/src/bindings/universal/system.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/framework/Dynamic/FactoryHolder.h b/src/framework/Dynamic/FactoryHolder.h index 1c3eea8bc..d564da4a7 100644 --- a/src/framework/Dynamic/FactoryHolder.h +++ b/src/framework/Dynamic/FactoryHolder.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/framework/Dynamic/ObjectRegistry.h b/src/framework/Dynamic/ObjectRegistry.h index e78874d4b..068d5cd13 100644 --- a/src/framework/Dynamic/ObjectRegistry.h +++ b/src/framework/Dynamic/ObjectRegistry.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/framework/GameSystem/Grid.h b/src/framework/GameSystem/Grid.h index 8d2751e9a..f1c826da0 100644 --- a/src/framework/GameSystem/Grid.h +++ b/src/framework/GameSystem/Grid.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/framework/GameSystem/GridLoader.h b/src/framework/GameSystem/GridLoader.h index e73913638..cde606646 100644 --- a/src/framework/GameSystem/GridLoader.h +++ b/src/framework/GameSystem/GridLoader.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/framework/GameSystem/GridRefManager.h b/src/framework/GameSystem/GridRefManager.h index cf9d4207f..021f0fe8c 100644 --- a/src/framework/GameSystem/GridRefManager.h +++ b/src/framework/GameSystem/GridRefManager.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/framework/GameSystem/GridReference.h b/src/framework/GameSystem/GridReference.h index afd118c7f..57440b5a2 100644 --- a/src/framework/GameSystem/GridReference.h +++ b/src/framework/GameSystem/GridReference.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/framework/GameSystem/NGrid.h b/src/framework/GameSystem/NGrid.h index 60fcbaaa8..b93e5d9a9 100644 --- a/src/framework/GameSystem/NGrid.h +++ b/src/framework/GameSystem/NGrid.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/framework/GameSystem/TypeContainer.h b/src/framework/GameSystem/TypeContainer.h index 849a33385..894027c2f 100644 --- a/src/framework/GameSystem/TypeContainer.h +++ b/src/framework/GameSystem/TypeContainer.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/framework/GameSystem/TypeContainerFunctions.h b/src/framework/GameSystem/TypeContainerFunctions.h index 1e6685f32..ebfcb1b86 100644 --- a/src/framework/GameSystem/TypeContainerFunctions.h +++ b/src/framework/GameSystem/TypeContainerFunctions.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/framework/GameSystem/TypeContainerFunctionsPtr.h b/src/framework/GameSystem/TypeContainerFunctionsPtr.h index 3673668e5..82028782b 100644 --- a/src/framework/GameSystem/TypeContainerFunctionsPtr.h +++ b/src/framework/GameSystem/TypeContainerFunctionsPtr.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/framework/GameSystem/TypeContainerVisitor.h b/src/framework/GameSystem/TypeContainerVisitor.h index b6e8da9c6..7ffd14a92 100644 --- a/src/framework/GameSystem/TypeContainerVisitor.h +++ b/src/framework/GameSystem/TypeContainerVisitor.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/framework/Makefile.am b/src/framework/Makefile.am index 2a62943ab..a519dad42 100644 --- a/src/framework/Makefile.am +++ b/src/framework/Makefile.am @@ -1,4 +1,4 @@ -# Copyright (C) 2005-2008 MaNGOS +# Copyright (C) 2005-2009 MaNGOS # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/src/framework/Network/SocketDefines.h b/src/framework/Network/SocketDefines.h index 2d82f8e05..9658cd60f 100644 --- a/src/framework/Network/SocketDefines.h +++ b/src/framework/Network/SocketDefines.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/framework/Platform/CompilerDefs.h b/src/framework/Platform/CompilerDefs.h index 3d88bbcec..e835491b4 100644 --- a/src/framework/Platform/CompilerDefs.h +++ b/src/framework/Platform/CompilerDefs.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/framework/Platform/Define.h b/src/framework/Platform/Define.h index 0f6b4cd46..5602bb365 100644 --- a/src/framework/Platform/Define.h +++ b/src/framework/Platform/Define.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/framework/Policies/CreationPolicy.h b/src/framework/Policies/CreationPolicy.h index 43312d130..528f6cbbf 100644 --- a/src/framework/Policies/CreationPolicy.h +++ b/src/framework/Policies/CreationPolicy.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/framework/Policies/ObjectLifeTime.cpp b/src/framework/Policies/ObjectLifeTime.cpp index 0bbb0e4e2..8f56ddb26 100644 --- a/src/framework/Policies/ObjectLifeTime.cpp +++ b/src/framework/Policies/ObjectLifeTime.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/framework/Policies/ObjectLifeTime.h b/src/framework/Policies/ObjectLifeTime.h index f93283dde..dab37a98c 100644 --- a/src/framework/Policies/ObjectLifeTime.h +++ b/src/framework/Policies/ObjectLifeTime.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/framework/Policies/Singleton.h b/src/framework/Policies/Singleton.h index 2f77a1d16..9502fb120 100644 --- a/src/framework/Policies/Singleton.h +++ b/src/framework/Policies/Singleton.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/framework/Policies/SingletonImp.h b/src/framework/Policies/SingletonImp.h index d0ff54f1d..f1f5eaa17 100644 --- a/src/framework/Policies/SingletonImp.h +++ b/src/framework/Policies/SingletonImp.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/framework/Policies/ThreadingModel.h b/src/framework/Policies/ThreadingModel.h index 9f8eddb30..cb2f79259 100644 --- a/src/framework/Policies/ThreadingModel.h +++ b/src/framework/Policies/ThreadingModel.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/framework/Utilities/ByteConverter.h b/src/framework/Utilities/ByteConverter.h index 199edcb6c..c4bf7029a 100644 --- a/src/framework/Utilities/ByteConverter.h +++ b/src/framework/Utilities/ByteConverter.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/framework/Utilities/Callback.h b/src/framework/Utilities/Callback.h index 1e2e07ab9..c2ed36421 100644 --- a/src/framework/Utilities/Callback.h +++ b/src/framework/Utilities/Callback.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/framework/Utilities/CountedReference/Reference.h b/src/framework/Utilities/CountedReference/Reference.h index c06a2eba3..8fd513bb5 100644 --- a/src/framework/Utilities/CountedReference/Reference.h +++ b/src/framework/Utilities/CountedReference/Reference.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/framework/Utilities/CountedReference/ReferenceHolder.h b/src/framework/Utilities/CountedReference/ReferenceHolder.h index 821a240cc..d0bb2cb3e 100644 --- a/src/framework/Utilities/CountedReference/ReferenceHolder.h +++ b/src/framework/Utilities/CountedReference/ReferenceHolder.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/framework/Utilities/CountedReference/ReferenceImpl.h b/src/framework/Utilities/CountedReference/ReferenceImpl.h index a1a7b352b..cd0143748 100644 --- a/src/framework/Utilities/CountedReference/ReferenceImpl.h +++ b/src/framework/Utilities/CountedReference/ReferenceImpl.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/framework/Utilities/EventProcessor.cpp b/src/framework/Utilities/EventProcessor.cpp index 2bcf6a46a..74e1a73fa 100644 --- a/src/framework/Utilities/EventProcessor.cpp +++ b/src/framework/Utilities/EventProcessor.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/framework/Utilities/EventProcessor.h b/src/framework/Utilities/EventProcessor.h index 350db5bb5..e395dd3f6 100644 --- a/src/framework/Utilities/EventProcessor.h +++ b/src/framework/Utilities/EventProcessor.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/framework/Utilities/LinkedList.h b/src/framework/Utilities/LinkedList.h index 9e6f9249c..092ce9ffe 100644 --- a/src/framework/Utilities/LinkedList.h +++ b/src/framework/Utilities/LinkedList.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/framework/Utilities/LinkedReference/RefManager.h b/src/framework/Utilities/LinkedReference/RefManager.h index 080133371..319c3ebf2 100644 --- a/src/framework/Utilities/LinkedReference/RefManager.h +++ b/src/framework/Utilities/LinkedReference/RefManager.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/framework/Utilities/LinkedReference/Reference.h b/src/framework/Utilities/LinkedReference/Reference.h index 3c84704dc..d74723a42 100644 --- a/src/framework/Utilities/LinkedReference/Reference.h +++ b/src/framework/Utilities/LinkedReference/Reference.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/framework/Utilities/TypeList.h b/src/framework/Utilities/TypeList.h index a94e4a280..090f5aeba 100644 --- a/src/framework/Utilities/TypeList.h +++ b/src/framework/Utilities/TypeList.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/framework/Utilities/UnorderedMap.h b/src/framework/Utilities/UnorderedMap.h index 32a436f42..3a9a401a4 100644 --- a/src/framework/Utilities/UnorderedMap.h +++ b/src/framework/Utilities/UnorderedMap.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/AccountMgr.cpp b/src/game/AccountMgr.cpp index 3060554a9..6f9cbf414 100644 --- a/src/game/AccountMgr.cpp +++ b/src/game/AccountMgr.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/AccountMgr.h b/src/game/AccountMgr.h index 1b74c7134..86d09312c 100644 --- a/src/game/AccountMgr.h +++ b/src/game/AccountMgr.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/AchievementMgr.cpp b/src/game/AchievementMgr.cpp index 44df14bf1..29503502b 100644 --- a/src/game/AchievementMgr.cpp +++ b/src/game/AchievementMgr.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/AchievementMgr.h b/src/game/AchievementMgr.h index 6392a9fc6..871d3d5d8 100644 --- a/src/game/AchievementMgr.h +++ b/src/game/AchievementMgr.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/AddonHandler.cpp b/src/game/AddonHandler.cpp index 1f557dd9e..4395b437e 100644 --- a/src/game/AddonHandler.cpp +++ b/src/game/AddonHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/AddonHandler.h b/src/game/AddonHandler.h index 95c89b662..7d083b159 100644 --- a/src/game/AddonHandler.h +++ b/src/game/AddonHandler.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/AggressorAI.cpp b/src/game/AggressorAI.cpp index 25244e7a2..52f7dbf49 100644 --- a/src/game/AggressorAI.cpp +++ b/src/game/AggressorAI.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/AggressorAI.h b/src/game/AggressorAI.h index e51a4e61e..c67bed34d 100644 --- a/src/game/AggressorAI.h +++ b/src/game/AggressorAI.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/AnimalRandomMovementGenerator.h b/src/game/AnimalRandomMovementGenerator.h index dc42c6e0c..6619cf87e 100644 --- a/src/game/AnimalRandomMovementGenerator.h +++ b/src/game/AnimalRandomMovementGenerator.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/ArenaTeam.cpp b/src/game/ArenaTeam.cpp index 5f1dfdb93..8fa06e38b 100644 --- a/src/game/ArenaTeam.cpp +++ b/src/game/ArenaTeam.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/ArenaTeam.h b/src/game/ArenaTeam.h index ba19c53f9..1a4170687 100644 --- a/src/game/ArenaTeam.h +++ b/src/game/ArenaTeam.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/ArenaTeamHandler.cpp b/src/game/ArenaTeamHandler.cpp index ea0567ed5..5a3e3c16d 100644 --- a/src/game/ArenaTeamHandler.cpp +++ b/src/game/ArenaTeamHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/AuctionHouse.cpp b/src/game/AuctionHouse.cpp index 8ec7d402d..11ab1adf9 100644 --- a/src/game/AuctionHouse.cpp +++ b/src/game/AuctionHouse.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/AuctionHouseObject.h b/src/game/AuctionHouseObject.h index 5cc51692c..077991e8c 100644 --- a/src/game/AuctionHouseObject.h +++ b/src/game/AuctionHouseObject.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Bag.cpp b/src/game/Bag.cpp index e0919ce36..2f967752e 100644 --- a/src/game/Bag.cpp +++ b/src/game/Bag.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Bag.h b/src/game/Bag.h index 21458546e..ad36b6aa0 100644 --- a/src/game/Bag.h +++ b/src/game/Bag.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/BattleGround.cpp b/src/game/BattleGround.cpp index ebb95536e..24b64ad22 100644 --- a/src/game/BattleGround.cpp +++ b/src/game/BattleGround.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/BattleGround.h b/src/game/BattleGround.h index 1e92dfaea..7debbfa68 100644 --- a/src/game/BattleGround.h +++ b/src/game/BattleGround.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/BattleGroundAA.cpp b/src/game/BattleGroundAA.cpp index 585e1caa5..cc2404614 100644 --- a/src/game/BattleGroundAA.cpp +++ b/src/game/BattleGroundAA.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/BattleGroundAA.h b/src/game/BattleGroundAA.h index 8a81c8c0c..767e4eb55 100644 --- a/src/game/BattleGroundAA.h +++ b/src/game/BattleGroundAA.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/BattleGroundAB.cpp b/src/game/BattleGroundAB.cpp index 5200a3f5f..0a5186937 100644 --- a/src/game/BattleGroundAB.cpp +++ b/src/game/BattleGroundAB.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/BattleGroundAB.h b/src/game/BattleGroundAB.h index dc3b8c2f8..97615dc1c 100644 --- a/src/game/BattleGroundAB.h +++ b/src/game/BattleGroundAB.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/BattleGroundAV.cpp b/src/game/BattleGroundAV.cpp index 9421e97b5..99866f3f8 100644 --- a/src/game/BattleGroundAV.cpp +++ b/src/game/BattleGroundAV.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/BattleGroundAV.h b/src/game/BattleGroundAV.h index 11bd08b9e..c77a6af88 100644 --- a/src/game/BattleGroundAV.h +++ b/src/game/BattleGroundAV.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/BattleGroundBE.cpp b/src/game/BattleGroundBE.cpp index 81e47c721..cb38b0b80 100644 --- a/src/game/BattleGroundBE.cpp +++ b/src/game/BattleGroundBE.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/BattleGroundBE.h b/src/game/BattleGroundBE.h index df46efbfd..c66d1b1b9 100644 --- a/src/game/BattleGroundBE.h +++ b/src/game/BattleGroundBE.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/BattleGroundEY.cpp b/src/game/BattleGroundEY.cpp index 279816b34..7adca00f4 100644 --- a/src/game/BattleGroundEY.cpp +++ b/src/game/BattleGroundEY.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/BattleGroundEY.h b/src/game/BattleGroundEY.h index 0e57eaa61..8e19472b2 100644 --- a/src/game/BattleGroundEY.h +++ b/src/game/BattleGroundEY.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/BattleGroundHandler.cpp b/src/game/BattleGroundHandler.cpp index 7375cc3e7..323ec1a73 100644 --- a/src/game/BattleGroundHandler.cpp +++ b/src/game/BattleGroundHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/BattleGroundMgr.cpp b/src/game/BattleGroundMgr.cpp index 58da27968..fc6266eb2 100644 --- a/src/game/BattleGroundMgr.cpp +++ b/src/game/BattleGroundMgr.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/BattleGroundMgr.h b/src/game/BattleGroundMgr.h index d8db225ed..386df8efa 100644 --- a/src/game/BattleGroundMgr.h +++ b/src/game/BattleGroundMgr.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/BattleGroundNA.cpp b/src/game/BattleGroundNA.cpp index 385de1211..63bfed9e8 100644 --- a/src/game/BattleGroundNA.cpp +++ b/src/game/BattleGroundNA.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/BattleGroundNA.h b/src/game/BattleGroundNA.h index a44460919..64ccf0a5a 100644 --- a/src/game/BattleGroundNA.h +++ b/src/game/BattleGroundNA.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/BattleGroundRL.cpp b/src/game/BattleGroundRL.cpp index bf3b5b029..ee9beb181 100644 --- a/src/game/BattleGroundRL.cpp +++ b/src/game/BattleGroundRL.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/BattleGroundRL.h b/src/game/BattleGroundRL.h index dd000ce13..2c0a67778 100644 --- a/src/game/BattleGroundRL.h +++ b/src/game/BattleGroundRL.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/BattleGroundWS.cpp b/src/game/BattleGroundWS.cpp index 53c67c16f..6e70739fa 100644 --- a/src/game/BattleGroundWS.cpp +++ b/src/game/BattleGroundWS.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/BattleGroundWS.h b/src/game/BattleGroundWS.h index cf6857085..56a7b3061 100644 --- a/src/game/BattleGroundWS.h +++ b/src/game/BattleGroundWS.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Calendar.cpp b/src/game/Calendar.cpp index cebf7252e..0c1efb20f 100644 --- a/src/game/Calendar.cpp +++ b/src/game/Calendar.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Calendar.h b/src/game/Calendar.h index 94e4ff103..7a86afa7d 100644 --- a/src/game/Calendar.h +++ b/src/game/Calendar.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/CalendarHandler.cpp b/src/game/CalendarHandler.cpp index 9c69e3a91..103da3eb9 100644 --- a/src/game/CalendarHandler.cpp +++ b/src/game/CalendarHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Cell.h b/src/game/Cell.h index b0ff85d89..f826b9e06 100644 --- a/src/game/Cell.h +++ b/src/game/Cell.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/CellImpl.h b/src/game/CellImpl.h index b673bad76..7302820bb 100644 --- a/src/game/CellImpl.h +++ b/src/game/CellImpl.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Channel.cpp b/src/game/Channel.cpp index d1dee730c..5f43cfb11 100644 --- a/src/game/Channel.cpp +++ b/src/game/Channel.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Channel.h b/src/game/Channel.h index 55ebf57ea..8a0c94492 100644 --- a/src/game/Channel.h +++ b/src/game/Channel.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/ChannelHandler.cpp b/src/game/ChannelHandler.cpp index 3a3a73e97..b14b644b9 100644 --- a/src/game/ChannelHandler.cpp +++ b/src/game/ChannelHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/ChannelMgr.h b/src/game/ChannelMgr.h index 124afec5c..fac5626ef 100644 --- a/src/game/ChannelMgr.h +++ b/src/game/ChannelMgr.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/CharacterHandler.cpp b/src/game/CharacterHandler.cpp index 0f04318e6..ed4f4ec73 100644 --- a/src/game/CharacterHandler.cpp +++ b/src/game/CharacterHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Chat.cpp b/src/game/Chat.cpp index 0d972c985..6ad8318be 100644 --- a/src/game/Chat.cpp +++ b/src/game/Chat.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Chat.h b/src/game/Chat.h index bb29a3ad6..db2a7e663 100644 --- a/src/game/Chat.h +++ b/src/game/Chat.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/ChatHandler.cpp b/src/game/ChatHandler.cpp index a6e05aa64..1de6ca458 100644 --- a/src/game/ChatHandler.cpp +++ b/src/game/ChatHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/CombatHandler.cpp b/src/game/CombatHandler.cpp index db164ef6b..86605c397 100644 --- a/src/game/CombatHandler.cpp +++ b/src/game/CombatHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/ConfusedMovementGenerator.cpp b/src/game/ConfusedMovementGenerator.cpp index c4152a237..79040760f 100644 --- a/src/game/ConfusedMovementGenerator.cpp +++ b/src/game/ConfusedMovementGenerator.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/ConfusedMovementGenerator.h b/src/game/ConfusedMovementGenerator.h index f023901ce..95fe1b703 100644 --- a/src/game/ConfusedMovementGenerator.h +++ b/src/game/ConfusedMovementGenerator.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Corpse.cpp b/src/game/Corpse.cpp index 83358c3b3..7071fed80 100644 --- a/src/game/Corpse.cpp +++ b/src/game/Corpse.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Corpse.h b/src/game/Corpse.h index 08c772c75..9c219066f 100644 --- a/src/game/Corpse.h +++ b/src/game/Corpse.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Creature.cpp b/src/game/Creature.cpp index 5c41bd477..140d022f6 100644 --- a/src/game/Creature.cpp +++ b/src/game/Creature.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Creature.h b/src/game/Creature.h index 86daa0500..e97814db0 100644 --- a/src/game/Creature.h +++ b/src/game/Creature.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/CreatureAI.cpp b/src/game/CreatureAI.cpp index e551dd004..b4f916f34 100644 --- a/src/game/CreatureAI.cpp +++ b/src/game/CreatureAI.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/CreatureAI.h b/src/game/CreatureAI.h index 5b4ed0545..4a8fb267e 100644 --- a/src/game/CreatureAI.h +++ b/src/game/CreatureAI.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/CreatureAIImpl.h b/src/game/CreatureAIImpl.h index c9f22a730..70dd02167 100644 --- a/src/game/CreatureAIImpl.h +++ b/src/game/CreatureAIImpl.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/CreatureAIRegistry.cpp b/src/game/CreatureAIRegistry.cpp index b76a7211a..7790ff992 100644 --- a/src/game/CreatureAIRegistry.cpp +++ b/src/game/CreatureAIRegistry.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/CreatureAIRegistry.h b/src/game/CreatureAIRegistry.h index adf6d73ab..bdc6c5ae0 100644 --- a/src/game/CreatureAIRegistry.h +++ b/src/game/CreatureAIRegistry.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/CreatureAISelector.cpp b/src/game/CreatureAISelector.cpp index 25a2cd184..f9a76095f 100644 --- a/src/game/CreatureAISelector.cpp +++ b/src/game/CreatureAISelector.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/CreatureAISelector.h b/src/game/CreatureAISelector.h index ed53a135c..d568a40e2 100644 --- a/src/game/CreatureAISelector.h +++ b/src/game/CreatureAISelector.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/DestinationHolder.cpp b/src/game/DestinationHolder.cpp index 4c22ff824..2a2321128 100644 --- a/src/game/DestinationHolder.cpp +++ b/src/game/DestinationHolder.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/DestinationHolder.h b/src/game/DestinationHolder.h index bc6f4ac47..72ee77762 100644 --- a/src/game/DestinationHolder.h +++ b/src/game/DestinationHolder.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/DestinationHolderImp.h b/src/game/DestinationHolderImp.h index 3043c44e2..911f9d2be 100644 --- a/src/game/DestinationHolderImp.h +++ b/src/game/DestinationHolderImp.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/DuelHandler.cpp b/src/game/DuelHandler.cpp index 65d50ee87..a355931e5 100644 --- a/src/game/DuelHandler.cpp +++ b/src/game/DuelHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/DynamicObject.cpp b/src/game/DynamicObject.cpp index b288dcb85..a8a124c1f 100644 --- a/src/game/DynamicObject.cpp +++ b/src/game/DynamicObject.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/DynamicObject.h b/src/game/DynamicObject.h index 9662397d2..6299fa782 100644 --- a/src/game/DynamicObject.h +++ b/src/game/DynamicObject.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/FleeingMovementGenerator.cpp b/src/game/FleeingMovementGenerator.cpp index d5c21f186..655e9da36 100644 --- a/src/game/FleeingMovementGenerator.cpp +++ b/src/game/FleeingMovementGenerator.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/FleeingMovementGenerator.h b/src/game/FleeingMovementGenerator.h index 7f4028fc8..ec3d3f91a 100644 --- a/src/game/FleeingMovementGenerator.h +++ b/src/game/FleeingMovementGenerator.h @@ -1,5 +1,5 @@ /* -* Copyright (C) 2005-2008 MaNGOS +* Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/FollowerRefManager.h b/src/game/FollowerRefManager.h index 3dfbd647e..e2e9f48a7 100644 --- a/src/game/FollowerRefManager.h +++ b/src/game/FollowerRefManager.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/FollowerReference.cpp b/src/game/FollowerReference.cpp index 31b925b11..25df0c065 100644 --- a/src/game/FollowerReference.cpp +++ b/src/game/FollowerReference.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/FollowerReference.h b/src/game/FollowerReference.h index 1d2996aba..8286c47e1 100644 --- a/src/game/FollowerReference.h +++ b/src/game/FollowerReference.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Formulas.h b/src/game/Formulas.h index 43e77d333..a00e523d1 100644 --- a/src/game/Formulas.h +++ b/src/game/Formulas.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/GMTicketHandler.cpp b/src/game/GMTicketHandler.cpp index ace7d97ec..c33968221 100644 --- a/src/game/GMTicketHandler.cpp +++ b/src/game/GMTicketHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/GMTicketMgr.cpp b/src/game/GMTicketMgr.cpp index e843e48c8..e122daac8 100644 --- a/src/game/GMTicketMgr.cpp +++ b/src/game/GMTicketMgr.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/GMTicketMgr.h b/src/game/GMTicketMgr.h index 5f7bf69ea..65487da0a 100644 --- a/src/game/GMTicketMgr.h +++ b/src/game/GMTicketMgr.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/GameEvent.cpp b/src/game/GameEvent.cpp index e94d7c1d7..3ec42bb65 100644 --- a/src/game/GameEvent.cpp +++ b/src/game/GameEvent.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/GameEvent.h b/src/game/GameEvent.h index 7cfb0f1c4..a60fb59c5 100644 --- a/src/game/GameEvent.h +++ b/src/game/GameEvent.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/GameObject.cpp b/src/game/GameObject.cpp index 433493492..aefe57b09 100644 --- a/src/game/GameObject.cpp +++ b/src/game/GameObject.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/GameObject.h b/src/game/GameObject.h index 3865a23c8..fdae7a18f 100644 --- a/src/game/GameObject.h +++ b/src/game/GameObject.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/GlobalEvents.cpp b/src/game/GlobalEvents.cpp index 219086c61..74199e56c 100644 --- a/src/game/GlobalEvents.cpp +++ b/src/game/GlobalEvents.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/GlobalEvents.h b/src/game/GlobalEvents.h index fc493ab9e..2314244da 100644 --- a/src/game/GlobalEvents.h +++ b/src/game/GlobalEvents.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/GossipDef.cpp b/src/game/GossipDef.cpp index c61ab5e10..7b375f228 100644 --- a/src/game/GossipDef.cpp +++ b/src/game/GossipDef.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/GossipDef.h b/src/game/GossipDef.h index 7cde0c3b1..5ddfb10de 100644 --- a/src/game/GossipDef.h +++ b/src/game/GossipDef.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/GridDefines.h b/src/game/GridDefines.h index ced42871b..03e8cc100 100644 --- a/src/game/GridDefines.h +++ b/src/game/GridDefines.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/GridNotifiers.cpp b/src/game/GridNotifiers.cpp index 8c611815b..e449e7d30 100644 --- a/src/game/GridNotifiers.cpp +++ b/src/game/GridNotifiers.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/GridNotifiers.h b/src/game/GridNotifiers.h index bea2ad269..f0f4e406f 100644 --- a/src/game/GridNotifiers.h +++ b/src/game/GridNotifiers.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/GridNotifiersImpl.h b/src/game/GridNotifiersImpl.h index 602d3d247..8244f6371 100644 --- a/src/game/GridNotifiersImpl.h +++ b/src/game/GridNotifiersImpl.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/GridStates.cpp b/src/game/GridStates.cpp index 392829737..1bace7c27 100644 --- a/src/game/GridStates.cpp +++ b/src/game/GridStates.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/GridStates.h b/src/game/GridStates.h index 8e2e6eeec..873dc15ad 100644 --- a/src/game/GridStates.h +++ b/src/game/GridStates.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Group.cpp b/src/game/Group.cpp index 67e79bf47..3b411227d 100644 --- a/src/game/Group.cpp +++ b/src/game/Group.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Group.h b/src/game/Group.h index 94fbb9d72..4d01115bb 100644 --- a/src/game/Group.h +++ b/src/game/Group.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/GroupHandler.cpp b/src/game/GroupHandler.cpp index d5e641129..51fc8cb7c 100644 --- a/src/game/GroupHandler.cpp +++ b/src/game/GroupHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/GroupRefManager.h b/src/game/GroupRefManager.h index 72bcbdb71..35c45e16c 100644 --- a/src/game/GroupRefManager.h +++ b/src/game/GroupRefManager.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/GroupReference.cpp b/src/game/GroupReference.cpp index 6c9bd38dc..ce29a3dff 100644 --- a/src/game/GroupReference.cpp +++ b/src/game/GroupReference.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/GroupReference.h b/src/game/GroupReference.h index 7d8d8a922..04f296312 100644 --- a/src/game/GroupReference.h +++ b/src/game/GroupReference.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/GuardAI.cpp b/src/game/GuardAI.cpp index 5672f149b..255930f5b 100644 --- a/src/game/GuardAI.cpp +++ b/src/game/GuardAI.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/GuardAI.h b/src/game/GuardAI.h index 092e222ed..365e3af75 100644 --- a/src/game/GuardAI.h +++ b/src/game/GuardAI.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Guild.cpp b/src/game/Guild.cpp index ec5c0a4c7..4ffdf958d 100644 --- a/src/game/Guild.cpp +++ b/src/game/Guild.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Guild.h b/src/game/Guild.h index dc4b7998c..d1c1e322e 100644 --- a/src/game/Guild.h +++ b/src/game/Guild.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/GuildHandler.cpp b/src/game/GuildHandler.cpp index fe50ccfed..f71223603 100644 --- a/src/game/GuildHandler.cpp +++ b/src/game/GuildHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/HomeMovementGenerator.cpp b/src/game/HomeMovementGenerator.cpp index 7b166e8ec..ae336b614 100644 --- a/src/game/HomeMovementGenerator.cpp +++ b/src/game/HomeMovementGenerator.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/HomeMovementGenerator.h b/src/game/HomeMovementGenerator.h index 7ce0678ec..52bd60166 100644 --- a/src/game/HomeMovementGenerator.h +++ b/src/game/HomeMovementGenerator.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/HostilRefManager.cpp b/src/game/HostilRefManager.cpp index e0cc01280..149f91494 100644 --- a/src/game/HostilRefManager.cpp +++ b/src/game/HostilRefManager.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/HostilRefManager.h b/src/game/HostilRefManager.h index 576597a52..64f6988cc 100644 --- a/src/game/HostilRefManager.h +++ b/src/game/HostilRefManager.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/IdleMovementGenerator.cpp b/src/game/IdleMovementGenerator.cpp index 217ca35b4..370099ebd 100644 --- a/src/game/IdleMovementGenerator.cpp +++ b/src/game/IdleMovementGenerator.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/IdleMovementGenerator.h b/src/game/IdleMovementGenerator.h index c74774562..e602f8ef8 100644 --- a/src/game/IdleMovementGenerator.h +++ b/src/game/IdleMovementGenerator.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/InstanceData.cpp b/src/game/InstanceData.cpp index b90c9b656..394aa5837 100644 --- a/src/game/InstanceData.cpp +++ b/src/game/InstanceData.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/InstanceData.h b/src/game/InstanceData.h index a610b8036..b40b3893b 100644 --- a/src/game/InstanceData.h +++ b/src/game/InstanceData.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Item.cpp b/src/game/Item.cpp index cf728f3d7..bd0dc187e 100644 --- a/src/game/Item.cpp +++ b/src/game/Item.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Item.h b/src/game/Item.h index 7b93ed4ca..a124d318a 100644 --- a/src/game/Item.h +++ b/src/game/Item.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/ItemEnchantmentMgr.cpp b/src/game/ItemEnchantmentMgr.cpp index 1971200bc..ea9e7ef18 100644 --- a/src/game/ItemEnchantmentMgr.cpp +++ b/src/game/ItemEnchantmentMgr.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/ItemEnchantmentMgr.h b/src/game/ItemEnchantmentMgr.h index d2d60dc17..543f773ab 100644 --- a/src/game/ItemEnchantmentMgr.h +++ b/src/game/ItemEnchantmentMgr.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/ItemHandler.cpp b/src/game/ItemHandler.cpp index ff1a4c983..eb4303b23 100644 --- a/src/game/ItemHandler.cpp +++ b/src/game/ItemHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/ItemPrototype.h b/src/game/ItemPrototype.h index f62d8fb97..a4c0bb96e 100644 --- a/src/game/ItemPrototype.h +++ b/src/game/ItemPrototype.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/LFGHandler.cpp b/src/game/LFGHandler.cpp index 8f261c7ff..c44f17c75 100644 --- a/src/game/LFGHandler.cpp +++ b/src/game/LFGHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Language.h b/src/game/Language.h index 666b8fa9c..207361889 100644 --- a/src/game/Language.h +++ b/src/game/Language.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Level0.cpp b/src/game/Level0.cpp index b6012d47c..2b52f11d7 100644 --- a/src/game/Level0.cpp +++ b/src/game/Level0.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Level1.cpp b/src/game/Level1.cpp index fb27666b6..71888e8c0 100644 --- a/src/game/Level1.cpp +++ b/src/game/Level1.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Level2.cpp b/src/game/Level2.cpp index d71300111..695564617 100644 --- a/src/game/Level2.cpp +++ b/src/game/Level2.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Level3.cpp b/src/game/Level3.cpp index f66c4ef45..f50fff61e 100644 --- a/src/game/Level3.cpp +++ b/src/game/Level3.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/LootHandler.cpp b/src/game/LootHandler.cpp index f9c26fd29..1e3b9c6d0 100644 --- a/src/game/LootHandler.cpp +++ b/src/game/LootHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/LootMgr.cpp b/src/game/LootMgr.cpp index a559b7b6f..030db9011 100644 --- a/src/game/LootMgr.cpp +++ b/src/game/LootMgr.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/LootMgr.h b/src/game/LootMgr.h index 4d218f2df..6f8289d31 100644 --- a/src/game/LootMgr.h +++ b/src/game/LootMgr.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Mail.cpp b/src/game/Mail.cpp index 1bca38aac..0b6fbd2c7 100644 --- a/src/game/Mail.cpp +++ b/src/game/Mail.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Mail.h b/src/game/Mail.h index e7adf6202..9fcb8df4b 100644 --- a/src/game/Mail.h +++ b/src/game/Mail.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Makefile.am b/src/game/Makefile.am index 44c7898a0..8d35a4916 100644 --- a/src/game/Makefile.am +++ b/src/game/Makefile.am @@ -1,4 +1,4 @@ -# Copyright (C) 2005-2008 MaNGOS +# Copyright (C) 2005-2009 MaNGOS # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/src/game/Map.cpp b/src/game/Map.cpp index 4d05e5e2e..bba8e945a 100644 --- a/src/game/Map.cpp +++ b/src/game/Map.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Map.h b/src/game/Map.h index 21e2d7d01..5b9c3781a 100644 --- a/src/game/Map.h +++ b/src/game/Map.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/MapInstanced.cpp b/src/game/MapInstanced.cpp index 37ce4522a..a89238ff9 100644 --- a/src/game/MapInstanced.cpp +++ b/src/game/MapInstanced.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/MapInstanced.h b/src/game/MapInstanced.h index 030716853..0a998e50d 100644 --- a/src/game/MapInstanced.h +++ b/src/game/MapInstanced.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/MapManager.cpp b/src/game/MapManager.cpp index 03f080dd9..9a7d1c20e 100644 --- a/src/game/MapManager.cpp +++ b/src/game/MapManager.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/MapManager.h b/src/game/MapManager.h index 74312d602..30bfead45 100644 --- a/src/game/MapManager.h +++ b/src/game/MapManager.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/MapRefManager.h b/src/game/MapRefManager.h index bfd0ca12e..02f8b2ea4 100644 --- a/src/game/MapRefManager.h +++ b/src/game/MapRefManager.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/MapReference.h b/src/game/MapReference.h index e58e06cf8..3879da51c 100644 --- a/src/game/MapReference.h +++ b/src/game/MapReference.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/MiscHandler.cpp b/src/game/MiscHandler.cpp index 54a2ecbe6..ac6f8ffe8 100644 --- a/src/game/MiscHandler.cpp +++ b/src/game/MiscHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/MotionMaster.cpp b/src/game/MotionMaster.cpp index 23beef949..c82869fe7 100644 --- a/src/game/MotionMaster.cpp +++ b/src/game/MotionMaster.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/MotionMaster.h b/src/game/MotionMaster.h index b4a19cd86..bccc73327 100644 --- a/src/game/MotionMaster.h +++ b/src/game/MotionMaster.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/MovementGenerator.cpp b/src/game/MovementGenerator.cpp index 9266858d3..4e1543598 100644 --- a/src/game/MovementGenerator.cpp +++ b/src/game/MovementGenerator.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/MovementGenerator.h b/src/game/MovementGenerator.h index 5d95a5a96..2653ea636 100644 --- a/src/game/MovementGenerator.h +++ b/src/game/MovementGenerator.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/MovementGeneratorImpl.h b/src/game/MovementGeneratorImpl.h index 83df8325b..fb0d449fb 100644 --- a/src/game/MovementGeneratorImpl.h +++ b/src/game/MovementGeneratorImpl.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/MovementHandler.cpp b/src/game/MovementHandler.cpp index 8d34e7ec7..2a256db1b 100644 --- a/src/game/MovementHandler.cpp +++ b/src/game/MovementHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/NPCHandler.cpp b/src/game/NPCHandler.cpp index e7ac60265..498902ebe 100644 --- a/src/game/NPCHandler.cpp +++ b/src/game/NPCHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/NPCHandler.h b/src/game/NPCHandler.h index 8ae245876..4ecf77378 100644 --- a/src/game/NPCHandler.h +++ b/src/game/NPCHandler.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/NullCreatureAI.cpp b/src/game/NullCreatureAI.cpp index 62113c230..c3e048d48 100644 --- a/src/game/NullCreatureAI.cpp +++ b/src/game/NullCreatureAI.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/NullCreatureAI.h b/src/game/NullCreatureAI.h index 642669e72..661571b97 100644 --- a/src/game/NullCreatureAI.h +++ b/src/game/NullCreatureAI.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Object.cpp b/src/game/Object.cpp index b2c9e16d5..d44f73145 100644 --- a/src/game/Object.cpp +++ b/src/game/Object.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Object.h b/src/game/Object.h index 9ecbf7b1d..27b1f8fb8 100644 --- a/src/game/Object.h +++ b/src/game/Object.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/ObjectAccessor.cpp b/src/game/ObjectAccessor.cpp index a1305e7f7..bab108695 100644 --- a/src/game/ObjectAccessor.cpp +++ b/src/game/ObjectAccessor.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/ObjectAccessor.h b/src/game/ObjectAccessor.h index ff33a9f6c..0c2a55079 100644 --- a/src/game/ObjectAccessor.h +++ b/src/game/ObjectAccessor.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/ObjectDefines.h b/src/game/ObjectDefines.h index 44da3a89a..ea2392aee 100644 --- a/src/game/ObjectDefines.h +++ b/src/game/ObjectDefines.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/ObjectGridLoader.cpp b/src/game/ObjectGridLoader.cpp index 0e1731e24..b2735df3b 100644 --- a/src/game/ObjectGridLoader.cpp +++ b/src/game/ObjectGridLoader.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/ObjectGridLoader.h b/src/game/ObjectGridLoader.h index 1590ba5c2..6022ba23a 100644 --- a/src/game/ObjectGridLoader.h +++ b/src/game/ObjectGridLoader.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/ObjectMgr.cpp b/src/game/ObjectMgr.cpp index 4c96a405d..2d26d2bac 100644 --- a/src/game/ObjectMgr.cpp +++ b/src/game/ObjectMgr.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/ObjectMgr.h b/src/game/ObjectMgr.h index bf5ca72a7..dafa115c3 100644 --- a/src/game/ObjectMgr.h +++ b/src/game/ObjectMgr.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/ObjectPosSelector.cpp b/src/game/ObjectPosSelector.cpp index 6855e21f8..899dfec3f 100644 --- a/src/game/ObjectPosSelector.cpp +++ b/src/game/ObjectPosSelector.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/ObjectPosSelector.h b/src/game/ObjectPosSelector.h index bc4de0c1d..840506111 100644 --- a/src/game/ObjectPosSelector.h +++ b/src/game/ObjectPosSelector.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Opcodes.cpp b/src/game/Opcodes.cpp index 928b85ec9..fd75e4402 100644 --- a/src/game/Opcodes.cpp +++ b/src/game/Opcodes.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Opcodes.h b/src/game/Opcodes.h index 124a03c68..5504d23f6 100644 --- a/src/game/Opcodes.h +++ b/src/game/Opcodes.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Path.h b/src/game/Path.h index 71564dada..086293c38 100644 --- a/src/game/Path.h +++ b/src/game/Path.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Pet.cpp b/src/game/Pet.cpp index 47edf16a6..2f6ba2e64 100644 --- a/src/game/Pet.cpp +++ b/src/game/Pet.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Pet.h b/src/game/Pet.h index 174d49ad4..f64364e15 100644 --- a/src/game/Pet.h +++ b/src/game/Pet.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/PetAI.cpp b/src/game/PetAI.cpp index 144b2d7f8..80613ae2f 100644 --- a/src/game/PetAI.cpp +++ b/src/game/PetAI.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/PetAI.h b/src/game/PetAI.h index 27b56c25f..00edf864e 100644 --- a/src/game/PetAI.h +++ b/src/game/PetAI.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/PetHandler.cpp b/src/game/PetHandler.cpp index 5af2384b4..a79b6f1d5 100644 --- a/src/game/PetHandler.cpp +++ b/src/game/PetHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/PetitionsHandler.cpp b/src/game/PetitionsHandler.cpp index 712d8bc36..181c0556a 100644 --- a/src/game/PetitionsHandler.cpp +++ b/src/game/PetitionsHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Player.cpp b/src/game/Player.cpp index 3c62ac89c..adc55bb7e 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Player.h b/src/game/Player.h index 0c44b60d1..26b9740a6 100644 --- a/src/game/Player.h +++ b/src/game/Player.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/PlayerDump.cpp b/src/game/PlayerDump.cpp index b533cab6c..7712ec0f5 100644 --- a/src/game/PlayerDump.cpp +++ b/src/game/PlayerDump.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/PlayerDump.h b/src/game/PlayerDump.h index 5991b7445..37c8f76eb 100644 --- a/src/game/PlayerDump.h +++ b/src/game/PlayerDump.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/PointMovementGenerator.cpp b/src/game/PointMovementGenerator.cpp index 2835ad2f2..5da26c9bf 100644 --- a/src/game/PointMovementGenerator.cpp +++ b/src/game/PointMovementGenerator.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/PointMovementGenerator.h b/src/game/PointMovementGenerator.h index 27c6005ad..d21c364d8 100644 --- a/src/game/PointMovementGenerator.h +++ b/src/game/PointMovementGenerator.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/QueryHandler.cpp b/src/game/QueryHandler.cpp index a24ddb3a9..f05df8478 100644 --- a/src/game/QueryHandler.cpp +++ b/src/game/QueryHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/QuestDef.cpp b/src/game/QuestDef.cpp index 1e2cd6021..80e65209f 100644 --- a/src/game/QuestDef.cpp +++ b/src/game/QuestDef.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/QuestDef.h b/src/game/QuestDef.h index 8c173fdb7..f29168a49 100644 --- a/src/game/QuestDef.h +++ b/src/game/QuestDef.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/QuestHandler.cpp b/src/game/QuestHandler.cpp index d7217cb2e..72b966e6b 100644 --- a/src/game/QuestHandler.cpp +++ b/src/game/QuestHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/RandomMovementGenerator.cpp b/src/game/RandomMovementGenerator.cpp index e09b8e8ee..d1d77eea2 100644 --- a/src/game/RandomMovementGenerator.cpp +++ b/src/game/RandomMovementGenerator.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/RandomMovementGenerator.h b/src/game/RandomMovementGenerator.h index 83dfecb0d..15df97d01 100644 --- a/src/game/RandomMovementGenerator.h +++ b/src/game/RandomMovementGenerator.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/ReactorAI.cpp b/src/game/ReactorAI.cpp index a3037cc55..91fa808ed 100644 --- a/src/game/ReactorAI.cpp +++ b/src/game/ReactorAI.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/ReactorAI.h b/src/game/ReactorAI.h index 117156bb5..b0ebacc26 100644 --- a/src/game/ReactorAI.h +++ b/src/game/ReactorAI.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/ScriptCalls.cpp b/src/game/ScriptCalls.cpp index d258ea199..7dd85ee6b 100644 --- a/src/game/ScriptCalls.cpp +++ b/src/game/ScriptCalls.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/ScriptCalls.h b/src/game/ScriptCalls.h index d2aafd507..b075693f8 100644 --- a/src/game/ScriptCalls.h +++ b/src/game/ScriptCalls.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/SharedDefines.h b/src/game/SharedDefines.h index ae6c2c54c..11df22096 100644 --- a/src/game/SharedDefines.h +++ b/src/game/SharedDefines.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/SkillDiscovery.cpp b/src/game/SkillDiscovery.cpp index fa4bd977a..7a2281428 100644 --- a/src/game/SkillDiscovery.cpp +++ b/src/game/SkillDiscovery.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/SkillDiscovery.h b/src/game/SkillDiscovery.h index 651ead552..781712662 100644 --- a/src/game/SkillDiscovery.h +++ b/src/game/SkillDiscovery.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/SkillExtraItems.cpp b/src/game/SkillExtraItems.cpp index eebb443d4..a9363e000 100644 --- a/src/game/SkillExtraItems.cpp +++ b/src/game/SkillExtraItems.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/SkillExtraItems.h b/src/game/SkillExtraItems.h index 2afe0ddd2..f348f033c 100644 --- a/src/game/SkillExtraItems.h +++ b/src/game/SkillExtraItems.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/SkillHandler.cpp b/src/game/SkillHandler.cpp index 298544924..c5d190e7c 100644 --- a/src/game/SkillHandler.cpp +++ b/src/game/SkillHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/SocialMgr.cpp b/src/game/SocialMgr.cpp index 6973bc352..b7dba46a9 100644 --- a/src/game/SocialMgr.cpp +++ b/src/game/SocialMgr.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/SocialMgr.h b/src/game/SocialMgr.h index 0a7f822a7..a06cde39a 100644 --- a/src/game/SocialMgr.h +++ b/src/game/SocialMgr.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp index d93aa49bf..6ce4145be 100644 --- a/src/game/Spell.cpp +++ b/src/game/Spell.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Spell.h b/src/game/Spell.h index 2d2367028..e32e32d1f 100644 --- a/src/game/Spell.h +++ b/src/game/Spell.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/SpellAuraDefines.h b/src/game/SpellAuraDefines.h index 18f354fc1..5d401b2f2 100644 --- a/src/game/SpellAuraDefines.h +++ b/src/game/SpellAuraDefines.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp index 6724b8e43..e3ea54733 100644 --- a/src/game/SpellAuras.cpp +++ b/src/game/SpellAuras.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/SpellAuras.h b/src/game/SpellAuras.h index 3baf5c303..82ea9d147 100644 --- a/src/game/SpellAuras.h +++ b/src/game/SpellAuras.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp index 60e668114..d05099fec 100644 --- a/src/game/SpellEffects.cpp +++ b/src/game/SpellEffects.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/SpellHandler.cpp b/src/game/SpellHandler.cpp index 5e3d660b0..2063fa34b 100644 --- a/src/game/SpellHandler.cpp +++ b/src/game/SpellHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/SpellMgr.cpp b/src/game/SpellMgr.cpp index 4a08b20f1..f35679746 100644 --- a/src/game/SpellMgr.cpp +++ b/src/game/SpellMgr.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/SpellMgr.h b/src/game/SpellMgr.h index 5e9f41a6a..527bc7437 100644 --- a/src/game/SpellMgr.h +++ b/src/game/SpellMgr.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/StatSystem.cpp b/src/game/StatSystem.cpp index a4127e832..d3f422161 100644 --- a/src/game/StatSystem.cpp +++ b/src/game/StatSystem.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/TargetedMovementGenerator.cpp b/src/game/TargetedMovementGenerator.cpp index 53dc2acdc..e0a25477f 100644 --- a/src/game/TargetedMovementGenerator.cpp +++ b/src/game/TargetedMovementGenerator.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/TargetedMovementGenerator.h b/src/game/TargetedMovementGenerator.h index 87fda16e9..478c54fe3 100644 --- a/src/game/TargetedMovementGenerator.h +++ b/src/game/TargetedMovementGenerator.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/TaxiHandler.cpp b/src/game/TaxiHandler.cpp index 391268011..ac8f21542 100644 --- a/src/game/TaxiHandler.cpp +++ b/src/game/TaxiHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/TemporarySummon.cpp b/src/game/TemporarySummon.cpp index 0d653b2b2..d24e3ba83 100644 --- a/src/game/TemporarySummon.cpp +++ b/src/game/TemporarySummon.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/TemporarySummon.h b/src/game/TemporarySummon.h index c49e1ad17..002e2da0c 100644 --- a/src/game/TemporarySummon.h +++ b/src/game/TemporarySummon.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/ThreatManager.cpp b/src/game/ThreatManager.cpp index 68ddf098e..e8526a2d8 100644 --- a/src/game/ThreatManager.cpp +++ b/src/game/ThreatManager.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/ThreatManager.h b/src/game/ThreatManager.h index e5e3fdcfa..b6e2d3da0 100644 --- a/src/game/ThreatManager.h +++ b/src/game/ThreatManager.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Totem.cpp b/src/game/Totem.cpp index 5f21b7cd9..6020ee1ea 100644 --- a/src/game/Totem.cpp +++ b/src/game/Totem.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Totem.h b/src/game/Totem.h index 33ace85c6..be5ecaaa1 100644 --- a/src/game/Totem.h +++ b/src/game/Totem.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/TotemAI.cpp b/src/game/TotemAI.cpp index 572a8b04d..d86b86a71 100644 --- a/src/game/TotemAI.cpp +++ b/src/game/TotemAI.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/TotemAI.h b/src/game/TotemAI.h index 6861e7ba0..c0759b075 100644 --- a/src/game/TotemAI.h +++ b/src/game/TotemAI.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/TradeHandler.cpp b/src/game/TradeHandler.cpp index 601807eef..0a315e3c5 100644 --- a/src/game/TradeHandler.cpp +++ b/src/game/TradeHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Transports.cpp b/src/game/Transports.cpp index c5606aff9..d0de6afd4 100644 --- a/src/game/Transports.cpp +++ b/src/game/Transports.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Transports.h b/src/game/Transports.h index ab48ee9a9..c6ef2a3a4 100644 --- a/src/game/Transports.h +++ b/src/game/Transports.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Traveller.h b/src/game/Traveller.h index 2d112896f..51ea73651 100644 --- a/src/game/Traveller.h +++ b/src/game/Traveller.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index 553b3628b..7ee119f03 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Unit.h b/src/game/Unit.h index f4d40dda7..65aed93e3 100644 --- a/src/game/Unit.h +++ b/src/game/Unit.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/UnitEvents.h b/src/game/UnitEvents.h index 0359d7c36..3f42afd9f 100644 --- a/src/game/UnitEvents.h +++ b/src/game/UnitEvents.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/UpdateData.cpp b/src/game/UpdateData.cpp index 6113f64b1..7d668299f 100644 --- a/src/game/UpdateData.cpp +++ b/src/game/UpdateData.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/UpdateData.h b/src/game/UpdateData.h index aff6d47e5..9b7884e5a 100644 --- a/src/game/UpdateData.h +++ b/src/game/UpdateData.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/UpdateFields.h b/src/game/UpdateFields.h index 09953bea5..031d70187 100644 --- a/src/game/UpdateFields.h +++ b/src/game/UpdateFields.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/UpdateMask.h b/src/game/UpdateMask.h index 14a31f2ac..d356799f6 100644 --- a/src/game/UpdateMask.h +++ b/src/game/UpdateMask.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Vehicle.cpp b/src/game/Vehicle.cpp index 4e1153a16..b533609d7 100644 --- a/src/game/Vehicle.cpp +++ b/src/game/Vehicle.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Vehicle.h b/src/game/Vehicle.h index 7fd8b60c4..6d9c7cd79 100644 --- a/src/game/Vehicle.h +++ b/src/game/Vehicle.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/VoiceChatHandler.cpp b/src/game/VoiceChatHandler.cpp index a3100ed1f..741957610 100644 --- a/src/game/VoiceChatHandler.cpp +++ b/src/game/VoiceChatHandler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/WaypointManager.cpp b/src/game/WaypointManager.cpp index 0fefe4429..47e2c606d 100644 --- a/src/game/WaypointManager.cpp +++ b/src/game/WaypointManager.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/WaypointManager.h b/src/game/WaypointManager.h index 3a6951643..0f155ad41 100644 --- a/src/game/WaypointManager.h +++ b/src/game/WaypointManager.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/WaypointMovementGenerator.cpp b/src/game/WaypointMovementGenerator.cpp index 64061487c..7679ef2d3 100644 --- a/src/game/WaypointMovementGenerator.cpp +++ b/src/game/WaypointMovementGenerator.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/WaypointMovementGenerator.h b/src/game/WaypointMovementGenerator.h index d6cb21752..785940d0f 100644 --- a/src/game/WaypointMovementGenerator.h +++ b/src/game/WaypointMovementGenerator.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Weather.cpp b/src/game/Weather.cpp index 0a4fe9edb..5e7c6cf27 100644 --- a/src/game/Weather.cpp +++ b/src/game/Weather.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/Weather.h b/src/game/Weather.h index 2ed41783a..d7f10bebd 100644 --- a/src/game/Weather.h +++ b/src/game/Weather.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/World.cpp b/src/game/World.cpp index c62d4cafd..e1f9a1b42 100644 --- a/src/game/World.cpp +++ b/src/game/World.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/World.h b/src/game/World.h index b1eecfca2..7243a6a72 100644 --- a/src/game/World.h +++ b/src/game/World.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/WorldLog.cpp b/src/game/WorldLog.cpp index 062da0d5b..07399001c 100644 --- a/src/game/WorldLog.cpp +++ b/src/game/WorldLog.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/WorldLog.h b/src/game/WorldLog.h index e9309e4d1..de8475dd0 100644 --- a/src/game/WorldLog.h +++ b/src/game/WorldLog.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/WorldSession.cpp b/src/game/WorldSession.cpp index 89dcfbb56..8b1043f71 100644 --- a/src/game/WorldSession.cpp +++ b/src/game/WorldSession.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/WorldSession.h b/src/game/WorldSession.h index b4c5bd095..d48b388a9 100644 --- a/src/game/WorldSession.h +++ b/src/game/WorldSession.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/WorldSocket.cpp b/src/game/WorldSocket.cpp index 9d40d398b..a2a2a40bd 100644 --- a/src/game/WorldSocket.cpp +++ b/src/game/WorldSocket.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/WorldSocket.h b/src/game/WorldSocket.h index c6857cccd..8fd4229e5 100644 --- a/src/game/WorldSocket.h +++ b/src/game/WorldSocket.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/WorldSocketMgr.cpp b/src/game/WorldSocketMgr.cpp index 610d0ac57..8c5883926 100644 --- a/src/game/WorldSocketMgr.cpp +++ b/src/game/WorldSocketMgr.cpp @@ -1,20 +1,20 @@ /* -* Copyright (C) 2005-2008,2007 MaNGOS -* -* This program is free software; you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation; either version 2 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program; if not, write to the Free Software -* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -*/ + * Copyright (C) 2005-2009 MaNGOS + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ /** \file WorldSocketMgr.cpp * \ingroup u2w diff --git a/src/game/WorldSocketMgr.h b/src/game/WorldSocketMgr.h index 70ab1a0a0..75c98a1c9 100644 --- a/src/game/WorldSocketMgr.h +++ b/src/game/WorldSocketMgr.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008,2007 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/game/debugcmds.cpp b/src/game/debugcmds.cpp index a67ef3203..c9fa173aa 100644 --- a/src/game/debugcmds.cpp +++ b/src/game/debugcmds.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/mangosd/CliRunnable.cpp b/src/mangosd/CliRunnable.cpp index d4c635660..69b289f39 100644 --- a/src/mangosd/CliRunnable.cpp +++ b/src/mangosd/CliRunnable.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/mangosd/CliRunnable.h b/src/mangosd/CliRunnable.h index 71d7417e6..d07405dc5 100644 --- a/src/mangosd/CliRunnable.h +++ b/src/mangosd/CliRunnable.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/mangosd/Main.cpp b/src/mangosd/Main.cpp index 939afe0ca..043e1c0b4 100644 --- a/src/mangosd/Main.cpp +++ b/src/mangosd/Main.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/mangosd/Makefile.am b/src/mangosd/Makefile.am index f93316fad..73a385d4e 100644 --- a/src/mangosd/Makefile.am +++ b/src/mangosd/Makefile.am @@ -1,4 +1,4 @@ -# Copyright (C) 2005-2008 MaNGOS +# Copyright (C) 2005-2009 MaNGOS # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/src/mangosd/Master.cpp b/src/mangosd/Master.cpp index f5ef907bb..8cb59c930 100644 --- a/src/mangosd/Master.cpp +++ b/src/mangosd/Master.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/mangosd/Master.h b/src/mangosd/Master.h index 5449a3505..777824f26 100644 --- a/src/mangosd/Master.h +++ b/src/mangosd/Master.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/mangosd/RASocket.cpp b/src/mangosd/RASocket.cpp index f3bdf4fd3..dca788232 100644 --- a/src/mangosd/RASocket.cpp +++ b/src/mangosd/RASocket.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/mangosd/RASocket.h b/src/mangosd/RASocket.h index d9acb8284..30f3394d5 100644 --- a/src/mangosd/RASocket.h +++ b/src/mangosd/RASocket.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/mangosd/WorldRunnable.cpp b/src/mangosd/WorldRunnable.cpp index 87d7e78a9..2e97f97c2 100644 --- a/src/mangosd/WorldRunnable.cpp +++ b/src/mangosd/WorldRunnable.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/mangosd/WorldRunnable.h b/src/mangosd/WorldRunnable.h index 712c7b67c..3ed2a9cde 100644 --- a/src/mangosd/WorldRunnable.h +++ b/src/mangosd/WorldRunnable.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/mangosd/mangosd.rc b/src/mangosd/mangosd.rc index 43fcf5bbb..a0c4a231e 100644 --- a/src/mangosd/mangosd.rc +++ b/src/mangosd/mangosd.rc @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/realmd/AuthCodes.h b/src/realmd/AuthCodes.h index 68e10b25c..b23b58287 100644 --- a/src/realmd/AuthCodes.h +++ b/src/realmd/AuthCodes.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/realmd/AuthSocket.cpp b/src/realmd/AuthSocket.cpp index e1759e7e0..820979a09 100644 --- a/src/realmd/AuthSocket.cpp +++ b/src/realmd/AuthSocket.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/realmd/AuthSocket.h b/src/realmd/AuthSocket.h index 0ed37587b..c78b4c69f 100644 --- a/src/realmd/AuthSocket.h +++ b/src/realmd/AuthSocket.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/realmd/Main.cpp b/src/realmd/Main.cpp index 930fd00a7..59b6081ef 100644 --- a/src/realmd/Main.cpp +++ b/src/realmd/Main.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/realmd/Makefile.am b/src/realmd/Makefile.am index 8930f5445..6de5189c3 100644 --- a/src/realmd/Makefile.am +++ b/src/realmd/Makefile.am @@ -1,4 +1,4 @@ -# Copyright (C) 2005-2008 MaNGOS +# Copyright (C) 2005-2009 MaNGOS # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/src/realmd/RealmList.cpp b/src/realmd/RealmList.cpp index a25e495b0..080ddbb39 100644 --- a/src/realmd/RealmList.cpp +++ b/src/realmd/RealmList.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/realmd/RealmList.h b/src/realmd/RealmList.h index f3e04c07d..d77e0b927 100644 --- a/src/realmd/RealmList.h +++ b/src/realmd/RealmList.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/realmd/realmd.rc b/src/realmd/realmd.rc index 4ce3301fb..d4740b5a4 100644 --- a/src/realmd/realmd.rc +++ b/src/realmd/realmd.rc @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Auth/AuthCrypt.cpp b/src/shared/Auth/AuthCrypt.cpp index 27dce1d6d..7686cdd81 100644 --- a/src/shared/Auth/AuthCrypt.cpp +++ b/src/shared/Auth/AuthCrypt.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Auth/AuthCrypt.h b/src/shared/Auth/AuthCrypt.h index a14e4d900..5717f72ec 100644 --- a/src/shared/Auth/AuthCrypt.h +++ b/src/shared/Auth/AuthCrypt.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Auth/BigNumber.cpp b/src/shared/Auth/BigNumber.cpp index 9d0a23599..25cf94eac 100644 --- a/src/shared/Auth/BigNumber.cpp +++ b/src/shared/Auth/BigNumber.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Auth/BigNumber.h b/src/shared/Auth/BigNumber.h index 9614b1e53..f787c4135 100644 --- a/src/shared/Auth/BigNumber.h +++ b/src/shared/Auth/BigNumber.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Auth/Hmac.cpp b/src/shared/Auth/Hmac.cpp index bd8473946..d0517aad7 100644 --- a/src/shared/Auth/Hmac.cpp +++ b/src/shared/Auth/Hmac.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Auth/Hmac.h b/src/shared/Auth/Hmac.h index 8157849f4..3e0dacc3b 100644 --- a/src/shared/Auth/Hmac.h +++ b/src/shared/Auth/Hmac.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Auth/Makefile.am b/src/shared/Auth/Makefile.am index 0088e432d..b7a2de5fc 100644 --- a/src/shared/Auth/Makefile.am +++ b/src/shared/Auth/Makefile.am @@ -1,4 +1,4 @@ -# Copyright (C) 2005-2008 MaNGOS +# Copyright (C) 2005-2009 MaNGOS # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/src/shared/Auth/Sha1.cpp b/src/shared/Auth/Sha1.cpp index 1e192c782..f5bb7cc32 100644 --- a/src/shared/Auth/Sha1.cpp +++ b/src/shared/Auth/Sha1.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Auth/Sha1.h b/src/shared/Auth/Sha1.h index 35202b773..b4b640adb 100644 --- a/src/shared/Auth/Sha1.h +++ b/src/shared/Auth/Sha1.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/ByteBuffer.h b/src/shared/ByteBuffer.h index cca7216c8..e8f661ce4 100644 --- a/src/shared/ByteBuffer.h +++ b/src/shared/ByteBuffer.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Common.cpp b/src/shared/Common.cpp index e7224bc5e..24c68bb1d 100644 --- a/src/shared/Common.cpp +++ b/src/shared/Common.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Common.h b/src/shared/Common.h index 0fc544fc6..ab65d0743 100644 --- a/src/shared/Common.h +++ b/src/shared/Common.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Config/Config.cpp b/src/shared/Config/Config.cpp index 8aa9293c2..1d27c7775 100644 --- a/src/shared/Config/Config.cpp +++ b/src/shared/Config/Config.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Config/Config.h b/src/shared/Config/Config.h index cff2fa523..e09dffe38 100644 --- a/src/shared/Config/Config.h +++ b/src/shared/Config/Config.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Config/ConfigEnv.h b/src/shared/Config/ConfigEnv.h index 6c61aeb93..c0603a2b2 100644 --- a/src/shared/Config/ConfigEnv.h +++ b/src/shared/Config/ConfigEnv.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Config/Makefile.am b/src/shared/Config/Makefile.am index c33c8e456..8bfed3b3c 100644 --- a/src/shared/Config/Makefile.am +++ b/src/shared/Config/Makefile.am @@ -1,4 +1,4 @@ -# Copyright (C) 2005-2008 MaNGOS +# Copyright (C) 2005-2009 MaNGOS # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/src/shared/Database/DBCEnums.h b/src/shared/Database/DBCEnums.h index 4f406c9cc..69784cf22 100644 --- a/src/shared/Database/DBCEnums.h +++ b/src/shared/Database/DBCEnums.h @@ -1,5 +1,5 @@ /* -* Copyright (C) 2005-2008 MaNGOS +* Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Database/DBCStores.cpp b/src/shared/Database/DBCStores.cpp index c314c667c..518765bd7 100644 --- a/src/shared/Database/DBCStores.cpp +++ b/src/shared/Database/DBCStores.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Database/DBCStores.h b/src/shared/Database/DBCStores.h index 92b1eba83..b7ba96b61 100644 --- a/src/shared/Database/DBCStores.h +++ b/src/shared/Database/DBCStores.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Database/DBCStructure.h b/src/shared/Database/DBCStructure.h index 4fc67cc01..5a2a96761 100644 --- a/src/shared/Database/DBCStructure.h +++ b/src/shared/Database/DBCStructure.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Database/DBCfmt.cpp b/src/shared/Database/DBCfmt.cpp index deca8d6b7..b5a1843bc 100644 --- a/src/shared/Database/DBCfmt.cpp +++ b/src/shared/Database/DBCfmt.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Database/Database.cpp b/src/shared/Database/Database.cpp index 030db7705..6747adf6a 100644 --- a/src/shared/Database/Database.cpp +++ b/src/shared/Database/Database.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Database/Database.h b/src/shared/Database/Database.h index 4b62617c4..16713b211 100644 --- a/src/shared/Database/Database.h +++ b/src/shared/Database/Database.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Database/DatabaseEnv.h b/src/shared/Database/DatabaseEnv.h index 88cb05710..a446aee41 100644 --- a/src/shared/Database/DatabaseEnv.h +++ b/src/shared/Database/DatabaseEnv.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Database/DatabaseImpl.h b/src/shared/Database/DatabaseImpl.h index d7f8c43e2..084ee6c82 100644 --- a/src/shared/Database/DatabaseImpl.h +++ b/src/shared/Database/DatabaseImpl.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Database/DatabaseMysql.cpp b/src/shared/Database/DatabaseMysql.cpp index e8a944feb..b14848769 100644 --- a/src/shared/Database/DatabaseMysql.cpp +++ b/src/shared/Database/DatabaseMysql.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Database/DatabaseMysql.h b/src/shared/Database/DatabaseMysql.h index 271fc5c9b..8e8a113df 100644 --- a/src/shared/Database/DatabaseMysql.h +++ b/src/shared/Database/DatabaseMysql.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Database/DatabasePostgre.cpp b/src/shared/Database/DatabasePostgre.cpp index 734e46962..a572a8320 100644 --- a/src/shared/Database/DatabasePostgre.cpp +++ b/src/shared/Database/DatabasePostgre.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Database/DatabasePostgre.h b/src/shared/Database/DatabasePostgre.h index 52372dd7c..f985b549e 100644 --- a/src/shared/Database/DatabasePostgre.h +++ b/src/shared/Database/DatabasePostgre.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Database/DatabaseSqlite.cpp b/src/shared/Database/DatabaseSqlite.cpp index 7bf879f44..f3ffeaaa6 100644 --- a/src/shared/Database/DatabaseSqlite.cpp +++ b/src/shared/Database/DatabaseSqlite.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Database/DatabaseSqlite.h b/src/shared/Database/DatabaseSqlite.h index d067585a3..b5a5ac40d 100644 --- a/src/shared/Database/DatabaseSqlite.h +++ b/src/shared/Database/DatabaseSqlite.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Database/Field.cpp b/src/shared/Database/Field.cpp index 0521eb0bf..592865d9f 100644 --- a/src/shared/Database/Field.cpp +++ b/src/shared/Database/Field.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Database/Field.h b/src/shared/Database/Field.h index 631c97db5..9235c394f 100644 --- a/src/shared/Database/Field.h +++ b/src/shared/Database/Field.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Database/Makefile.am b/src/shared/Database/Makefile.am index d28f9b960..31c24917b 100644 --- a/src/shared/Database/Makefile.am +++ b/src/shared/Database/Makefile.am @@ -1,4 +1,4 @@ -# Copyright (C) 2005-2008 MaNGOS +# Copyright (C) 2005-2009 MaNGOS # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/src/shared/Database/MySQLDelayThread.h b/src/shared/Database/MySQLDelayThread.h index 026f823f1..5355b0b8a 100644 --- a/src/shared/Database/MySQLDelayThread.h +++ b/src/shared/Database/MySQLDelayThread.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Database/PGSQLDelayThread.h b/src/shared/Database/PGSQLDelayThread.h index eafe27bb5..7ad2b5084 100644 --- a/src/shared/Database/PGSQLDelayThread.h +++ b/src/shared/Database/PGSQLDelayThread.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Database/QueryResult.h b/src/shared/Database/QueryResult.h index ca6d11923..3ce00e702 100644 --- a/src/shared/Database/QueryResult.h +++ b/src/shared/Database/QueryResult.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Database/QueryResultMysql.cpp b/src/shared/Database/QueryResultMysql.cpp index 87f2c9883..755a5532b 100644 --- a/src/shared/Database/QueryResultMysql.cpp +++ b/src/shared/Database/QueryResultMysql.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Database/QueryResultMysql.h b/src/shared/Database/QueryResultMysql.h index b31dbe8a6..2d00d09f4 100644 --- a/src/shared/Database/QueryResultMysql.h +++ b/src/shared/Database/QueryResultMysql.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Database/QueryResultPostgre.cpp b/src/shared/Database/QueryResultPostgre.cpp index 98033ab60..aaae46c96 100644 --- a/src/shared/Database/QueryResultPostgre.cpp +++ b/src/shared/Database/QueryResultPostgre.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Database/QueryResultPostgre.h b/src/shared/Database/QueryResultPostgre.h index a0002769e..b5f7978c0 100644 --- a/src/shared/Database/QueryResultPostgre.h +++ b/src/shared/Database/QueryResultPostgre.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Database/QueryResultSqlite.cpp b/src/shared/Database/QueryResultSqlite.cpp index 53adb72cc..b0f9df607 100644 --- a/src/shared/Database/QueryResultSqlite.cpp +++ b/src/shared/Database/QueryResultSqlite.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Database/QueryResultSqlite.h b/src/shared/Database/QueryResultSqlite.h index 2952c50c1..28ced54c4 100644 --- a/src/shared/Database/QueryResultSqlite.h +++ b/src/shared/Database/QueryResultSqlite.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Database/SQLStorage.cpp b/src/shared/Database/SQLStorage.cpp index 5badcc2e1..ec47d7887 100644 --- a/src/shared/Database/SQLStorage.cpp +++ b/src/shared/Database/SQLStorage.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Database/SQLStorage.h b/src/shared/Database/SQLStorage.h index 69275c155..e6ba01ee0 100644 --- a/src/shared/Database/SQLStorage.h +++ b/src/shared/Database/SQLStorage.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Database/SQLStorageImpl.h b/src/shared/Database/SQLStorageImpl.h index 4f10c6eee..b820d6861 100644 --- a/src/shared/Database/SQLStorageImpl.h +++ b/src/shared/Database/SQLStorageImpl.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Database/SqlDelayThread.cpp b/src/shared/Database/SqlDelayThread.cpp index b6220fed4..91952cb43 100644 --- a/src/shared/Database/SqlDelayThread.cpp +++ b/src/shared/Database/SqlDelayThread.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Database/SqlDelayThread.h b/src/shared/Database/SqlDelayThread.h index 7d3187a98..ed52633e3 100644 --- a/src/shared/Database/SqlDelayThread.h +++ b/src/shared/Database/SqlDelayThread.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Database/SqlOperations.cpp b/src/shared/Database/SqlOperations.cpp index 70a1ff056..e42677208 100644 --- a/src/shared/Database/SqlOperations.cpp +++ b/src/shared/Database/SqlOperations.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Database/SqlOperations.h b/src/shared/Database/SqlOperations.h index 41ae69edb..7e27c1174 100644 --- a/src/shared/Database/SqlOperations.h +++ b/src/shared/Database/SqlOperations.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Database/dbcfile.cpp b/src/shared/Database/dbcfile.cpp index 1e3d8eeb3..0cfc7ada3 100644 --- a/src/shared/Database/dbcfile.cpp +++ b/src/shared/Database/dbcfile.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Database/dbcfile.h b/src/shared/Database/dbcfile.h index b2c4bb2d3..74e6b6f3f 100644 --- a/src/shared/Database/dbcfile.h +++ b/src/shared/Database/dbcfile.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Errors.h b/src/shared/Errors.h index 7ded28065..546da27b1 100644 --- a/src/shared/Errors.h +++ b/src/shared/Errors.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Log.cpp b/src/shared/Log.cpp index f5d05139b..904ac704a 100644 --- a/src/shared/Log.cpp +++ b/src/shared/Log.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Log.h b/src/shared/Log.h index 391a93d86..85fac5ed3 100644 --- a/src/shared/Log.h +++ b/src/shared/Log.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Makefile.am b/src/shared/Makefile.am index c393e6826..087f0ec20 100644 --- a/src/shared/Makefile.am +++ b/src/shared/Makefile.am @@ -1,4 +1,4 @@ -# Copyright (C) 2005-2008 MaNGOS +# Copyright (C) 2005-2009 MaNGOS # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/src/shared/MemoryLeaks.cpp b/src/shared/MemoryLeaks.cpp index e9dc390cb..ef7e36c3b 100644 --- a/src/shared/MemoryLeaks.cpp +++ b/src/shared/MemoryLeaks.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/MemoryLeaks.h b/src/shared/MemoryLeaks.h index fceb9d6f4..85d04e670 100644 --- a/src/shared/MemoryLeaks.h +++ b/src/shared/MemoryLeaks.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/PacketLog.cpp b/src/shared/PacketLog.cpp index 06e19bd97..184e9e9b9 100644 --- a/src/shared/PacketLog.cpp +++ b/src/shared/PacketLog.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/PacketLog.h b/src/shared/PacketLog.h index 925e07ed7..a0ae06d33 100644 --- a/src/shared/PacketLog.h +++ b/src/shared/PacketLog.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/ProgressBar.cpp b/src/shared/ProgressBar.cpp index 602070569..b66890129 100644 --- a/src/shared/ProgressBar.cpp +++ b/src/shared/ProgressBar.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/ProgressBar.h b/src/shared/ProgressBar.h index 71c0f323f..f889ee0fd 100644 --- a/src/shared/ProgressBar.h +++ b/src/shared/ProgressBar.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/ServiceWin32.cpp b/src/shared/ServiceWin32.cpp index 09c5cd907..0b5e446a4 100644 --- a/src/shared/ServiceWin32.cpp +++ b/src/shared/ServiceWin32.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/shared/ServiceWin32.h b/src/shared/ServiceWin32.h index 4890f8166..924680969 100644 --- a/src/shared/ServiceWin32.h +++ b/src/shared/ServiceWin32.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License diff --git a/src/shared/Timer.h b/src/shared/Timer.h index 14e261608..c258fdcee 100644 --- a/src/shared/Timer.h +++ b/src/shared/Timer.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Util.cpp b/src/shared/Util.cpp index 73d75f78f..b670c85ee 100644 --- a/src/shared/Util.cpp +++ b/src/shared/Util.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/Util.h b/src/shared/Util.h index 6a77d9c9a..8fa4faacf 100644 --- a/src/shared/Util.h +++ b/src/shared/Util.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/WorldPacket.h b/src/shared/WorldPacket.h index 7e8029c21..d038db86c 100644 --- a/src/shared/WorldPacket.h +++ b/src/shared/WorldPacket.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index d672824e6..265dcdb44 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 "7016" + #define REVISION_NR "7017" #endif // __REVISION_NR_H__ diff --git a/src/shared/vmap/BaseModel.cpp b/src/shared/vmap/BaseModel.cpp index 98d8f9cd4..4a131c46a 100644 --- a/src/shared/vmap/BaseModel.cpp +++ b/src/shared/vmap/BaseModel.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/vmap/BaseModel.h b/src/shared/vmap/BaseModel.h index 79a2865df..f9bc977b0 100644 --- a/src/shared/vmap/BaseModel.h +++ b/src/shared/vmap/BaseModel.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/vmap/CoordModelMapping.cpp b/src/shared/vmap/CoordModelMapping.cpp index ff70b3426..2ce40dd8f 100644 --- a/src/shared/vmap/CoordModelMapping.cpp +++ b/src/shared/vmap/CoordModelMapping.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/vmap/CoordModelMapping.h b/src/shared/vmap/CoordModelMapping.h index dd4f86cc1..71b516311 100644 --- a/src/shared/vmap/CoordModelMapping.h +++ b/src/shared/vmap/CoordModelMapping.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/vmap/DebugCmdLogger.cpp b/src/shared/vmap/DebugCmdLogger.cpp index 73037d5ac..080afa3fb 100644 --- a/src/shared/vmap/DebugCmdLogger.cpp +++ b/src/shared/vmap/DebugCmdLogger.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/vmap/DebugCmdLogger.h b/src/shared/vmap/DebugCmdLogger.h index 955e0e391..b9cc05cec 100644 --- a/src/shared/vmap/DebugCmdLogger.h +++ b/src/shared/vmap/DebugCmdLogger.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/vmap/IVMapManager.h b/src/shared/vmap/IVMapManager.h index 0cfc12a80..d4b776d8d 100644 --- a/src/shared/vmap/IVMapManager.h +++ b/src/shared/vmap/IVMapManager.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/vmap/Makefile.am b/src/shared/vmap/Makefile.am index 3ec6557bc..14ace12f0 100644 --- a/src/shared/vmap/Makefile.am +++ b/src/shared/vmap/Makefile.am @@ -1,4 +1,4 @@ -# Copyright (C) 2005-2008 MaNGOS +# Copyright (C) 2005-2009 MaNGOS # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/src/shared/vmap/ManagedModelContainer.cpp b/src/shared/vmap/ManagedModelContainer.cpp index 919c0ecf2..90e774536 100644 --- a/src/shared/vmap/ManagedModelContainer.cpp +++ b/src/shared/vmap/ManagedModelContainer.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/vmap/ManagedModelContainer.h b/src/shared/vmap/ManagedModelContainer.h index baa9167a9..b08bcb852 100644 --- a/src/shared/vmap/ManagedModelContainer.h +++ b/src/shared/vmap/ManagedModelContainer.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/vmap/ModelContainer.cpp b/src/shared/vmap/ModelContainer.cpp index 654c63869..ff4f9358b 100644 --- a/src/shared/vmap/ModelContainer.cpp +++ b/src/shared/vmap/ModelContainer.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/vmap/ModelContainer.h b/src/shared/vmap/ModelContainer.h index b1a0f1737..729da5795 100644 --- a/src/shared/vmap/ModelContainer.h +++ b/src/shared/vmap/ModelContainer.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/vmap/NodeValueAccess.h b/src/shared/vmap/NodeValueAccess.h index 764b8dfa6..d3a3273d6 100644 --- a/src/shared/vmap/NodeValueAccess.h +++ b/src/shared/vmap/NodeValueAccess.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/vmap/ShortBox.h b/src/shared/vmap/ShortBox.h index 6263e9358..32a1b37e3 100644 --- a/src/shared/vmap/ShortBox.h +++ b/src/shared/vmap/ShortBox.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/vmap/ShortVector.h b/src/shared/vmap/ShortVector.h index 65a237fd8..cbb143c22 100644 --- a/src/shared/vmap/ShortVector.h +++ b/src/shared/vmap/ShortVector.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/vmap/SubModel.cpp b/src/shared/vmap/SubModel.cpp index df10977ea..17ca10fd8 100644 --- a/src/shared/vmap/SubModel.cpp +++ b/src/shared/vmap/SubModel.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/vmap/SubModel.h b/src/shared/vmap/SubModel.h index 537be864a..eff14033e 100644 --- a/src/shared/vmap/SubModel.h +++ b/src/shared/vmap/SubModel.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/vmap/TileAssembler.cpp b/src/shared/vmap/TileAssembler.cpp index 2fd708137..acd1e8c97 100644 --- a/src/shared/vmap/TileAssembler.cpp +++ b/src/shared/vmap/TileAssembler.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/vmap/TileAssembler.h b/src/shared/vmap/TileAssembler.h index 7a2c16bf7..7829e01db 100644 --- a/src/shared/vmap/TileAssembler.h +++ b/src/shared/vmap/TileAssembler.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/vmap/TreeNode.cpp b/src/shared/vmap/TreeNode.cpp index 6e580a5b8..2c2ba9d79 100644 --- a/src/shared/vmap/TreeNode.cpp +++ b/src/shared/vmap/TreeNode.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/vmap/TreeNode.h b/src/shared/vmap/TreeNode.h index 058225fce..96a1389ce 100644 --- a/src/shared/vmap/TreeNode.h +++ b/src/shared/vmap/TreeNode.h @@ -1,5 +1,5 @@ /* -* Copyright (C) 2005-2008 MaNGOS +* Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/vmap/VMapDefinitions.h b/src/shared/vmap/VMapDefinitions.h index 04c31a2b6..3d21c7289 100644 --- a/src/shared/vmap/VMapDefinitions.h +++ b/src/shared/vmap/VMapDefinitions.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/vmap/VMapFactory.cpp b/src/shared/vmap/VMapFactory.cpp index 5a5af7b45..7a8e68c6c 100644 --- a/src/shared/vmap/VMapFactory.cpp +++ b/src/shared/vmap/VMapFactory.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/vmap/VMapFactory.h b/src/shared/vmap/VMapFactory.h index db23ab582..e9d41c51f 100644 --- a/src/shared/vmap/VMapFactory.h +++ b/src/shared/vmap/VMapFactory.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/vmap/VMapManager.cpp b/src/shared/vmap/VMapManager.cpp index 49fec68b5..ec5d87006 100644 --- a/src/shared/vmap/VMapManager.cpp +++ b/src/shared/vmap/VMapManager.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/vmap/VMapManager.h b/src/shared/vmap/VMapManager.h index 5e2c32092..3d9057f91 100644 --- a/src/shared/vmap/VMapManager.h +++ b/src/shared/vmap/VMapManager.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/shared/vmap/VMapTools.h b/src/shared/vmap/VMapTools.h index 4122f420e..d59d9e6bb 100644 --- a/src/shared/vmap/VMapTools.h +++ b/src/shared/vmap/VMapTools.h @@ -1,5 +1,5 @@ /* -* Copyright (C) 2005-2008 MaNGOS +* Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by diff --git a/src/tools/Makefile.am b/src/tools/Makefile.am index 7b68544e1..81040a495 100644 --- a/src/tools/Makefile.am +++ b/src/tools/Makefile.am @@ -1,4 +1,4 @@ -# Copyright (C) 2005-2008 MaNGOS +# Copyright (C) 2005-2009 MaNGOS # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/src/tools/genrevision/Makefile.am b/src/tools/genrevision/Makefile.am index 814c60790..3f60ac14a 100644 --- a/src/tools/genrevision/Makefile.am +++ b/src/tools/genrevision/Makefile.am @@ -1,4 +1,4 @@ -# Copyright (C) 2005-2008 MaNGOS +# Copyright (C) 2005-2009 MaNGOS # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/src/tools/genrevision/genrevision.cpp b/src/tools/genrevision/genrevision.cpp index a9e39d93c..ace3a0bbe 100644 --- a/src/tools/genrevision/genrevision.cpp +++ b/src/tools/genrevision/genrevision.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 MaNGOS + * Copyright (C) 2005-2009 MaNGOS * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by From 6003fd4049ca4f292726e1c0632282479a3887ca Mon Sep 17 00:00:00 2001 From: VladimirMangos Date: Sun, 4 Jan 2009 00:30:21 +0300 Subject: [PATCH 071/145] Add transaction guards for account data save DELETE/INSERT pair. --- src/game/WorldSession.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/game/WorldSession.cpp b/src/game/WorldSession.cpp index 8b1043f71..bcebb7ff7 100644 --- a/src/game/WorldSession.cpp +++ b/src/game/WorldSession.cpp @@ -552,9 +552,12 @@ void WorldSession::SetAccountData(uint32 type, time_t time_, std::string data) m_accountData[type].Data = data; uint32 acc = GetAccountId(); + + CharacterDatabase.BeginTransaction (); CharacterDatabase.PExecute("DELETE FROM account_data WHERE account='%u' AND type='%u'", acc, type); CharacterDatabase.escape_string(data); CharacterDatabase.PExecute("INSERT INTO account_data VALUES ('%u','%u','%u','%s')", acc, type, (uint32)time_, data.c_str()); + CharacterDatabase.CommitTransaction (); } void WorldSession::ReadMovementInfo(WorldPacket &data, MovementInfo *mi) From 409ea262a575ba9adbe20d877ba3c3475e081e86 Mon Sep 17 00:00:00 2001 From: 123qwe <123qwe@mangos.ru> Date: Sun, 4 Jan 2009 01:00:06 +0300 Subject: [PATCH 072/145] [7018] Update melee AP dependence for shaman class. Signed-off-by: VladimirMangos --- src/game/StatSystem.cpp | 10 +++++----- src/shared/revision_nr.h | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/game/StatSystem.cpp b/src/game/StatSystem.cpp index d3f422161..f7d071b99 100644 --- a/src/game/StatSystem.cpp +++ b/src/game/StatSystem.cpp @@ -261,12 +261,12 @@ void Player::UpdateAttackPowerAndDamage(bool ranged ) { switch(getClass()) { - case CLASS_WARRIOR: val2 = level*3.0f + GetStat(STAT_STRENGTH)*2.0f - 20.0f; break; - case CLASS_PALADIN: val2 = level*3.0f + GetStat(STAT_STRENGTH)*2.0f - 20.0f; break; + case CLASS_WARRIOR: val2 = level*3.0f + GetStat(STAT_STRENGTH)*2.0f - 20.0f; break; + case CLASS_PALADIN: val2 = level*3.0f + GetStat(STAT_STRENGTH)*2.0f - 20.0f; break; case CLASS_DEATH_KNIGHT: val2 = level*3.0f + GetStat(STAT_STRENGTH)*2.0f - 20.0f; break; - case CLASS_ROGUE: val2 = level*2.0f + GetStat(STAT_STRENGTH) + GetStat(STAT_AGILITY) - 20.0f; break; - case CLASS_HUNTER: val2 = level*2.0f + GetStat(STAT_STRENGTH) + GetStat(STAT_AGILITY) - 20.0f; break; - case CLASS_SHAMAN: val2 = level*2.0f + GetStat(STAT_STRENGTH)*2.0f - 20.0f; break; + case CLASS_ROGUE: val2 = level*2.0f + GetStat(STAT_STRENGTH) + GetStat(STAT_AGILITY) - 20.0f; break; + case CLASS_HUNTER: val2 = level*2.0f + GetStat(STAT_STRENGTH) + GetStat(STAT_AGILITY) - 20.0f; break; + case CLASS_SHAMAN: val2 = level*2.0f + GetStat(STAT_STRENGTH) + GetStat(STAT_AGILITY) - 20.0f; break; case CLASS_DRUID: { //Check if Predatory Strikes is skilled diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 265dcdb44..f01cb63b6 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 "7017" + #define REVISION_NR "7018" #endif // __REVISION_NR_H__ From f893214e2b789651fa1ba3f4fbc1a8d6326353e8 Mon Sep 17 00:00:00 2001 From: DiSlord Date: Sun, 4 Jan 2009 17:26:18 +0300 Subject: [PATCH 073/145] [7019] Fix AP/RAP bonus from stat at aura apply/remove Not use CLASSMASK_WAND_USERS mask for AP bonus Signed-off-by: DiSlord --- src/game/SpellAuras.cpp | 12 ++++-------- src/game/StatSystem.cpp | 20 ++++++++++---------- src/shared/revision_nr.h | 2 +- 3 files changed, 15 insertions(+), 19 deletions(-) diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp index e3ea54733..75d8ae0e1 100644 --- a/src/game/SpellAuras.cpp +++ b/src/game/SpellAuras.cpp @@ -5015,11 +5015,9 @@ void Aura::HandleAuraModRangedAttackPowerOfStatPercent(bool apply, bool Real) if(!Real) return; - if(m_target->GetTypeId() == TYPEID_PLAYER && (m_target->getClassMask() & CLASSMASK_WAND_USERS)!=0) - return; - // Recalculate bonus - ((Player*)m_target)->UpdateAttackPowerAndDamage(true); + if(m_target->GetTypeId() == TYPEID_PLAYER && (m_target->getClassMask() & CLASSMASK_WAND_USERS)) + ((Player*)m_target)->UpdateAttackPowerAndDamage(true); } void Aura::HandleAuraModAttackPowerOfStatPercent(bool apply, bool Real) @@ -5028,11 +5026,9 @@ void Aura::HandleAuraModAttackPowerOfStatPercent(bool apply, bool Real) if(!Real) return; - if(m_target->GetTypeId() == TYPEID_PLAYER && (m_target->getClassMask() & CLASSMASK_WAND_USERS)!=0) - return; - // Recalculate bonus - ((Player*)m_target)->UpdateAttackPowerAndDamage(false); + if(m_target->GetTypeId() == TYPEID_PLAYER) + ((Player*)m_target)->UpdateAttackPowerAndDamage(false); } /********************************/ diff --git a/src/game/StatSystem.cpp b/src/game/StatSystem.cpp index f7d071b99..a369bc3ec 100644 --- a/src/game/StatSystem.cpp +++ b/src/game/StatSystem.cpp @@ -318,21 +318,21 @@ void Player::UpdateAttackPowerAndDamage(bool ranged ) float attPowerMod = GetModifierValue(unitMod, TOTAL_VALUE); //add dynamic flat mods - if ((getClassMask() & CLASSMASK_WAND_USERS)==0) + if( ranged ) { - if( ranged ) + if ((getClassMask() & CLASSMASK_WAND_USERS)==0) { - AuraList const& mRAPbyIntellect = GetAurasByType(SPELL_AURA_MOD_RANGED_ATTACK_POWER_OF_STAT_PERCENT); - for(AuraList::const_iterator i = mRAPbyIntellect.begin();i != mRAPbyIntellect.end(); ++i) - attPowerMod += int32(GetStat(Stats((*i)->GetModifier()->m_miscvalue)) * (*i)->GetModifier()->m_amount / 100.0f); - } - else - { - AuraList const& mRAPbyIntellect = GetAurasByType(SPELL_AURA_MOD_ATTACK_POWER_OF_STAT_PERCENT); - for(AuraList::const_iterator i = mRAPbyIntellect.begin();i != mRAPbyIntellect.end(); ++i) + AuraList const& mRAPbyStat = GetAurasByType(SPELL_AURA_MOD_RANGED_ATTACK_POWER_OF_STAT_PERCENT); + for(AuraList::const_iterator i = mRAPbyStat.begin();i != mRAPbyStat.end(); ++i) attPowerMod += int32(GetStat(Stats((*i)->GetModifier()->m_miscvalue)) * (*i)->GetModifier()->m_amount / 100.0f); } } + else + { + AuraList const& mAPbyStat = GetAurasByType(SPELL_AURA_MOD_ATTACK_POWER_OF_STAT_PERCENT); + for(AuraList::const_iterator i = mAPbyStat.begin();i != mAPbyStat.end(); ++i) + attPowerMod += int32(GetStat(Stats((*i)->GetModifier()->m_miscvalue)) * (*i)->GetModifier()->m_amount / 100.0f); + } float attPowerMultiplier = GetModifierValue(unitMod, TOTAL_PCT) - 1.0f; diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index f01cb63b6..5ab363fd6 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 "7018" + #define REVISION_NR "7019" #endif // __REVISION_NR_H__ From 39c1f547f6614d9a988641ae40e3d261747a96e8 Mon Sep 17 00:00:00 2001 From: DiSlord Date: Sun, 4 Jan 2009 17:31:34 +0300 Subject: [PATCH 074/145] Fix typo in prev commit --- src/game/SpellAuras.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp index 75d8ae0e1..50ce528c5 100644 --- a/src/game/SpellAuras.cpp +++ b/src/game/SpellAuras.cpp @@ -5016,7 +5016,7 @@ void Aura::HandleAuraModRangedAttackPowerOfStatPercent(bool apply, bool Real) return; // Recalculate bonus - if(m_target->GetTypeId() == TYPEID_PLAYER && (m_target->getClassMask() & CLASSMASK_WAND_USERS)) + if(m_target->GetTypeId() == TYPEID_PLAYER && !(m_target->getClassMask() & CLASSMASK_WAND_USERS)) ((Player*)m_target)->UpdateAttackPowerAndDamage(true); } From 977cb3f8d4406cb46535a852169d8d9e31cc21bf Mon Sep 17 00:00:00 2001 From: VladimirMangos Date: Sun, 4 Jan 2009 18:41:20 +0300 Subject: [PATCH 075/145] [7020] Initilize glyph order at loading/reset. This must fix problems with glyph use for old(converted) characters. Thanks to GriffonHeart for porblem research. --- src/game/Player.cpp | 12 +++++------- src/shared/revision_nr.h | 2 +- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/src/game/Player.cpp b/src/game/Player.cpp index adc55bb7e..9c9a5cc0b 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -594,13 +594,6 @@ bool Player::Create( uint32 guidlow, const std::string& name, uint8 race, uint8 SetUInt32Value( PLAYER_FIELD_TODAY_CONTRIBUTION, 0 ); SetUInt32Value( PLAYER_FIELD_YESTERDAY_CONTRIBUTION, 0 ); - for(uint32 i = 0; i < sGlyphSlotStore.GetNumRows(); ++i) - { - GlyphSlotEntry const * gs = sGlyphSlotStore.LookupEntry(i); - if(gs && gs->Order) - SetGlyphSlot(gs->Order - 1, gs->Id); - } - // set starting level uint32 start_level = getClass() != CLASS_DEATH_KNIGHT ? sWorld.getConfig(CONFIG_START_PLAYER_LEVEL) @@ -18943,6 +18936,11 @@ uint32 Player::GetBarberShopCost(uint8 newhairstyle, uint8 newhaircolor, uint8 n void Player::InitGlyphsForLevel() { + for(uint32 i = 0; i < sGlyphSlotStore.GetNumRows(); ++i) + if(GlyphSlotEntry const * gs = sGlyphSlotStore.LookupEntry(i)) + if(gs->Order) + SetGlyphSlot(gs->Order - 1, gs->Id); + uint32 level = getLevel(); uint32 value = 0; diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 5ab363fd6..49cf38c87 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 "7019" + #define REVISION_NR "7020" #endif // __REVISION_NR_H__ From dbc228370cb0c5e669fb108a7c8252677438e362 Mon Sep 17 00:00:00 2001 From: VladimirMangos Date: Sun, 4 Jan 2009 19:21:36 +0300 Subject: [PATCH 076/145] [7021] Not check allowed class/race for items with inventory type INVTYPE_NON_EQUIP that can't be used from inventory. --- src/game/ObjectMgr.cpp | 28 ++++++++++++++++++++++------ src/shared/revision_nr.h | 2 +- 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/src/game/ObjectMgr.cpp b/src/game/ObjectMgr.cpp index 2d26d2bac..b2fceffbc 100644 --- a/src/game/ObjectMgr.cpp +++ b/src/game/ObjectMgr.cpp @@ -1672,14 +1672,30 @@ void ObjectMgr::LoadItemPrototypes() const_cast(proto)->RequiredSkill = 0; } - if(!(proto->AllowableClass & CLASSMASK_ALL_PLAYABLE)) { - sLog.outErrorDb("Item (Entry: %u) not have in `AllowableClass` any playable classes (%u) and can't be equipped.",i,proto->AllowableClass); - } - if(!(proto->AllowableRace & RACEMASK_ALL_PLAYABLE)) - { - sLog.outErrorDb("Item (Entry: %u) not have in `AllowableRace` any playable races (%u) and can't be equipped.",i,proto->AllowableRace); + // can be used in equip slot, as page read use in inventory, or spell casting at use + bool req = proto->InventoryType!=INVTYPE_NON_EQUIP || proto->PageText; + if(!req) + { + for (int j = 0; j < 5; ++j) + { + if(proto->Spells[j].SpellId) + { + req = true; + break; + } + } + } + + if(req) + { + if(!(proto->AllowableClass & CLASSMASK_ALL_PLAYABLE)) + sLog.outErrorDb("Item (Entry: %u) not have in `AllowableClass` any playable classes (%u) and can't be equipped or use.",i,proto->AllowableClass); + + if(!(proto->AllowableRace & RACEMASK_ALL_PLAYABLE)) + sLog.outErrorDb("Item (Entry: %u) not have in `AllowableRace` any playable races (%u) and can't be equipped or use.",i,proto->AllowableRace); + } } if(proto->RequiredSpell && !sSpellStore.LookupEntry(proto->RequiredSpell)) diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 49cf38c87..7a3a0deb0 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 "7020" + #define REVISION_NR "7021" #endif // __REVISION_NR_H__ From dfa29a883fa97e4abe22ff98c431583416bfe914 Mon Sep 17 00:00:00 2001 From: arrai Date: Sun, 4 Jan 2009 18:34:37 +0100 Subject: [PATCH 077/145] Replaced dynamic by static allocation in server packets header. Added command to test large packets. --- src/game/Chat.cpp | 1 + src/game/Chat.h | 1 + src/game/WorldSocket.cpp | 13 +------------ src/game/debugcmds.cpp | 10 ++++++++++ 4 files changed, 13 insertions(+), 12 deletions(-) diff --git a/src/game/Chat.cpp b/src/game/Chat.cpp index 6ad8318be..f21193476 100644 --- a/src/game/Chat.cpp +++ b/src/game/Chat.cpp @@ -201,6 +201,7 @@ ChatCommand * ChatHandler::getCommandTable() { "anim", SEC_GAMEMASTER, false, &ChatHandler::HandleAnimCommand, "", NULL }, { "lootrecipient", SEC_GAMEMASTER, false, &ChatHandler::HandleGetLootRecipient, "", NULL }, { "arena", SEC_ADMINISTRATOR, false, &ChatHandler::HandleDebugArenaCommand, "", NULL }, + { "sendlargepacket",SEC_ADMINISTRATOR, false, &ChatHandler::HandleSendLargePacketCommand, "", NULL }, { NULL, 0, false, NULL, "", NULL } }; diff --git a/src/game/Chat.h b/src/game/Chat.h index db2a7e663..68abd1395 100644 --- a/src/game/Chat.h +++ b/src/game/Chat.h @@ -435,6 +435,7 @@ class ChatHandler bool HandleGetLootRecipient(const char * args); bool HandleDebugArenaCommand(const char * args); bool HandleSpawnVehicle(const char * args); + bool HandleSendLargePacketCommand(const char * args); Player* getSelectedPlayer(); Creature* getSelectedCreature(); diff --git a/src/game/WorldSocket.cpp b/src/game/WorldSocket.cpp index a2a2a40bd..e407a04ea 100644 --- a/src/game/WorldSocket.cpp +++ b/src/game/WorldSocket.cpp @@ -61,14 +61,8 @@ struct ServerPktHeader if(isLargePacket()) { sLog.outDebug("initializing large server to client packet. Size: %u, cmd: %u", size, cmd); - header= new uint8[5]; header[headerIndex++] = 0x80|(0xFF &(size>>16)); } - else - { - header= new uint8[4]; - } - header[headerIndex++] = 0xFF &(size>>8); header[headerIndex++] = 0xFF &size; @@ -76,11 +70,6 @@ struct ServerPktHeader header[headerIndex++] = 0xFF & (cmd>>8); } - ~ServerPktHeader() - { - delete[] header; - } - uint8 getHeaderLength() { // cmd = 2 bytes, size= 2||3bytes @@ -93,7 +82,7 @@ struct ServerPktHeader } const uint32 size; - uint8 *header; + uint8 header[5]; }; struct ClientPktHeader diff --git a/src/game/debugcmds.cpp b/src/game/debugcmds.cpp index c9fa173aa..67412301d 100644 --- a/src/game/debugcmds.cpp +++ b/src/game/debugcmds.cpp @@ -576,3 +576,13 @@ bool ChatHandler::HandleSpawnVehicle(const char* args) return true; } + +bool ChatHandler::HandleSendLargePacketCommand(const char* args) +{ + const char* stuffingString = "This is a dummy string to push the packet's size beyond 128000 bytes. "; + std::ostringstream ss; + while(strlen(ss.str().c_str()) < 128000) + ss << stuffingString; + SendSysMessage(ss.str().c_str()); + return true; +} From a865eb6010cf2ade42b7eb10448968d10b46b5a7 Mon Sep 17 00:00:00 2001 From: derex Date: Sun, 4 Jan 2009 18:41:03 +0100 Subject: [PATCH 078/145] [7022] Added support for packets > 64 kb --- src/game/WorldSocket.cpp | 167 +++++++++++++++++++++++---------------- src/game/WorldSocket.h | 20 +---- src/shared/revision_nr.h | 2 +- 3 files changed, 102 insertions(+), 87 deletions(-) diff --git a/src/game/WorldSocket.cpp b/src/game/WorldSocket.cpp index e407a04ea..5bc447d25 100644 --- a/src/game/WorldSocket.cpp +++ b/src/game/WorldSocket.cpp @@ -111,6 +111,9 @@ m_OverSpeedPings (0), m_LastPingTime (ACE_Time_Value::zero) { reference_counting_policy ().value (ACE_Event_Handler::Reference_Counting_Policy::ENABLED); + + msg_queue()->high_water_mark(8*1024*1024); + msg_queue()->low_water_mark(8*1024*1024); } WorldSocket::~WorldSocket (void) @@ -124,10 +127,6 @@ WorldSocket::~WorldSocket (void) closing_ = true; peer ().close (); - - WorldPacket* pct; - while (m_PacketQueue.dequeue_head (pct) == 0) - delete pct; } bool WorldSocket::IsClosed (void) const @@ -187,18 +186,35 @@ int WorldSocket::SendPacket (const WorldPacket& pct) sWorldLog.Log ("\n\n"); } - if (iSendPacket (pct) == -1) + ServerPktHeader header(pct.size()+2, pct.GetOpcode()); + m_Crypt.EncryptSend ( header.header, header.getHeaderLength()); + + if (m_OutBuffer->space () >= pct.size () + header.getHeaderLength() && msg_queue()->is_empty()) { - WorldPacket* npct; + // Put the packet on the buffer. + if (m_OutBuffer->copy ((char*) header.header, header.getHeaderLength()) == -1) + ACE_ASSERT (false); - ACE_NEW_RETURN (npct, WorldPacket (pct), -1); + if (!pct.empty ()) + if (m_OutBuffer->copy ((char*) pct.contents (), pct.size ()) == -1) + ACE_ASSERT (false); + } + else + { + // Enqueue the packet. + ACE_Message_Block* mb; - // NOTE maybe check of the size of the queue can be good ? - // to make it bounded instead of unbounded - if (m_PacketQueue.enqueue_tail (npct) == -1) + ACE_NEW_RETURN(mb, ACE_Message_Block(pct.size () + header.getHeaderLength()), -1); + + mb->copy((char*) header.header, header.getHeaderLength()); + + if (!pct.empty ()) + mb->copy((const char*)pct.contents(), pct.size ()); + + if(msg_queue()->enqueue_tail(mb,(ACE_Time_Value*)&ACE_Time_Value::zero) == -1) { - delete npct; - sLog.outError ("WorldSocket::SendPacket: m_PacketQueue.enqueue_tail failed"); + sLog.outError("WorldSocket::SendPacket enqueue_tail"); + mb->release(); return -1; } } @@ -323,7 +339,7 @@ int WorldSocket::handle_output (ACE_HANDLE) const size_t send_len = m_OutBuffer->length (); if (send_len == 0) - return cancel_wakeup_output (Guard); + return handle_output_queue (Guard); #ifdef MSG_NOSIGNAL ssize_t n = peer ().send (m_OutBuffer->rd_ptr (), send_len, MSG_NOSIGNAL); @@ -353,15 +369,73 @@ int WorldSocket::handle_output (ACE_HANDLE) { m_OutBuffer->reset (); - if (!iFlushPacketQueue ()) - return cancel_wakeup_output (Guard); - else - return schedule_wakeup_output (Guard); + return handle_output_queue (Guard); } ACE_NOTREACHED (return 0); } +int WorldSocket::handle_output_queue (GuardType& g) +{ + if(msg_queue()->is_empty()) + return cancel_wakeup_output(g); + + ACE_Message_Block *mblk; + + if(msg_queue()->dequeue_head(mblk, (ACE_Time_Value*)&ACE_Time_Value::zero) == -1) + { + sLog.outError("WorldSocket::handle_output_queue dequeue_head"); + return -1; + } + + const size_t send_len = mblk->length (); + +#ifdef MSG_NOSIGNAL + ssize_t n = peer ().send (mblk->rd_ptr (), send_len, MSG_NOSIGNAL); +#else + ssize_t n = peer ().send (mblk->rd_ptr (), send_len); +#endif // MSG_NOSIGNAL + + if (n == 0) + { + mblk->release(); + + return -1; + } + else if (n == -1) + { + if (errno == EWOULDBLOCK || errno == EAGAIN) + { + msg_queue()->enqueue_head(mblk, (ACE_Time_Value*) &ACE_Time_Value::zero); + return schedule_wakeup_output (g); + } + + mblk->release(); + return -1; + } + else if (n < send_len) //now n > 0 + { + mblk->rd_ptr (static_cast (n)); + + if (msg_queue()->enqueue_head(mblk, (ACE_Time_Value*) &ACE_Time_Value::zero) == -1) + { + sLog.outError("WorldSocket::handle_output_queue enqueue_head"); + mblk->release(); + return -1; + } + + return schedule_wakeup_output (g); + } + else //now n == send_len + { + mblk->release(); + + return msg_queue()->is_empty() ? cancel_wakeup_output(g) : ACE_Event_Handler::WRITE_MASK; + } + + ACE_NOTREACHED(return -1); +} + int WorldSocket::handle_close (ACE_HANDLE h, ACE_Reactor_Mask) { // Critical section @@ -389,10 +463,15 @@ int WorldSocket::Update (void) if (closing_) return -1; - if (m_OutActive || m_OutBuffer->length () == 0) + if (m_OutActive || (m_OutBuffer->length () == 0 && msg_queue()->is_empty())) return 0; - return handle_output (get_handle ()); + int ret; + do + ret = handle_output (get_handle ()); + while( ret > 0 ); + + return ret; } int WorldSocket::handle_input_header (void) @@ -986,53 +1065,3 @@ int WorldSocket::HandlePing (WorldPacket& recvPacket) packet << ping; return SendPacket (packet); } - -int WorldSocket::iSendPacket (const WorldPacket& pct) -{ - ServerPktHeader header(pct.size()+2, pct.GetOpcode()); - if (m_OutBuffer->space () < pct.size () + header.getHeaderLength()) - { - errno = ENOBUFS; - return -1; - } - - - m_Crypt.EncryptSend ( header.header, header.getHeaderLength()); - - if (m_OutBuffer->copy ((char*) header.header, header.getHeaderLength()) == -1) - ACE_ASSERT (false); - - if (!pct.empty ()) - if (m_OutBuffer->copy ((char*) pct.contents (), pct.size ()) == -1) - ACE_ASSERT (false); - - return 0; -} - -bool WorldSocket::iFlushPacketQueue () -{ - WorldPacket *pct; - bool haveone = false; - - while (m_PacketQueue.dequeue_head (pct) == 0) - { - if (iSendPacket (*pct) == -1) - { - if (m_PacketQueue.enqueue_head (pct) == -1) - { - delete pct; - sLog.outError ("WorldSocket::iFlushPacketQueue m_PacketQueue->enqueue_head"); - return false; - } - - break; - } - else - { - haveone = true; - delete pct; - } - } - - return haveone; -} diff --git a/src/game/WorldSocket.h b/src/game/WorldSocket.h index 8fd4229e5..ee0a3c2b0 100644 --- a/src/game/WorldSocket.h +++ b/src/game/WorldSocket.h @@ -101,9 +101,6 @@ class WorldSocket : protected WorldHandler typedef ACE_Thread_Mutex LockType; typedef ACE_Guard GuardType; - /// Queue for storing packets for which there is no space. - typedef ACE_Unbounded_Queue< WorldPacket* > PacketQueueT; - /// Check if socket is closed. bool IsClosed (void) const; @@ -159,6 +156,9 @@ class WorldSocket : protected WorldHandler int cancel_wakeup_output (GuardType& g); int schedule_wakeup_output (GuardType& g); + /// Drain the queue if its not empty. + int handle_output_queue (GuardType& g); + /// process one incoming packet. /// @param new_pct received packet ,note that you need to delete it. int ProcessIncoming (WorldPacket* new_pct); @@ -169,16 +169,6 @@ class WorldSocket : protected WorldHandler /// Called by ProcessIncoming() on CMSG_PING. int HandlePing (WorldPacket& recvPacket); - /// Try to write WorldPacket to m_OutBuffer ,return -1 if no space - /// Need to be called with m_OutBufferLock lock held - int iSendPacket (const WorldPacket& pct); - - /// Flush m_PacketQueue if there are packets in it - /// Need to be called with m_OutBufferLock lock held - /// @return true if it wrote to the buffer ( AKA you need - /// to mark the socket for output ). - bool iFlushPacketQueue (); - private: /// Time in which the last ping was received ACE_Time_Value m_LastPingTime; @@ -218,10 +208,6 @@ class WorldSocket : protected WorldHandler /// Size of the m_OutBuffer. size_t m_OutBufferSize; - /// Here are stored packets for which there was no space on m_OutBuffer, - /// this allows not-to kick player if its buffer is overflowed. - PacketQueueT m_PacketQueue; - /// True if the socket is registered with the reactor for output bool m_OutActive; diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 7a3a0deb0..1b0b36a74 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 "7021" + #define REVISION_NR "7022" #endif // __REVISION_NR_H__ From 4b9af01d42d2e4a4cf2b4b37a03a817584c5b753 Mon Sep 17 00:00:00 2001 From: DiSlord Date: Sun, 4 Jan 2009 23:15:24 +0300 Subject: [PATCH 079/145] [7023] Remove not used useCharges for IsImmunedToSpell/IsImmunedToDamage Signed-off-by: DiSlord --- src/game/Creature.cpp | 4 ++-- src/game/Creature.h | 2 +- src/game/MovementHandler.cpp | 2 +- src/game/Spell.cpp | 6 +++--- src/game/ThreatManager.cpp | 2 +- src/game/Totem.cpp | 4 ++-- src/game/Totem.h | 2 +- src/game/Unit.cpp | 10 +++++----- src/game/Unit.h | 4 ++-- src/shared/revision_nr.h | 2 +- 10 files changed, 19 insertions(+), 19 deletions(-) diff --git a/src/game/Creature.cpp b/src/game/Creature.cpp index 140d022f6..d278e7a35 100644 --- a/src/game/Creature.cpp +++ b/src/game/Creature.cpp @@ -1536,7 +1536,7 @@ void Creature::Respawn() } } -bool Creature::IsImmunedToSpell(SpellEntry const* spellInfo, bool useCharges) +bool Creature::IsImmunedToSpell(SpellEntry const* spellInfo) { if (!spellInfo) return false; @@ -1544,7 +1544,7 @@ bool Creature::IsImmunedToSpell(SpellEntry const* spellInfo, bool useCharges) if (GetCreatureInfo()->MechanicImmuneMask & (1 << (spellInfo->Mechanic - 1))) return true; - return Unit::IsImmunedToSpell(spellInfo, useCharges); + return Unit::IsImmunedToSpell(spellInfo); } bool Creature::IsImmunedToSpellEffect(uint32 effect, uint32 mechanic) const diff --git a/src/game/Creature.h b/src/game/Creature.h index e97814db0..02aaae6bc 100644 --- a/src/game/Creature.h +++ b/src/game/Creature.h @@ -425,7 +425,7 @@ class MANGOS_DLL_SPEC Creature : public Unit bool isCanIneractWithBattleMaster(Player* player, bool msg) const; bool isCanTrainingAndResetTalentsOf(Player* pPlayer) const; bool IsOutOfThreatArea(Unit* pVictim) const; - bool IsImmunedToSpell(SpellEntry const* spellInfo, bool useCharges = false); + bool IsImmunedToSpell(SpellEntry const* spellInfo); // redefine Unit::IsImmunedToSpell bool IsImmunedToSpellEffect(uint32 effect, uint32 mechanic) const; // redefine Unit::IsImmunedToSpellEffect diff --git a/src/game/MovementHandler.cpp b/src/game/MovementHandler.cpp index 2a256db1b..fcf5a4661 100644 --- a/src/game/MovementHandler.cpp +++ b/src/game/MovementHandler.cpp @@ -248,7 +248,7 @@ void WorldSession::HandleMovementOpcodes( WorldPacket & recv_data ) // 14.57 can be calculated by resolving damageperc formular below to 0 if (z_diff >= 14.57f && !target->isDead() && !target->isGameMaster() && !target->HasAuraType(SPELL_AURA_HOVER) && !target->HasAuraType(SPELL_AURA_FEATHER_FALL) && - !target->HasAuraType(SPELL_AURA_FLY) && !target->IsImmunedToDamage(SPELL_SCHOOL_MASK_NORMAL,true) ) + !target->HasAuraType(SPELL_AURA_FLY) && !target->IsImmunedToDamage(SPELL_SCHOOL_MASK_NORMAL) ) { //Safe fall, fall height reduction int32 safe_fall = target->GetTotalAuraModifier(SPELL_AURA_SAFE_FALL); diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp index 6ce4145be..e164eee93 100644 --- a/src/game/Spell.cpp +++ b/src/game/Spell.cpp @@ -1045,8 +1045,8 @@ void Spell::DoSpellHitOnUnit(Unit *unit, const uint32 effectMask) // Recheck immune (only for delayed spells) if( m_spellInfo->speed && ( - unit->IsImmunedToDamage(GetSpellSchoolMask(m_spellInfo),true) || - unit->IsImmunedToSpell(m_spellInfo,true) )) + unit->IsImmunedToDamage(GetSpellSchoolMask(m_spellInfo)) || + unit->IsImmunedToSpell(m_spellInfo))) { m_caster->SendSpellMiss(unit, m_spellInfo->Id, SPELL_MISS_IMMUNE); return; @@ -3621,7 +3621,7 @@ uint8 Spell::CanCast(bool strict) if(IsPositiveSpell(m_spellInfo->Id)) { - if(target->IsImmunedToSpell(m_spellInfo,false)) + if(target->IsImmunedToSpell(m_spellInfo)) return SPELL_FAILED_TARGET_AURASTATE; } diff --git a/src/game/ThreatManager.cpp b/src/game/ThreatManager.cpp index e8526a2d8..7932d46c4 100644 --- a/src/game/ThreatManager.cpp +++ b/src/game/ThreatManager.cpp @@ -278,7 +278,7 @@ HostilReference* ThreatContainer::selectNextVictim(Creature* pAttacker, HostilRe assert(target); // if the ref has status online the target must be there ! // some units are prefered in comparison to others - if(!noPriorityTargetFound && (target->IsImmunedToDamage(pAttacker->GetMeleeDamageSchoolMask(), false) || target->hasNegativeAuraWithInterruptFlag(AURA_INTERRUPT_FLAG_DAMAGE)) ) + if(!noPriorityTargetFound && (target->IsImmunedToDamage(pAttacker->GetMeleeDamageSchoolMask()) || target->hasNegativeAuraWithInterruptFlag(AURA_INTERRUPT_FLAG_DAMAGE)) ) { if(iter != lastRef) { diff --git a/src/game/Totem.cpp b/src/game/Totem.cpp index 6020ee1ea..504e3ce3e 100644 --- a/src/game/Totem.cpp +++ b/src/game/Totem.cpp @@ -159,7 +159,7 @@ void Totem::SetTypeBySummonSpell(SpellEntry const * spellProto) m_type = TOTEM_STATUE; //Jewelery statue } -bool Totem::IsImmunedToSpell(SpellEntry const* spellInfo, bool useCharges) +bool Totem::IsImmunedToSpell(SpellEntry const* spellInfo) { for (int i=0;i<3;i++) { @@ -172,5 +172,5 @@ bool Totem::IsImmunedToSpell(SpellEntry const* spellInfo, bool useCharges) continue; } } - return Creature::IsImmunedToSpell(spellInfo, useCharges); + return Creature::IsImmunedToSpell(spellInfo); } diff --git a/src/game/Totem.h b/src/game/Totem.h index be5ecaaa1..df4abaada 100644 --- a/src/game/Totem.h +++ b/src/game/Totem.h @@ -53,7 +53,7 @@ class Totem : public Creature void UpdateAttackPowerAndDamage(bool /*ranged*/ ) {} void UpdateDamagePhysical(WeaponAttackType /*attType*/) {} - bool IsImmunedToSpell(SpellEntry const* spellInfo, bool useCharges = false); + bool IsImmunedToSpell(SpellEntry const* spellInfo); protected: TotemType m_type; diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index 7ee119f03..d14ce7dd5 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -1189,7 +1189,7 @@ void Unit::CalculateMeleeDamage(Unit *pVictim, uint32 damage, CalcDamageInfo *da } // Physical Immune check - if(damageInfo->target->IsImmunedToDamage(SpellSchoolMask(damageInfo->damageSchoolMask),true)) + if(damageInfo->target->IsImmunedToDamage(SpellSchoolMask(damageInfo->damageSchoolMask))) { damageInfo->HitInfo |= HITINFO_NORMALSWING; damageInfo->TargetState = VICTIMSTATE_IS_IMMUNE; @@ -2391,7 +2391,7 @@ SpellMissInfo Unit::SpellHitResult(Unit *pVictim, SpellEntry const *spell, bool return SPELL_MISS_EVADE; // Check for immune (use charges) - if (pVictim->IsImmunedToSpell(spell,true)) + if (pVictim->IsImmunedToSpell(spell)) return SPELL_MISS_IMMUNE; // All positive spells can`t miss @@ -2400,7 +2400,7 @@ SpellMissInfo Unit::SpellHitResult(Unit *pVictim, SpellEntry const *spell, bool return SPELL_MISS_NONE; // Check for immune (use charges) - if (pVictim->IsImmunedToDamage(GetSpellSchoolMask(spell),true)) + if (pVictim->IsImmunedToDamage(GetSpellSchoolMask(spell))) return SPELL_MISS_IMMUNE; // Try victim reflect spell @@ -7548,7 +7548,7 @@ int32 Unit::SpellBaseHealingBonusForVictim(SpellSchoolMask schoolMask, Unit *pVi return AdvertisedBenefit; } -bool Unit::IsImmunedToDamage(SpellSchoolMask shoolMask, bool useCharges) +bool Unit::IsImmunedToDamage(SpellSchoolMask shoolMask) { //If m_immuneToSchool type contain this school type, IMMUNE damage. SpellImmuneList const& schoolList = m_spellImmune[IMMUNITY_SCHOOL]; @@ -7565,7 +7565,7 @@ bool Unit::IsImmunedToDamage(SpellSchoolMask shoolMask, bool useCharges) return false; } -bool Unit::IsImmunedToSpell(SpellEntry const* spellInfo, bool useCharges) +bool Unit::IsImmunedToSpell(SpellEntry const* spellInfo) { if (!spellInfo) return false; diff --git a/src/game/Unit.h b/src/game/Unit.h index 65aed93e3..067c73bd9 100644 --- a/src/game/Unit.h +++ b/src/game/Unit.h @@ -1313,9 +1313,9 @@ class MANGOS_DLL_SPEC Unit : public WorldObject void ApplySpellImmune(uint32 spellId, uint32 op, uint32 type, bool apply); void ApplySpellDispelImmunity(const SpellEntry * spellProto, DispelType type, bool apply); - virtual bool IsImmunedToSpell(SpellEntry const* spellInfo, bool useCharges = false); + virtual bool IsImmunedToSpell(SpellEntry const* spellInfo); // redefined in Creature - bool IsImmunedToDamage(SpellSchoolMask meleeSchoolMask, bool useCharges = false); + bool IsImmunedToDamage(SpellSchoolMask meleeSchoolMask); virtual bool IsImmunedToSpellEffect(uint32 effect, uint32 mechanic) const; // redefined in Creature diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 1b0b36a74..7e0b625b5 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 "7022" + #define REVISION_NR "7023" #endif // __REVISION_NR_H__ From 76997d823e6092e5e169a047af0937d9dd075b35 Mon Sep 17 00:00:00 2001 From: VladimirMangos Date: Sun, 4 Jan 2009 23:13:02 +0300 Subject: [PATCH 080/145] Delete `spell_chain` query result more early. --- src/game/SpellMgr.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/game/SpellMgr.cpp b/src/game/SpellMgr.cpp index f35679746..0e2228ed6 100644 --- a/src/game/SpellMgr.cpp +++ b/src/game/SpellMgr.cpp @@ -1597,6 +1597,8 @@ void SpellMgr::LoadSpellChains() ++count; } while( result->NextRow() ); + delete result; + // additional integrity checks for(SpellChainMap::iterator i = mSpellChains.begin(); i != mSpellChains.end(); ++i) { @@ -1645,8 +1647,6 @@ void SpellMgr::LoadSpellChains() } } - delete result; - sLog.outString(); sLog.outString( ">> Loaded %u spell chain records", count ); } From f50083928a5f8af1c048c259f34e7821951511ac Mon Sep 17 00:00:00 2001 From: VladimirMangos Date: Sun, 4 Jan 2009 23:27:14 +0300 Subject: [PATCH 081/145] [7024] Add gathering skill grow bonus spell chanin data. Sort prof. spell chain data by skill ids as other spells. --- sql/mangos.sql | 343 ++++++++++++--------- sql/updates/7024_01_mangos_spell_chain.sql | 31 ++ sql/updates/Makefile.am | 2 + src/shared/revision_nr.h | 2 +- 4 files changed, 237 insertions(+), 141 deletions(-) create mode 100644 sql/updates/7024_01_mangos_spell_chain.sql diff --git a/sql/mangos.sql b/sql/mangos.sql index 2a041bba4..e4b58241d 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_7015_01_mangos_item_template` bit(1) default NULL + `required_7024_01_mangos_spell_chain` bit(1) default NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Used DB version notes'; -- @@ -13466,6 +13466,16 @@ INSERT INTO spell_chain VALUES (48159,34917,34914,4,0), (48160,48159,34914,5,0), /*------------------ +-- (129) First Aid +------------------*/ +/*First Aid*/ +(3273,0,3273,1,0), +(3274,3273,3273,2,0), +(7924,3274,3273,3,0), +(10846,7924,3273,4,0), +(27028,10846,3273,5,0), +(45542,27028,3273,6,0), +/*------------------ -- (134) Feral Combat (Druid) ------------------*/ /*Bash*/ @@ -13691,6 +13701,64 @@ INSERT INTO spell_chain VALUES (58431,27022,1510,5,0), (58434,58431,1510,6,0), /*------------------ +-- (164) Blacksmithing +------------------*/ +/*Blacksmithing*/ +(2018,0,2018,1,0), +(3100,2018,2018,2,0), +(3538,3100,2018,3,0), +(9785,3538,2018,4,0), +(9787,9785,2018,5,0), +(9788,9785,2018,5,0), +(29844,9785,2018,5,0), +(17039,9787,2018,6,0), +(17040,9787,2018,6,0), +(17041,9787,2018,6,0), +(51300,29844,2018,6,0), +/*------------------ +-- (165) Leatherworking +------------------*/ +/*Leatherworking*/ +(2108,0,2108,1,0), +(3104,2108,2108,2,0), +(3811,3104,2108,3,0), +(10662,3811,2108,4,0), +(10656,10662,2108,5,0), +(10658,10662,2108,5,0), +(10660,10662,2108,5,0), +(32549,10662,2108,5,0), +(51302,32549,2108,6,0), +/*------------------ +-- (171) Alchemy +------------------*/ +/* Alchemy */ +(2259,0,2259,1,0), +(3101,2259,2259,2,0), +(3464,3101,2259,3,0), +(11611,3464,2259,4,0), +(28596,11611,2259,5,0), +(28672,11611,2259,5,0), +(28675,11611,2259,5,0), +(28677,11611,2259,5,0), +(51304,28596,2259,6,0), +/*------------------ +-- (182) Herbalizm +------------------*/ +/*Herb Gathering*/ +(2366,0,2366,1,0), +(2368,2366,2366,2,0), +(3570,2368,2366,3,0), +(11993,3570,2366,4,0), +(28695,11993,2366,5,0), +(50300,28695,2366,6,0), +/*Lifeblood*/ +(55428,0,55428,1,0), +(55480,55428,55428,2,0), +(55500,55480,55428,3,0), +(55501,55500,55428,4,0), +(55502,55501,55428,5,0), +(55503,55502,55428,6,0), +/*------------------ -- (184) Retribution (Paladin) ------------------*/ /*Blessingof Might*/ @@ -13726,7 +13794,34 @@ INSERT INTO spell_chain VALUES (27150,10301,7294,6,0), (54043,27150,7294,7,0), /*------------------ ---(188) Pet - Imp +-- (185) Cooking +------------------*/ +/*Cooking*/ +(2550,0,2550,1,0), +(3102,2550,2550,2,0), +(3413,3102,2550,3,0), +(18260,3413,2550,4,0), +(33359,18260,2550,5,0), +(51296,33359,2550,6,0), +/*------------------ +-- (186) Mining +------------------*/ +/*Mining*/ +(2575,0,2575,1,0), +(2576,2575,2575,2,0), +(3564,2576,2575,3,0), +(10248,3564,2575,4,0), +(29354,10248,2575,5,0), +(50310,29354,2575,6,0), +/*Toughness*/ +(53120,0,53120,1,0), +(53121,53120,53120,2,0), +(53122,53121,53120,3,0), +(53123,53122,53120,4,0), +(53124,53123,53120,5,0), +(53040,53124,53120,6,0), +/*------------------ +-- (188) Pet - Imp ------------------*/ /*Blood Pact*/ (6307,0,6307,1,0), @@ -13775,6 +13870,19 @@ INSERT INTO spell_chain VALUES (19244,0,19244,1,0), (19647,19244,19244,2,0), /*------------------ +-- (197) Tailoring +------------------*/ +/*Tailoring*/ +(3908,0,3908,1,0), +(3909,3908,3908,2,0), +(3910,3909,3908,3,0), +(12180,3910,3908,4,0), +(26790,12180,3908,5,0), +(26797,12180,3908,5,0), +(26798,12180,3908,5,0), +(26801,12180,3908,5,0), +(51309,26790,3908,6,0); +/*------------------ --(203)Pet-Spider --(208)Pet-Wolf --(212)Pet-Crocolisk @@ -13796,6 +13904,18 @@ INSERT INTO spell_chain VALUES (52473,27050,17253,10,0), (52474,52473,17253,11,0), /*------------------ +-- (202) Engineering +------------------*/ +/*Engineering*/ +(4036,0,4036,1,0), +(4037,4036,4036,2,0), +(4038,4037,4036,3,0), +(12656,4038,4036,4,0), +(20219,12656,4036,5,0), +(20222,12656,4036,5,0), +(30350,12656,4036,5,0), +(51306,30350,4036,6,0), +/*------------------ -- (204) Pet - Voidwalker ------------------*/ /*Consume Shadows*/ @@ -14339,6 +14459,16 @@ INSERT INTO spell_chain VALUES (27047,14921,2649,8,0), (61676,27047,2649,9,0), /*------------------ +-- (333) Enchanting +------------------*/ +/*Enchanting*/ +(7411,0,7411,1,0), +(7412,7411,7411,2,0), +(7413,7412,7411,3,0), +(13920,7413,7411,4,0), +(28029,13920,7411,5,0), +(51313,28029,7411,6,0), +/*------------------ --(354)Demonology ------------------*/ /*Banish*/ @@ -14536,16 +14666,26 @@ INSERT INTO spell_chain VALUES (47841,30405,30108,4,0), (47843,47841,30108,5,0), /*------------------ ---(373)Enhancement +-- (356) Fishing ------------------*/ -/*FireResistanceTotem*/ +/*Fishing*/ +(7620,0,7620,1,0), +(7731,7620,7620,2,0), +(7732,7731,7620,3,0), +(18248,7732,7620,4,0), +(33095,18248,7620,5,0), +(51294,33095,7620,6,0), +/*------------------ +--(373) Enhancement +------------------*/ +/*Fire Resistance Totem*/ (8184,0,8184,1,0), (10537,8184,8184,2,0), (10538,10537,8184,3,0), (25563,10538,8184,4,0), (58737,25563,8184,5,0), (58739,58737,8184,6,0), -/*FlametongueTotem*/ +/*Flametongue Totem*/ (8227,0,8227,1,0), (8249,8227,8227,2,0), (10526,8249,8227,3,0), @@ -14554,7 +14694,7 @@ INSERT INTO spell_chain VALUES (58649,25557,8227,6,0), (58652,58649,8227,7,0), (58656,58652,8227,8,0), -/*FlametongueWeapon*/ +/*Flametongue Weapon*/ (8024,0,8024,1,0), (8027,8024,8024,2,0), (8030,8027,8024,3,0), @@ -14565,14 +14705,14 @@ INSERT INTO spell_chain VALUES (58785,25489,8024,8,0), (58789,58785,8024,9,0), (58790,58789,8024,10,0), -/*FrostResistanceTotem*/ +/*Frost Resistance Totem*/ (8181,0,8181,1,0), (10478,8181,8181,2,0), (10479,10478,8181,3,0), (25560,10479,8181,4,0), (58741,25560,8181,5,0), (58745,58741,8181,6,0), -/*FrostbrandWeapon*/ +/*Frostbrand Weapon*/ (8033,0,8033,1,0), (8038,8033,8033,2,0), (10456,8038,8033,3,0), @@ -14603,19 +14743,19 @@ INSERT INTO spell_chain VALUES (25472,25469,324,9,0), (49280,25472,324,10,0), (49281,49280,324,11,0), -/*NatureResistanceTotem*/ +/*Nature Resistance Totem*/ (10595,0,10595,1,0), (10600,10595,10595,2,0), (10601,10600,10595,3,0), (25574,10601,10595,4,0), (58746,25574,10595,5,0), (58749,58746,10595,6,0), -/*RockbiterWeapon*/ +/*Rockbiter Weapon*/ (8017,0,8017,1,0), (8018,8017,8017,2,0), (8019,8018,8017,3,0), (10399,8019,8017,4,0), -/*StoneskinTotem*/ +/*Stoneskin Totem*/ (8071,0,8071,1,0), (8154,8071,8071,2,0), (8155,8154,8071,3,0), @@ -14626,7 +14766,7 @@ INSERT INTO spell_chain VALUES (25509,25508,8071,8,0), (58751,25509,8071,9,0), (58753,58751,8071,10,0), -/*StrengthofEarthTotem*/ +/*Strength of Earth Totem*/ (8075,0,8075,1,0), (8160,8075,8075,2,0), (8161,8160,8075,3,0), @@ -14786,10 +14926,10 @@ INSERT INTO spell_chain VALUES (25464,10473,8056,5,0), (49235,25464,8056,6,0), (49236,49235,8056,7,0), -/*LavaBurst*/ +/*Lava Burst*/ (51505,0,51505,1,0), (60043,51505,51505,2,0), -/*LightningBolt*/ +/*Lightning Bolt*/ (403,0,403,1,0), (529,403,403,2,0), (548,529,403,3,0), @@ -14804,7 +14944,7 @@ INSERT INTO spell_chain VALUES (25449,25448,403,12,0), (49237,25449,403,13,0), (49238,49237,403,14,0), -/*MagmaTotem*/ +/*Magma Totem*/ (8190,0,8190,1,0), (10585,8190,8190,2,0), (10586,10585,8190,3,0), @@ -14815,7 +14955,7 @@ INSERT INTO spell_chain VALUES /*Purge*/ (370,0,370,1,0), (8012,370,370,2,0), -/*SearingTotem*/ +/*Searing Totem*/ (3599,0,3599,1,0), (6363,3599,3599,2,0), (6364,6363,3599,3,0), @@ -14826,7 +14966,7 @@ INSERT INTO spell_chain VALUES (58699,25533,3599,8,0), (58703,58699,3599,9,0), (58704,58703,3599,10,0), -/*StoneclawTotem*/ +/*Stoneclaw Totem*/ (5730,0,5730,1,0), (6390,5730,5730,2,0), (6391,6390,5730,3,0), @@ -14837,7 +14977,7 @@ INSERT INTO spell_chain VALUES (58580,25525,5730,8,0), (58581,58580,5730,9,0), (58582,58581,5730,10,0), -/*TotemofWrath*/ +/*Totemof Wrath*/ (30706,0,30706,1,0), (57720,30706,30706,2,0), (57721,57720,30706,3,0), @@ -14848,6 +14988,23 @@ INSERT INTO spell_chain VALUES (59158,59156,51490,3,0), (59159,59158,51490,4,0), /*------------------ +-- (393) Skinning +------------------*/ +/*Skinning*/ +(8613,0,8613,1,0), +(8617,8613,8613,2,0), +(8618,8617,8613,3,0), +(10768,8618,8613,4,0), +(32678,10768,8613,5,0), +(50305,32678,8613,6,0), +/*Master of Anatomy*/ +(53125,0,53125,1,0), +(53662,53125,53125,2,0), +(53663,53662,53125,3,0), +(53664,53663,53125,4,0), +(53665,53664,53125,5,0), +(53666,53665,53125,6,0), +/*------------------ --(573)Restoration ------------------*/ /*GiftoftheWild*/ @@ -15350,6 +15507,16 @@ INSERT INTO spell_chain VALUES (25011,25010,24844,5,0), (25012,25011,24844,6,0), /*------------------ +-- (755) Jewelcrafting +------------------*/ +/*Jewelcrafting*/ +(25229,0,25229,1,0), +(25230,25229,25229,2,0), +(28894,25230,25229,3,0), +(28895,28894,25229,4,0), +(28897,28895,25229,5,0), +(51311,28897,25229,6,0), +/*------------------ --(761)Pet-Felguard ------------------*/ /*Anguish*/ @@ -15368,6 +15535,14 @@ INSERT INTO spell_chain VALUES (30198,30194,30151,3,0), (47996,30198,30151,4,0), /*------------------ +-- (762) Riding +------------------*/ +/*Riding*/ +(33388,0,33388,1,0), +(33391,33388,33388,2,0), +(34090,33391,33388,3,0), +(34091,34090,33388,4,0), +/*------------------ --(763)Pet-Dragonhawk ------------------*/ /*FireBreath*/ @@ -15534,6 +15709,16 @@ INSERT INTO spell_chain VALUES (51378,51376,49194,3,0), (51379,51378,49194,4,0), /*------------------ +-- (773) Inscription +------------------*/ +/*Inscription*/ +(45357,0,45357,1,0), +(45358,45357,45357,2,0), +(45359,45358,45357,3,0), +(45360,45359,45357,4,0), +(45361,45360,45357,5,0), +(45363,45361,45357,6,0), +/*------------------ --(780)Pet-ExoticChimaera ------------------*/ /*FroststormBreath*/ @@ -15593,128 +15778,6 @@ INSERT INTO spell_chain VALUES (61196,61195,61193,4,0), (61197,61196,61193,5,0), (61198,61197,61193,6,0), -/*------------------ ---Professions -------------------*/ -/*Alchemy*/ -(2259,0,2259,1,0), -(3101,2259,2259,2,0), -(3464,3101,2259,3,0), -(11611,3464,2259,4,0), -(28596,11611,2259,5,0), -(28672,11611,2259,5,0), -(28675,11611,2259,5,0), -(28677,11611,2259,5,0), -(51304,28596,2259,6,0), -/*Blacksmithing*/ -(2018,0,2018,1,0), -(3100,2018,2018,2,0), -(3538,3100,2018,3,0), -(9785,3538,2018,4,0), -(9787,9785,2018,5,0), -(9788,9785,2018,5,0), -(29844,9785,2018,5,0), -(17039,9787,2018,6,0), -(17040,9787,2018,6,0), -(17041,9787,2018,6,0), -(51300,29844,2018,6,0), -/*Cooking*/ -(2550,0,2550,1,0), -(3102,2550,2550,2,0), -(3413,3102,2550,3,0), -(18260,3413,2550,4,0), -(33359,18260,2550,5,0), -(51296,33359,2550,6,0), -/*Enchanting*/ -(7411,0,7411,1,0), -(7412,7411,7411,2,0), -(7413,7412,7411,3,0), -(13920,7413,7411,4,0), -(28029,13920,7411,5,0), -(51313,28029,7411,6,0), -/*Engineering*/ -(4036,0,4036,1,0), -(4037,4036,4036,2,0), -(4038,4037,4036,3,0), -(12656,4038,4036,4,0), -(20219,12656,4036,5,0), -(20222,12656,4036,5,0), -(30350,12656,4036,5,0), -(51306,30350,4036,6,0), -/*First Aid*/ -(3273,0,3273,1,0), -(3274,3273,3273,2,0), -(7924,3274,3273,3,0), -(10846,7924,3273,4,0), -(27028,10846,3273,5,0), -(45542,27028,3273,6,0), -/*Fishing*/ -(7620,0,7620,1,0), -(7731,7620,7620,2,0), -(7732,7731,7620,3,0), -(18248,7732,7620,4,0), -(33095,18248,7620,5,0), -(51294,33095,7620,6,0), -/*Herb Gathering*/ -(2366,0,2366,1,0), -(2368,2366,2366,2,0), -(3570,2368,2366,3,0), -(11993,3570,2366,4,0), -(28695,11993,2366,5,0), -(50300,28695,2366,6,0), -/*Inscription*/ -(45357,0,45357,1,0), -(45358,45357,45357,2,0), -(45359,45358,45357,3,0), -(45360,45359,45357,4,0), -(45361,45360,45357,5,0), -(45363,45361,45357,6,0), -/*Jewelcrafting*/ -(25229,0,25229,1,0), -(25230,25229,25229,2,0), -(28894,25230,25229,3,0), -(28895,28894,25229,4,0), -(28897,28895,25229,5,0), -(51311,28897,25229,6,0), -/*Leatherworking*/ -(2108,0,2108,1,0), -(3104,2108,2108,2,0), -(3811,3104,2108,3,0), -(10662,3811,2108,4,0), -(10656,10662,2108,5,0), -(10658,10662,2108,5,0), -(10660,10662,2108,5,0), -(32549,10662,2108,5,0), -(51302,32549,2108,6,0), -/*Mining*/ -(2575,0,2575,1,0), -(2576,2575,2575,2,0), -(3564,2576,2575,3,0), -(10248,3564,2575,4,0), -(29354,10248,2575,5,0), -(50310,29354,2575,6,0), -/*Riding*/ -(33388,0,33388,1,0), -(33391,33388,33388,2,0), -(34090,33391,33388,3,0), -(34091,34090,33388,4,0), -/*Skinning*/ -(8613,0,8613,1,0), -(8617,8613,8613,2,0), -(8618,8617,8613,3,0), -(10768,8618,8613,4,0), -(32678,10768,8613,5,0), -(50305,32678,8613,6,0), -/*Tailoring*/ -(3908,0,3908,1,0), -(3909,3908,3908,2,0), -(3910,3909,3908,3,0), -(12180,3910,3908,4,0), -(26790,12180,3908,5,0), -(26797,12180,3908,5,0), -(26798,12180,3908,5,0), -(26801,12180,3908,5,0), -(51309,26790,3908,6,0); /*!40000 ALTER TABLE `spell_chain` ENABLE KEYS */; UNLOCK TABLES; diff --git a/sql/updates/7024_01_mangos_spell_chain.sql b/sql/updates/7024_01_mangos_spell_chain.sql new file mode 100644 index 000000000..858e8506e --- /dev/null +++ b/sql/updates/7024_01_mangos_spell_chain.sql @@ -0,0 +1,31 @@ +ALTER TABLE db_version CHANGE COLUMN required_7015_01_mangos_item_template required_7024_01_mangos_spell_chain bit; + +/* Lifeblood (Herbalizm) */ +DELETE FROM `spell_chain` WHERE `spell_id` IN (55428,55480,55500,55501,55502,55503); +INSERT INTO `spell_chain` VALUES +(55428,0,55428,1,0), +(55480,55428,55428,2,0), +(55500,55480,55428,3,0), +(55501,55500,55428,4,0), +(55502,55501,55428,5,0), +(55503,55502,55428,6,0); + +/* Toughness (Mining) */ +DELETE FROM `spell_chain` WHERE `spell_id` IN (53120,53121,53122,53123,53124,53040); +INSERT INTO `spell_chain` VALUES +(53120,0,53120,1,0), +(53121,53120,53120,2,0), +(53122,53121,53120,3,0), +(53123,53122,53120,4,0), +(53124,53123,53120,5,0), +(53040,53124,53120,6,0); + +/* Master of Anatomy (Skinning) */ +DELETE FROM `spell_chain` WHERE `spell_id` IN (53125,53662,53663,53664,53665,53666); +INSERT INTO `spell_chain` VALUES +(53125,0,53125,1,0), +(53662,53125,53125,2,0), +(53663,53662,53125,3,0), +(53664,53663,53125,4,0), +(53665,53664,53125,5,0), +(53666,53665,53125,6,0); diff --git a/sql/updates/Makefile.am b/sql/updates/Makefile.am index 6cc9c3c4a..95331912b 100644 --- a/sql/updates/Makefile.am +++ b/sql/updates/Makefile.am @@ -109,6 +109,7 @@ pkgdata_DATA = \ 6976_02_characters_character_db_version.sql \ 7002_01_mangos_spell_chain.sql \ 7015_01_mangos_item_template.sql \ + 7024_01_mangos_spell_chain.sql \ README ## Additional files to include when running 'make dist' @@ -198,4 +199,5 @@ EXTRA_DIST = \ 6976_02_characters_character_db_version.sql \ 7002_01_mangos_spell_chain.sql \ 7015_01_mangos_item_template.sql \ + 7024_01_mangos_spell_chain.sql \ README diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 7e0b625b5..d1b84f35e 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 "7023" + #define REVISION_NR "7024" #endif // __REVISION_NR_H__ From d65458b0de821e2d22923581af7b9dca2c2ec554 Mon Sep 17 00:00:00 2001 From: DiSlord Date: Mon, 5 Jan 2009 01:44:27 +0300 Subject: [PATCH 082/145] [7025] Restore work/add new spell post effects Signed-off-by: DiSlord --- src/game/Spell.cpp | 72 +++++++++++++++++++++++++++++++++++++-- src/game/SpellEffects.cpp | 19 ----------- src/game/Unit.cpp | 4 +-- src/shared/revision_nr.h | 2 +- 4 files changed, 73 insertions(+), 24 deletions(-) diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp index e164eee93..afdaf7bfb 100644 --- a/src/game/Spell.cpp +++ b/src/game/Spell.cpp @@ -2670,6 +2670,68 @@ void Spell::finish(bool ok) ((Player*)m_caster)->ClearComboPoints(); } + // Post effects apply on spell targets in some spells + if(!m_UniqueTargetInfo.empty()) + { + uint32 spellId = 0; + switch(m_spellInfo->SpellFamilyName) + { + case SPELLFAMILY_GENERIC: + { + if (m_spellInfo->Mechanic == MECHANIC_BANDAGE) // Bandages + spellId = 11196; // Recently Bandaged + else if(m_spellInfo->SpellIconID == 1662 && m_spellInfo->AttributesEx & 0x20) // Blood Fury (Racial) + spellId = 23230; // Blood Fury - Healing Reduction + break; + } + case SPELLFAMILY_MAGE: + { + if (m_spellInfo->SpellFamilyFlags&0x0000008000000000LL) // Ice Block + spellId = 41425; // Hypothermia + break; + } + case SPELLFAMILY_PRIEST: + { + if (m_spellInfo->Mechanic == MECHANIC_SHIELD && + m_spellInfo->SpellIconID == 566) // Power Word: Shield + spellId = 6788; // Weakened Soul + break; + } + case SPELLFAMILY_PALADIN: + { + if (m_spellInfo->SpellFamilyFlags&0x0000000000400080LL) // Divine Shield, Divine Protection or Hand of Protection + spellId = 25771; // Forbearance + break; + } + case SPELLFAMILY_SHAMAN: + { + if (m_spellInfo->Id == 2825) // Bloodlust + spellId = 57724; // Sated + else if (m_spellInfo->Id == 32182) // Heroism + spellId = 57723; // Exhaustion + break; + } + default: + break; + } + if (spellId) + { + for(std::list::iterator ihit= m_UniqueTargetInfo.begin();ihit != m_UniqueTargetInfo.end();++ihit) + { + Unit* unit = m_caster->GetGUID()==ihit->targetGUID ? m_caster : ObjectAccessor::GetUnit(*m_caster, ihit->targetGUID); + if (unit) + { +// TODO: fix me use cast spell (now post spell can immune by this spell) +// m_caster->CastSpell(unit, spellId, true, m_CastItem); + SpellEntry const *AdditionalSpellInfo = sSpellStore.LookupEntry(spellId); + if (!AdditionalSpellInfo) + continue; + Aura* AdditionalAura = CreateAura(AdditionalSpellInfo, 0, &m_currentBasePoints[0], unit, m_caster, m_CastItem); + unit->AddAura(AdditionalAura); + } + } + } + } // call triggered spell only at successful cast (after clear combo points -> for add some if need) if(!m_TriggerSpells.empty()) TriggerSpell(); @@ -3817,7 +3879,7 @@ uint8 Spell::CanCast(bool strict) } } - if(!m_triggeredByAuraSpell) + if(!m_IsTriggeredSpell) if(uint8 castResult = CheckRange(strict)) return castResult; @@ -3826,7 +3888,7 @@ uint8 Spell::CanCast(bool strict) return castResult; } - if(!m_triggeredByAuraSpell) // triggered spell not affected by stun/etc + if(!m_IsTriggeredSpell) // triggered spell not affected by stun/etc if(uint8 castResult = CheckCasterAuras()) return castResult; @@ -5248,6 +5310,12 @@ bool Spell::CheckTarget( Unit* target, uint32 eff ) return false; } + // Check Aura spell req (need for AoE spells) + if(m_spellInfo->targetAuraSpell && !target->HasAura(m_spellInfo->targetAuraSpell)) + return false; + if (m_spellInfo->excludeTargetAuraSpell && target->HasAura(m_spellInfo->excludeTargetAuraSpell)) + return false; + // Check targets for not_selectable unit flag and remove // A player can cast spells on his pet (or other controlled unit) though in any state if (target != m_caster && target->GetCharmerOrOwnerGUID() != m_caster->GetGUID()) diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp index d05099fec..3afc739a9 100644 --- a/src/game/SpellEffects.cpp +++ b/src/game/SpellEffects.cpp @@ -2195,25 +2195,6 @@ void Spell::EffectApplyAura(uint32 i) if(!Aur) return; - // TODO Make a way so it works for every related spell! - if(unitTarget->GetTypeId()==TYPEID_PLAYER) // Negative buff should only be applied on players - { - uint32 spellId = 0; - if (m_spellInfo->Mechanic == MECHANIC_BANDAGE) // Bandages - spellId = 11196; // Recently Bandaged - else if( (m_spellInfo->AttributesEx & 0x20) && (m_spellInfo->AttributesEx2 & 0x20000) ) - spellId = 23230; // Blood Fury - Healing Reduction - - SpellEntry const *AdditionalSpellInfo = sSpellStore.LookupEntry(spellId); - if (AdditionalSpellInfo) - { - // applied at target by target - Aura* AdditionalAura = CreateAura(AdditionalSpellInfo, 0, &m_currentBasePoints[0], unitTarget,unitTarget, 0); - unitTarget->AddAura(AdditionalAura); - sLog.outDebug("Spell: Additional Aura is: %u", AdditionalSpellInfo->EffectApplyAuraName[0]); - } - } - // Prayer of Mending (jump animation), we need formal caster instead original for correct animation if( m_spellInfo->SpellFamilyName == SPELLFAMILY_PRIEST && (m_spellInfo->SpellFamilyFlags & 0x00002000000000LL)) m_caster->CastSpell(unitTarget, 41637, true, NULL, Aur, m_originalCasterGUID); diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index d14ce7dd5..e48bead91 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -2390,7 +2390,7 @@ SpellMissInfo Unit::SpellHitResult(Unit *pVictim, SpellEntry const *spell, bool if (pVictim->GetTypeId()==TYPEID_UNIT && ((Creature*)pVictim)->IsInEvadeMode()) return SPELL_MISS_EVADE; - // Check for immune (use charges) + // Check for immune if (pVictim->IsImmunedToSpell(spell)) return SPELL_MISS_IMMUNE; @@ -2399,7 +2399,7 @@ SpellMissInfo Unit::SpellHitResult(Unit *pVictim, SpellEntry const *spell, bool if (IsPositiveSpell(spell->Id)) return SPELL_MISS_NONE; - // Check for immune (use charges) + // Check for immune if (pVictim->IsImmunedToDamage(GetSpellSchoolMask(spell))) return SPELL_MISS_IMMUNE; diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index d1b84f35e..8997fd5a2 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 "7024" + #define REVISION_NR "7025" #endif // __REVISION_NR_H__ From 5332b4496dbffb11945ae42fe0c497ac3e5a7d41 Mon Sep 17 00:00:00 2001 From: GriffonHeart Date: Mon, 5 Jan 2009 01:58:06 +0300 Subject: [PATCH 083/145] [7026] Current arena season id and state send and setting in mangosd.conf. Also classes and DB data for new batlegrounds/arena. Signed-off-by: VladimirMangos --- sql/mangos.sql | 7 +- .../7026_01_mangos_battleground_template.sql | 7 ++ sql/updates/Makefile.am | 2 + src/game/BattleGround.h | 7 +- src/game/BattleGroundDS.cpp | 63 +++++++++++++++++ src/game/BattleGroundDS.h | 47 +++++++++++++ src/game/BattleGroundMgr.cpp | 30 +++++++++ src/game/BattleGroundMgr.h | 2 +- src/game/BattleGroundRV.cpp | 63 +++++++++++++++++ src/game/BattleGroundRV.h | 47 +++++++++++++ src/game/BattleGroundSA.cpp | 67 +++++++++++++++++++ src/game/BattleGroundSA.h | 52 ++++++++++++++ src/game/Makefile.am | 6 ++ src/game/Player.cpp | 33 ++++++--- src/game/World.cpp | 2 + src/game/World.h | 2 + src/mangosd/mangosd.conf.dist.in | 2 + src/shared/revision_nr.h | 2 +- win/VC71/game.vcproj | 18 +++++ win/VC80/game.vcproj | 24 +++++++ win/VC90/game.vcproj | 24 +++++++ 21 files changed, 490 insertions(+), 17 deletions(-) create mode 100644 sql/updates/7026_01_mangos_battleground_template.sql create mode 100644 src/game/BattleGroundDS.cpp create mode 100644 src/game/BattleGroundDS.h create mode 100644 src/game/BattleGroundRV.cpp create mode 100644 src/game/BattleGroundRV.h create mode 100644 src/game/BattleGroundSA.cpp create mode 100644 src/game/BattleGroundSA.h diff --git a/sql/mangos.sql b/sql/mangos.sql index e4b58241d..f947dc103 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_7024_01_mangos_spell_chain` bit(1) default NULL + `required_7026_01_mangos_battleground_template` bit(1) default NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Used DB version notes'; -- @@ -160,7 +160,10 @@ INSERT INTO `battleground_template` VALUES (5,0,2,10,70,939,0,940,3.14159), (6,0,2,10,70,0,0,0,0), (7,0,0,0,0,1103,3.40156,1104,0.263892), -(8,0,2,10,70,1258,0,1259,3.14159); +(8,0,2,10,70,1258,0,1259,3.14159), +(9,0,0,0,0,1367,0,1368,0), +(10,5,5,10,80,1362,0,1363,0), +(11,5,5,10,80,1364,0,1365,0); /*!40000 ALTER TABLE `battleground_template` ENABLE KEYS */; UNLOCK TABLES; diff --git a/sql/updates/7026_01_mangos_battleground_template.sql b/sql/updates/7026_01_mangos_battleground_template.sql new file mode 100644 index 000000000..9da034c3e --- /dev/null +++ b/sql/updates/7026_01_mangos_battleground_template.sql @@ -0,0 +1,7 @@ +ALTER TABLE db_version CHANGE COLUMN required_7024_01_mangos_spell_chain required_7026_01_mangos_battleground_template bit; + +DELETE FROM battleground_template WHERE id IN (9,10,11); +INSERT INTO battleground_template VALUES +(9,0,0,0,0,1367,0,1368,0), +(10,5,5,10,80,1362,0,1363,0), +(11,5,5,10,80,1364,0,1365,0); diff --git a/sql/updates/Makefile.am b/sql/updates/Makefile.am index 95331912b..d6f02220d 100644 --- a/sql/updates/Makefile.am +++ b/sql/updates/Makefile.am @@ -110,6 +110,7 @@ pkgdata_DATA = \ 7002_01_mangos_spell_chain.sql \ 7015_01_mangos_item_template.sql \ 7024_01_mangos_spell_chain.sql \ + 7026_01_mangos_battleground_template.sql \ README ## Additional files to include when running 'make dist' @@ -200,4 +201,5 @@ EXTRA_DIST = \ 7002_01_mangos_spell_chain.sql \ 7015_01_mangos_item_template.sql \ 7024_01_mangos_spell_chain.sql \ + 7026_01_mangos_battleground_template.sql \ README diff --git a/src/game/BattleGround.h b/src/game/BattleGround.h index 7debbfa68..6727c1a97 100644 --- a/src/game/BattleGround.h +++ b/src/game/BattleGround.h @@ -151,9 +151,10 @@ enum BattleGroundQueueTypeId BATTLEGROUND_QUEUE_WS = 2, BATTLEGROUND_QUEUE_AB = 3, BATTLEGROUND_QUEUE_EY = 4, - BATTLEGROUND_QUEUE_2v2 = 5, - BATTLEGROUND_QUEUE_3v3 = 6, - BATTLEGROUND_QUEUE_5v5 = 7, + BATTLEGROUND_QUEUE_SA = 5, + BATTLEGROUND_QUEUE_2v2 = 6, + BATTLEGROUND_QUEUE_3v3 = 7, + BATTLEGROUND_QUEUE_5v5 = 8, }; enum ScoreType diff --git a/src/game/BattleGroundDS.cpp b/src/game/BattleGroundDS.cpp new file mode 100644 index 000000000..276c0c84c --- /dev/null +++ b/src/game/BattleGroundDS.cpp @@ -0,0 +1,63 @@ +/* + * Copyright (C) 2005-2009 MaNGOS + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "Player.h" +#include "BattleGround.h" +#include "BattleGroundDS.h" + +BattleGroundDS::BattleGroundDS() +{ + +} + +BattleGroundDS::~BattleGroundDS() +{ + +} + +void BattleGroundDS::Update(time_t diff) +{ + BattleGround::Update(diff); +} + +void BattleGroundDS::AddPlayer(Player *plr) +{ + BattleGround::AddPlayer(plr); + //create score and add it to map, default values are set in constructor + BattleGroundDSScore* sc = new BattleGroundDSScore; + + m_PlayerScores[plr->GetGUID()] = sc; +} + +void BattleGroundDS::RemovePlayer(Player * /*plr*/, uint64 /*guid*/) +{ +} + +void BattleGroundDS::HandleKillPlayer(Player* player, Player* killer) +{ + BattleGround::HandleKillPlayer(player, killer); +} + +void BattleGroundDS::HandleAreaTrigger(Player * /*Source*/, uint32 /*Trigger*/) +{ +} + +bool BattleGroundDS::SetupBattleGround() +{ + return true; +} diff --git a/src/game/BattleGroundDS.h b/src/game/BattleGroundDS.h new file mode 100644 index 000000000..afcb8f092 --- /dev/null +++ b/src/game/BattleGroundDS.h @@ -0,0 +1,47 @@ +/* + * Copyright (C) 2005-2009 MaNGOS + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ +#ifndef __BATTLEGROUNDDS_H +#define __BATTLEGROUNDDS_H + +class BattleGround; + +class BattleGroundDSScore : public BattleGroundScore +{ + public: + BattleGroundDSScore() {}; + virtual ~BattleGroundDSScore() {}; + //TODO fix me +}; + +class BattleGroundDS : public BattleGround +{ + friend class BattleGroundMgr; + + public: + BattleGroundDS(); + ~BattleGroundDS(); + void Update(time_t diff); + + /* inherited from BattlegroundClass */ + virtual void AddPlayer(Player *plr); + void RemovePlayer(Player *plr, uint64 guid); + void HandleAreaTrigger(Player *Source, uint32 Trigger); + bool SetupBattleGround(); + void HandleKillPlayer(Player* player, Player *killer); +}; +#endif diff --git a/src/game/BattleGroundMgr.cpp b/src/game/BattleGroundMgr.cpp index fc6266eb2..fe97ecca3 100644 --- a/src/game/BattleGroundMgr.cpp +++ b/src/game/BattleGroundMgr.cpp @@ -27,6 +27,9 @@ #include "BattleGroundBE.h" #include "BattleGroundAA.h" #include "BattleGroundRL.h" +#include "BattleGroundSA.h" +#include "BattleGroundDS.h" +#include "BattleGroundRV.h" #include "SharedDefines.h" #include "Policies/SingletonImp.h" #include "MapManager.h" @@ -1193,6 +1196,15 @@ void BattleGroundMgr::BuildBattleGroundStatusPacket(WorldPacket *data, BattleGro case BATTLEGROUND_RL: *data << uint8(8); break; + case BATTLEGROUND_SA: + *data << uint8(9); + break; + case BATTLEGROUND_DS: + *data << uint8(10); + break; + case BATTLEGROUND_RV: + *data << uint8(11); + break; default: // unknown *data << uint8(0); break; @@ -1469,6 +1481,15 @@ BattleGround * BattleGroundMgr::CreateNewBattleGround(uint32 bgTypeId) case BATTLEGROUND_RL: bg = new BattleGroundRL(*(BattleGroundRL*)bg_template); break; + case BATTLEGROUND_SA: + bg = new BattleGroundSA(*(BattleGroundSA*)bg_template); + break; + case BATTLEGROUND_DS: + bg = new BattleGroundDS(*(BattleGroundDS*)bg_template); + break; + case BATTLEGROUND_RV: + bg = new BattleGroundRV(*(BattleGroundRV*)bg_template); + break; default: //bg = new BattleGround; return 0; @@ -1515,6 +1536,9 @@ uint32 BattleGroundMgr::CreateBattleGround(uint32 bgTypeId, uint32 MinPlayersPer case BATTLEGROUND_AA: bg = new BattleGroundAA; break; case BATTLEGROUND_EY: bg = new BattleGroundEY; break; case BATTLEGROUND_RL: bg = new BattleGroundRL; break; + case BATTLEGROUND_SA: bg = new BattleGroundSA; break; + case BATTLEGROUND_DS: bg = new BattleGroundDS; break; + case BATTLEGROUND_RV: bg = new BattleGroundRV; break; default:bg = new BattleGround; break; // placeholder for non implemented BG } @@ -1835,10 +1859,14 @@ uint32 BattleGroundMgr::BGQueueTypeId(uint32 bgTypeId, uint8 arenaType) const return BATTLEGROUND_QUEUE_AV; case BATTLEGROUND_EY: return BATTLEGROUND_QUEUE_EY; + case BATTLEGROUND_SA: + return BATTLEGROUND_QUEUE_SA; case BATTLEGROUND_AA: case BATTLEGROUND_NA: case BATTLEGROUND_RL: case BATTLEGROUND_BE: + case BATTLEGROUND_DS: + case BATTLEGROUND_RV: switch(arenaType) { case ARENA_TYPE_2v2: @@ -1867,6 +1895,8 @@ uint32 BattleGroundMgr::BGTemplateId(uint32 bgQueueTypeId) const return BATTLEGROUND_AV; case BATTLEGROUND_QUEUE_EY: return BATTLEGROUND_EY; + case BATTLEGROUND_QUEUE_SA: + return BATTLEGROUND_SA; case BATTLEGROUND_QUEUE_2v2: case BATTLEGROUND_QUEUE_3v3: case BATTLEGROUND_QUEUE_5v5: diff --git a/src/game/BattleGroundMgr.h b/src/game/BattleGroundMgr.h index 386df8efa..ad11436fc 100644 --- a/src/game/BattleGroundMgr.h +++ b/src/game/BattleGroundMgr.h @@ -34,7 +34,7 @@ typedef std::deque BGFreeSlotQueueType; #define MAX_BATTLEGROUND_TYPES 12 // each BG type will be in array -#define MAX_BATTLEGROUND_QUEUE_TYPES 8 +#define MAX_BATTLEGROUND_QUEUE_TYPES 9 #define BATTLEGROUND_ARENA_POINT_DISTRIBUTION_DAY 86400 // seconds in a day diff --git a/src/game/BattleGroundRV.cpp b/src/game/BattleGroundRV.cpp new file mode 100644 index 000000000..20c7d11f8 --- /dev/null +++ b/src/game/BattleGroundRV.cpp @@ -0,0 +1,63 @@ +/* + * Copyright (C) 2005-2009 MaNGOS + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "Player.h" +#include "BattleGround.h" +#include "BattleGroundRV.h" + +BattleGroundRV::BattleGroundRV() +{ + +} + +BattleGroundRV::~BattleGroundRV() +{ + +} + +void BattleGroundRV::Update(time_t diff) +{ + BattleGround::Update(diff); +} + +void BattleGroundRV::AddPlayer(Player *plr) +{ + BattleGround::AddPlayer(plr); + //create score and add it to map, default values are set in constructor + BattleGroundRVScore* sc = new BattleGroundRVScore; + + m_PlayerScores[plr->GetGUID()] = sc; +} + +void BattleGroundRV::RemovePlayer(Player * /*plr*/, uint64 /*guid*/) +{ +} + +void BattleGroundRV::HandleKillPlayer(Player* player, Player* killer) +{ + BattleGround::HandleKillPlayer(player, killer); +} + +void BattleGroundRV::HandleAreaTrigger(Player * /*Source*/, uint32 /*Trigger*/) +{ +} + +bool BattleGroundRV::SetupBattleGround() +{ + return true; +} diff --git a/src/game/BattleGroundRV.h b/src/game/BattleGroundRV.h new file mode 100644 index 000000000..9f515e35b --- /dev/null +++ b/src/game/BattleGroundRV.h @@ -0,0 +1,47 @@ +/* + * Copyright (C) 2005-2009 MaNGOS + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ +#ifndef __BATTLEGROUNDRV_H +#define __BATTLEGROUNDRV_H + +class BattleGround; + +class BattleGroundRVScore : public BattleGroundScore +{ + public: + BattleGroundRVScore() {}; + virtual ~BattleGroundRVScore() {}; + //TODO fix me +}; + +class BattleGroundRV : public BattleGround +{ + friend class BattleGroundMgr; + + public: + BattleGroundRV(); + ~BattleGroundRV(); + void Update(time_t diff); + + /* inherited from BattlegroundClass */ + virtual void AddPlayer(Player *plr); + void RemovePlayer(Player *plr, uint64 guid); + void HandleAreaTrigger(Player *Source, uint32 Trigger); + bool SetupBattleGround(); + void HandleKillPlayer(Player* player, Player *killer); +}; +#endif diff --git a/src/game/BattleGroundSA.cpp b/src/game/BattleGroundSA.cpp new file mode 100644 index 000000000..d7bc422ca --- /dev/null +++ b/src/game/BattleGroundSA.cpp @@ -0,0 +1,67 @@ +/* + * Copyright (C) 2005-2009 MaNGOS + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "BattleGround.h" +#include "BattleGroundSA.h" + +BattleGroundSA::BattleGroundSA() +{ + +} + +BattleGroundSA::~BattleGroundSA() +{ + +} + +void BattleGroundSA::Update(time_t diff) +{ + BattleGround::Update(diff); +} + +void BattleGroundSA::AddPlayer(Player *plr) +{ + BattleGround::AddPlayer(plr); + //create score and add it to map, default values are set in constructor + BattleGroundSAScore* sc = new BattleGroundSAScore; + + m_PlayerScores[plr->GetGUID()] = sc; +} + +void BattleGroundSA::RemovePlayer(Player* /*plr*/,uint64 /*guid*/) +{ + +} + +void BattleGroundSA::HandleAreaTrigger(Player *Source, uint32 Trigger) +{ + // this is wrong way to implement these things. On official it done by gameobject spell cast. + if(GetStatus() != STATUS_IN_PROGRESS) + return; +} + +void BattleGroundSA::UpdatePlayerScore(Player* Source, uint32 type, uint32 value) +{ + + std::map::iterator itr = m_PlayerScores.find(Source->GetGUID()); + + if(itr == m_PlayerScores.end()) // player not found... + return; + + BattleGround::UpdatePlayerScore(Source,type,value); +} diff --git a/src/game/BattleGroundSA.h b/src/game/BattleGroundSA.h new file mode 100644 index 000000000..6727c7a1f --- /dev/null +++ b/src/game/BattleGroundSA.h @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2005-2009 MaNGOS + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef __BATTLEGROUNDSA_H +#define __BATTLEGROUNDSA_H + +class BattleGround; + +class BattleGroundSAScore : public BattleGroundScore +{ + public: + BattleGroundSAScore() {}; + virtual ~BattleGroundSAScore() {}; +}; + +class BattleGroundSA : public BattleGround +{ + friend class BattleGroundMgr; + + public: + BattleGroundSA(); + ~BattleGroundSA(); + void Update(time_t diff); + + /* inherited from BattlegroundClass */ + virtual void AddPlayer(Player *plr); + + void RemovePlayer(Player *plr,uint64 guid); + void HandleAreaTrigger(Player *Source, uint32 Trigger); + //bool SetupBattleGround(); + + /* Scorekeeping */ + void UpdatePlayerScore(Player *Source, uint32 type, uint32 value); + + private: +}; +#endif diff --git a/src/game/Makefile.am b/src/game/Makefile.am index 8d35a4916..d3d2e7839 100644 --- a/src/game/Makefile.am +++ b/src/game/Makefile.am @@ -49,18 +49,24 @@ libmangosgame_a_SOURCES = \ BattleGroundAB.cpp \ BattleGroundAV.cpp \ BattleGroundBE.cpp \ + BattleGroundDS.cpp \ BattleGroundEY.cpp \ BattleGroundNA.cpp \ BattleGroundRL.cpp \ + BattleGroundRV.cpp \ + BattleGroundSA.cpp \ BattleGroundWS.cpp \ BattleGround.h \ BattleGroundAA.h \ BattleGroundAB.h \ BattleGroundAV.h \ BattleGroundBE.h \ + BattleGroundDS.h \ BattleGroundEY.h \ BattleGroundNA.h \ BattleGroundRL.h \ + BattleGroundRV.h \ + BattleGroundSA.h \ BattleGroundWS.h \ BattleGroundHandler.cpp \ BattleGroundMgr.cpp \ diff --git a/src/game/Player.cpp b/src/game/Player.cpp index 9c9a5cc0b..5ee6ba1b0 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -7513,37 +7513,46 @@ void Player::SendInitWorldStates() case 1537: case 2257: case 2918: - NumberOfFields = 6; + NumberOfFields = 8; + break; + case 139: + NumberOfFields = 41; + break; + case 1377: + NumberOfFields = 15; break; case 2597: - NumberOfFields = 81; + NumberOfFields = 83; break; case 3277: - NumberOfFields = 14; + NumberOfFields = 16; break; case 3358: case 3820: - NumberOfFields = 38; + NumberOfFields = 40; break; case 3483: - NumberOfFields = 22; + NumberOfFields = 27; + break; + case 3518: + NumberOfFields = 39; break; case 3519: - NumberOfFields = 36; + NumberOfFields = 38; break; case 3521: - NumberOfFields = 35; + NumberOfFields = 37; break; case 3698: case 3702: case 3968: - NumberOfFields = 9; + NumberOfFields = 11; break; case 3703: - NumberOfFields = 9; + NumberOfFields = 11; break; default: - NumberOfFields = 10; + NumberOfFields = 12; break; } @@ -7558,6 +7567,10 @@ void Player::SendInitWorldStates() data << uint32(0x8d5) << uint32(0x0); // 4 data << uint32(0x8d4) << uint32(0x0); // 5 data << uint32(0x8d3) << uint32(0x0); // 6 + // 7 1 - Arena season in progress, 0 - end of season + data << uint32(0xC77) << uint32(sWorld.getConfig(CONFIG_ARENA_SEASON_IN_PROGRESS)); + // 8 Arena season id + data << uint32(0xF3D) << uint32(sWorld.getConfig(CONFIG_ARENA_SEASON_ID)); if(mapid == 530) // Outland { data << uint32(0x9bf) << uint32(0x0); // 7 diff --git a/src/game/World.cpp b/src/game/World.cpp index e1f9a1b42..55a001072 100644 --- a/src/game/World.cpp +++ b/src/game/World.cpp @@ -762,6 +762,8 @@ void World::LoadConfigSettings(bool reload) m_configs[CONFIG_BATTLEGROUND_QUEUE_ANNOUNCER_ENABLE] = sConfig.GetBoolDefault("Battleground.QueueAnnouncer.Enable", false); m_configs[CONFIG_BATTLEGROUND_QUEUE_ANNOUNCER_PLAYERONLY] = sConfig.GetBoolDefault("Battleground.QueueAnnouncer.PlayerOnly", false); m_configs[CONFIG_ARENA_QUEUE_ANNOUNCER_ENABLE] = sConfig.GetBoolDefault("Arena.QueueAnnouncer.Enable", false); + m_configs[CONFIG_ARENA_SEASON_ID] = sConfig.GetIntDefault ("Arena.ArenaSeason.ID", 1); + m_configs[CONFIG_ARENA_SEASON_IN_PROGRESS] = sConfig.GetBoolDefault("Arena.ArenaSeason.InProgress", true); m_configs[CONFIG_CAST_UNSTUCK] = sConfig.GetBoolDefault("CastUnstuck", true); m_configs[CONFIG_INSTANCE_RESET_TIME_HOUR] = sConfig.GetIntDefault("Instance.ResetTimeHour", 4); diff --git a/src/game/World.h b/src/game/World.h index 7243a6a72..95445d276 100644 --- a/src/game/World.h +++ b/src/game/World.h @@ -185,6 +185,8 @@ enum WorldConfigs CONFIG_ARENA_AUTO_DISTRIBUTE_POINTS, CONFIG_ARENA_AUTO_DISTRIBUTE_INTERVAL_DAYS, CONFIG_ARENA_QUEUE_ANNOUNCER_ENABLE, + CONFIG_ARENA_SEASON_ID, + CONFIG_ARENA_SEASON_IN_PROGRESS, CONFIG_BATTLEGROUND_PREMATURE_FINISH_TIMER, CONFIG_SKILL_MILLING, CONFIG_VALUE_COUNT diff --git a/src/mangosd/mangosd.conf.dist.in b/src/mangosd/mangosd.conf.dist.in index c63ef9d4c..16e56b06d 100644 --- a/src/mangosd/mangosd.conf.dist.in +++ b/src/mangosd/mangosd.conf.dist.in @@ -1139,6 +1139,8 @@ Arena.MaxRatingDifference = 0 Arena.RatingDiscardTimer = 60000 Arena.AutoDistributePoints = 0 Arena.AutoDistributeInterval = 7 +Arena.ArenaSeason.ID = 1 +Arena.ArenaSeason.InProgress = 1 ################################################################################################################### # diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 8997fd5a2..eea659c9b 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 "7025" + #define REVISION_NR "7026" #endif // __REVISION_NR_H__ diff --git a/win/VC71/game.vcproj b/win/VC71/game.vcproj index b6827360d..78764d30f 100644 --- a/win/VC71/game.vcproj +++ b/win/VC71/game.vcproj @@ -185,6 +185,12 @@ + + + + @@ -212,6 +218,18 @@ + + + + + + + + diff --git a/win/VC80/game.vcproj b/win/VC80/game.vcproj index 723262a65..0102369f0 100644 --- a/win/VC80/game.vcproj +++ b/win/VC80/game.vcproj @@ -418,6 +418,14 @@ RelativePath="..\..\src\game\BattleGroundBE.h" > + + + + @@ -454,6 +462,22 @@ RelativePath="..\..\src\game\BattleGroundRL.h" > + + + + + + + + diff --git a/win/VC90/game.vcproj b/win/VC90/game.vcproj index 5bf136772..37cf9c487 100644 --- a/win/VC90/game.vcproj +++ b/win/VC90/game.vcproj @@ -420,6 +420,14 @@ RelativePath="..\..\src\game\BattleGroundBE.h" > + + + + @@ -456,6 +464,22 @@ RelativePath="..\..\src\game\BattleGroundRL.h" > + + + + + + + + From b64211c937107eab2541401ea01d802df610b80f Mon Sep 17 00:00:00 2001 From: VladimirMangos Date: Mon, 5 Jan 2009 02:27:24 +0300 Subject: [PATCH 084/145] [7027] Add descriptions to new options. --- src/mangosd/mangosd.conf.dist.in | 7 +++++++ src/shared/revision_nr.h | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/mangosd/mangosd.conf.dist.in b/src/mangosd/mangosd.conf.dist.in index 16e56b06d..d357baed8 100644 --- a/src/mangosd/mangosd.conf.dist.in +++ b/src/mangosd/mangosd.conf.dist.in @@ -1133,6 +1133,13 @@ Death.CorpseReclaimDelay.PvE = 1 # in days # Default: 7 (weekly) # +# ArenaSeason.ID: current area season id show in client +# Default: 1 +# +# ArenaSeason.InProgress: current area season state +# Default: 1 (active) +# 0 (finished) +# ################################################################################################################### Arena.MaxRatingDifference = 0 diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index eea659c9b..93817c610 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 "7026" + #define REVISION_NR "7027" #endif // __REVISION_NR_H__ From 791c54dd0b2e1bc020a8822cc4f5d060b53cdb0a Mon Sep 17 00:00:00 2001 From: DiSlord Date: Mon, 5 Jan 2009 02:43:30 +0300 Subject: [PATCH 085/145] [7028] Code fix on client change Remove not need code Fix some SPELL_AURA_OVERRIDE_CLASS_SCRIPTS aura use Signed-off-by: DiSlord --- src/game/Unit.cpp | 25 +++++-------------------- src/shared/revision_nr.h | 2 +- 2 files changed, 6 insertions(+), 21 deletions(-) diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index e48bead91..d34fe056f 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -1665,7 +1665,7 @@ void Unit::CalcAbsorbResist(Unit *pVictim,SpellSchoolMask schoolMask, DamageEffe { if(Unit* caster = (*i)->GetCaster()) { - AuraList const& vOverRideCS = caster->GetAurasByType(SPELL_AURA_OVERRIDE_CLASS_SCRIPTS); + AuraList const& vOverRideCS = caster->GetAurasByType(SPELL_AURA_DUMMY); for(AuraList::const_iterator k = vOverRideCS.begin(); k != vOverRideCS.end(); ++k) { switch((*k)->GetModifier()->m_miscvalue) @@ -1673,8 +1673,6 @@ void Unit::CalcAbsorbResist(Unit *pVictim,SpellSchoolMask schoolMask, DamageEffe case 5065: // Rank 1 case 5064: // Rank 2 case 5063: // Rank 3 - case 5062: // Rank 4 - case 5061: // Rank 5 { if(RemainingDamage >= (*i)->GetModifier()->m_amount) reflectDamage = (*i)->GetModifier()->m_amount * (*k)->GetModifier()->m_amount/100; @@ -6866,7 +6864,7 @@ uint32 Unit::SpellDamageBonus(Unit *pVictim, SpellEntry const *spellProto, uint3 { //Molten Fury case 4920: case 4919: - if(pVictim->HasAuraState(AURA_STATE_HEALTHLESS_20_PERCENT)) + if(pVictim->HasAuraState(AURA_STATE_HEALTHLESS_35_PERCENT)) TakenTotalMod *= (100.0f+(*i)->GetModifier()->m_amount)/100.0f; break; } } @@ -7253,11 +7251,9 @@ bool Unit::isSpellCrit(Unit *pVictim, SpellEntry const *spellProto, SpellSchoolM { switch((*i)->GetModifier()->m_miscvalue) { - case 849: crit_chance+= 10.0f; break; //Shatter Rank 1 - case 910: crit_chance+= 20.0f; break; //Shatter Rank 2 - case 911: crit_chance+= 30.0f; break; //Shatter Rank 3 - case 912: crit_chance+= 40.0f; break; //Shatter Rank 4 - case 913: crit_chance+= 50.0f; break; //Shatter Rank 5 + case 849: crit_chance+= 17.0f; break; //Shatter Rank 1 + case 910: crit_chance+= 34.0f; break; //Shatter Rank 2 + case 911: crit_chance+= 50.0f; break; //Shatter Rank 3 } } } @@ -9849,17 +9845,6 @@ void Unit::ProcDamageAndSpellFor( bool isVictim, Unit * pTarget, uint32 procFlag if (triggeredByAura->m_procCharges == 0) removedSpells.push_back(triggeredByAura->GetId()); break; - case SPELL_AURA_MELEE_ATTACK_POWER_ATTACKER_BONUS: - case SPELL_AURA_RANGED_ATTACK_POWER_ATTACKER_BONUS: - // Hunter's Mark (1-4 Rangs) - if (spellInfo->SpellFamilyName == SPELLFAMILY_HUNTER && (spellInfo->SpellFamilyFlags&0x0000000000000400LL)) - { - uint32 basevalue = triggeredByAura->GetBasePoints(); - auraModifier->m_amount += basevalue/10; - if (auraModifier->m_amount > basevalue*4) - auraModifier->m_amount = basevalue*4; - } - break; case SPELL_AURA_MOD_CASTING_SPEED: // Skip melee hits or instant cast spells if (procSpell == NULL || GetSpellCastTime(procSpell) == 0) diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 93817c610..213a86ca7 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 "7027" + #define REVISION_NR "7028" #endif // __REVISION_NR_H__ From daf24ce90cb66b136c14f64adf2f878562f30e44 Mon Sep 17 00:00:00 2001 From: DiSlord Date: Mon, 5 Jan 2009 04:08:40 +0300 Subject: [PATCH 086/145] [7029] Some work vs aura charges Move to protected: need use SetAuraCharges, GetAuraCharges, DropAuraCharge Now m_procCharges == 0 if infinite charges, and > 0 for limit Remove not need UpdateAuraCharges() Signed-off-by: DiSlord --- src/game/Pet.cpp | 2 +- src/game/Player.cpp | 6 +++--- src/game/SpellAuras.cpp | 26 +++++++------------------- src/game/SpellAuras.h | 26 +++++++++++++++++--------- src/game/Unit.cpp | 30 ++++++++++++++---------------- src/shared/revision_nr.h | 2 +- 6 files changed, 43 insertions(+), 49 deletions(-) diff --git a/src/game/Pet.cpp b/src/game/Pet.cpp index 2f6ba2e64..fed9aa3de 100644 --- a/src/game/Pet.cpp +++ b/src/game/Pet.cpp @@ -1221,7 +1221,7 @@ void Pet::_SaveAuras() { CharacterDatabase.PExecute("INSERT INTO pet_aura (guid,caster_guid,spell,effect_index,stackcount,amount,maxduration,remaintime,remaincharges) " "VALUES ('%u', '" I64FMTD "', '%u', '%u', '%u', '%d', '%d', '%d', '%d')", - m_charmInfo->GetPetNumber(), itr2->second->GetCasterGUID(),(uint32)itr2->second->GetId(), (uint32)itr2->second->GetEffIndex(), stackCounter, itr2->second->GetModifier()->m_amount,int(itr2->second->GetAuraMaxDuration()),int(itr2->second->GetAuraDuration()),int(itr2->second->m_procCharges)); + m_charmInfo->GetPetNumber(), itr2->second->GetCasterGUID(),(uint32)itr2->second->GetId(), (uint32)itr2->second->GetEffIndex(), stackCounter, itr2->second->GetModifier()->m_amount,int(itr2->second->GetAuraMaxDuration()),int(itr2->second->GetAuraDuration()),int(itr2->second->GetAuraCharges())); } } } diff --git a/src/game/Player.cpp b/src/game/Player.cpp index 5ee6ba1b0..b6ca879ae 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -14421,7 +14421,7 @@ void Player::_LoadAuras(QueryResult *result, uint32 timediff) remaincharges = spellproto->procCharges; } else - remaincharges = -1; + remaincharges = 0; //do not load single target auras (unless they were cast by the player) if (caster_guid != GetGUID() && IsSingleTargetSpell(spellproto)) @@ -15512,7 +15512,7 @@ void Player::_SaveAuras() { CharacterDatabase.PExecute("INSERT INTO character_aura (guid,caster_guid,spell,effect_index,stackcount,amount,maxduration,remaintime,remaincharges) " "VALUES ('%u', '" I64FMTD "' ,'%u', '%u', '%u', '%d', '%d', '%d', '%d')", - GetGUIDLow(), itr2->second->GetCasterGUID(), (uint32)itr2->second->GetId(), (uint32)itr2->second->GetEffIndex(), stackCounter, itr2->second->GetModifier()->m_amount,int(itr2->second->GetAuraMaxDuration()),int(itr2->second->GetAuraDuration()),int(itr2->second->m_procCharges)); + GetGUIDLow(), itr2->second->GetCasterGUID(), (uint32)itr2->second->GetId(), (uint32)itr2->second->GetEffIndex(), stackCounter, itr2->second->GetModifier()->m_amount,int(itr2->second->GetAuraMaxDuration()),int(itr2->second->GetAuraDuration()),int(itr2->second->GetAuraCharges())); } } } @@ -18097,7 +18097,7 @@ void Player::SendAurasForTarget(Unit *target) // level data << uint8(aura->GetAuraLevel()); // charges - data << uint8(aura->m_procCharges >= 0 ? aura->m_procCharges : 0 ); + data << uint8(aura->GetAuraCharges()); if(!(auraFlags & AFLAG_NOT_CASTER)) { diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp index 50ce528c5..aac4b3940 100644 --- a/src/game/SpellAuras.cpp +++ b/src/game/SpellAuras.cpp @@ -415,15 +415,9 @@ m_periodicTimer(0), m_PeriodicEventId(0), m_AuraDRGroup(DIMINISHING_NONE) m_isDeathPersist = IsDeathPersistentSpell(m_spellProto); - if(m_spellProto->procCharges) - { - m_procCharges = m_spellProto->procCharges; - - if(modOwner) - modOwner->ApplySpellMod(GetId(), SPELLMOD_CHARGES, m_procCharges); - } - else - m_procCharges = -1; + m_procCharges = m_spellProto->procCharges; + if(modOwner) + modOwner->ApplySpellMod(GetId(), SPELLMOD_CHARGES, m_procCharges); m_isRemovedOnShapeLost = (m_caster_guid==m_target->GetGUID() && m_spellProto->Stances && !(m_spellProto->AttributesEx2 & 0x80000) && !(m_spellProto->Attributes & 0x10000)); @@ -971,7 +965,6 @@ void Aura::_AddAura() SetAura(false); SetAuraFlags((1 << GetEffIndex()) | AFLAG_NOT_CASTER | ((GetAuraMaxDuration() > 0) ? AFLAG_DURATION : AFLAG_NONE) | (IsPositive() ? AFLAG_POSITIVE : AFLAG_NEGATIVE)); SetAuraLevel(caster ? caster->getLevel() : sWorld.getConfig(CONFIG_MAX_PLAYER_LEVEL)); - UpdateAuraCharges(); SendAuraUpdate(false); // update for out of range group members @@ -1124,7 +1117,7 @@ void Aura::SendAuraUpdate(bool remove) uint8 auraFlags = GetAuraFlags(); data << uint8(auraFlags); data << uint8(GetAuraLevel()); - data << uint8(m_procCharges >= 0 ? m_procCharges : 0); + data << uint8(GetAuraCharges()); if(!(auraFlags & AFLAG_NOT_CASTER)) { @@ -1208,7 +1201,7 @@ void Aura::HandleAddModifier(bool apply, bool Real) case 34754: // Clearcasting case 34936: // Backlash case 48108: // Hot Streak - m_procCharges = 1; + SetAuraCharges(1); break; } @@ -1236,11 +1229,7 @@ void Aura::HandleAddModifier(bool apply, bool Real) mod->mask = (uint64)ptr[0] | (uint64)ptr[1]<<32; mod->mask2= (uint64)ptr[2]; - - if (m_procCharges > 0) - mod->charges = m_procCharges; - else - mod->charges = 0; + mod->charges = m_procCharges; m_spellmod = mod; } @@ -4005,8 +3994,7 @@ void Aura::HandleAuraProcTriggerSpell(bool apply, bool Real) switch (GetId()) { case 28200: // Ascendance (Talisman of Ascendance trinket) - m_procCharges = 6; - UpdateAuraCharges(); + SetAuraCharges(6); break; default: break; } diff --git a/src/game/SpellAuras.h b/src/game/SpellAuras.h index 82ea9d147..0746f0b72 100644 --- a/src/game/SpellAuras.h +++ b/src/game/SpellAuras.h @@ -256,15 +256,24 @@ class MANGOS_DLL_SPEC Aura uint8 GetAuraLevel() const { return m_auraLevel; } void SetAuraLevel(uint8 level) { m_auraLevel = level; } uint8 GetAuraCharges() const { return m_procCharges; } - void SetAuraCharges(uint8 charges) { m_procCharges = charges; } + void SetAuraCharges(uint8 charges) + { + if (m_procCharges == charges) + return; + m_procCharges = charges; + SendAuraUpdate(false); + } + bool DropAuraCharge() // return true if last charge dropped + { + if (m_procCharges == 0) + return false; + m_procCharges--; + SendAuraUpdate(false); + return m_procCharges == 0; + } + void SetAura(bool remove) { m_target->SetVisibleAura(m_auraSlot, remove ? 0 : GetId()); } void SendAuraUpdate(bool remove); - void UpdateAuraCharges() - { - // only aura in slot with charges and without stack limitation - if (m_auraSlot < MAX_AURAS && m_procCharges >= 1 && GetSpellProto()->StackAmount==0) - SendAuraUpdate(false); - } bool IsPositive() { return m_positive; } void SetNegative() { m_positive = false; } @@ -292,8 +301,6 @@ class MANGOS_DLL_SPEC Aura void SetUpdated(bool val) { m_updated = val; } void SetRemoveMode(AuraRemoveMode mode) { m_removeMode = mode; } - int32 m_procCharges; - virtual Unit* GetTriggerTarget() const { return m_target; } // add/remove SPELL_AURA_MOD_SHAPESHIFT (36) linked auras @@ -329,6 +336,7 @@ class MANGOS_DLL_SPEC Aura uint8 m_auraSlot; uint8 m_auraFlags; uint8 m_auraLevel; + int8 m_procCharges; bool m_positive:1; bool m_permanent:1; diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index d34fe056f..b39fa2007 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -4354,7 +4354,7 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, Aura* triggeredByAu case 33493: { // Cast finish spell at last charge - if (triggeredByAura->m_procCharges > 1) + if (triggeredByAura->GetAuraCharges() > 1) return false; target = this; @@ -4624,7 +4624,7 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, Aura* triggeredByAu case 11129: { //last charge and crit - if (triggeredByAura->m_procCharges <= 1 && (procEx & PROC_EX_CRITICAL_HIT) ) + if (triggeredByAura->GetAuraCharges() <= 1 && (procEx & PROC_EX_CRITICAL_HIT) ) { RemoveAurasDueToSpell(28682); //-> remove Combustion auras return true; // charge counting (will removed) @@ -9743,6 +9743,11 @@ void Unit::ProcDamageAndSpellFor( bool isVictim, Unit * pTarget, uint32 procFlag procTriggered.push_back( ProcTriggeredData(spellProcEvent, itr->second) ); } + + // Nothing found + if (procTriggered.empty()) + return; + // Handle effects proceed this time for(ProcTriggeredList::iterator i = procTriggered.begin(); i != procTriggered.end(); ++i) { @@ -9777,7 +9782,7 @@ void Unit::ProcDamageAndSpellFor( bool isVictim, Unit * pTarget, uint32 procFlag Modifier *auraModifier = triggeredByAura->GetModifier(); SpellEntry const *spellInfo = triggeredByAura->GetSpellProto(); uint32 effIndex = triggeredByAura->GetEffIndex(); - bool useCharges = triggeredByAura->m_procCharges > 0; + bool useCharges = triggeredByAura->GetAuraCharges() > 0; // For players set spell cooldown if need uint32 cooldown = 0; if (GetTypeId() == TYPEID_PLAYER && spellProcEvent && spellProcEvent->cooldown) @@ -9840,11 +9845,6 @@ void Unit::ProcDamageAndSpellFor( bool isVictim, Unit * pTarget, uint32 procFlag continue; break; } - case SPELL_AURA_MOD_STUN: - // Remove by default, but if charge exist drop it - if (triggeredByAura->m_procCharges == 0) - removedSpells.push_back(triggeredByAura->GetId()); - break; case SPELL_AURA_MOD_CASTING_SPEED: // Skip melee hits or instant cast spells if (procSpell == NULL || GetSpellCastTime(procSpell) == 0) @@ -9885,18 +9885,16 @@ void Unit::ProcDamageAndSpellFor( bool isVictim, Unit * pTarget, uint32 procFlag AuraMap::const_iterator upper = GetAuras().upper_bound(i->triggeredByAura_SpellPair); for(AuraMap::const_iterator itr = lower; itr!= upper; ++itr) { - if(itr->second == i->triggeredByAura) + // If last charge dropped add spell to remove list + if(itr->second == i->triggeredByAura && triggeredByAura->DropAuraCharge()) { - triggeredByAura->m_procCharges -=1; - triggeredByAura->UpdateAuraCharges(); - if (triggeredByAura->m_procCharges <= 0) - removedSpells.push_back(triggeredByAura->GetId()); + removedSpells.push_back(triggeredByAura->GetId()); break; } } } } - if (removedSpells.size()) + if (!removedSpells.empty()) { // Sort spells and remove dublicates removedSpells.sort(); @@ -10618,10 +10616,10 @@ bool Unit::HandleMeandingAuraProc( Aura* triggeredByAura ) uint64 caster_guid = triggeredByAura->GetCasterGUID(); // jumps - int32 jumps = triggeredByAura->m_procCharges-1; + int32 jumps = triggeredByAura->GetAuraCharges()-1; // current aura expire - triggeredByAura->m_procCharges = 1; // will removed at next charges decrease + triggeredByAura->SetAuraCharges(1); // will removed at next charges decrease // next target selection if(jumps > 0 && GetTypeId()==TYPEID_PLAYER && IS_PLAYER_GUID(caster_guid)) diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 213a86ca7..b58fa9e2c 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 "7028" + #define REVISION_NR "7029" #endif // __REVISION_NR_H__ From 63c9f1ba72c0c56911e3a89a3a5f88c80c16f35c Mon Sep 17 00:00:00 2001 From: DiSlord Date: Mon, 5 Jan 2009 04:48:10 +0300 Subject: [PATCH 087/145] [7030] Fix typos in mangos.sql Signed-off-by: DiSlord --- sql/mangos.sql | 4 ++-- src/shared/revision_nr.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/sql/mangos.sql b/sql/mangos.sql index f947dc103..bcc884698 100644 --- a/sql/mangos.sql +++ b/sql/mangos.sql @@ -13884,7 +13884,7 @@ INSERT INTO spell_chain VALUES (26797,12180,3908,5,0), (26798,12180,3908,5,0), (26801,12180,3908,5,0), -(51309,26790,3908,6,0); +(51309,26790,3908,6,0), /*------------------ --(203)Pet-Spider --(208)Pet-Wolf @@ -15780,7 +15780,7 @@ INSERT INTO spell_chain VALUES (61195,61194,61193,3,0), (61196,61195,61193,4,0), (61197,61196,61193,5,0), -(61198,61197,61193,6,0), +(61198,61197,61193,6,0); /*!40000 ALTER TABLE `spell_chain` ENABLE KEYS */; UNLOCK TABLES; diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index b58fa9e2c..80f970384 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 "7029" + #define REVISION_NR "7030" #endif // __REVISION_NR_H__ From 8ac2150b8803117094dc3745ba0f6633a88e2400 Mon Sep 17 00:00:00 2001 From: DiSlord Date: Mon, 5 Jan 2009 06:01:46 +0300 Subject: [PATCH 088/145] [7031] Implement some mage, paladin dummy trigers Signed-off-by: DiSlord --- sql/mangos.sql | 6 ++ .../7031_01_mangos_spell_proc_event.sql | 23 ++++++++ sql/updates/Makefile.am | 2 + src/game/Unit.cpp | 55 +++++++++++++++++-- src/shared/revision_nr.h | 2 +- 5 files changed, 82 insertions(+), 6 deletions(-) create mode 100644 sql/updates/7031_01_mangos_spell_proc_event.sql diff --git a/sql/mangos.sql b/sql/mangos.sql index bcc884698..5ff84226b 100644 --- a/sql/mangos.sql +++ b/sql/mangos.sql @@ -16532,6 +16532,9 @@ INSERT INTO `spell_proc_event` VALUES (43750, 0x00000000, 11, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), (43819, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), (44404, 0x00000000, 3, 0x0000900020000021, 0x00000000, 0x00000000, 0, 0, 0), +(44445, 0x00000000, 3, 0x0000100000000013, 0x00000000, 0x00000000, 0, 0, 0), +(44446, 0x00000000, 3, 0x0000100000000013, 0x00000000, 0x00000000, 0, 0, 0), +(44448, 0x00000000, 3, 0x0000100000000013, 0x00000000, 0x00000000, 0, 0, 0), (44835, 0x00000000, 7, 0x0000008000000000, 0x00000010, 0x00000000, 0, 0, 0), (45054, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 15), (45057, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 30), @@ -16651,6 +16654,9 @@ INSERT INTO `spell_proc_event` VALUES (54490, 0x00000000, 0, 0x0000900020000021, 0x00000000, 0x00000000, 0, 0, 0), (54738, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), (54841, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), +(54936, 0x00000000, 10, 0x0000000040000000, 0x00000000, 0x00000000, 0, 0, 0), +(54937, 0x00000000, 10, 0x0000000080000000, 0x00000000, 0x00000000, 0, 0, 0), +(54939, 0x00000000, 10, 0x0000000000008000, 0x00000000, 0x00000000, 0, 0, 0), (55620, 0x00000000, 15, 0x0800000000000001, 0x00000000, 0x00000000, 0, 0, 0), (55623, 0x00000000, 15, 0x0800000000000001, 0x00000000, 0x00000000, 0, 0, 0), (55666, 0x00000000, 15, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), diff --git a/sql/updates/7031_01_mangos_spell_proc_event.sql b/sql/updates/7031_01_mangos_spell_proc_event.sql new file mode 100644 index 000000000..2bd182a3a --- /dev/null +++ b/sql/updates/7031_01_mangos_spell_proc_event.sql @@ -0,0 +1,23 @@ +-- (44445) Hot Streak (Rank 1) +DELETE FROM `spell_proc_event` WHERE `entry` IN (44445); +INSERT INTO `spell_proc_event` VALUES (44445, 0x00, 3, 0x0000100000000013, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (44446) Hot Streak (Rank 2) +DELETE FROM `spell_proc_event` WHERE `entry` IN (44446); +INSERT INTO `spell_proc_event` VALUES (44446, 0x00, 3, 0x0000100000000013, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (44448) Hot Streak (Rank 3) +DELETE FROM `spell_proc_event` WHERE `entry` IN (44448); +INSERT INTO `spell_proc_event` VALUES (44448, 0x00, 3, 0x0000100000000013, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (54939) Glyph of Divinity () +DELETE FROM `spell_proc_event` WHERE `entry` IN (54939); +INSERT INTO `spell_proc_event` VALUES (54939, 0x00, 10, 0x0000000000008000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (54936) Glyph of Flash of Light () +DELETE FROM `spell_proc_event` WHERE `entry` IN (54936); +INSERT INTO `spell_proc_event` VALUES (54936, 0x00, 10, 0x0000000040000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (54937) Glyph of Holy Light () +DELETE FROM `spell_proc_event` WHERE `entry` IN (54937); +INSERT INTO `spell_proc_event` VALUES (54937, 0x00, 10, 0x0000000080000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); \ No newline at end of file diff --git a/sql/updates/Makefile.am b/sql/updates/Makefile.am index d6f02220d..43f6743b9 100644 --- a/sql/updates/Makefile.am +++ b/sql/updates/Makefile.am @@ -111,6 +111,7 @@ pkgdata_DATA = \ 7015_01_mangos_item_template.sql \ 7024_01_mangos_spell_chain.sql \ 7026_01_mangos_battleground_template.sql \ + 7031_01_mangos_spell_proc_event.sql \ README ## Additional files to include when running 'make dist' @@ -202,4 +203,5 @@ EXTRA_DIST = \ 7015_01_mangos_item_template.sql \ 7024_01_mangos_spell_chain.sql \ 7026_01_mangos_battleground_template.sql \ + 7031_01_mangos_spell_proc_event.sql \ README diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index b39fa2007..309ecf9ca 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -4586,6 +4586,29 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, Aura* triggeredByAu triggered_spell_id = 29077; break; } + // Hot Streak + if (dummySpell->SpellIconID == 2999) + { + if (triggeredByAura->GetEffIndex()!=0) + return true; + Aura *counter = GetAura(triggeredByAura->GetId(), 1); + if (!counter) + return true; + + // Count spell criticals in a row in second aura + Modifier *mod = counter->GetModifier(); + if (procEx & PROC_EX_CRITICAL_HIT) + { + mod->m_amount *=2; + if (mod->m_amount < 100) // not enough + return true; + // Crititcal counted -> roll chance + if (roll_chance_i(triggeredByAura->GetModifier()->m_amount)) + CastSpell(this, 48108, true, castItem, triggeredByAura); + } + mod->m_amount = 25; + return true; + } // Incanter's Regalia set (add trigger chance to Mana Shield) if (dummySpell->SpellFamilyFlags & 0x0000000000008000LL) { @@ -4941,11 +4964,6 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, Aura* triggeredByAu if(!procSpell) return false; - // only rogue's finishing moves (maybe need additional checks) - if( procSpell->SpellFamilyName!=SPELLFAMILY_ROGUE || - (procSpell->SpellFamilyFlags & SPELLFAMILYFLAG_ROGUE__FINISHING_MOVE) == 0) - return false; - // energy cost save basepoints0 = procSpell->manaCost * triggeredByAura->GetModifier()->m_amount/100; if(basepoints0 <= 0) @@ -5127,6 +5145,33 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, Aura* triggeredByAu break; } + // Glyph of Divinity + case 54939: + { + // Lookup base amount mana restore + for (int i=0; i<3;i++) + if (procSpell->Effect[i] == SPELL_EFFECT_ENERGIZE) + { + int32 mana = procSpell->EffectBasePoints[i]; + CastCustomSpell(this, 54986, 0, &mana, 0, true, castItem, triggeredByAura); + break; + } + return true; + } + // Glyph of Flash of Light + case 54936: + { + triggered_spell_id = 54957; + basepoints0 = triggeredByAura->GetModifier()->m_amount*damage/100; + break; + } + // Glyph of Holy Light + case 54937: + { + triggered_spell_id = 54968; + basepoints0 = triggeredByAura->GetModifier()->m_amount*damage/100; + break; + } } break; } diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 80f970384..6b46afe76 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 "7030" + #define REVISION_NR "7031" #endif // __REVISION_NR_H__ From 5bf32dd62a12399489b8e80e197843eb1c75610a Mon Sep 17 00:00:00 2001 From: zhenya Date: Mon, 5 Jan 2009 14:32:55 +0300 Subject: [PATCH 089/145] [7032] Remove unused field from realm structure in realmd. Signed-off-by: VladimirMangos --- src/realmd/RealmList.cpp | 1 - src/realmd/RealmList.h | 1 - src/shared/revision_nr.h | 2 +- 3 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/realmd/RealmList.cpp b/src/realmd/RealmList.cpp index 080ddbb39..a5352d0d9 100644 --- a/src/realmd/RealmList.cpp +++ b/src/realmd/RealmList.cpp @@ -48,7 +48,6 @@ void RealmList::UpdateRealm( uint32 ID, const std::string& name, const std::stri Realm& realm = m_realms[name]; realm.m_ID = ID; - realm.name = name; realm.icon = icon; realm.color = color; realm.timezone = timezone; diff --git a/src/realmd/RealmList.h b/src/realmd/RealmList.h index d77e0b927..40e3956e8 100644 --- a/src/realmd/RealmList.h +++ b/src/realmd/RealmList.h @@ -28,7 +28,6 @@ /// Storage object for a realm struct Realm { - std::string name; std::string address; uint8 icon; uint8 color; diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 6b46afe76..1357394b5 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 "7031" + #define REVISION_NR "7032" #endif // __REVISION_NR_H__ From 675a90b267334f8926971c1b05571b98a6a893fe Mon Sep 17 00:00:00 2001 From: DiSlord Date: Mon, 5 Jan 2009 16:55:30 +0300 Subject: [PATCH 090/145] [7033] Add some dummy triggers DK - 49015 and ranks, 51459 and ranks, 48979 and ranks Druid - 48516 and ranks, 48496 and ranks Shaman - 55440 glyph Also fix send AttackStateUpdate on block Add some spell_proc_event data Fix sql update for 7031 Signed-off-by: DiSlord --- sql/mangos.sql | 23 +++++- .../7031_01_mangos_spell_proc_event.sql | 2 + .../7033_01_mangos_spell_proc_event.sql | 78 ++++++++++++++++++ sql/updates/Makefile.am | 2 + src/game/Unit.cpp | 81 ++++++++++++++++++- src/shared/revision_nr.h | 2 +- 6 files changed, 184 insertions(+), 4 deletions(-) create mode 100644 sql/updates/7033_01_mangos_spell_proc_event.sql diff --git a/sql/mangos.sql b/sql/mangos.sql index 5ff84226b..695de74c8 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_7026_01_mangos_battleground_template` bit(1) default NULL + `required_7033_01_mangos_spell_proc_event` bit(1) default NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Used DB version notes'; -- @@ -16707,7 +16707,26 @@ INSERT INTO `spell_proc_event` VALUES (60572, 0x00000000, 11, 0x0000000090100000, 0x00000000, 0x00000000, 0, 0, 0), (60617, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000020, 0, 0, 0), (60826, 0x00000000, 15, 0x0000000001400000, 0x00000000, 0x00000000, 0, 0, 0), -(61324, 0x00000000, 10, 0x0002000000000000, 0x00000000, 0x00000000, 0, 0, 0); +(61324, 0x00000000, 10, 0x0002000000000000, 0x00000000, 0x00000000, 0, 0, 0), +(48516, 0x00000000, 7, 0x0000000000000005, 0x00000000, 0x00000002, 0, 0, 30), +(48521, 0x00000000, 7, 0x0000000000000005, 0x00000000, 0x00000002, 0, 0, 30), +(48525, 0x00000000, 7, 0x0000000000000005, 0x00000000, 0x00000002, 0, 0, 30), +(48496, 0x00000000, 7, 0x0200000200000060, 0x00000000, 0x00000002, 0, 0, 0), +(48499, 0x00000000, 7, 0x0200000200000060, 0x00000000, 0x00000002, 0, 0, 0), +(48500, 0x00000000, 7, 0x0200000200000060, 0x00000000, 0x00000002, 0, 0, 0), +(53228, 0x00000000, 9, 0x0000000000000020, 0x00000000, 0x00000000, 0, 0, 0), +(53232, 0x00000000, 9, 0x0000000000000020, 0x00000000, 0x00000000, 0, 0, 0), +(55440, 0x00000000, 11, 0x0000000000000040, 0x00000000, 0x00000000, 0, 0, 0), +(52795, 0x00000000, 6, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), +(52797, 0x00000000, 6, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), +(52798, 0x00000000, 6, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), +(52799, 0x00000000, 6, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), +(52800, 0x00000000, 6, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), +(55677, 0x00000000, 6, 0x0000000100000000, 0x00000000, 0x00000000, 0, 0, 0), +(55680, 0x00000000, 6, 0x0000000000000200, 0x00000000, 0x00000000, 0, 0, 0), +(47572, 0x00000000, 6, 0x0000000000010000, 0x00000000, 0x00000000, 0, 0, 0), +(48159, 0x00000020, 6, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), +(48160, 0x00000020, 6, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0); /*!40000 ALTER TABLE `spell_proc_event` ENABLE KEYS */; UNLOCK TABLES; diff --git a/sql/updates/7031_01_mangos_spell_proc_event.sql b/sql/updates/7031_01_mangos_spell_proc_event.sql index 2bd182a3a..d10f099fb 100644 --- a/sql/updates/7031_01_mangos_spell_proc_event.sql +++ b/sql/updates/7031_01_mangos_spell_proc_event.sql @@ -1,3 +1,5 @@ +ALTER TABLE db_version CHANGE COLUMN required_7026_01_mangos_battleground_template required_7031_01_mangos_spell_proc_event bit; + -- (44445) Hot Streak (Rank 1) DELETE FROM `spell_proc_event` WHERE `entry` IN (44445); INSERT INTO `spell_proc_event` VALUES (44445, 0x00, 3, 0x0000100000000013, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); diff --git a/sql/updates/7033_01_mangos_spell_proc_event.sql b/sql/updates/7033_01_mangos_spell_proc_event.sql new file mode 100644 index 000000000..b95cbf93f --- /dev/null +++ b/sql/updates/7033_01_mangos_spell_proc_event.sql @@ -0,0 +1,78 @@ +ALTER TABLE db_version CHANGE COLUMN required_7031_01_mangos_spell_proc_event required_7033_01_mangos_spell_proc_event bit; + +-- (48516) Eclipse (Rank 1) +DELETE FROM `spell_proc_event` WHERE `entry` IN (48516); +INSERT INTO `spell_proc_event` VALUES (48516, 0x00, 7, 0x0000000000000005, 0x00000000, 0x00000002, 0.000000, 0.000000, 30); + +-- (48521) Eclipse (Rank 2) +DELETE FROM `spell_proc_event` WHERE `entry` IN (48521); +INSERT INTO `spell_proc_event` VALUES (48521, 0x00, 7, 0x0000000000000005, 0x00000000, 0x00000002, 0.000000, 0.000000, 30); + +-- (48525) Eclipse (Rank 3) +DELETE FROM `spell_proc_event` WHERE `entry` IN (48525); +INSERT INTO `spell_proc_event` VALUES (48525, 0x00, 7, 0x0000000000000005, 0x00000000, 0x00000002, 0.000000, 0.000000, 30); + +-- (48496) Living Seed (Rank 1) +DELETE FROM `spell_proc_event` WHERE `entry` IN (48496); +INSERT INTO `spell_proc_event` VALUES (48496, 0x00, 7, 0x0200000200000060, 0x00000000, 0x00000002, 0.000000, 0.000000, 0); + +-- (48499) Living Seed (Rank 2) +DELETE FROM `spell_proc_event` WHERE `entry` IN (48499); +INSERT INTO `spell_proc_event` VALUES (48499, 0x00, 7, 0x0200000200000060, 0x00000000, 0x00000002, 0.000000, 0.000000, 0); + +-- (48500) Living Seed (Rank 3) +DELETE FROM `spell_proc_event` WHERE `entry` IN (48500); +INSERT INTO `spell_proc_event` VALUES (48500, 0x00, 7, 0x0200000200000060, 0x00000000, 0x00000002, 0.000000, 0.000000, 0); + +-- (53228) Rapid Recuperation (Rank 1) +DELETE FROM `spell_proc_event` WHERE `entry` IN (53228); +INSERT INTO `spell_proc_event` VALUES (53228, 0x00, 9, 0x0000000000000020, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (53232) Rapid Recuperation (Rank 2) +DELETE FROM `spell_proc_event` WHERE `entry` IN (53232); +INSERT INTO `spell_proc_event` VALUES (53232, 0x00, 9, 0x0000000000000020, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (55440) Glyph of Healing Wave () +DELETE FROM `spell_proc_event` WHERE `entry` IN (55440); +INSERT INTO `spell_proc_event` VALUES (55440, 0x00, 11, 0x0000000000000040, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (52795) Borrowed Time (Rank 1) +DELETE FROM `spell_proc_event` WHERE `entry` IN (52795); +INSERT INTO `spell_proc_event` VALUES (52795, 0x00, 6, 0x0000000000000001, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (52797) Borrowed Time (Rank 2) +DELETE FROM `spell_proc_event` WHERE `entry` IN (52797); +INSERT INTO `spell_proc_event` VALUES (52797, 0x00, 6, 0x0000000000000001, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (52798) Borrowed Time (Rank 3) +DELETE FROM `spell_proc_event` WHERE `entry` IN (52798); +INSERT INTO `spell_proc_event` VALUES (52798, 0x00, 6, 0x0000000000000001, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (52799) Borrowed Time (Rank 4) +DELETE FROM `spell_proc_event` WHERE `entry` IN (52799); +INSERT INTO `spell_proc_event` VALUES (52799, 0x00, 6, 0x0000000000000001, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (52800) Borrowed Time (Rank 5) +DELETE FROM `spell_proc_event` WHERE `entry` IN (52800); +INSERT INTO `spell_proc_event` VALUES (52800, 0x00, 6, 0x0000000000000001, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (55677) Glyph of Dispel Magic () +DELETE FROM `spell_proc_event` WHERE `entry` IN (55677); +INSERT INTO `spell_proc_event` VALUES (55677, 0x00, 6, 0x0000000100000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (55680) Glyph of Prayer of Healing () +DELETE FROM `spell_proc_event` WHERE `entry` IN (55680); +INSERT INTO `spell_proc_event` VALUES (55680, 0x00, 6, 0x0000000000000200, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (47572) Psychic Horror (Rank 2) +DELETE FROM `spell_proc_event` WHERE `entry` IN (47572); +INSERT INTO `spell_proc_event` VALUES (47572, 0x00, 6, 0x0000000000010000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (48159) Vampiric Touch (Rank 4) +DELETE FROM `spell_proc_event` WHERE `entry` IN (48159); +INSERT INTO `spell_proc_event` VALUES (48159, 0x20, 6, 0x0000000000000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (48160) Vampiric Touch (Rank 5) +DELETE FROM `spell_proc_event` WHERE `entry` IN (48160); +INSERT INTO `spell_proc_event` VALUES (48160, 0x20, 6, 0x0000000000000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + diff --git a/sql/updates/Makefile.am b/sql/updates/Makefile.am index 43f6743b9..71cee61e7 100644 --- a/sql/updates/Makefile.am +++ b/sql/updates/Makefile.am @@ -112,6 +112,7 @@ pkgdata_DATA = \ 7024_01_mangos_spell_chain.sql \ 7026_01_mangos_battleground_template.sql \ 7031_01_mangos_spell_proc_event.sql \ + 7033_01_mangos_spell_proc_event.sql \ README ## Additional files to include when running 'make dist' @@ -204,4 +205,5 @@ EXTRA_DIST = \ 7024_01_mangos_spell_chain.sql \ 7026_01_mangos_battleground_template.sql \ 7031_01_mangos_spell_proc_event.sql \ + 7033_01_mangos_spell_proc_event.sql \ README diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index 309ecf9ca..438e27224 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -4044,7 +4044,7 @@ void Unit::SendAttackStateUpdate(CalcDamageInfo *damageInfo) data << (uint32)damageInfo->resist; // Resist } - data << (uint32)damageInfo->TargetState; + data << (uint8)damageInfo->TargetState; data << (uint32)0; data << (uint32)0; @@ -4554,6 +4554,14 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, Aura* triggeredByAu } return false; } + // Living Seed + case 48504: + { + triggered_spell_id = 48503; + basepoints0 = triggeredByAura->GetModifier()->m_amount; + target = this; + break; + } } break; } @@ -4941,6 +4949,39 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, Aura* triggeredByAu break; } } + // Eclipse + if (dummySpell->SpellIconID == 2856) + { + if (!procSpell) + return false; + // Only 0 aura can proc + if (triggeredByAura->GetEffIndex()!=0) + return true; + // Wrath crit + if (procSpell->SpellFamilyFlags & 0x0000000000000001LL) + { + if (!roll_chance_i(60)) + return false; + triggered_spell_id = 48518; + target = this; + break; + } + // Starfire crit + if (procSpell->SpellFamilyFlags & 0x0000000000000004LL) + { + triggered_spell_id = 48517; + target = this; + break; + } + return false; + } + // Living Seed + else if (dummySpell->SpellIconID == 2860) + { + triggered_spell_id = 48504; + basepoints0 = triggeredByAura->GetModifier()->m_amount * damage / 100; + break; + } break; } case SPELLFAMILY_ROGUE: @@ -5390,6 +5431,44 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, Aura* triggeredByAu return true; } + // Glyph of Healing Wave + case 55440: + { + // Not proc from self heals + if (this==pVictim) + return false; + basepoints0 = triggeredByAura->GetModifier()->m_amount * damage / 100; + target = this; + triggered_spell_id = 55533; + break; + } + break; + } + case SPELLFAMILY_DEATHKNIGHT: + { + // Vendetta + if (dummySpell->SpellFamilyFlags & 0x0000000000010000LL) + { + basepoints0 = triggeredByAura->GetModifier()->m_amount * GetMaxHealth() / 100; + triggered_spell_id = 50181; + target = this; + break; + } + // Necrosis + else if (dummySpell->SpellIconID == 2709) + { + basepoints0 = triggeredByAura->GetModifier()->m_amount * damage / 100; + triggered_spell_id = 51460; + break; + } + // Butchery + else if (dummySpell->SpellIconID == 2664) + { + basepoints0 = triggeredByAura->GetModifier()->m_amount; + triggered_spell_id = 50163; + target = this; + break; + } break; } default: diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 1357394b5..73e0ef9ca 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 "7032" + #define REVISION_NR "7033" #endif // __REVISION_NR_H__ From b6efea176d0cf8e905ce2101d0b9a720dbd3bccd Mon Sep 17 00:00:00 2001 From: DiSlord Date: Tue, 6 Jan 2009 00:26:52 +0300 Subject: [PATCH 091/145] [7034] Add support 96 bit spell family mask to triggers Some fix/add data in table (about 100 records) Signed-off-by: DiSlord --- sql/mangos.sql | 1491 +++++++++-------- .../7034_01_mangos_spell_proc_event.sql | 798 +++++++++ sql/updates/Makefile.am | 2 + src/game/SpellMgr.cpp | 25 +- src/game/SpellMgr.h | 3 +- src/game/Unit.cpp | 9 + src/shared/revision_nr.h | 2 +- 7 files changed, 1607 insertions(+), 723 deletions(-) create mode 100644 sql/updates/7034_01_mangos_spell_proc_event.sql diff --git a/sql/mangos.sql b/sql/mangos.sql index 695de74c8..2a1545ae5 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_7033_01_mangos_spell_proc_event` bit(1) default NULL + `required_7034_01_mangos_spell_proc_event` bit(1) default NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Used DB version notes'; -- @@ -16005,7 +16005,9 @@ CREATE TABLE `spell_proc_event` ( `entry` smallint(5) unsigned NOT NULL default '0', `SchoolMask` tinyint(4) NOT NULL default '0', `SpellFamilyName` smallint(5) unsigned NOT NULL default '0', - `SpellFamilyMask` bigint(20) unsigned NOT NULL default '0', + `SpellFamilyMask0` int(10) unsigned NOT NULL default '0', + `SpellFamilyMask1` int(10) unsigned NOT NULL default '0', + `SpellFamilyMask2` int(10) unsigned NOT NULL default '0', `procFlags` int(10) unsigned NOT NULL default '0', `procEx` int(10) unsigned NOT NULL default '0', `ppmRate` float NOT NULL default '0', @@ -16021,712 +16023,785 @@ CREATE TABLE `spell_proc_event` ( LOCK TABLES `spell_proc_event` WRITE; /*!40000 ALTER TABLE `spell_proc_event` DISABLE KEYS */; INSERT INTO `spell_proc_event` VALUES -(324, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), -(325, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), -(905, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), -(945, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), -(974, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), -(1463, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000400, 0, 0, 0), -(3232, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(5952, 0x00000000, 8, 0x0000000100000001, 0x00000000, 0x00000000, 0, 0, 0), -(6346, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000100, 0, 0, 0), -(7383, 0x00000001, 0, 0x0000000000000000, 0x00000000, 0x00000100, 0, 0, 0), -(7434, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(8134, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), -(8178, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), -(8494, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000400, 0, 0, 0), -(8495, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000400, 0, 0, 0), -(9452, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 3, 0, 0), -(9782, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), -(9784, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), -(9799, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(10191, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000400, 0, 0, 0), -(10192, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000400, 0, 0, 0), -(10193, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000400, 0, 0, 0), -(10431, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), -(10432, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), -(11095, 0x00000000, 3, 0x0000000000000010, 0x00000000, 0x00000000, 0, 0, 0), -(11103, 0x00000004, 3, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), -(11119, 0x00000004, 3, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(11120, 0x00000004, 3, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(11129, 0x00000000, 3, 0x0000004000C00017, 0x00000000, 0x00000000, 0, 0, 0), -(11180, 0x00000010, 3, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), -(11185, 0x00000000, 3, 0x0000000000000080, 0x00050000, 0x00000000, 0, 0, 0), -(11255, 0x00000000, 3, 0x0000000000004000, 0x00000000, 0x00000000, 0, 0, 0), -(12169, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), -(12281, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 6), -(12289, 0x00000000, 4, 0x0000000000000002, 0x00000000, 0x00000000, 0, 0, 0), -(12298, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), -(12311, 0x00000000, 4, 0x0000000100000800, 0x00000000, 0x00000000, 0, 0, 0), -(12317, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(12319, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(12322, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 2, 0, 0), -(12357, 0x00000004, 3, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), -(12358, 0x00000004, 3, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), -(12487, 0x00000000, 3, 0x0000000000000080, 0x00050000, 0x00000000, 0, 0, 0), -(12488, 0x00000000, 3, 0x0000000000000080, 0x00050000, 0x00000000, 0, 0, 0), -(12598, 0x00000000, 3, 0x0000000000004000, 0x00000000, 0x00000000, 0, 0, 0), -(12668, 0x00000000, 4, 0x0000000000000002, 0x00000000, 0x00000000, 0, 0, 0), -(12724, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), -(12725, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), -(12726, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), -(12727, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), -(12797, 0x00000000, 4, 0x0000000000000400, 0x00000000, 0x00000000, 0, 0, 0), -(12799, 0x00000000, 4, 0x0000000000000400, 0x00000000, 0x00000000, 0, 0, 0), -(12812, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 6), -(12813, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 6), -(12814, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 6), -(12815, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 6), -(12834, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(12846, 0x00000004, 3, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(12847, 0x00000004, 3, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(12848, 0x00000004, 3, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(12849, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(12867, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(12872, 0x00000000, 3, 0x0000000000000010, 0x00000000, 0x00000000, 0, 0, 0), -(12873, 0x00000000, 3, 0x0000000000000010, 0x00000000, 0x00000000, 0, 0, 0), -(12958, 0x00000000, 4, 0x0000000100000800, 0x00000000, 0x00000000, 0, 0, 0), -(12966, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), -(12967, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), -(12968, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), -(12969, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), -(12970, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), -(12971, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(12972, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(12973, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(12974, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(12999, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 4, 0, 0), -(13000, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 6, 0, 0), -(13001, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 8, 0, 0), -(13002, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 10, 0, 0), -(13045, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(13046, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(13047, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(13048, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(13165, 0x00000000, 9, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), -(13754, 0x00000000, 8, 0x0000000000000010, 0x00000000, 0x00000000, 0, 0, 0), -(13867, 0x00000000, 8, 0x0000000000000010, 0x00000000, 0x00000000, 0, 0, 0), -(13983, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000018, 0, 0, 0), -(14070, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000018, 0, 0, 0), -(14071, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000018, 0, 0, 0), -(14156, 0x00000000, 8, 0x00000000003E0000, 0x00000000, 0x00000000, 0, 0, 0), -(14160, 0x00000000, 8, 0x00000000003E0000, 0x00000000, 0x00000000, 0, 0, 0), -(14161, 0x00000000, 8, 0x00000000003E0000, 0x00000000, 0x00000000, 0, 0, 0), -(14186, 0x00000000, 8, 0x0000000240800508, 0x00000000, 0x00000002, 0, 0, 0), -(14190, 0x00000000, 8, 0x0000000240800508, 0x00000000, 0x00000002, 0, 0, 0), -(14193, 0x00000000, 8, 0x0000000240800508, 0x00000000, 0x00000002, 0, 0, 0), -(14194, 0x00000000, 8, 0x0000000240800508, 0x00000000, 0x00000002, 0, 0, 0), -(14195, 0x00000000, 8, 0x0000000240800508, 0x00000000, 0x00000002, 0, 0, 0), -(14318, 0x00000000, 9, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), -(14319, 0x00000000, 9, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), -(14320, 0x00000000, 9, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), -(14321, 0x00000000, 9, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), -(14322, 0x00000000, 9, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), -(14531, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(14774, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(14892, 0x00000000, 6, 0x0000000410001E00, 0x00000000, 0x00000002, 0, 0, 0), -(15088, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(15128, 0x00000004, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), -(15268, 0x00000000, 6, 0x000000020608A000, 0x00000000, 0x00000000, 0, 0, 0), -(15277, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 6, 0, 0), -(15286, 0x00000020, 6, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), -(15323, 0x00000000, 6, 0x000000020608A000, 0x00000000, 0x00000000, 0, 0, 0), -(15324, 0x00000000, 6, 0x000000020608A000, 0x00000000, 0x00000000, 0, 0, 0), -(15325, 0x00000000, 6, 0x000000020608A000, 0x00000000, 0x00000000, 0, 0, 0), -(15326, 0x00000000, 6, 0x000000020608A000, 0x00000000, 0x00000000, 0, 0, 0), -(15337, 0x00000000, 6, 0x0000000200002000, 0x00000000, 0x00000002, 0, 0, 0), -(15338, 0x00000000, 6, 0x0000000200002000, 0x00000000, 0x00000002, 0, 0, 0), -(15346, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 6, 0, 0), -(15362, 0x00000000, 6, 0x0000000410001E00, 0x00000000, 0x00000002, 0, 0, 0), -(15363, 0x00000000, 6, 0x0000000410001E00, 0x00000000, 0x00000002, 0, 0, 0), -(15600, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 1, 0, 0), -(16164, 0x00000000, 11, 0x0000000090100003, 0x00000000, 0x00000002, 0, 0, 0), -(16176, 0x00000000, 11, 0x00000000000001C0, 0x00000000, 0x00000002, 0, 0, 0), -(16180, 0x00000000, 11, 0x00000000000000C0, 0x00000000, 0x00000002, 0, 0, 0), -(16196, 0x00000000, 11, 0x00000000000000C0, 0x00000000, 0x00000002, 0, 0, 0), -(16198, 0x00000000, 11, 0x00000000000000C0, 0x00000000, 0x00000002, 0, 0, 0), -(16235, 0x00000000, 11, 0x00000000000001C0, 0x00000000, 0x00000002, 0, 0, 0), -(16240, 0x00000000, 11, 0x00000000000001C0, 0x00000000, 0x00000002, 0, 0, 0), -(16256, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(16257, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), -(16277, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), -(16278, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), -(16279, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), -(16280, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), -(16281, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(16282, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(16283, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(16284, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(16487, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(16489, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(16492, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(16550, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(16620, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 30), -(16624, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), -(16850, 0x00000000, 7, 0x0000000000000004, 0x00000000, 0x00000000, 0, 0, 0), -(16864, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 2, 0, 0), -(16880, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(16923, 0x00000000, 7, 0x0000000000000004, 0x00000000, 0x00000000, 0, 0, 0), -(16924, 0x00000000, 7, 0x0000000000000004, 0x00000000, 0x00000000, 0, 0, 0), -(16952, 0x00000000, 7, 0x0000040000039000, 0x00000000, 0x00000002, 0, 0, 0), -(16954, 0x00000000, 7, 0x0000040000039000, 0x00000000, 0x00000002, 0, 0, 0), -(16958, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(16961, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(17106, 0x00000000, 7, 0x0000000000080000, 0x00000000, 0x00000000, 0, 0, 0), -(17107, 0x00000000, 7, 0x0000000000080000, 0x00000000, 0x00000000, 0, 0, 0), -(17108, 0x00000000, 7, 0x0000000000080000, 0x00000000, 0x00000000, 0, 0, 0), -(17364, 0x00000008, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), -(17495, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), -(17793, 0x00000000, 5, 0x0000000000000001, 0x00000000, 0x00000002, 0, 0, 0), -(17794, 0x00000020, 0, 0x0000000000000000, 0x00000000, 0x00000001, 0, 0, 0), -(17796, 0x00000000, 5, 0x0000000000000001, 0x00000000, 0x00000002, 0, 0, 0), -(17797, 0x00000020, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), -(17798, 0x00000020, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), -(17799, 0x00000020, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), -(17800, 0x00000020, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), -(17801, 0x00000000, 5, 0x0000000000000001, 0x00000000, 0x00000002, 0, 0, 0), -(17802, 0x00000000, 5, 0x0000000000000001, 0x00000000, 0x00000002, 0, 0, 0), -(17803, 0x00000000, 5, 0x0000000000000001, 0x00000000, 0x00000002, 0, 0, 0), -(18073, 0x00000000, 5, 0x0000008000000060, 0x00000000, 0x00000000, 0, 0, 0), -(18094, 0x00000000, 5, 0x000000000000000A, 0x00000000, 0x00000000, 0, 0, 0), -(18095, 0x00000000, 5, 0x000000000000000A, 0x00000000, 0x00000000, 0, 0, 0), -(18096, 0x00000000, 5, 0x0000008000000060, 0x00000000, 0x00000000, 0, 0, 0), -(18119, 0x00000000, 5, 0x000010C0000003E5, 0x00000000, 0x00000000, 0, 0, 0), -(18120, 0x00000000, 5, 0x000010C0000003E5, 0x00000000, 0x00000000, 0, 0, 0), -(18820, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), -(19184, 0x00000000, 9, 0x0000200000000014, 0x00000000, 0x00000000, 0, 0, 0), -(19228, 0x00000000, 0, 0x0000000000000040, 0x00000000, 0x00000000, 0, 0, 0), -(19232, 0x00000000, 9, 0x0000000000000040, 0x00000000, 0x00000000, 0, 0, 0), -(19233, 0x00000000, 9, 0x0000000000000040, 0x00000000, 0x00000000, 0, 0, 0), -(19387, 0x00000000, 9, 0x0000200000000014, 0x00000000, 0x00000000, 0, 0, 0), -(19388, 0x00000000, 9, 0x0000200000000014, 0x00000000, 0x00000000, 0, 0, 0), -(19572, 0x00000000, 9, 0x0000000000800000, 0x00004000, 0x00000000, 0, 0, 0), -(19573, 0x00000000, 9, 0x0000000000800000, 0x00004000, 0x00000000, 0, 0, 0), -(20049, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(20056, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(20057, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(20128, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), -(20131, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), -(20132, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), -(20164, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 5, 0, 0), -(20165, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 20, 0, 0), -(20166, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 20, 0, 0), -(20182, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), -(20210, 0x00000000, 10, 0x00000000C0200000, 0x00000000, 0x00000002, 0, 0, 0), -(20212, 0x00000000, 10, 0x00000000C0200000, 0x00000000, 0x00000002, 0, 0, 0), -(20213, 0x00000000, 10, 0x00000000C0200000, 0x00000000, 0x00000002, 0, 0, 0), -(20214, 0x00000000, 10, 0x00000000C0200000, 0x00000000, 0x00000002, 0, 0, 0), -(20215, 0x00000000, 10, 0x00000000C0200000, 0x00000000, 0x00000002, 0, 0, 0), -(20234, 0x00000000, 10, 0x0000000000008000, 0x00000000, 0x00000000, 0, 0, 0), -(20235, 0x00000000, 10, 0x0000000000008000, 0x00000000, 0x00000000, 0, 0, 0), -(20375, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 7, 0, 0), -(20500, 0x00000000, 4, 0x0000000010000000, 0x00000000, 0x00000000, 0, 0, 0), -(20501, 0x00000000, 4, 0x0000000010000000, 0x00000000, 0x00000000, 0, 0, 0), -(20705, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(20911, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000070, 0, 0, 0), -(20925, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), -(20927, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), -(20928, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), -(21185, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 10), -(21882, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(21890, 0x00000000, 4, 0x0000036C2A764EEF, 0x00000000, 0x00000000, 0, 0, 0), -(22007, 0x00000000, 3, 0x0000000000200021, 0x00000000, 0x00010000, 0, 0, 0), -(22618, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), -(22648, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(23547, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000020, 0, 0, 0), -(23548, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), -(23551, 0x00000000, 11, 0x00000000000000C0, 0x00000000, 0x00000000, 0, 0, 0), -(23552, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), -(23572, 0x00000000, 11, 0x00000000000000C0, 0x00000000, 0x00000000, 0, 0, 0), -(23578, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 2, 0, 0), -(23581, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 2, 0, 0), -(23602, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), -(23686, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 2, 0, 0), -(23688, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), -(23689, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 4, 0, 0), -(23695, 0x00000000, 4, 0x0000000000000002, 0x00000000, 0x00000000, 0, 0, 0), -(23721, 0x00000000, 9, 0x0000000000000800, 0x00000000, 0x00000000, 0, 0, 0), -(23920, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000800, 0, 0, 0), -(24353, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(24389, 0x00000000, 3, 0x0000004000C00017, 0x00000000, 0x00000000, 0, 0, 0), -(24398, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), -(24658, 0x00000000, 0, 0x0000000000000000, 0x00014110, 0x00000000, 0, 0, 0), -(24905, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 15, 0, 0), -(24932, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 6), -(25050, 0x00000004, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), -(25296, 0x00000000, 9, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), -(25469, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), -(25472, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), -(25669, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 1, 0, 0), -(25899, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000070, 0, 0, 0), -(25988, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(26016, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 2, 0, 0), -(26107, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000064, 0, 0, 0), -(26119, 0x00000000, 10, 0x0000000090100003, 0x00000000, 0x00010000, 0, 0, 0), -(26128, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000008, 0, 0, 0), -(26135, 0x00000000, 10, 0x0000000000800000, 0x00000000, 0x00010000, 0, 0, 0), -(26480, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 3, 0, 0), -(26605, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(27044, 0x00000000, 9, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), -(27131, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000400, 0, 0, 0), -(27179, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), -(27419, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 3, 0, 0), -(27498, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 3, 0, 0), -(27521, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), -(27656, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 3, 0, 0), -(27774, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), -(27787, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 3, 0, 0), -(27811, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(27815, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(27816, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(28592, 0x00000010, 3, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), -(28593, 0x00000010, 3, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), -(28716, 0x00000000, 7, 0x0000000000000010, 0x00048000, 0x00000000, 0, 0, 0), -(28719, 0x00000000, 7, 0x0000000000000020, 0x00000000, 0x00000002, 0, 0, 0), -(28744, 0x00000000, 7, 0x0000000000000040, 0x00044000, 0x00000000, 0, 0, 0), -(28752, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(28789, 0x00000000, 10, 0x00000000C0000000, 0x00000000, 0x00000000, 0, 0, 0), -(28802, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), -(28809, 0x00000000, 6, 0x0000000000001000, 0x00000000, 0x00000002, 0, 0, 0), -(28812, 0x00000000, 8, 0x0000000002000006, 0x00000000, 0x00000002, 0, 0, 0), -(28816, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 3, 0, 0), -(28823, 0x00000000, 11, 0x00000000000000C0, 0x00000000, 0x00000000, 0, 0, 0), -(28847, 0x00000000, 7, 0x0000000000000020, 0x00000000, 0x00000000, 0, 0, 0), -(28849, 0x00000000, 11, 0x0000000000000080, 0x00000000, 0x00000000, 0, 0, 0), -(29074, 0x00000014, 3, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(29075, 0x00000014, 3, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(29076, 0x00000014, 3, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(29150, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 3, 0, 0), -(29179, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(29180, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(29385, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 7, 0, 0), -(29441, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000008, 0, 0, 1), -(29444, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000008, 0, 0, 1), -(29455, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), -(29501, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 3, 0, 0), -(29593, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000070, 0, 0, 0), -(29594, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000070, 0, 0, 0), -(29624, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 3, 0, 0), -(29625, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 3, 0, 0), -(29626, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 3, 0, 0), -(29632, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 3, 0, 0), -(29633, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 3, 0, 0), -(29634, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 3, 0, 0), -(29635, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 3, 0, 0), -(29636, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 3, 0, 0), -(29637, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 3, 0, 0), -(29801, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(29834, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), -(29838, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), -(29977, 0x00000000, 3, 0x0000004000C00017, 0x00000000, 0x00000000, 0, 0, 0), -(30003, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000800, 0, 0, 0), -(30160, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(30293, 0x00000000, 5, 0x000000C000000381, 0x00000000, 0x00000000, 0, 0, 0), -(30295, 0x00000000, 5, 0x000000C000000381, 0x00000000, 0x00000000, 0, 0, 0), -(30296, 0x00000000, 5, 0x000000C000000381, 0x00000000, 0x00000000, 0, 0, 0), -(30299, 0x00000024, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), -(30301, 0x00000024, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), -(30302, 0x00000024, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), -(30675, 0x00000000, 11, 0x0000000000000003, 0x00000000, 0x00000000, 0, 0, 0), -(30678, 0x00000000, 11, 0x0000000000000003, 0x00000000, 0x00000000, 0, 0, 0), -(30679, 0x00000000, 11, 0x0000000000000003, 0x00000000, 0x00000000, 0, 0, 0), -(30680, 0x00000000, 11, 0x0000000000000003, 0x00000000, 0x00000000, 0, 0, 0), -(30681, 0x00000000, 11, 0x0000000000000003, 0x00000000, 0x00000000, 0, 0, 0), -(30701, 0x0000001C, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), -(30705, 0x0000001C, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), -(30802, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(30803, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(30804, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(30805, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(30806, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(30807, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(30808, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(30809, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(30810, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(30811, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(30823, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 10.5, 0, 0), -(30881, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 5), -(30883, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 5), -(30884, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 5), -(30885, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 5), -(30886, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 5), -(30937, 0x00000020, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), -(31124, 0x00000000, 8, 0x000000002000000E, 0x00000000, 0x00000000, 0, 0, 0), -(31126, 0x00000000, 8, 0x000000002000000E, 0x00000000, 0x00000000, 0, 0, 0), -(31244, 0x00000000, 8, 0x00000009003E0000, 0x00000000, 0x00000004, 0, 0, 0), -(31245, 0x00000000, 8, 0x00000009003E0000, 0x00000000, 0x00000004, 0, 0, 0), -(31394, 0x00000020, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), -(31569, 0x00000000, 3, 0x0000000000010000, 0x00000000, 0x00000000, 0, 0, 0), -(31570, 0x00000000, 3, 0x0000000000010000, 0x00000000, 0x00000000, 0, 0, 0), -(31785, 0x00000000, 0, 0x0000000000000000, 0x00008800, 0x00000000, 0, 0, 0), -(31794, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), -(31801, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 20, 0, 0), -(31833, 0x00000000, 10, 0x0000000080000000, 0x00000000, 0x00000000, 0, 0, 0), -(31835, 0x00000000, 10, 0x0000000080000000, 0x00000000, 0x00000000, 0, 0, 0), -(31836, 0x00000000, 10, 0x0000000080000000, 0x00000000, 0x00000000, 0, 0, 0), -(31904, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), -(32385, 0x00000000, 5, 0x0000001100000402, 0x00000000, 0x00000000, 0, 0, 0), -(32387, 0x00000000, 5, 0x0000001100000402, 0x00000000, 0x00000000, 0, 0, 0), -(32392, 0x00000000, 5, 0x0000001100000402, 0x00000000, 0x00000000, 0, 0, 0), -(32393, 0x00000000, 5, 0x0000001100000402, 0x00000000, 0x00000000, 0, 0, 0), -(32394, 0x00000000, 5, 0x0000001100000402, 0x00000000, 0x00000000, 0, 0, 0), -(32587, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), -(32593, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), -(32594, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), -(32642, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), -(32734, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), -(32748, 0x00000000, 8, 0x0000000100000000, 0x00000140, 0x00000000, 0, 0, 0), -(32776, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), -(32777, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), -(32837, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 45), -(32844, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 2, 0, 0), -(32885, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(33076, 0x00000000, 0, 0x0000000000000000, 0x000A02A8, 0x00000000, 0, 0, 0), -(33089, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), -(33127, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 7, 0, 0), -(33142, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(33145, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(33146, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(33150, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(33151, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(33154, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(33191, 0x00000000, 6, 0x0000040000808000, 0x00000000, 0x00000000, 0, 0, 0), -(33192, 0x00000000, 6, 0x0000040000808000, 0x00000000, 0x00000000, 0, 0, 0), -(33193, 0x00000000, 6, 0x0000040000808000, 0x00000000, 0x00000000, 0, 0, 0), -(33299, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), -(33510, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 5, 0, 0), -(33648, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(33719, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000800, 0, 0, 0), -(33736, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), -(33746, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 10), -(33757, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), -(33759, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 10), -(33776, 0x00000000, 0, 0x0000000000000000, 0x00008800, 0x00000000, 0, 0, 0), -(33881, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(33882, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(33883, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(34080, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000008, 0, 0, 0), -(34138, 0x00000000, 11, 0x0000000000000080, 0x00000000, 0x00000000, 0, 0, 0), -(34139, 0x00000000, 10, 0x0000000040000000, 0x00000000, 0x00000000, 0, 0, 0), -(34258, 0x00000000, 10, 0x0000000800000400, 0x00000000, 0x00000000, 0, 0, 0), -(34262, 0x00000000, 10, 0x0000000000800000, 0x00000000, 0x00010000, 0, 0, 0), -(34320, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(34355, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), -(34497, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(34498, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(34499, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(34500, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(34502, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(34503, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(34584, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 30), -(34586, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 1.5, 0, 0), -(34598, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 45), -(34749, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000008, 0, 0, 0), -(34753, 0x00000000, 6, 0x0000000400001800, 0x00000000, 0x00000000, 0, 0, 0), -(34774, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 1.5, 0, 20), -(34783, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000800, 0, 0, 0), -(34827, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), -(34859, 0x00000000, 6, 0x0000000400001800, 0x00000000, 0x00000000, 0, 0, 0), -(34860, 0x00000000, 6, 0x0000000400001800, 0x00000000, 0x00000000, 0, 0, 0), -(34914, 0x00000020, 6, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), -(34916, 0x00000020, 6, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), -(34917, 0x00000020, 6, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), -(34935, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 8), -(34938, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 8), -(34939, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 8), -(34950, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(34954, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(35077, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 60), -(35080, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 1, 0, 60), -(35083, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 60), -(35086, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 60), -(35100, 0x00000000, 9, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), -(35102, 0x00000000, 9, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), -(35103, 0x00000000, 9, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), -(35121, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(36096, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000800, 0, 0, 0), -(36111, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), -(37165, 0x00000000, 8, 0x0000000000200400, 0x00000000, 0x00000000, 0, 0, 0), -(37168, 0x00000000, 8, 0x00000009003E0000, 0x00000000, 0x00000000, 0, 0, 0), -(37170, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 1, 0, 0), -(37173, 0x00000000, 8, 0x000001062CBC0598, 0x00000000, 0x00000000, 0, 0, 30), -(37189, 0x00000000, 10, 0x00000000C0000000, 0x00000000, 0x00000002, 0, 0, 60), -(37193, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), -(37195, 0x00000000, 10, 0x0000000000800000, 0x00000000, 0x00000000, 0, 0, 0), -(37197, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 45), -(37213, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(37214, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), -(37227, 0x00000000, 11, 0x00000000000001C0, 0x00000000, 0x00000002, 0, 0, 60), -(37237, 0x00000000, 11, 0x0000000000000001, 0x00000000, 0x00000002, 0, 0, 0), -(37247, 0x00000008, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 45), -(37377, 0x00000020, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), -(37384, 0x00000000, 5, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), -(37443, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(37514, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000020, 0, 0, 0), -(37516, 0x00000000, 4, 0x0000000000000400, 0x00000000, 0x00000000, 0, 0, 0), -(37519, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000030, 0, 0, 0), -(37523, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), -(37528, 0x00000000, 4, 0x0000000000000004, 0x00000000, 0x00000000, 0, 0, 0), -(37536, 0x00000000, 4, 0x0000000000010000, 0x00000000, 0x00000000, 0, 0, 0), -(37568, 0x00000000, 6, 0x0000000000000800, 0x00000000, 0x00000000, 0, 0, 0), -(37594, 0x00000000, 6, 0x0000000000001000, 0x00000000, 0x00000000, 0, 0, 0), -(37600, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), -(37601, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), -(37603, 0x00000000, 6, 0x0000000000008000, 0x00000000, 0x00000000, 0, 0, 0), -(37655, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 60), -(37657, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 3), -(38026, 0x00000001, 0, 0x0000000000000000, 0x00000000, 0x00000100, 0, 0, 0), -(38031, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), -(38290, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 1.6, 0, 0), -(38326, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(38327, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(38334, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 60), -(38347, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(38350, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(38394, 0x00000000, 5, 0x0000000000000006, 0x00000000, 0x00000000, 0, 0, 0), -(38857, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), -(39027, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), -(39372, 0x00000030, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), -(39437, 0x00000004, 5, 0x000000C000001364, 0x00000000, 0x00010000, 0, 0, 0), -(39442, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000001, 0, 0, 0), -(39443, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(39530, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), -(39958, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0.7, 0, 40), -(40407, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 6, 0, 0), -(40438, 0x00000000, 6, 0x0000000000008040, 0x00000000, 0x00000000, 0, 0, 0), -(40442, 0x00000000, 7, 0x0000044000000014, 0x00000000, 0x00000000, 0, 0, 0), -(40444, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), -(40458, 0x00000000, 4, 0x0000060102000000, 0x00000000, 0x00000000, 0, 0, 0), -(40463, 0x00000000, 11, 0x0000001000000081, 0x00000000, 0x00000000, 0, 0, 0), -(40470, 0x00000000, 10, 0x00000000C0800000, 0x00000000, 0x00000000, 0, 0, 0), -(40475, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 3, 0, 0), -(40478, 0x00000000, 5, 0x0000000000000002, 0x00000000, 0x00000000, 0, 0, 0), -(40482, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(40485, 0x00000000, 9, 0x0000000100000000, 0x00000000, 0x00000000, 0, 0, 0), -(40899, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), -(41034, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000400, 0, 0, 0), -(41260, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 10), -(41262, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 10), -(41381, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000100, 0, 0, 0), -(41393, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000020, 0, 0, 0), -(41434, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 2, 0, 45), -(41469, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 7, 0, 0), -(41635, 0x00000000, 0, 0x0000000000000000, 0x000A02A8, 0x00000000, 0, 0, 0), -(41989, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0.5, 0, 0), -(42083, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 45), -(42135, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 90), -(42136, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 90), -(42368, 0x00000000, 10, 0x0000000040000000, 0x00000000, 0x00000000, 0, 0, 0), -(42370, 0x00000000, 11, 0x0000000000000040, 0x00000000, 0x00000000, 0, 0, 0), -(43019, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000400, 0, 0, 0), -(43020, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000400, 0, 0, 0), -(43338, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(43443, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000800, 0, 0, 0), -(43726, 0x00000000, 10, 0x0000000040000000, 0x00000000, 0x00000000, 0, 0, 0), -(43728, 0x00000000, 11, 0x0000000000000080, 0x00000000, 0x00000000, 0, 0, 0), -(43737, 0x00000000, 7, 0x0000044000000000, 0x00000000, 0x00000000, 0, 0, 10), -(43739, 0x00000000, 7, 0x0000000000000002, 0x00000000, 0x00000000, 0, 0, 0), -(43741, 0x00000000, 10, 0x0000000080000000, 0x00000000, 0x00000000, 0, 0, 0), -(43745, 0x00000000, 10, 0x0000020000000000, 0x00000000, 0x00000000, 0, 0, 0), -(43748, 0x00000000, 11, 0x0000000090100000, 0x00000000, 0x00000000, 0, 0, 0), -(43750, 0x00000000, 11, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), -(43819, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00010000, 0, 0, 0), -(44404, 0x00000000, 3, 0x0000900020000021, 0x00000000, 0x00000000, 0, 0, 0), -(44445, 0x00000000, 3, 0x0000100000000013, 0x00000000, 0x00000000, 0, 0, 0), -(44446, 0x00000000, 3, 0x0000100000000013, 0x00000000, 0x00000000, 0, 0, 0), -(44448, 0x00000000, 3, 0x0000100000000013, 0x00000000, 0x00000000, 0, 0, 0), -(44835, 0x00000000, 7, 0x0000008000000000, 0x00000010, 0x00000000, 0, 0, 0), -(45054, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 15), -(45057, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 30), -(45234, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(45243, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(45244, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(45354, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 45), -(45481, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 45), -(45482, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 45), -(45483, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 45), -(45484, 0x00000000, 0, 0x0000000000000000, 0x00004000, 0x00000000, 0, 0, 45), -(46025, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), -(46092, 0x00000000, 10, 0x0000000040000000, 0x00000000, 0x00000000, 0, 0, 0), -(46098, 0x00000000, 11, 0x0000000000000080, 0x00000000, 0x00000000, 0, 0, 0), -(46569, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 45), -(46662, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 20), -(46832, 0x00000000, 7, 0x0000000000000001, 0x00000000, 0x00010000, 0, 0, 0), -(46854, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(46855, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(46867, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(46913, 0x00000000, 4, 0x0000040000000000, 0x00000000, 0x00000002, 0, 0, 0), -(46914, 0x00000000, 4, 0x0000040000000000, 0x00000000, 0x00000002, 0, 0, 0), -(46915, 0x00000000, 4, 0x0000040000000000, 0x00000000, 0x00000002, 0, 0, 0), -(46916, 0x00000000, 4, 0x0000040000000000, 0x00000000, 0x00000002, 0, 0, 0), -(46951, 0x00000000, 4, 0x0000004000000400, 0x00000000, 0x00000000, 0, 0, 0), -(46952, 0x00000000, 0, 0x0000004000000400, 0x00000000, 0x00000000, 0, 0, 0), -(46953, 0x00000000, 0, 0x0000004000000400, 0x00000000, 0x00000000, 0, 0, 0), -(47509, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(47511, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(47515, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(48835, 0x00000000, 10, 0x0000000800000000, 0x00000000, 0x00000000, 0, 0, 0), -(48837, 0x00000000, 11, 0x0000000090100000, 0x00000000, 0x00000000, 0, 0, 0), -(48951, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), -(48952, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), -(48988, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(49018, 0x00000000, 15, 0x0000000001400000, 0x00000000, 0x00000000, 0, 0, 0), -(49137, 0x00000000, 15, 0x0000400000000000, 0x00000000, 0x00000000, 0, 0, 0), -(49188, 0x00000000, 15, 0x0000000000000002, 0x00000000, 0x00000000, 0, 0, 0), -(49208, 0x00000000, 15, 0x0000000000440000, 0x00000000, 0x00000000, 0, 0, 0), -(49222, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), -(49280, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), -(49281, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), -(49283, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), -(49284, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), -(49503, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(49504, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(49529, 0x00000000, 15, 0x0000000001400000, 0x00000000, 0x00000000, 0, 0, 0), -(49530, 0x00000000, 15, 0x0000000001400000, 0x00000000, 0x00000000, 0, 0, 0), -(49531, 0x00000000, 15, 0x0000000001400000, 0x00000000, 0x00000000, 0, 0, 0), -(49532, 0x00000000, 15, 0x0000000001400000, 0x00000000, 0x00000000, 0, 0, 0), -(49657, 0x00000000, 15, 0x0000400000000000, 0x00000000, 0x00000000, 0, 0, 0), -(50781, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(51123, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(51127, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(51128, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(51129, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(51130, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(51346, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 10), -(51349, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 10), -(51352, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 10), -(51359, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 10), -(51466, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(51470, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(51625, 0x00000000, 8, 0x000000001000A000, 0x00000000, 0x00000000, 0, 0, 0), -(51626, 0x00000000, 8, 0x000000001000A000, 0x00000000, 0x00000000, 0, 0, 0), -(51627, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000070, 0, 0, 0), -(51628, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000070, 0, 0, 0), -(51629, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000070, 0, 0, 0), -(51634, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(51635, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(51636, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(51664, 0x00000000, 8, 0x0000000800020000, 0x00000000, 0x00000000, 0, 0, 0), -(51665, 0x00000000, 8, 0x0000000800020000, 0x00000000, 0x00000000, 0, 0, 0), -(51667, 0x00000000, 8, 0x0000000800020000, 0x00000000, 0x00000000, 0, 0, 0), -(51668, 0x00000000, 8, 0x0000000800020000, 0x00000000, 0x00000000, 0, 0, 0), -(51669, 0x00000000, 8, 0x0000000800020000, 0x00000000, 0x00000000, 0, 0, 0), -(51672, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000010, 0, 0, 1), -(51674, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000010, 0, 0, 1), -(51679, 0x00000000, 8, 0x0000000100000001, 0x00000000, 0x00000000, 0, 0, 0), -(51692, 0x00000000, 8, 0x0000000000000200, 0x00000000, 0x00000002, 0, 0, 0), -(51696, 0x00000000, 8, 0x0000000000000200, 0x00000000, 0x00000002, 0, 0, 0), -(51698, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 1), -(51700, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 1), -(51701, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 1), -(52420, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 30), -(52423, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000020, 0, 0, 0), -(52898, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(53137, 0x00000000, 15, 0x0000000001400000, 0x00000000, 0x00000000, 0, 0, 0), -(53138, 0x00000000, 15, 0x0000000001400000, 0x00000000, 0x00000000, 0, 0, 0), -(53215, 0x00000000, 9, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), -(53216, 0x00000000, 9, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), -(53217, 0x00000000, 9, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), -(53221, 0x00000000, 9, 0x0000000100000000, 0x00000000, 0x00000000, 0, 0, 0), -(53222, 0x00000000, 9, 0x0000000100000000, 0x00000000, 0x00000000, 0, 0, 0), -(53224, 0x00000000, 9, 0x0000000100000000, 0x00000000, 0x00000000, 0, 0, 0), -(53256, 0x00000000, 9, 0x0080000100000800, 0x00000000, 0x00000002, 0, 0, 0), -(53259, 0x00000000, 9, 0x0080000100000800, 0x00000000, 0x00000002, 0, 0, 0), -(53260, 0x00000000, 9, 0x0080000100000800, 0x00000000, 0x00000002, 0, 0, 0), -(53290, 0x00000000, 9, 0x8000000100000800, 0x00000000, 0x00000002, 0, 0, 0), -(53291, 0x00000000, 9, 0x8000000100000800, 0x00000000, 0x00000002, 0, 0, 0), -(53292, 0x00000000, 9, 0x8000000100000800, 0x00000000, 0x00000002, 0, 0, 0), -(53293, 0x00000000, 9, 0x8000000100000800, 0x00000000, 0x00000002, 0, 0, 0), -(53294, 0x00000000, 9, 0x8000000100000800, 0x00000000, 0x00000002, 0, 0, 0), -(53380, 0x00000000, 10, 0x0002000000800000, 0x00000000, 0x00000002, 0, 0, 0), -(53381, 0x00000000, 10, 0x0002000000800000, 0x00000000, 0x00000002, 0, 0, 0), -(53382, 0x00000000, 10, 0x0002000000800000, 0x00000000, 0x00000002, 0, 0, 0), -(53383, 0x00000000, 10, 0x0002000000800000, 0x00000000, 0x00000002, 0, 0, 0), -(53384, 0x00000000, 10, 0x0002000000800000, 0x00000000, 0x00000002, 0, 0, 0), -(53486, 0x00000000, 10, 0x0002800000800000, 0x00000000, 0x00000002, 0, 0, 0), -(53488, 0x00000000, 10, 0x0002800000800000, 0x00000000, 0x00000002, 0, 0, 0), -(53569, 0x00000000, 10, 0x0000000000200000, 0x00000000, 0x00000002, 0, 0, 0), -(53576, 0x00000000, 10, 0x0000000000200000, 0x00000000, 0x00000002, 0, 0, 0), -(54149, 0x00000000, 10, 0x0000000000200000, 0x00000000, 0x00000002, 0, 0, 0), -(54486, 0x00000000, 0, 0x0000900020000021, 0x00000000, 0x00000000, 0, 0, 0), -(54488, 0x00000000, 0, 0x0000900020000021, 0x00000000, 0x00000000, 0, 0, 0), -(54489, 0x00000000, 0, 0x0000900020000021, 0x00000000, 0x00000000, 0, 0, 0), -(54490, 0x00000000, 0, 0x0000900020000021, 0x00000000, 0x00000000, 0, 0, 0), -(54738, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(54841, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(54936, 0x00000000, 10, 0x0000000040000000, 0x00000000, 0x00000000, 0, 0, 0), -(54937, 0x00000000, 10, 0x0000000080000000, 0x00000000, 0x00000000, 0, 0, 0), -(54939, 0x00000000, 10, 0x0000000000008000, 0x00000000, 0x00000000, 0, 0, 0), -(55620, 0x00000000, 15, 0x0800000000000001, 0x00000000, 0x00000000, 0, 0, 0), -(55623, 0x00000000, 15, 0x0800000000000001, 0x00000000, 0x00000000, 0, 0, 0), -(55666, 0x00000000, 15, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), -(55667, 0x00000000, 15, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), -(55668, 0x00000000, 15, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), -(55669, 0x00000000, 15, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), -(55670, 0x00000000, 15, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), -(55689, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(56342, 0x00000000, 9, 0x0000000000004000, 0x00000000, 0x00000000, 0, 0, 0), -(56343, 0x00000000, 9, 0x0000000000004000, 0x00000000, 0x00000000, 0, 0, 0), -(56344, 0x00000000, 9, 0x0000000000004000, 0x00000000, 0x00000000, 0, 0, 0), -(56451, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 3), -(56611, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(56612, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(56613, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(56614, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(56636, 0x00000000, 4, 0x0000000000000020, 0x00000000, 0x00000000, 0, 0, 0), -(56637, 0x00000000, 4, 0x0000000000000020, 0x00000000, 0x00000000, 0, 0, 0), -(56638, 0x00000000, 4, 0x0000000000000020, 0x00000000, 0x00000000, 0, 0, 0), -(56821, 0x00000000, 8, 0x0000000000000002, 0x00000000, 0x00000002, 0, 0, 0), -(56822, 0x00000000, 15, 0x0000000000000002, 0x00000000, 0x00000000, 0, 0, 0), -(56834, 0x00000000, 15, 0x0000000000440000, 0x00000000, 0x00000000, 0, 0, 0), -(56835, 0x00000000, 15, 0x0000000000440000, 0x00000000, 0x00000000, 0, 0, 0), -(57878, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000010, 0, 0, 0), -(57880, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000010, 0, 0, 0), -(57881, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000010, 0, 0, 0), -(58357, 0x00000000, 4, 0x0000000000000040, 0x00000000, 0x00000002, 0, 0, 0), -(58364, 0x00000000, 4, 0x0000000000000400, 0x00000000, 0x00000000, 0, 0, 0), -(58372, 0x00000000, 4, 0x0000000000000002, 0x00000000, 0x00000000, 0, 0, 0), -(58386, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000020, 0, 0, 0), -(58616, 0x00000000, 15, 0x0000000000040000, 0x00000000, 0x00000000, 0, 0, 0), -(58620, 0x00000000, 15, 0x0000400000000000, 0x00000000, 0x00000000, 0, 0, 0), -(58626, 0x00000000, 15, 0x0000000002000000, 0x00000000, 0x00000000, 0, 0, 0), -(58631, 0x00000000, 15, 0x0000000000000002, 0x00000000, 0x00000000, 0, 0, 0), -(58642, 0x00000000, 15, 0x0800000000000000, 0x00000000, 0x00000000, 0, 0, 0), -(58644, 0x00000000, 15, 0x0000000400000000, 0x00000000, 0x00000000, 0, 0, 0), -(58647, 0x00000000, 15, 0x0000000400000000, 0x00000000, 0x00000000, 0, 0, 0), -(58676, 0x00000000, 15, 0x0000000800000000, 0x00000000, 0x00000000, 0, 0, 0), -(58677, 0x00000000, 15, 0x0000000000002000, 0x00000000, 0x00000000, 0, 0, 0), -(58872, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), -(58874, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000040, 0, 0, 0), -(58901, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(59057, 0x00000000, 15, 0x0000000000000002, 0x00000000, 0x00000000, 0, 0, 0), -(59176, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(59327, 0x00000000, 15, 0x0000000008000000, 0x00000000, 0x00000000, 0, 0, 0), -(59725, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000800, 0, 0, 0), -(60537, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000002, 0, 0, 0), -(60572, 0x00000000, 11, 0x0000000090100000, 0x00000000, 0x00000000, 0, 0, 0), -(60617, 0x00000000, 0, 0x0000000000000000, 0x00000000, 0x00000020, 0, 0, 0), -(60826, 0x00000000, 15, 0x0000000001400000, 0x00000000, 0x00000000, 0, 0, 0), -(61324, 0x00000000, 10, 0x0002000000000000, 0x00000000, 0x00000000, 0, 0, 0), -(48516, 0x00000000, 7, 0x0000000000000005, 0x00000000, 0x00000002, 0, 0, 30), -(48521, 0x00000000, 7, 0x0000000000000005, 0x00000000, 0x00000002, 0, 0, 30), -(48525, 0x00000000, 7, 0x0000000000000005, 0x00000000, 0x00000002, 0, 0, 30), -(48496, 0x00000000, 7, 0x0200000200000060, 0x00000000, 0x00000002, 0, 0, 0), -(48499, 0x00000000, 7, 0x0200000200000060, 0x00000000, 0x00000002, 0, 0, 0), -(48500, 0x00000000, 7, 0x0200000200000060, 0x00000000, 0x00000002, 0, 0, 0), -(53228, 0x00000000, 9, 0x0000000000000020, 0x00000000, 0x00000000, 0, 0, 0), -(53232, 0x00000000, 9, 0x0000000000000020, 0x00000000, 0x00000000, 0, 0, 0), -(55440, 0x00000000, 11, 0x0000000000000040, 0x00000000, 0x00000000, 0, 0, 0), -(52795, 0x00000000, 6, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), -(52797, 0x00000000, 6, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), -(52798, 0x00000000, 6, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), -(52799, 0x00000000, 6, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), -(52800, 0x00000000, 6, 0x0000000000000001, 0x00000000, 0x00000000, 0, 0, 0), -(55677, 0x00000000, 6, 0x0000000100000000, 0x00000000, 0x00000000, 0, 0, 0), -(55680, 0x00000000, 6, 0x0000000000000200, 0x00000000, 0x00000000, 0, 0, 0), -(47572, 0x00000000, 6, 0x0000000000010000, 0x00000000, 0x00000000, 0, 0, 0), -(48159, 0x00000020, 6, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0), -(48160, 0x00000020, 6, 0x0000000000000000, 0x00000000, 0x00000000, 0, 0, 0); +( 324, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +( 325, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +( 905, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +( 945, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +( 974, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +( 1463, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0.000000, 0.000000, 0), +( 3232, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +( 5952, 0x00000000, 8, 0x00000001, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +( 6346, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000100, 0.000000, 0.000000, 0), +( 7383, 0x00000001, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000100, 0.000000, 0.000000, 0), +( 7434, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +( 8134, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +( 8178, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +( 8494, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0.000000, 0.000000, 0), +( 8495, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0.000000, 0.000000, 0), +( 9452, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 3.000000, 0.000000, 0), +( 9782, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +( 9784, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +( 9799, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(10191, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0.000000, 0.000000, 0), +(10192, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0.000000, 0.000000, 0), +(10193, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0.000000, 0.000000, 0), +(10431, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(10432, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(11095, 0x00000000, 3, 0x00000010, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(11119, 0x00000004, 3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(11120, 0x00000004, 3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(11129, 0x00000000, 3, 0x00C00017, 0x00000040, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(11180, 0x00000010, 3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(11185, 0x00000000, 3, 0x00000080, 0x00000000, 0x00000000, 0x00050000, 0x00000000, 0.000000, 0.000000, 0), +(11255, 0x00000000, 3, 0x00004000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(12169, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(12281, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 6), +(12289, 0x00000000, 4, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(12298, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(12311, 0x00000000, 4, 0x00000800, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(12317, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(12319, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(12322, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 2.000000, 0.000000, 0), +(12487, 0x00000000, 3, 0x00000080, 0x00000000, 0x00000000, 0x00050000, 0x00000000, 0.000000, 0.000000, 0), +(12488, 0x00000000, 3, 0x00000080, 0x00000000, 0x00000000, 0x00050000, 0x00000000, 0.000000, 0.000000, 0), +(12598, 0x00000000, 3, 0x00004000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(12668, 0x00000000, 4, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(12724, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(12725, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(12726, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(12727, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(12797, 0x00000000, 4, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(12799, 0x00000000, 4, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(12812, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 6), +(12813, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 6), +(12814, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 6), +(12815, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 6), +(12834, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(12846, 0x00000004, 3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(12847, 0x00000004, 3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(12848, 0x00000004, 3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(12849, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(12867, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(12872, 0x00000000, 3, 0x00000010, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(12873, 0x00000000, 3, 0x00000010, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(12958, 0x00000000, 4, 0x00000800, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(12966, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(12967, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(12968, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(12969, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(12970, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(12971, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(12972, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(12973, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(12974, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(12999, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 4.000000, 0.000000, 0), +(13000, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 6.000000, 0.000000, 0), +(13001, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 8.000000, 0.000000, 0), +(13002, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 10.000000, 0.000000, 0), +(13045, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(13046, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(13047, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(13048, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(13165, 0x00000000, 9, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(13754, 0x00000000, 8, 0x00000010, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(13867, 0x00000000, 8, 0x00000010, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(13983, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000018, 0.000000, 0.000000, 0), +(14070, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000018, 0.000000, 0.000000, 0), +(14071, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000018, 0.000000, 0.000000, 0), +(14156, 0x00000000, 8, 0x003E0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(14160, 0x00000000, 8, 0x003E0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(14161, 0x00000000, 8, 0x003E0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(14186, 0x00000000, 8, 0x40800508, 0x00000002, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(14190, 0x00000000, 8, 0x40800508, 0x00000002, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(14193, 0x00000000, 8, 0x40800508, 0x00000002, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(14194, 0x00000000, 8, 0x40800508, 0x00000002, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(14195, 0x00000000, 8, 0x40800508, 0x00000002, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(14318, 0x00000000, 9, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(14319, 0x00000000, 9, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(14320, 0x00000000, 9, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(14321, 0x00000000, 9, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(14322, 0x00000000, 9, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(14531, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(14774, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(14892, 0x00000000, 6, 0x10001E00, 0x00000004, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(15088, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(15128, 0x00000004, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(15268, 0x00000020, 6, 0x06080000, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(15277, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 6.000000, 0.000000, 0), +(15286, 0x00000020, 6, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(15323, 0x00000020, 6, 0x06080000, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(15324, 0x00000020, 6, 0x06080000, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(15325, 0x00000020, 6, 0x06080000, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(15326, 0x00000020, 6, 0x06080000, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(15337, 0x00000000, 6, 0x00002000, 0x00000002, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(15338, 0x00000000, 6, 0x00002000, 0x00000002, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(15346, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 6.000000, 0.000000, 0), +(15362, 0x00000000, 6, 0x10001E00, 0x00000004, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(15363, 0x00000000, 6, 0x10001E00, 0x00000004, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(15600, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 1.000000, 0.000000, 0), +(16164, 0x00000000, 11, 0x90100003, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16176, 0x00000000, 11, 0x000001C0, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16180, 0x00000000, 11, 0x000000C0, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16196, 0x00000000, 11, 0x000000C0, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16198, 0x00000000, 11, 0x000000C0, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16235, 0x00000000, 11, 0x000001C0, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16240, 0x00000000, 11, 0x000001C0, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16256, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16257, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(16277, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(16278, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(16279, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(16280, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(16281, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16282, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16283, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16284, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16487, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16489, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16492, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16550, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16620, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 30), +(16624, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(16850, 0x00000000, 7, 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(16864, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 2.000000, 0.000000, 0), +(16880, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16923, 0x00000000, 7, 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(16924, 0x00000000, 7, 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(16952, 0x00000000, 7, 0x00039000, 0x00000400, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16954, 0x00000000, 7, 0x00039000, 0x00000400, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16958, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16961, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(17106, 0x00000000, 7, 0x00080000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(17107, 0x00000000, 7, 0x00080000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(17108, 0x00000000, 7, 0x00080000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(17364, 0x00000008, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(17495, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(17793, 0x00000000, 5, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(17794, 0x00000020, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0.000000, 0.000000, 0), +(17796, 0x00000000, 5, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(17797, 0x00000020, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(17798, 0x00000020, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(17799, 0x00000020, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(17800, 0x00000020, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(17801, 0x00000000, 5, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(17802, 0x00000000, 5, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(17803, 0x00000000, 5, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(18073, 0x00000000, 5, 0x00000060, 0x00000080, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(18094, 0x00000000, 5, 0x0000000A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(18095, 0x00000000, 5, 0x0000000A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(18096, 0x00000000, 5, 0x00000060, 0x00000080, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(18119, 0x00000000, 5, 0x000003E5, 0x000010C0, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(18120, 0x00000000, 5, 0x000003E5, 0x000010C0, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(18820, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(19184, 0x00000000, 9, 0x00000014, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(19228, 0x00000000, 0, 0x00000040, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(19232, 0x00000000, 9, 0x00000040, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(19233, 0x00000000, 9, 0x00000040, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(19387, 0x00000000, 9, 0x00000014, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(19388, 0x00000000, 9, 0x00000014, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(19572, 0x00000000, 9, 0x00800000, 0x00000000, 0x00000000, 0x00004000, 0x00000000, 0.000000, 0.000000, 0), +(19573, 0x00000000, 9, 0x00800000, 0x00000000, 0x00000000, 0x00004000, 0x00000000, 0.000000, 0.000000, 0), +(20049, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(20056, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(20057, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(20128, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(20131, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(20132, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(20164, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 5.000000, 0.000000, 0), +(20165, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 20.000000, 0.000000, 0), +(20166, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 20.000000, 0.000000, 0), +(20182, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(20210, 0x00000000, 10, 0xC0200000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(20212, 0x00000000, 10, 0xC0200000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(20213, 0x00000000, 10, 0xC0200000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(20214, 0x00000000, 10, 0xC0200000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(20215, 0x00000000, 10, 0xC0200000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(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), +(20375, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 7.000000, 0.000000, 0), +(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), +(20911, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000070, 0.000000, 0.000000, 0), +(20925, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(20927, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(20928, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(21185, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 10), +(21882, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(21890, 0x00000000, 4, 0x2A764EEF, 0x0000036C, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(22007, 0x00000000, 3, 0x00200021, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(22618, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(22648, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(23547, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000020, 0.000000, 0.000000, 0), +(23548, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(23551, 0x00000000, 11, 0x000000C0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(23552, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(23572, 0x00000000, 11, 0x000000C0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(23578, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 2.000000, 0.000000, 0), +(23581, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 2.000000, 0.000000, 0), +(23602, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(23686, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 2.000000, 0.000000, 0), +(23688, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(23689, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 4.000000, 0.000000, 0), +(23695, 0x00000000, 4, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(23721, 0x00000000, 9, 0x00000800, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(23920, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000800, 0.000000, 0.000000, 0), +(24353, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(24389, 0x00000000, 3, 0x00C00017, 0x00000040, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(24398, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(24658, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00014110, 0x00000000, 0.000000, 0.000000, 0), +(24905, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 15.000000, 0.000000, 0), +(24932, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 6), +(25050, 0x00000004, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(25296, 0x00000000, 9, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(25469, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(25472, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(25669, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 1.000000, 0.000000, 0), +(25899, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000070, 0.000000, 0.000000, 0), +(25988, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(26016, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 2.000000, 0.000000, 0), +(26107, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000064, 0.000000, 0.000000, 0), +(26119, 0x00000000, 10, 0x90100003, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(26128, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000008, 0.000000, 0.000000, 0), +(26135, 0x00000000, 10, 0x00800000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(26480, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 3.000000, 0.000000, 0), +(26605, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(27044, 0x00000000, 9, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(27131, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0.000000, 0.000000, 0), +(27179, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(27419, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 3.000000, 0.000000, 0), +(27498, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 3.000000, 0.000000, 0), +(27521, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(27656, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 3.000000, 0.000000, 0), +(27774, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(27787, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 3.000000, 0.000000, 0), +(27811, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(27815, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(27816, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(28592, 0x00000010, 3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(28593, 0x00000010, 3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(28716, 0x00000000, 7, 0x00000010, 0x00000000, 0x00000000, 0x00048000, 0x00000000, 0.000000, 0.000000, 0), +(28719, 0x00000000, 7, 0x00000020, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(28744, 0x00000000, 7, 0x00000040, 0x00000000, 0x00000000, 0x00044000, 0x00000000, 0.000000, 0.000000, 0), +(28752, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(28789, 0x00000000, 10, 0xC0000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(28802, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(28809, 0x00000000, 6, 0x00001000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(28812, 0x00000000, 8, 0x02000006, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(28816, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 3.000000, 0.000000, 0), +(28823, 0x00000000, 11, 0x000000C0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(28847, 0x00000000, 7, 0x00000020, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(28849, 0x00000000, 11, 0x00000080, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(29074, 0x00000014, 3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(29075, 0x00000014, 3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(29076, 0x00000014, 3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(29150, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 3.000000, 0.000000, 0), +(29179, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(29180, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(29385, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 7.000000, 0.000000, 0), +(29441, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000008, 0.000000, 0.000000, 1), +(29444, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000008, 0.000000, 0.000000, 1), +(29455, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(29501, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 3.000000, 0.000000, 0), +(29593, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000070, 0.000000, 0.000000, 0), +(29594, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000070, 0.000000, 0.000000, 0), +(29624, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 3.000000, 0.000000, 0), +(29625, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 3.000000, 0.000000, 0), +(29626, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 3.000000, 0.000000, 0), +(29632, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 3.000000, 0.000000, 0), +(29633, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 3.000000, 0.000000, 0), +(29634, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 3.000000, 0.000000, 0), +(29635, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 3.000000, 0.000000, 0), +(29636, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 3.000000, 0.000000, 0), +(29637, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 3.000000, 0.000000, 0), +(29801, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(29834, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(29838, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(29977, 0x00000000, 3, 0x00C00017, 0x00000040, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(30003, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000800, 0.000000, 0.000000, 0), +(30160, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(30293, 0x00000000, 5, 0x00000381, 0x000000C0, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(30295, 0x00000000, 5, 0x00000381, 0x000000C0, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(30296, 0x00000000, 5, 0x00000381, 0x000000C0, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(30299, 0x00000024, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(30301, 0x00000024, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(30302, 0x00000024, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(30675, 0x00000000, 11, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(30678, 0x00000000, 11, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(30679, 0x00000000, 11, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(30680, 0x00000000, 11, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(30681, 0x00000000, 11, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(30701, 0x0000001C, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(30705, 0x0000001C, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(30802, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(30803, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(30804, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(30805, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(30806, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(30807, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(30808, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(30809, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(30810, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(30811, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(30823, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 10.500000, 0.000000, 0), +(30881, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 5), +(30883, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 5), +(30884, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 5), +(30885, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 5), +(30886, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 5), +(30937, 0x00000020, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(31124, 0x00000000, 8, 0x2000000E, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(31126, 0x00000000, 8, 0x2000000E, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(31244, 0x00000000, 8, 0x003E0000, 0x00000009, 0x00000000, 0x00000000, 0x00000004, 0.000000, 0.000000, 0), +(31245, 0x00000000, 8, 0x003E0000, 0x00000009, 0x00000000, 0x00000000, 0x00000004, 0.000000, 0.000000, 0), +(31394, 0x00000020, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(31569, 0x00000000, 3, 0x00010000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(31570, 0x00000000, 3, 0x00010000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(31785, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00008800, 0x00000000, 0.000000, 0.000000, 0), +(31794, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(31801, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 20.000000, 0.000000, 0), +(31833, 0x00000000, 10, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(31835, 0x00000000, 10, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(31836, 0x00000000, 10, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(31904, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(32385, 0x00000000, 5, 0x00000402, 0x00000011, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(32387, 0x00000000, 5, 0x00000402, 0x00000011, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(32392, 0x00000000, 5, 0x00000402, 0x00000011, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(32393, 0x00000000, 5, 0x00000402, 0x00000011, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(32394, 0x00000000, 5, 0x00000402, 0x00000011, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(32587, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(32593, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(32594, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(32642, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(32734, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(32748, 0x00000000, 8, 0x00000000, 0x00000001, 0x00000000, 0x00000140, 0x00000000, 0.000000, 0.000000, 0), +(32776, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(32777, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(32837, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 45), +(32844, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 2.000000, 0.000000, 0), +(32885, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(33076, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x000A02A8, 0x00000000, 0.000000, 0.000000, 0), +(33089, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(33127, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 7.000000, 0.000000, 0), +(33142, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(33145, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(33146, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(33150, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(33151, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(33154, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(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), +(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), +(33719, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000800, 0.000000, 0.000000, 0), +(33736, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(33746, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 10), +(33757, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(33759, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 10), +(33776, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00008800, 0x00000000, 0.000000, 0.000000, 0), +(33881, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(33882, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(33883, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(34080, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000008, 0.000000, 0.000000, 0), +(34138, 0x00000000, 11, 0x00000080, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(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), +(34355, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(34497, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(34498, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(34499, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(34500, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(34502, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(34503, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(34584, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 30), +(34586, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 1.500000, 0.000000, 0), +(34598, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), +(34749, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000008, 0.000000, 0.000000, 0), +(34753, 0x00000000, 6, 0x00001800, 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(34774, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 1.500000, 0.000000, 20), +(34783, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000800, 0.000000, 0.000000, 0), +(34827, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(34859, 0x00000000, 6, 0x00001800, 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(34860, 0x00000000, 6, 0x00001800, 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(34914, 0x00000000, 6, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(34916, 0x00000000, 6, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(34917, 0x00000000, 6, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(34935, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 8), +(34938, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 8), +(34939, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 8), +(34950, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(34954, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(35077, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 60), +(35080, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 1.000000, 0.000000, 60), +(35083, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 60), +(35086, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 60), +(35100, 0x00000000, 9, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(35102, 0x00000000, 9, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(35103, 0x00000000, 9, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(35121, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(36096, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000800, 0.000000, 0.000000, 0), +(36111, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(37165, 0x00000000, 8, 0x00200400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(37168, 0x00000000, 8, 0x003E0000, 0x00000009, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(37170, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 1.000000, 0.000000, 0), +(37173, 0x00000000, 8, 0x2CBC0598, 0x00000106, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 30), +(37189, 0x00000000, 10, 0xC0000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 60), +(37193, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(37195, 0x00000000, 10, 0x00800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(37197, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 45), +(37213, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(37214, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(37227, 0x00000000, 11, 0x000001C0, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 60), +(37237, 0x00000000, 11, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(37247, 0x00000008, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 45), +(37377, 0x00000020, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(37384, 0x00000000, 5, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(37443, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(37514, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000020, 0.000000, 0.000000, 0), +(37516, 0x00000000, 4, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(37519, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000030, 0.000000, 0.000000, 0), +(37523, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(37528, 0x00000000, 4, 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(37536, 0x00000000, 4, 0x00010000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(37568, 0x00000000, 6, 0x00000800, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(37594, 0x00000000, 6, 0x00001000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(37600, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(37601, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(37603, 0x00000000, 6, 0x00008000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(37655, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 60), +(37657, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 3), +(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), +(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), +(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), +(39027, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(39372, 0x00000030, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(39437, 0x00000004, 5, 0x00001364, 0x000000C0, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(39442, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0.000000, 0.000000, 0), +(39443, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(39530, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(39958, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.700000, 0.000000, 40), +(40407, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 6.000000, 0.000000, 0), +(40438, 0x00000000, 6, 0x00008040, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(40442, 0x00000000, 7, 0x00000014, 0x00000440, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(40444, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(40458, 0x00000000, 4, 0x02000000, 0x00000601, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(40463, 0x00000000, 11, 0x00000081, 0x00000010, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(40470, 0x00000000, 10, 0xC0800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(40475, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 3.000000, 0.000000, 0), +(40478, 0x00000000, 5, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(40482, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(40485, 0x00000000, 9, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(40899, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(41034, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0.000000, 0.000000, 0), +(41260, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 10), +(41262, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 10), +(41381, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000100, 0.000000, 0.000000, 0), +(41393, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000020, 0.000000, 0.000000, 0), +(41434, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 2.000000, 0.000000, 45), +(41469, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 7.000000, 0.000000, 0), +(41635, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x000A02A8, 0x00000000, 0.000000, 0.000000, 0), +(41989, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.500000, 0.000000, 0), +(42083, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 45), +(42135, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 90), +(42136, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 90), +(42368, 0x00000000, 10, 0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(42370, 0x00000000, 11, 0x00000040, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(43019, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0.000000, 0.000000, 0), +(43020, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0.000000, 0.000000, 0), +(43338, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(43443, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000800, 0.000000, 0.000000, 0), +(43726, 0x00000000, 10, 0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(43728, 0x00000000, 11, 0x00000080, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(43737, 0x00000000, 7, 0x00000000, 0x00000440, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 10), +(43739, 0x00000000, 7, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(43741, 0x00000000, 10, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(43745, 0x00000000, 10, 0x00000000, 0x00000200, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(43748, 0x00000000, 11, 0x90100000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(43750, 0x00000000, 11, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(43819, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(44404, 0x00000000, 3, 0x20000021, 0x00009000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(44445, 0x00000000, 3, 0x00000013, 0x00001000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(44446, 0x00000000, 3, 0x00000013, 0x00001000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(44448, 0x00000000, 3, 0x00000013, 0x00001000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(44835, 0x00000000, 7, 0x00000000, 0x00000080, 0x00000000, 0x00000010, 0x00000000, 0.000000, 0.000000, 0), +(45054, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 15), +(45057, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 30), +(45234, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(45243, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(45244, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(45354, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), +(45481, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), +(45482, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), +(45483, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), +(45484, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00004000, 0x00000000, 0.000000, 0.000000, 45), +(46025, 0x00000020, 6, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(46092, 0x00000000, 10, 0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(46098, 0x00000000, 11, 0x00000080, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(46569, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), +(46662, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 20), +(46832, 0x00000000, 7, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(46854, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(46855, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(46867, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(46913, 0x00000000, 4, 0x00000000, 0x00000400, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(46914, 0x00000000, 4, 0x00000000, 0x00000400, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(46915, 0x00000000, 4, 0x00000000, 0x00000400, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(46916, 0x00000000, 4, 0x00000000, 0x00000400, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(46951, 0x00000000, 4, 0x00000400, 0x00000040, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(46952, 0x00000000, 0, 0x00000400, 0x00000040, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(46953, 0x00000000, 0, 0x00000400, 0x00000040, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47195, 0x00000000, 5, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 30), +(47196, 0x00000000, 5, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 30), +(47197, 0x00000000, 5, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 30), +(47201, 0x00000000, 5, 0x00000008, 0x00040000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(47202, 0x00000000, 5, 0x00000008, 0x00040000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47203, 0x00000000, 5, 0x00000008, 0x00040000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47204, 0x00000000, 5, 0x00000008, 0x00040000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47205, 0x00000000, 5, 0x00000008, 0x00040000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47232, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(47234, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(47235, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(47245, 0x00000020, 5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47246, 0x00000020, 5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47247, 0x00000020, 5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47258, 0x00000000, 5, 0x00000000, 0x00800000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(47259, 0x00000000, 5, 0x00000000, 0x00800000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(47260, 0x00000000, 5, 0x00000000, 0x00800000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(47263, 0x00000020, 5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 20), +(47264, 0x00000020, 5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 20), +(47265, 0x00000020, 5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 20), +(47509, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(47511, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(47515, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(47516, 0x00000000, 6, 0x00001800, 0x00008000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47517, 0x00000000, 6, 0x00001800, 0x00008000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47535, 0x00000000, 6, 0x00001800, 0x00008000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47536, 0x00000000, 6, 0x00001800, 0x00008000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47537, 0x00000000, 6, 0x00001800, 0x00008000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47538, 0x00000000, 6, 0x00001800, 0x00008000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47539, 0x00000000, 6, 0x00001800, 0x00008000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47572, 0x00000000, 6, 0x00010000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47580, 0x00000000, 6, 0x00000000, 0x00000000, 0x00000040, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47581, 0x00000000, 6, 0x00000000, 0x00000000, 0x00000040, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47582, 0x00000000, 6, 0x00000000, 0x00000000, 0x00000040, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(48159, 0x00000000, 6, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(48160, 0x00000000, 6, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(48483, 0x00000000, 7, 0x00008800, 0x00000440, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(48484, 0x00000000, 7, 0x00008800, 0x00000440, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(48485, 0x00000000, 7, 0x00008800, 0x00000440, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(48496, 0x00000000, 7, 0x00000060, 0x02000002, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(48499, 0x00000000, 7, 0x00000060, 0x02000002, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(48500, 0x00000000, 7, 0x00000060, 0x02000002, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(48506, 0x00000000, 7, 0x00000005, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(48510, 0x00000000, 7, 0x00000005, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(48511, 0x00000000, 7, 0x00000005, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(48516, 0x00000000, 7, 0x00000005, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 30), +(48521, 0x00000000, 7, 0x00000005, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 30), +(48525, 0x00000000, 7, 0x00000005, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 30), +(48833, 0x00000000, 7, 0x00000000, 0x00000440, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(48835, 0x00000000, 10, 0x00000000, 0x00000008, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(48837, 0x00000000, 11, 0x90100000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(48951, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(48952, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(48988, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(49018, 0x00000000, 15, 0x01400000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(49137, 0x00000000, 15, 0x00000000, 0x00004000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(49188, 0x00000000, 15, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(49208, 0x00000000, 15, 0x00440000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(49222, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(49280, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(49281, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(49283, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(49284, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(49503, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(49504, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(49529, 0x00000000, 15, 0x01400000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(49530, 0x00000000, 15, 0x01400000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(49531, 0x00000000, 15, 0x01400000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(49532, 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), +(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), +(51128, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(51129, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(51130, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(51346, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 10), +(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), +(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), +(51562, 0x00000000, 11, 0x00000100, 0x00000000, 0x00000010, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(51563, 0x00000000, 11, 0x00000100, 0x00000000, 0x00000010, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(51564, 0x00000000, 11, 0x00000100, 0x00000000, 0x00000010, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(51565, 0x00000000, 11, 0x00000100, 0x00000000, 0x00000010, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(51566, 0x00000000, 11, 0x00000100, 0x00000000, 0x00000010, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(51625, 0x00000000, 8, 0x1000A000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(51626, 0x00000000, 8, 0x1000A000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(51627, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000070, 0.000000, 0.000000, 0), +(51628, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000070, 0.000000, 0.000000, 0), +(51629, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000070, 0.000000, 0.000000, 0), +(51634, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(51635, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(51636, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(51664, 0x00000000, 8, 0x00020000, 0x00000008, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(51665, 0x00000000, 8, 0x00020000, 0x00000008, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(51667, 0x00000000, 8, 0x00020000, 0x00000008, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(51668, 0x00000000, 8, 0x00020000, 0x00000008, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(51669, 0x00000000, 8, 0x00020000, 0x00000008, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(51672, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000010, 0.000000, 0.000000, 1), +(51674, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000010, 0.000000, 0.000000, 1), +(51679, 0x00000000, 8, 0x00000001, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(51692, 0x00000000, 8, 0x00000200, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(51696, 0x00000000, 8, 0x00000200, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(51698, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 1), +(51700, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 1), +(51701, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 1), +(52020, 0x00000000, 7, 0x00008000, 0x00100000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(52127, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(52129, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(52131, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(52134, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(52136, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(52138, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(52420, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 30), +(52423, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000020, 0.000000, 0.000000, 0), +(52795, 0x00000000, 6, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(52797, 0x00000000, 6, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(52798, 0x00000000, 6, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(52799, 0x00000000, 6, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(52800, 0x00000000, 6, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(52898, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(53137, 0x00000000, 15, 0x01400000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(53138, 0x00000000, 15, 0x01400000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(53215, 0x00000000, 9, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(53216, 0x00000000, 9, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(53217, 0x00000000, 9, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(53221, 0x00000000, 9, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(53222, 0x00000000, 9, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(53224, 0x00000000, 9, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(53228, 0x00000000, 9, 0x00000020, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(53232, 0x00000000, 9, 0x00000020, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(53256, 0x00000000, 9, 0x00000800, 0x00800001, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(53259, 0x00000000, 9, 0x00000800, 0x00800001, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(53260, 0x00000000, 9, 0x00000800, 0x00800001, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(53290, 0x00000000, 9, 0x00000800, 0x7FFFFFFF, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(53291, 0x00000000, 9, 0x00000800, 0x7FFFFFFF, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(53292, 0x00000000, 9, 0x00000800, 0x7FFFFFFF, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(53293, 0x00000000, 9, 0x00000800, 0x7FFFFFFF, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(53294, 0x00000000, 9, 0x00000800, 0x7FFFFFFF, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(53380, 0x00000000, 10, 0x00800000, 0x00020000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(53381, 0x00000000, 10, 0x00800000, 0x00020000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(53382, 0x00000000, 10, 0x00800000, 0x00020000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(53383, 0x00000000, 10, 0x00800000, 0x00020000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(53384, 0x00000000, 10, 0x00800000, 0x00020000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(53486, 0x00000000, 10, 0x00800000, 0x00028000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(53488, 0x00000000, 10, 0x00800000, 0x00028000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(53551, 0x00000000, 10, 0x00001000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(53552, 0x00000000, 10, 0x00001000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(53553, 0x00000000, 10, 0x00001000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(53569, 0x00000000, 10, 0x00200000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(53576, 0x00000000, 10, 0x00200000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(54149, 0x00000000, 10, 0x00200000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(54486, 0x00000000, 0, 0x20000021, 0x00009000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(54488, 0x00000000, 0, 0x20000021, 0x00009000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(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), +(54738, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 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), +(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), +(55440, 0x00000000, 11, 0x00000040, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(55620, 0x00000000, 15, 0x00000001, 0x08000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(55623, 0x00000000, 15, 0x00000001, 0x08000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(55666, 0x00000000, 15, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(55667, 0x00000000, 15, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(55668, 0x00000000, 15, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(55669, 0x00000000, 15, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(55670, 0x00000000, 15, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(55677, 0x00000000, 6, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(55680, 0x00000000, 6, 0x00000200, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(55689, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(56218, 0x00000000, 5, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(56342, 0x00000000, 9, 0x00004000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(56343, 0x00000000, 9, 0x00004000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(56344, 0x00000000, 9, 0x00004000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(56364, 0x00000000, 3, 0x00000000, 0x01000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(56451, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(56611, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(56612, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(56613, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(56614, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(56636, 0x00000000, 4, 0x00000020, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(56637, 0x00000000, 4, 0x00000020, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(56638, 0x00000000, 4, 0x00000020, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(56821, 0x00000000, 8, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(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), +(57878, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000010, 0.000000, 0.000000, 0), +(57880, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000010, 0.000000, 0.000000, 0), +(57881, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000010, 0.000000, 0.000000, 0), +(57960, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(58357, 0x00000000, 4, 0x00000040, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(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), +(58435, 0x00000000, 5, 0x00000002, 0x00000100, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(58436, 0x00000000, 5, 0x00000002, 0x00000100, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(58437, 0x00000000, 5, 0x00000002, 0x00000100, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(58616, 0x00000000, 15, 0x00040000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(58620, 0x00000000, 15, 0x00000000, 0x00004000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(58626, 0x00000000, 15, 0x02000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(58631, 0x00000000, 15, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(58642, 0x00000000, 15, 0x00000000, 0x08000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(58644, 0x00000000, 15, 0x00000000, 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(58647, 0x00000000, 15, 0x00000000, 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(58676, 0x00000000, 15, 0x00000000, 0x00000008, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(58677, 0x00000000, 15, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 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), +(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), +(59725, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000800, 0.000000, 0.000000, 0), +(60132, 0x00000000, 15, 0x00000000, 0x08020000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(60172, 0x00000000, 5, 0x00040000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(60200, 0x00000000, 15, 0x00001000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(60537, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(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), +(60573, 0x00000000, 11, 0x90100000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(60574, 0x00000000, 11, 0x90100000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(60575, 0x00000000, 11, 0x90100000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(60617, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000020, 0.000000, 0.000000, 0), +(60710, 0x00000000, 7, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(60717, 0x00000000, 7, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(60719, 0x00000000, 7, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(60722, 0x00000000, 7, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(60724, 0x00000000, 7, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(60726, 0x00000000, 7, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(60770, 0x00000000, 11, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(60818, 0x00000000, 10, 0x00000000, 0x00000200, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(60826, 0x00000000, 15, 0x01400000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(61324, 0x00000000, 10, 0x00000000, 0x00020000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); /*!40000 ALTER TABLE `spell_proc_event` ENABLE KEYS */; UNLOCK TABLES; diff --git a/sql/updates/7034_01_mangos_spell_proc_event.sql b/sql/updates/7034_01_mangos_spell_proc_event.sql new file mode 100644 index 000000000..c7bc44bc4 --- /dev/null +++ b/sql/updates/7034_01_mangos_spell_proc_event.sql @@ -0,0 +1,798 @@ +ALTER TABLE db_version CHANGE COLUMN required_7033_01_mangos_spell_proc_event required_7034_01_mangos_spell_proc_event bit; + +DROP TABLE IF EXISTS `spell_proc_event`; +CREATE TABLE `spell_proc_event` ( + `entry` smallint(5) unsigned NOT NULL default '0', + `SchoolMask` tinyint(4) NOT NULL default '0', + `SpellFamilyName` smallint(5) unsigned NOT NULL default '0', + `SpellFamilyMask0` int(10) unsigned NOT NULL default '0', + `SpellFamilyMask1` int(10) unsigned NOT NULL default '0', + `SpellFamilyMask2` int(10) unsigned NOT NULL default '0', + `procFlags` int(10) unsigned NOT NULL default '0', + `procEx` int(10) unsigned NOT NULL default '0', + `ppmRate` float NOT NULL default '0', + `CustomChance` float NOT NULL default '0', + `Cooldown` int(10) unsigned NOT NULL default '0', + PRIMARY KEY (`entry`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + +INSERT INTO `spell_proc_event` VALUES +( 324, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +( 325, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +( 905, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +( 945, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +( 974, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +( 1463, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0.000000, 0.000000, 0), +( 3232, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +( 5952, 0x00000000, 8, 0x00000001, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +( 6346, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000100, 0.000000, 0.000000, 0), +( 7383, 0x00000001, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000100, 0.000000, 0.000000, 0), +( 7434, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +( 8134, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +( 8178, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +( 8494, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0.000000, 0.000000, 0), +( 8495, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0.000000, 0.000000, 0), +( 9452, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 3.000000, 0.000000, 0), +( 9782, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +( 9784, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +( 9799, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(10191, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0.000000, 0.000000, 0), +(10192, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0.000000, 0.000000, 0), +(10193, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0.000000, 0.000000, 0), +(10431, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(10432, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(11095, 0x00000000, 3, 0x00000010, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(11119, 0x00000004, 3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(11120, 0x00000004, 3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(11129, 0x00000000, 3, 0x00C00017, 0x00000040, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(11180, 0x00000010, 3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(11185, 0x00000000, 3, 0x00000080, 0x00000000, 0x00000000, 0x00050000, 0x00000000, 0.000000, 0.000000, 0), +(11255, 0x00000000, 3, 0x00004000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(12169, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(12281, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 6), +(12289, 0x00000000, 4, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(12298, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(12311, 0x00000000, 4, 0x00000800, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(12317, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(12319, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(12322, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 2.000000, 0.000000, 0), +(12487, 0x00000000, 3, 0x00000080, 0x00000000, 0x00000000, 0x00050000, 0x00000000, 0.000000, 0.000000, 0), +(12488, 0x00000000, 3, 0x00000080, 0x00000000, 0x00000000, 0x00050000, 0x00000000, 0.000000, 0.000000, 0), +(12598, 0x00000000, 3, 0x00004000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(12668, 0x00000000, 4, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(12724, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(12725, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(12726, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(12727, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(12797, 0x00000000, 4, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(12799, 0x00000000, 4, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(12812, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 6), +(12813, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 6), +(12814, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 6), +(12815, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 6), +(12834, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(12846, 0x00000004, 3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(12847, 0x00000004, 3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(12848, 0x00000004, 3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(12849, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(12867, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(12872, 0x00000000, 3, 0x00000010, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(12873, 0x00000000, 3, 0x00000010, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(12958, 0x00000000, 4, 0x00000800, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(12966, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(12967, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(12968, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(12969, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(12970, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(12971, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(12972, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(12973, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(12974, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(12999, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 4.000000, 0.000000, 0), +(13000, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 6.000000, 0.000000, 0), +(13001, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 8.000000, 0.000000, 0), +(13002, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 10.000000, 0.000000, 0), +(13045, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(13046, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(13047, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(13048, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(13165, 0x00000000, 9, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(13754, 0x00000000, 8, 0x00000010, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(13867, 0x00000000, 8, 0x00000010, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(13983, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000018, 0.000000, 0.000000, 0), +(14070, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000018, 0.000000, 0.000000, 0), +(14071, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000018, 0.000000, 0.000000, 0), +(14156, 0x00000000, 8, 0x003E0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(14160, 0x00000000, 8, 0x003E0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(14161, 0x00000000, 8, 0x003E0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(14186, 0x00000000, 8, 0x40800508, 0x00000002, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(14190, 0x00000000, 8, 0x40800508, 0x00000002, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(14193, 0x00000000, 8, 0x40800508, 0x00000002, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(14194, 0x00000000, 8, 0x40800508, 0x00000002, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(14195, 0x00000000, 8, 0x40800508, 0x00000002, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(14318, 0x00000000, 9, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(14319, 0x00000000, 9, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(14320, 0x00000000, 9, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(14321, 0x00000000, 9, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(14322, 0x00000000, 9, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(14531, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(14774, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(14892, 0x00000000, 6, 0x10001E00, 0x00000004, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(15088, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(15128, 0x00000004, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(15268, 0x00000020, 6, 0x06080000, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(15277, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 6.000000, 0.000000, 0), +(15286, 0x00000020, 6, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(15323, 0x00000020, 6, 0x06080000, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(15324, 0x00000020, 6, 0x06080000, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(15325, 0x00000020, 6, 0x06080000, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(15326, 0x00000020, 6, 0x06080000, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(15337, 0x00000000, 6, 0x00002000, 0x00000002, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(15338, 0x00000000, 6, 0x00002000, 0x00000002, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(15346, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 6.000000, 0.000000, 0), +(15362, 0x00000000, 6, 0x10001E00, 0x00000004, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(15363, 0x00000000, 6, 0x10001E00, 0x00000004, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(15600, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 1.000000, 0.000000, 0), +(16164, 0x00000000, 11, 0x90100003, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16176, 0x00000000, 11, 0x000001C0, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16180, 0x00000000, 11, 0x000000C0, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16196, 0x00000000, 11, 0x000000C0, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16198, 0x00000000, 11, 0x000000C0, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16235, 0x00000000, 11, 0x000001C0, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16240, 0x00000000, 11, 0x000001C0, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16256, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16257, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(16277, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(16278, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(16279, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(16280, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(16281, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16282, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16283, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16284, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16487, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16489, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16492, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16550, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16620, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 30), +(16624, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(16850, 0x00000000, 7, 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(16864, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 2.000000, 0.000000, 0), +(16880, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16923, 0x00000000, 7, 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(16924, 0x00000000, 7, 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(16952, 0x00000000, 7, 0x00039000, 0x00000400, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16954, 0x00000000, 7, 0x00039000, 0x00000400, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16958, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(16961, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(17106, 0x00000000, 7, 0x00080000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(17107, 0x00000000, 7, 0x00080000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(17108, 0x00000000, 7, 0x00080000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(17364, 0x00000008, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(17495, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(17793, 0x00000000, 5, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(17794, 0x00000020, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0.000000, 0.000000, 0), +(17796, 0x00000000, 5, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(17797, 0x00000020, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(17798, 0x00000020, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(17799, 0x00000020, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(17800, 0x00000020, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(17801, 0x00000000, 5, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(17802, 0x00000000, 5, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(17803, 0x00000000, 5, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(18073, 0x00000000, 5, 0x00000060, 0x00000080, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(18094, 0x00000000, 5, 0x0000000A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(18095, 0x00000000, 5, 0x0000000A, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(18096, 0x00000000, 5, 0x00000060, 0x00000080, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(18119, 0x00000000, 5, 0x000003E5, 0x000010C0, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(18120, 0x00000000, 5, 0x000003E5, 0x000010C0, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(18820, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(19184, 0x00000000, 9, 0x00000014, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(19228, 0x00000000, 0, 0x00000040, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(19232, 0x00000000, 9, 0x00000040, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(19233, 0x00000000, 9, 0x00000040, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(19387, 0x00000000, 9, 0x00000014, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(19388, 0x00000000, 9, 0x00000014, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(19572, 0x00000000, 9, 0x00800000, 0x00000000, 0x00000000, 0x00004000, 0x00000000, 0.000000, 0.000000, 0), +(19573, 0x00000000, 9, 0x00800000, 0x00000000, 0x00000000, 0x00004000, 0x00000000, 0.000000, 0.000000, 0), +(20049, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(20056, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(20057, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(20128, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(20131, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(20132, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(20164, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 5.000000, 0.000000, 0), +(20165, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 20.000000, 0.000000, 0), +(20166, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 20.000000, 0.000000, 0), +(20182, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(20210, 0x00000000, 10, 0xC0200000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(20212, 0x00000000, 10, 0xC0200000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(20213, 0x00000000, 10, 0xC0200000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(20214, 0x00000000, 10, 0xC0200000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(20215, 0x00000000, 10, 0xC0200000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(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), +(20375, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 7.000000, 0.000000, 0), +(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), +(20911, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000070, 0.000000, 0.000000, 0), +(20925, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(20927, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(20928, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(21185, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 10), +(21882, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(21890, 0x00000000, 4, 0x2A764EEF, 0x0000036C, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(22007, 0x00000000, 3, 0x00200021, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(22618, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(22648, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(23547, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000020, 0.000000, 0.000000, 0), +(23548, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(23551, 0x00000000, 11, 0x000000C0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(23552, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(23572, 0x00000000, 11, 0x000000C0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(23578, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 2.000000, 0.000000, 0), +(23581, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 2.000000, 0.000000, 0), +(23602, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(23686, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 2.000000, 0.000000, 0), +(23688, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(23689, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 4.000000, 0.000000, 0), +(23695, 0x00000000, 4, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(23721, 0x00000000, 9, 0x00000800, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(23920, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000800, 0.000000, 0.000000, 0), +(24353, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(24389, 0x00000000, 3, 0x00C00017, 0x00000040, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(24398, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(24658, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00014110, 0x00000000, 0.000000, 0.000000, 0), +(24905, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 15.000000, 0.000000, 0), +(24932, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 6), +(25050, 0x00000004, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(25296, 0x00000000, 9, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(25469, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(25472, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(25669, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 1.000000, 0.000000, 0), +(25899, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000070, 0.000000, 0.000000, 0), +(25988, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(26016, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 2.000000, 0.000000, 0), +(26107, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000064, 0.000000, 0.000000, 0), +(26119, 0x00000000, 10, 0x90100003, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(26128, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000008, 0.000000, 0.000000, 0), +(26135, 0x00000000, 10, 0x00800000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(26480, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 3.000000, 0.000000, 0), +(26605, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(27044, 0x00000000, 9, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(27131, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0.000000, 0.000000, 0), +(27179, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(27419, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 3.000000, 0.000000, 0), +(27498, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 3.000000, 0.000000, 0), +(27521, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(27656, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 3.000000, 0.000000, 0), +(27774, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(27787, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 3.000000, 0.000000, 0), +(27811, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(27815, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(27816, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(28592, 0x00000010, 3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(28593, 0x00000010, 3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(28716, 0x00000000, 7, 0x00000010, 0x00000000, 0x00000000, 0x00048000, 0x00000000, 0.000000, 0.000000, 0), +(28719, 0x00000000, 7, 0x00000020, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(28744, 0x00000000, 7, 0x00000040, 0x00000000, 0x00000000, 0x00044000, 0x00000000, 0.000000, 0.000000, 0), +(28752, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(28789, 0x00000000, 10, 0xC0000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(28802, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(28809, 0x00000000, 6, 0x00001000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(28812, 0x00000000, 8, 0x02000006, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(28816, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 3.000000, 0.000000, 0), +(28823, 0x00000000, 11, 0x000000C0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(28847, 0x00000000, 7, 0x00000020, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(28849, 0x00000000, 11, 0x00000080, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(29074, 0x00000014, 3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(29075, 0x00000014, 3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(29076, 0x00000014, 3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(29150, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 3.000000, 0.000000, 0), +(29179, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(29180, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(29385, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 7.000000, 0.000000, 0), +(29441, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000008, 0.000000, 0.000000, 1), +(29444, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000008, 0.000000, 0.000000, 1), +(29455, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(29501, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 3.000000, 0.000000, 0), +(29593, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000070, 0.000000, 0.000000, 0), +(29594, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000070, 0.000000, 0.000000, 0), +(29624, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 3.000000, 0.000000, 0), +(29625, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 3.000000, 0.000000, 0), +(29626, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 3.000000, 0.000000, 0), +(29632, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 3.000000, 0.000000, 0), +(29633, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 3.000000, 0.000000, 0), +(29634, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 3.000000, 0.000000, 0), +(29635, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 3.000000, 0.000000, 0), +(29636, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 3.000000, 0.000000, 0), +(29637, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 3.000000, 0.000000, 0), +(29801, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(29834, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(29838, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(29977, 0x00000000, 3, 0x00C00017, 0x00000040, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(30003, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000800, 0.000000, 0.000000, 0), +(30160, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(30293, 0x00000000, 5, 0x00000381, 0x000000C0, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(30295, 0x00000000, 5, 0x00000381, 0x000000C0, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(30296, 0x00000000, 5, 0x00000381, 0x000000C0, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(30299, 0x00000024, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(30301, 0x00000024, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(30302, 0x00000024, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(30675, 0x00000000, 11, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(30678, 0x00000000, 11, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(30679, 0x00000000, 11, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(30680, 0x00000000, 11, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(30681, 0x00000000, 11, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(30701, 0x0000001C, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(30705, 0x0000001C, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(30802, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(30803, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(30804, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(30805, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(30806, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(30807, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(30808, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(30809, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(30810, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(30811, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(30823, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 10.500000, 0.000000, 0), +(30881, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 5), +(30883, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 5), +(30884, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 5), +(30885, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 5), +(30886, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 5), +(30937, 0x00000020, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(31124, 0x00000000, 8, 0x2000000E, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(31126, 0x00000000, 8, 0x2000000E, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(31244, 0x00000000, 8, 0x003E0000, 0x00000009, 0x00000000, 0x00000000, 0x00000004, 0.000000, 0.000000, 0), +(31245, 0x00000000, 8, 0x003E0000, 0x00000009, 0x00000000, 0x00000000, 0x00000004, 0.000000, 0.000000, 0), +(31394, 0x00000020, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(31569, 0x00000000, 3, 0x00010000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(31570, 0x00000000, 3, 0x00010000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(31785, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00008800, 0x00000000, 0.000000, 0.000000, 0), +(31794, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(31801, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 20.000000, 0.000000, 0), +(31833, 0x00000000, 10, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(31835, 0x00000000, 10, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(31836, 0x00000000, 10, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(31904, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(32385, 0x00000000, 5, 0x00000402, 0x00000011, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(32387, 0x00000000, 5, 0x00000402, 0x00000011, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(32392, 0x00000000, 5, 0x00000402, 0x00000011, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(32393, 0x00000000, 5, 0x00000402, 0x00000011, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(32394, 0x00000000, 5, 0x00000402, 0x00000011, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(32587, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(32593, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(32594, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(32642, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(32734, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(32748, 0x00000000, 8, 0x00000000, 0x00000001, 0x00000000, 0x00000140, 0x00000000, 0.000000, 0.000000, 0), +(32776, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(32777, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(32837, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 45), +(32844, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 2.000000, 0.000000, 0), +(32885, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(33076, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x000A02A8, 0x00000000, 0.000000, 0.000000, 0), +(33089, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(33127, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 7.000000, 0.000000, 0), +(33142, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(33145, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(33146, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(33150, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(33151, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(33154, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(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), +(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), +(33719, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000800, 0.000000, 0.000000, 0), +(33736, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(33746, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 10), +(33757, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(33759, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 10), +(33776, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00008800, 0x00000000, 0.000000, 0.000000, 0), +(33881, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(33882, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(33883, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(34080, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000008, 0.000000, 0.000000, 0), +(34138, 0x00000000, 11, 0x00000080, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(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), +(34355, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(34497, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(34498, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(34499, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(34500, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(34502, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(34503, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(34584, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 30), +(34586, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 1.500000, 0.000000, 0), +(34598, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), +(34749, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000008, 0.000000, 0.000000, 0), +(34753, 0x00000000, 6, 0x00001800, 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(34774, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 1.500000, 0.000000, 20), +(34783, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000800, 0.000000, 0.000000, 0), +(34827, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(34859, 0x00000000, 6, 0x00001800, 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(34860, 0x00000000, 6, 0x00001800, 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(34914, 0x00000000, 6, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(34916, 0x00000000, 6, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(34917, 0x00000000, 6, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(34935, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 8), +(34938, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 8), +(34939, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 8), +(34950, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(34954, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(35077, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 60), +(35080, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 1.000000, 0.000000, 60), +(35083, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 60), +(35086, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 60), +(35100, 0x00000000, 9, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(35102, 0x00000000, 9, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(35103, 0x00000000, 9, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(35121, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(36096, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000800, 0.000000, 0.000000, 0), +(36111, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(37165, 0x00000000, 8, 0x00200400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(37168, 0x00000000, 8, 0x003E0000, 0x00000009, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(37170, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 1.000000, 0.000000, 0), +(37173, 0x00000000, 8, 0x2CBC0598, 0x00000106, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 30), +(37189, 0x00000000, 10, 0xC0000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 60), +(37193, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(37195, 0x00000000, 10, 0x00800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(37197, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 45), +(37213, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(37214, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(37227, 0x00000000, 11, 0x000001C0, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 60), +(37237, 0x00000000, 11, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(37247, 0x00000008, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 45), +(37377, 0x00000020, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(37384, 0x00000000, 5, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(37443, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(37514, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000020, 0.000000, 0.000000, 0), +(37516, 0x00000000, 4, 0x00000400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(37519, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000030, 0.000000, 0.000000, 0), +(37523, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(37528, 0x00000000, 4, 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(37536, 0x00000000, 4, 0x00010000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(37568, 0x00000000, 6, 0x00000800, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(37594, 0x00000000, 6, 0x00001000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(37600, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(37601, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(37603, 0x00000000, 6, 0x00008000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(37655, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 60), +(37657, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 3), +(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), +(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), +(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), +(39027, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(39372, 0x00000030, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(39437, 0x00000004, 5, 0x00001364, 0x000000C0, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(39442, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0.000000, 0.000000, 0), +(39443, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(39530, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(39958, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.700000, 0.000000, 40), +(40407, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 6.000000, 0.000000, 0), +(40438, 0x00000000, 6, 0x00008040, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(40442, 0x00000000, 7, 0x00000014, 0x00000440, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(40444, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(40458, 0x00000000, 4, 0x02000000, 0x00000601, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(40463, 0x00000000, 11, 0x00000081, 0x00000010, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(40470, 0x00000000, 10, 0xC0800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(40475, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 3.000000, 0.000000, 0), +(40478, 0x00000000, 5, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(40482, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(40485, 0x00000000, 9, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(40899, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(41034, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0.000000, 0.000000, 0), +(41260, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 10), +(41262, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 10), +(41381, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000100, 0.000000, 0.000000, 0), +(41393, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000020, 0.000000, 0.000000, 0), +(41434, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 2.000000, 0.000000, 45), +(41469, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 7.000000, 0.000000, 0), +(41635, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x000A02A8, 0x00000000, 0.000000, 0.000000, 0), +(41989, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.500000, 0.000000, 0), +(42083, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 45), +(42135, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 90), +(42136, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 90), +(42368, 0x00000000, 10, 0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(42370, 0x00000000, 11, 0x00000040, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(43019, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0.000000, 0.000000, 0), +(43020, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000400, 0.000000, 0.000000, 0), +(43338, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(43443, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000800, 0.000000, 0.000000, 0), +(43726, 0x00000000, 10, 0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(43728, 0x00000000, 11, 0x00000080, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(43737, 0x00000000, 7, 0x00000000, 0x00000440, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 10), +(43739, 0x00000000, 7, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(43741, 0x00000000, 10, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(43745, 0x00000000, 10, 0x00000000, 0x00000200, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(43748, 0x00000000, 11, 0x90100000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(43750, 0x00000000, 11, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(43819, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(44404, 0x00000000, 3, 0x20000021, 0x00009000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(44445, 0x00000000, 3, 0x00000013, 0x00001000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(44446, 0x00000000, 3, 0x00000013, 0x00001000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(44448, 0x00000000, 3, 0x00000013, 0x00001000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(44835, 0x00000000, 7, 0x00000000, 0x00000080, 0x00000000, 0x00000010, 0x00000000, 0.000000, 0.000000, 0), +(45054, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 15), +(45057, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 30), +(45234, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(45243, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(45244, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(45354, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), +(45481, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), +(45482, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), +(45483, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), +(45484, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00004000, 0x00000000, 0.000000, 0.000000, 45), +(46025, 0x00000020, 6, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(46092, 0x00000000, 10, 0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(46098, 0x00000000, 11, 0x00000080, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(46569, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), +(46662, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 20), +(46832, 0x00000000, 7, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(46854, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(46855, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(46867, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(46913, 0x00000000, 4, 0x00000000, 0x00000400, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(46914, 0x00000000, 4, 0x00000000, 0x00000400, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(46915, 0x00000000, 4, 0x00000000, 0x00000400, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(46916, 0x00000000, 4, 0x00000000, 0x00000400, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(46951, 0x00000000, 4, 0x00000400, 0x00000040, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(46952, 0x00000000, 0, 0x00000400, 0x00000040, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(46953, 0x00000000, 0, 0x00000400, 0x00000040, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47195, 0x00000000, 5, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 30), +(47196, 0x00000000, 5, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 30), +(47197, 0x00000000, 5, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 30), +(47201, 0x00000000, 5, 0x00000008, 0x00040000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(47202, 0x00000000, 5, 0x00000008, 0x00040000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47203, 0x00000000, 5, 0x00000008, 0x00040000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47204, 0x00000000, 5, 0x00000008, 0x00040000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47205, 0x00000000, 5, 0x00000008, 0x00040000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47232, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(47234, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(47235, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(47245, 0x00000020, 5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47246, 0x00000020, 5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47247, 0x00000020, 5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47258, 0x00000000, 5, 0x00000000, 0x00800000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(47259, 0x00000000, 5, 0x00000000, 0x00800000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(47260, 0x00000000, 5, 0x00000000, 0x00800000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(47263, 0x00000020, 5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 20), +(47264, 0x00000020, 5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 20), +(47265, 0x00000020, 5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 20), +(47509, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(47511, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(47515, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(47516, 0x00000000, 6, 0x00001800, 0x00008000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47517, 0x00000000, 6, 0x00001800, 0x00008000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47535, 0x00000000, 6, 0x00001800, 0x00008000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47536, 0x00000000, 6, 0x00001800, 0x00008000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47537, 0x00000000, 6, 0x00001800, 0x00008000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47538, 0x00000000, 6, 0x00001800, 0x00008000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47539, 0x00000000, 6, 0x00001800, 0x00008000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47572, 0x00000000, 6, 0x00010000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47580, 0x00000000, 6, 0x00000000, 0x00000000, 0x00000040, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47581, 0x00000000, 6, 0x00000000, 0x00000000, 0x00000040, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47582, 0x00000000, 6, 0x00000000, 0x00000000, 0x00000040, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(48159, 0x00000000, 6, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(48160, 0x00000000, 6, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(48483, 0x00000000, 7, 0x00008800, 0x00000440, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(48484, 0x00000000, 7, 0x00008800, 0x00000440, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(48485, 0x00000000, 7, 0x00008800, 0x00000440, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(48496, 0x00000000, 7, 0x00000060, 0x02000002, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(48499, 0x00000000, 7, 0x00000060, 0x02000002, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(48500, 0x00000000, 7, 0x00000060, 0x02000002, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(48506, 0x00000000, 7, 0x00000005, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(48510, 0x00000000, 7, 0x00000005, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(48511, 0x00000000, 7, 0x00000005, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(48516, 0x00000000, 7, 0x00000005, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 30), +(48521, 0x00000000, 7, 0x00000005, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 30), +(48525, 0x00000000, 7, 0x00000005, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 30), +(48833, 0x00000000, 7, 0x00000000, 0x00000440, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(48835, 0x00000000, 10, 0x00000000, 0x00000008, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(48837, 0x00000000, 11, 0x90100000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(48951, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(48952, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), +(48988, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(49018, 0x00000000, 15, 0x01400000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(49137, 0x00000000, 15, 0x00000000, 0x00004000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(49188, 0x00000000, 15, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(49208, 0x00000000, 15, 0x00440000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(49222, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(49280, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(49281, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(49283, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(49284, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(49503, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(49504, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(49529, 0x00000000, 15, 0x01400000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(49530, 0x00000000, 15, 0x01400000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(49531, 0x00000000, 15, 0x01400000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(49532, 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), +(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), +(51128, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(51129, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(51130, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(51346, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 10), +(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), +(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), +(51562, 0x00000000, 11, 0x00000100, 0x00000000, 0x00000010, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(51563, 0x00000000, 11, 0x00000100, 0x00000000, 0x00000010, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(51564, 0x00000000, 11, 0x00000100, 0x00000000, 0x00000010, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(51565, 0x00000000, 11, 0x00000100, 0x00000000, 0x00000010, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(51566, 0x00000000, 11, 0x00000100, 0x00000000, 0x00000010, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(51625, 0x00000000, 8, 0x1000A000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(51626, 0x00000000, 8, 0x1000A000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(51627, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000070, 0.000000, 0.000000, 0), +(51628, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000070, 0.000000, 0.000000, 0), +(51629, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000070, 0.000000, 0.000000, 0), +(51634, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(51635, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(51636, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(51664, 0x00000000, 8, 0x00020000, 0x00000008, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(51665, 0x00000000, 8, 0x00020000, 0x00000008, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(51667, 0x00000000, 8, 0x00020000, 0x00000008, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(51668, 0x00000000, 8, 0x00020000, 0x00000008, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(51669, 0x00000000, 8, 0x00020000, 0x00000008, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(51672, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000010, 0.000000, 0.000000, 1), +(51674, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000010, 0.000000, 0.000000, 1), +(51679, 0x00000000, 8, 0x00000001, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(51692, 0x00000000, 8, 0x00000200, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(51696, 0x00000000, 8, 0x00000200, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(51698, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 1), +(51700, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 1), +(51701, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 1), +(52020, 0x00000000, 7, 0x00008000, 0x00100000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(52127, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(52129, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(52131, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(52134, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(52136, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(52138, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(52420, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 30), +(52423, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000020, 0.000000, 0.000000, 0), +(52795, 0x00000000, 6, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(52797, 0x00000000, 6, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(52798, 0x00000000, 6, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(52799, 0x00000000, 6, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(52800, 0x00000000, 6, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(52898, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(53137, 0x00000000, 15, 0x01400000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(53138, 0x00000000, 15, 0x01400000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(53215, 0x00000000, 9, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(53216, 0x00000000, 9, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(53217, 0x00000000, 9, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(53221, 0x00000000, 9, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(53222, 0x00000000, 9, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(53224, 0x00000000, 9, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(53228, 0x00000000, 9, 0x00000020, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(53232, 0x00000000, 9, 0x00000020, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(53256, 0x00000000, 9, 0x00000800, 0x00800001, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(53259, 0x00000000, 9, 0x00000800, 0x00800001, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(53260, 0x00000000, 9, 0x00000800, 0x00800001, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(53290, 0x00000000, 9, 0x00000800, 0x7FFFFFFF, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(53291, 0x00000000, 9, 0x00000800, 0x7FFFFFFF, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(53292, 0x00000000, 9, 0x00000800, 0x7FFFFFFF, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(53293, 0x00000000, 9, 0x00000800, 0x7FFFFFFF, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(53294, 0x00000000, 9, 0x00000800, 0x7FFFFFFF, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(53380, 0x00000000, 10, 0x00800000, 0x00020000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(53381, 0x00000000, 10, 0x00800000, 0x00020000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(53382, 0x00000000, 10, 0x00800000, 0x00020000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(53383, 0x00000000, 10, 0x00800000, 0x00020000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(53384, 0x00000000, 10, 0x00800000, 0x00020000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(53486, 0x00000000, 10, 0x00800000, 0x00028000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(53488, 0x00000000, 10, 0x00800000, 0x00028000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(53551, 0x00000000, 10, 0x00001000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(53552, 0x00000000, 10, 0x00001000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(53553, 0x00000000, 10, 0x00001000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(53569, 0x00000000, 10, 0x00200000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(53576, 0x00000000, 10, 0x00200000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(54149, 0x00000000, 10, 0x00200000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(54486, 0x00000000, 0, 0x20000021, 0x00009000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(54488, 0x00000000, 0, 0x20000021, 0x00009000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(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), +(54738, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 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), +(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), +(55440, 0x00000000, 11, 0x00000040, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(55620, 0x00000000, 15, 0x00000001, 0x08000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(55623, 0x00000000, 15, 0x00000001, 0x08000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(55666, 0x00000000, 15, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(55667, 0x00000000, 15, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(55668, 0x00000000, 15, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(55669, 0x00000000, 15, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(55670, 0x00000000, 15, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(55677, 0x00000000, 6, 0x00000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(55680, 0x00000000, 6, 0x00000200, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(55689, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(56218, 0x00000000, 5, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(56342, 0x00000000, 9, 0x00004000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(56343, 0x00000000, 9, 0x00004000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(56344, 0x00000000, 9, 0x00004000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(56364, 0x00000000, 3, 0x00000000, 0x01000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(56451, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(56611, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(56612, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(56613, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(56614, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(56636, 0x00000000, 4, 0x00000020, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(56637, 0x00000000, 4, 0x00000020, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(56638, 0x00000000, 4, 0x00000020, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(56821, 0x00000000, 8, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(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), +(57878, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000010, 0.000000, 0.000000, 0), +(57880, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000010, 0.000000, 0.000000, 0), +(57881, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000010, 0.000000, 0.000000, 0), +(57960, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), +(58357, 0x00000000, 4, 0x00000040, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(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), +(58435, 0x00000000, 5, 0x00000002, 0x00000100, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(58436, 0x00000000, 5, 0x00000002, 0x00000100, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(58437, 0x00000000, 5, 0x00000002, 0x00000100, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(58616, 0x00000000, 15, 0x00040000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(58620, 0x00000000, 15, 0x00000000, 0x00004000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(58626, 0x00000000, 15, 0x02000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(58631, 0x00000000, 15, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(58642, 0x00000000, 15, 0x00000000, 0x08000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(58644, 0x00000000, 15, 0x00000000, 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(58647, 0x00000000, 15, 0x00000000, 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(58676, 0x00000000, 15, 0x00000000, 0x00000008, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(58677, 0x00000000, 15, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 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), +(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), +(59725, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000800, 0.000000, 0.000000, 0), +(60132, 0x00000000, 15, 0x00000000, 0x08020000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(60172, 0x00000000, 5, 0x00040000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(60200, 0x00000000, 15, 0x00001000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(60537, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(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), +(60573, 0x00000000, 11, 0x90100000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(60574, 0x00000000, 11, 0x90100000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(60575, 0x00000000, 11, 0x90100000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(60617, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000020, 0.000000, 0.000000, 0), +(60710, 0x00000000, 7, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(60717, 0x00000000, 7, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(60719, 0x00000000, 7, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(60722, 0x00000000, 7, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(60724, 0x00000000, 7, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(60726, 0x00000000, 7, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(60770, 0x00000000, 11, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(60818, 0x00000000, 10, 0x00000000, 0x00000200, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(60826, 0x00000000, 15, 0x01400000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(61324, 0x00000000, 10, 0x00000000, 0x00020000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); \ No newline at end of file diff --git a/sql/updates/Makefile.am b/sql/updates/Makefile.am index 71cee61e7..9926b5a80 100644 --- a/sql/updates/Makefile.am +++ b/sql/updates/Makefile.am @@ -113,6 +113,7 @@ pkgdata_DATA = \ 7026_01_mangos_battleground_template.sql \ 7031_01_mangos_spell_proc_event.sql \ 7033_01_mangos_spell_proc_event.sql \ + 7034_01_mangos_spell_proc_event.sql \ README ## Additional files to include when running 'make dist' @@ -206,4 +207,5 @@ EXTRA_DIST = \ 7026_01_mangos_battleground_template.sql \ 7031_01_mangos_spell_proc_event.sql \ 7033_01_mangos_spell_proc_event.sql \ + 7034_01_mangos_spell_proc_event.sql \ README diff --git a/src/game/SpellMgr.cpp b/src/game/SpellMgr.cpp index 0e2228ed6..5fc3ca3f8 100644 --- a/src/game/SpellMgr.cpp +++ b/src/game/SpellMgr.cpp @@ -822,15 +822,12 @@ void SpellMgr::LoadSpellProcEvents() uint32 count = 0; - // 0 1 2 3 4 5 6 7 8 - QueryResult *result = WorldDatabase.Query("SELECT entry, SchoolMask, SpellFamilyName, SpellFamilyMask, procFlags, procEx, ppmRate, CustomChance, Cooldown FROM spell_proc_event"); + // 0 1 2 3 4 5 6 7 8 9 10 + QueryResult *result = WorldDatabase.Query("SELECT entry, SchoolMask, SpellFamilyName, SpellFamilyMask0, SpellFamilyMask1, SpellFamilyMask2, procFlags, procEx, ppmRate, CustomChance, Cooldown FROM spell_proc_event"); if( !result ) { - barGoLink bar( 1 ); - bar.step(); - sLog.outString(); sLog.outString( ">> Loaded %u spell proc event conditions", count ); return; @@ -857,12 +854,13 @@ void SpellMgr::LoadSpellProcEvents() spe.schoolMask = fields[1].GetUInt32(); spe.spellFamilyName = fields[2].GetUInt32(); - spe.spellFamilyMask = fields[3].GetUInt64(); - spe.procFlags = fields[4].GetUInt32(); - spe.procEx = fields[5].GetUInt32(); - spe.ppmRate = fields[6].GetFloat(); - spe.customChance = fields[7].GetFloat(); - spe.cooldown = fields[8].GetUInt32(); + spe.spellFamilyMask = (uint64)fields[3].GetUInt32()|((uint64)fields[4].GetUInt32()<<32); + spe.spellFamilyMask2= fields[5].GetUInt32(); + spe.procFlags = fields[6].GetUInt32(); + spe.procEx = fields[7].GetUInt32(); + spe.ppmRate = fields[8].GetFloat(); + spe.customChance = fields[9].GetFloat(); + spe.cooldown = fields[10].GetUInt32(); mSpellProcEventMap[entry] = spe; @@ -923,9 +921,10 @@ bool SpellMgr::IsSpellProcEventCanTriggeredBy(SpellProcEventEntry const * spellP return false; // spellFamilyName is Ok need check for spellFamilyMask if present - if(spellProcEvent->spellFamilyMask) + if(spellProcEvent->spellFamilyMask || spellProcEvent->spellFamilyMask2) { - if ((spellProcEvent->spellFamilyMask & procSpell->SpellFamilyFlags) == 0) + if ((spellProcEvent->spellFamilyMask & procSpell->SpellFamilyFlags ) == 0 && + (spellProcEvent->spellFamilyMask2 & procSpell->SpellFamilyFlags2) == 0) return false; active = true; // Spell added manualy -> so its active spell } diff --git a/src/game/SpellMgr.h b/src/game/SpellMgr.h index 527bc7437..f07d2a6fb 100644 --- a/src/game/SpellMgr.h +++ b/src/game/SpellMgr.h @@ -556,7 +556,8 @@ struct SpellProcEventEntry { uint32 schoolMask; // if nonzero - bit mask for matching proc condition based on spell candidate's school: Fire=2, Mask=1<<(2-1)=2 uint32 spellFamilyName; // if nonzero - for matching proc condition based on candidate spell's SpellFamilyNamer value - uint64 spellFamilyMask; // if nonzero - for matching proc condition based on candidate spell's SpellFamilyFlags (like auras 107 and 108 do) + uint64 spellFamilyMask; // if nonzero - for matching proc condition based on candidate spell's SpellFamilyFlags (like auras 107 and 108 do) + uint32 spellFamilyMask2; // if nonzero - for matching proc condition based on candidate spell's SpellFamilyFlags2 (like auras 107 and 108 do) uint32 procFlags; // bitmask for matching proc event uint32 procEx; // proc Extend info (see ProcFlagsEx) float ppmRate; // for melee (ranged?) damage spells - proc rate per minute. if zero, falls back to flat chance from Spell.dbc diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index 438e27224..4baf69901 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -4562,6 +4562,15 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, Aura* triggeredByAu target = this; break; } + // Vampiric Touch (generic, used by some boss) + case 52723: + case 60501: + { + triggered_spell_id = 52724; + basepoints0 = damage / 2; + target = this; + break; + } } break; } diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 73e0ef9ca..69dd4de72 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 "7033" + #define REVISION_NR "7034" #endif // __REVISION_NR_H__ From 8caa11da653c26d88c33ceddfbefd2fd64c37b26 Mon Sep 17 00:00:00 2001 From: DiSlord Date: Tue, 6 Jan 2009 01:26:51 +0300 Subject: [PATCH 092/145] [7035] Disable wrong use some spell effects (changed in 303) Signed-off-by: DiSlord --- src/game/SharedDefines.h | 8 ++++---- src/game/SpellEffects.cpp | 8 ++++---- src/shared/revision_nr.h | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/game/SharedDefines.h b/src/game/SharedDefines.h index 11df22096..c60964171 100644 --- a/src/game/SharedDefines.h +++ b/src/game/SharedDefines.h @@ -557,8 +557,8 @@ enum SpellEffects SPELL_EFFECT_DISPEL = 38, SPELL_EFFECT_LANGUAGE = 39, SPELL_EFFECT_DUAL_WIELD = 40, - SPELL_EFFECT_SUMMON_WILD = 41, - SPELL_EFFECT_SUMMON_GUARDIAN = 42, + SPELL_EFFECT_JUMP = 41, + SPELL_EFFECT_JUMP2 = 42, SPELL_EFFECT_TELEPORT_UNITS_FACE_CASTER= 43, SPELL_EFFECT_SKILL_STEP = 44, SPELL_EFFECT_ADD_HONOR = 45, @@ -613,7 +613,7 @@ enum SpellEffects SPELL_EFFECT_SELF_RESURRECT = 94, SPELL_EFFECT_SKINNING = 95, SPELL_EFFECT_CHARGE = 96, - SPELL_EFFECT_SUMMON_CRITTER = 97, + SPELL_EFFECT_97 = 97, SPELL_EFFECT_KNOCK_BACK = 98, SPELL_EFFECT_DISENCHANT = 99, SPELL_EFFECT_INEBRIATE = 100, @@ -628,7 +628,7 @@ enum SpellEffects SPELL_EFFECT_SUMMON_DEAD_PET = 109, SPELL_EFFECT_DESTROY_ALL_TOTEMS = 110, SPELL_EFFECT_DURABILITY_DAMAGE = 111, - SPELL_EFFECT_SUMMON_DEMON = 112, + SPELL_EFFECT_112 = 112, SPELL_EFFECT_RESURRECT_NEW = 113, SPELL_EFFECT_ATTACK_ME = 114, SPELL_EFFECT_DURABILITY_DAMAGE_PCT = 115, diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp index 3afc739a9..0d443ced8 100644 --- a/src/game/SpellEffects.cpp +++ b/src/game/SpellEffects.cpp @@ -98,8 +98,8 @@ pEffect SpellEffects[TOTAL_SPELL_EFFECTS]= &Spell::EffectDispel, // 38 SPELL_EFFECT_DISPEL &Spell::EffectUnused, // 39 SPELL_EFFECT_LANGUAGE &Spell::EffectDualWield, // 40 SPELL_EFFECT_DUAL_WIELD - &Spell::EffectSummonWild, // 41 SPELL_EFFECT_SUMMON_WILD - &Spell::EffectSummonGuardian, // 42 SPELL_EFFECT_SUMMON_GUARDIAN + &Spell::EffectUnused, // 41 SPELL_EFFECT_JUMP + &Spell::EffectUnused, // 42 SPELL_EFFECT_JUMP2 &Spell::EffectTeleUnitsFaceCaster, // 43 SPELL_EFFECT_TELEPORT_UNITS_FACE_CASTER &Spell::EffectLearnSkill, // 44 SPELL_EFFECT_SKILL_STEP &Spell::EffectAddHonor, // 45 SPELL_EFFECT_ADD_HONOR honor/pvp related @@ -154,7 +154,7 @@ pEffect SpellEffects[TOTAL_SPELL_EFFECTS]= &Spell::EffectSelfResurrect, // 94 SPELL_EFFECT_SELF_RESURRECT &Spell::EffectSkinning, // 95 SPELL_EFFECT_SKINNING &Spell::EffectCharge, // 96 SPELL_EFFECT_CHARGE - &Spell::EffectSummonCritter, // 97 SPELL_EFFECT_SUMMON_CRITTER + &Spell::EffectUnused, // 97 SPELL_EFFECT_97 &Spell::EffectKnockBack, // 98 SPELL_EFFECT_KNOCK_BACK &Spell::EffectDisEnchant, // 99 SPELL_EFFECT_DISENCHANT &Spell::EffectInebriate, //100 SPELL_EFFECT_INEBRIATE @@ -169,7 +169,7 @@ pEffect SpellEffects[TOTAL_SPELL_EFFECTS]= &Spell::EffectSummonDeadPet, //109 SPELL_EFFECT_SUMMON_DEAD_PET &Spell::EffectDestroyAllTotems, //110 SPELL_EFFECT_DESTROY_ALL_TOTEMS &Spell::EffectDurabilityDamage, //111 SPELL_EFFECT_DURABILITY_DAMAGE - &Spell::EffectSummonDemon, //112 SPELL_EFFECT_SUMMON_DEMON + &Spell::EffectUnused, //112 SPELL_EFFECT_112 &Spell::EffectResurrectNew, //113 SPELL_EFFECT_RESURRECT_NEW &Spell::EffectTaunt, //114 SPELL_EFFECT_ATTACK_ME &Spell::EffectDurabilityDamagePCT, //115 SPELL_EFFECT_DURABILITY_DAMAGE_PCT diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 69dd4de72..eacc46b75 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 "7034" + #define REVISION_NR "7035" #endif // __REVISION_NR_H__ From 93bcb0b91d90bb1c5ae3db5be66fcac2e7363c12 Mon Sep 17 00:00:00 2001 From: DiSlord Date: Tue, 6 Jan 2009 02:02:08 +0300 Subject: [PATCH 093/145] [7036] Implement one warlock glyph Restore build after prev commit Signed-off-by: DiSlord --- src/game/Spell.cpp | 11 ++--------- src/game/Unit.cpp | 10 ++++++++++ src/shared/revision_nr.h | 2 +- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp index afdaf7bfb..f8baab82f 100644 --- a/src/game/Spell.cpp +++ b/src/game/Spell.cpp @@ -571,15 +571,12 @@ void Spell::FillTargetMap() tmpUnitMap.push_back(m_caster); break; case SPELL_EFFECT_SUMMON_CHANGE_ITEM: - case SPELL_EFFECT_SUMMON_WILD: - case SPELL_EFFECT_SUMMON_GUARDIAN: case SPELL_EFFECT_TRANS_DOOR: case SPELL_EFFECT_ADD_FARSIGHT: case SPELL_EFFECT_APPLY_GLYPH: case SPELL_EFFECT_STUCK: case SPELL_EFFECT_FEED_PET: case SPELL_EFFECT_DESTROY_ALL_TOTEMS: - case SPELL_EFFECT_SUMMON_DEMON: case SPELL_EFFECT_SKILL: tmpUnitMap.push_back(m_caster); break; @@ -4208,9 +4205,7 @@ uint8 Spell::CanCast(bool strict) break; } - // This is generic summon effect now and don't make this check for summon types similar - // SPELL_EFFECT_SUMMON_CRITTER, SPELL_EFFECT_SUMMON_WILD or SPELL_EFFECT_SUMMON_GUARDIAN. - // These won't show up in m_caster->GetPetGUID() + // This is generic summon effect case SPELL_EFFECT_SUMMON: { switch(m_spellInfo->EffectMiscValueB[i]) @@ -4230,10 +4225,8 @@ uint8 Spell::CanCast(bool strict) } break; } - // Don't make this check for SPELL_EFFECT_SUMMON_CRITTER, SPELL_EFFECT_SUMMON_WILD or SPELL_EFFECT_SUMMON_GUARDIAN. - // These won't show up in m_caster->GetPetGUID() + // Not used for summon? case SPELL_EFFECT_SUMMON_PHANTASM: - case SPELL_EFFECT_SUMMON_DEMON: { if(m_caster->GetPetGUID()) return SPELL_FAILED_ALREADY_HAVE_SUMMON; diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index 4baf69901..9a46287c0 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -7390,6 +7390,16 @@ bool Unit::isSpellCrit(Unit *pVictim, SpellEntry const *spellProto, SpellSchoolM } } } + // Glyph of Shadowburn + if (spellProto->SpellFamilyName == SPELLFAMILY_WARLOCK && + spellProto->SpellFamilyFlags & 0x0000000000000080 && + pVictim->HasAuraState(AURA_STATE_HEALTHLESS_35_PERCENT)) + { + AuraList const& mOverrideClassScript = GetAurasByType(SPELL_AURA_OVERRIDE_CLASS_SCRIPTS); + for(AuraList::const_iterator i = mOverrideClassScript.begin(); i != mOverrideClassScript.end(); ++i) + if((*i)->GetModifier()->m_miscvalue == 7917) + crit_chance+=(*i)->GetModifier()->m_amount; + } } break; } diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index eacc46b75..5839fa16d 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 "7035" + #define REVISION_NR "7036" #endif // __REVISION_NR_H__ From 221a60266b0792f6cdf1b00e7a337fcfb77e48dc Mon Sep 17 00:00:00 2001 From: VladimirMangos Date: Tue, 6 Jan 2009 13:17:24 +0300 Subject: [PATCH 094/145] [7037] Avoid unneeded #ifdef --- src/game/AccountMgr.cpp | 6 +----- src/shared/revision_nr.h | 2 +- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/src/game/AccountMgr.cpp b/src/game/AccountMgr.cpp index 6f9cbf414..a10b0575f 100644 --- a/src/game/AccountMgr.cpp +++ b/src/game/AccountMgr.cpp @@ -23,11 +23,7 @@ #include "Policies/SingletonImp.h" #include "Util.h" -#ifdef DO_POSTGRESQL -extern DatabasePostgre loginDatabase; -#else -extern DatabaseMysql loginDatabase; -#endif +extern DatabaseType loginDatabase; INSTANTIATE_SINGLETON_1(AccountMgr); diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 5839fa16d..303930b1e 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 "7036" + #define REVISION_NR "7037" #endif // __REVISION_NR_H__ From 1c5456324a3bc8bfec88fb761fe47165ebad663c Mon Sep 17 00:00:00 2001 From: VladimirMangos Date: Tue, 6 Jan 2009 14:10:15 +0300 Subject: [PATCH 095/145] [7038] Fixing known taxi node save in 3.0.3. Cleanup code. --- src/game/Player.cpp | 18 +++++++++++++----- src/game/Player.h | 6 ++++-- src/shared/revision_nr.h | 2 +- 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/src/game/Player.cpp b/src/game/Player.cpp index b6ca879ae..f5c8f549f 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -247,6 +247,15 @@ uint32 PlayerTaxi::GetCurrentTaxiPath() const return path; } +std::ostringstream& operator<< (std::ostringstream& ss, PlayerTaxi const& taxi) +{ + ss << "'"; + for(int i = 0; i < TaxiMaskSize; ++i) + ss << taxi.m_taximask[i] << " "; + ss << "'"; + return ss; +} + //== Player ==================================================== const int32 Player::ReputationRank_Length[MAX_REPUTATION_RANK] = {36000, 3000, 3000, 3000, 6000, 12000, 21000, 1000}; @@ -15347,12 +15356,11 @@ void Player::SaveToDB() ss << GetUInt32Value(i) << " "; } - ss << "', '"; - - for( i = 0; i < 8; i++ ) - ss << m_taxi.GetTaximask(i) << " "; - ss << "', "; + + ss << m_taxi; // string with TaxiMaskSize numbers + + ss << ", "; ss << (inworld ? 1 : 0); ss << ", "; diff --git a/src/game/Player.h b/src/game/Player.h index 26b9740a6..99f464c12 100644 --- a/src/game/Player.h +++ b/src/game/Player.h @@ -900,9 +900,7 @@ class MANGOS_DLL_SPEC PlayerTaxi // Nodes void InitTaxiNodesForLevel(uint32 race, uint32 chrClass, uint32 level); void LoadTaxiMask(const char* data); - void SaveTaxiMask(const char* data); - uint32 GetTaximask( uint8 index ) const { return m_taximask[index]; } bool IsTaximaskNodeKnown(uint32 nodeidx) const { uint8 field = uint8((nodeidx - 1) / 32); @@ -938,11 +936,15 @@ class MANGOS_DLL_SPEC PlayerTaxi return GetTaxiDestination(); } bool empty() const { return m_TaxiDestinations.empty(); } + + friend std::ostringstream& operator<< (std::ostringstream& ss, PlayerTaxi const& taxi); private: TaxiMask m_taximask; std::deque m_TaxiDestinations; }; +std::ostringstream& operator<< (std::ostringstream& ss, PlayerTaxi const& taxi); + class MANGOS_DLL_SPEC Player : public Unit { friend class WorldSession; diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 303930b1e..1425e069f 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 "7037" + #define REVISION_NR "7038" #endif // __REVISION_NR_H__ From 7bae367084aefdbe0e9d92af5814bc8daaaaa962 Mon Sep 17 00:00:00 2001 From: VladimirMangos Date: Tue, 6 Jan 2009 14:46:30 +0300 Subject: [PATCH 096/145] [7039] Implement mangosd.conf options Death.Bones.* for disable bones creating from corpse in world zones or in arena/bg. Note: in case apply insignia bones still created as required for looting. --- src/game/GlobalEvents.cpp | 2 +- src/game/ObjectAccessor.cpp | 8 ++++++-- src/game/ObjectAccessor.h | 2 +- src/game/Player.cpp | 2 +- src/game/World.cpp | 2 ++ src/game/World.h | 2 ++ src/mangosd/mangosd.conf.dist.in | 8 ++++++++ src/shared/revision_nr.h | 2 +- 8 files changed, 22 insertions(+), 6 deletions(-) diff --git a/src/game/GlobalEvents.cpp b/src/game/GlobalEvents.cpp index 74199e56c..2a03c05f8 100644 --- a/src/game/GlobalEvents.cpp +++ b/src/game/GlobalEvents.cpp @@ -53,7 +53,7 @@ static void CorpsesEraseCallBack(QueryResult *result, bool bones) { if(!ObjectAccessor::Instance().ConvertCorpseForPlayer(player_guid)) { - sLog.outDebug("Corpse %u not found in world. Delete from DB.",guidlow); + sLog.outDebug("Corpse %u not found in world or bones creating forbidden. Delete from DB.",guidlow); CharacterDatabase.PExecute("DELETE FROM corpse WHERE guid = '%u'",guidlow); } } diff --git a/src/game/ObjectAccessor.cpp b/src/game/ObjectAccessor.cpp index bab108695..53b6c245f 100644 --- a/src/game/ObjectAccessor.cpp +++ b/src/game/ObjectAccessor.cpp @@ -36,6 +36,7 @@ #include "Opcodes.h" #include "ObjectDefines.h" #include "MapInstanced.h" +#include "World.h" #include @@ -430,7 +431,7 @@ ObjectAccessor::AddCorpsesToGrid(GridPair const& gridpair,GridType& grid,Map* ma } Corpse* -ObjectAccessor::ConvertCorpseForPlayer(uint64 player_guid) +ObjectAccessor::ConvertCorpseForPlayer(uint64 player_guid, bool insignia) { Corpse *corpse = GetCorpseForPlayerGUID(player_guid); if(!corpse) @@ -456,7 +457,10 @@ ObjectAccessor::ConvertCorpseForPlayer(uint64 player_guid) Corpse *bones = NULL; // create the bones only if the map and the grid is loaded at the corpse's location - if(map && !map->IsRemovalGrid(corpse->GetPositionX(), corpse->GetPositionY())) + // ignore bones creating option in case insignia + if (map && (insignia || + (map->IsBattleGroundOrArena() ? sWorld.getConfig(CONFIG_DEATH_BONES_BG_OR_ARENA) : sWorld.getConfig(CONFIG_DEATH_BONES_WORLD))) && + !map->IsRemovalGrid(corpse->GetPositionX(), corpse->GetPositionY())) { // Create bones, don't change Corpse bones = new Corpse; diff --git a/src/game/ObjectAccessor.h b/src/game/ObjectAccessor.h index 0c2a55079..eb09f6385 100644 --- a/src/game/ObjectAccessor.h +++ b/src/game/ObjectAccessor.h @@ -192,7 +192,7 @@ class MANGOS_DLL_DECL ObjectAccessor : public MaNGOS::Singleton Date: Tue, 6 Jan 2009 16:18:06 +0300 Subject: [PATCH 097/145] [7040] Move achievment rewards dat to new DB table. Implement sending item rewards by mail. Support localization string fields for new table. Move achievments related code and data from ObjectMgr to new AcievmentGlobalMgr. --- sql/mangos.sql | 62 ++- .../7040_01_mangos_achievement_reward.sql | 36 ++ sql/updates/Makefile.am | 2 + src/game/AchievementMgr.cpp | 377 ++++++++++++------ src/game/AchievementMgr.h | 79 +++- src/game/ObjectMgr.cpp | 33 -- src/game/ObjectMgr.h | 12 +- src/game/World.cpp | 19 +- src/shared/revision_nr.h | 2 +- 9 files changed, 455 insertions(+), 167 deletions(-) create mode 100644 sql/updates/7040_01_mangos_achievement_reward.sql diff --git a/sql/mangos.sql b/sql/mangos.sql index 2a1545ae5..1f737da9e 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_7034_01_mangos_spell_proc_event` bit(1) default NULL + `required_7040_01_mangos_achievement_reward` bit(1) default NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Used DB version notes'; -- @@ -36,6 +36,31 @@ INSERT INTO `db_version` VALUES /*!40000 ALTER TABLE `db_version` ENABLE KEYS */; UNLOCK TABLES; +-- +-- Table structure for table `achievement_reward` +-- + +DROP TABLE IF EXISTS `achievement_reward`; +CREATE TABLE `achievement_reward` ( + `entry` mediumint(8) unsigned NOT NULL default '0', + `title_A` mediumint(8) unsigned NOT NULL default '0', + `title_H` mediumint(8) unsigned NOT NULL default '0', + `item` mediumint(8) unsigned NOT NULL default '0', + `sender` mediumint(8) unsigned NOT NULL default '0', + `subject` varchar(255) default NULL, + `text` text, + PRIMARY KEY (`entry`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Loot System'; + +-- +-- Dumping data for table `achievement_reward` +-- + +LOCK TABLES `achievement_reward` WRITE; +/*!40000 ALTER TABLE `achievement_reward` DISABLE KEYS */; +/*!40000 ALTER TABLE `achievement_reward` ENABLE KEYS */; +UNLOCK TABLES; + -- -- Table structure for table `areatrigger_involvedrelation` -- @@ -1764,6 +1789,41 @@ INSERT INTO `item_template` VALUES /*!40000 ALTER TABLE `item_template` ENABLE KEYS */; UNLOCK TABLES; +-- +-- Table structure for table `locales_achievement_reward` +-- + +DROP TABLE IF EXISTS `locales_achievement_reward`; +CREATE TABLE `locales_achievement_reward` ( + `entry` mediumint(8) unsigned NOT NULL default '0', + `subject_loc1` varchar(100) NOT NULL default '', + `subject_loc2` varchar(100) NOT NULL default '', + `subject_loc3` varchar(100) NOT NULL default '', + `subject_loc4` varchar(100) NOT NULL default '', + `subject_loc5` varchar(100) NOT NULL default '', + `subject_loc6` varchar(100) NOT NULL default '', + `subject_loc7` varchar(100) NOT NULL default '', + `subject_loc8` varchar(100) NOT NULL default '', + `text_loc1` text default NULL, + `text_loc2` text default NULL, + `text_loc3` text default NULL, + `text_loc4` text default NULL, + `text_loc5` text default NULL, + `text_loc6` text default NULL, + `text_loc7` text default NULL, + `text_loc8` text default NULL, + PRIMARY KEY (`entry`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + +-- +-- Dumping data for table `locales_achievement_reward` +-- + +LOCK TABLES `locales_achievement_reward` WRITE; +/*!40000 ALTER TABLE `locales_achievement_reward` DISABLE KEYS */; +/*!40000 ALTER TABLE `locales_achievement_reward` ENABLE KEYS */; +UNLOCK TABLES; + -- -- Table structure for table `locales_creature` -- diff --git a/sql/updates/7040_01_mangos_achievement_reward.sql b/sql/updates/7040_01_mangos_achievement_reward.sql new file mode 100644 index 000000000..0402a0025 --- /dev/null +++ b/sql/updates/7040_01_mangos_achievement_reward.sql @@ -0,0 +1,36 @@ +ALTER TABLE db_version CHANGE COLUMN required_7034_01_mangos_spell_proc_event required_7040_01_mangos_achievement_reward bit; + +DROP TABLE IF EXISTS `achievement_reward`; +CREATE TABLE `achievement_reward` ( + `entry` mediumint(8) unsigned NOT NULL default '0', + `title_A` mediumint(8) unsigned NOT NULL default '0', + `title_H` mediumint(8) unsigned NOT NULL default '0', + `item` mediumint(8) unsigned NOT NULL default '0', + `sender` mediumint(8) unsigned NOT NULL default '0', + `subject` varchar(255) default NULL, + `text` text, + PRIMARY KEY (`entry`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Loot System'; + + +DROP TABLE IF EXISTS `locales_achievement_reward`; +CREATE TABLE `locales_achievement_reward` ( + `entry` mediumint(8) unsigned NOT NULL default '0', + `subject_loc1` varchar(100) NOT NULL default '', + `subject_loc2` varchar(100) NOT NULL default '', + `subject_loc3` varchar(100) NOT NULL default '', + `subject_loc4` varchar(100) NOT NULL default '', + `subject_loc5` varchar(100) NOT NULL default '', + `subject_loc6` varchar(100) NOT NULL default '', + `subject_loc7` varchar(100) NOT NULL default '', + `subject_loc8` varchar(100) NOT NULL default '', + `text_loc1` text default NULL, + `text_loc2` text default NULL, + `text_loc3` text default NULL, + `text_loc4` text default NULL, + `text_loc5` text default NULL, + `text_loc6` text default NULL, + `text_loc7` text default NULL, + `text_loc8` text default NULL, + PRIMARY KEY (`entry`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; diff --git a/sql/updates/Makefile.am b/sql/updates/Makefile.am index 9926b5a80..b42eb7212 100644 --- a/sql/updates/Makefile.am +++ b/sql/updates/Makefile.am @@ -114,6 +114,7 @@ pkgdata_DATA = \ 7031_01_mangos_spell_proc_event.sql \ 7033_01_mangos_spell_proc_event.sql \ 7034_01_mangos_spell_proc_event.sql \ + 7040_01_mangos_achievement_reward.sql \ README ## Additional files to include when running 'make dist' @@ -208,4 +209,5 @@ EXTRA_DIST = \ 7031_01_mangos_spell_proc_event.sql \ 7033_01_mangos_spell_proc_event.sql \ 7034_01_mangos_spell_proc_event.sql \ + 7040_01_mangos_achievement_reward.sql \ README diff --git a/src/game/AchievementMgr.cpp b/src/game/AchievementMgr.cpp index 29503502b..fb6684892 100644 --- a/src/game/AchievementMgr.cpp +++ b/src/game/AchievementMgr.cpp @@ -27,8 +27,13 @@ #include "GameEvent.h" #include "World.h" #include "SpellMgr.h" +#include "ProgressBar.h" -const CriteriaCastSpellRequirement AchievementMgr::criteriaCastSpellRequirements[CRITERIA_CAST_SPELL_REQ_COUNT] = +#include "Policies/SingletonImp.h" + +INSTANTIATE_SINGLETON_1(AchievementGlobalMgr); + +const CriteriaCastSpellRequirement AchievementGlobalMgr::m_criteriaCastSpellRequirements[CRITERIA_CAST_SPELL_REQ_COUNT] = { {5272, 3057, 0, 0}, {5273, 2784, 0, 0}, @@ -76,68 +81,6 @@ const CriteriaCastSpellRequirement AchievementMgr::criteriaCastSpellRequirements {6320, 0, CLASS_PALADIN, RACE_DRAENEI}, {6321, 0, CLASS_HUNTER, RACE_DWARF}, {6662, 31261, 0, 0} - }; - -const AchievementReward AchievementMgr::achievementRewards[ACHIEVEMENT_REWARD_COUNT] = - { - // achievementId, horde titleid, alliance titleid, itemid - {45, 0, 0, 43348}, - {46, 78, 78, 0}, - {230, 72, 72, 0}, - {456, 139, 139, 0}, - {614, 0, 0, 44223}, - {619, 0, 0, 44224}, - {714, 47, 47, 0}, - {762, 130, 130, 0}, - {870, 127, 126, 0}, - {871, 144, 144, 0}, - {876, 0, 0, 43349}, - {907, 48, 48, 0}, - {913, 74, 74, 0}, - {942, 79, 79, 0}, - {943, 79, 79, 0}, - {945, 131, 131, 0}, - {948, 130, 130, 0}, - {953, 132, 132, 0}, - {978, 81, 81, 0}, - {1015, 77, 77, 0}, - {1021, 0, 0, 40643}, - {1038, 75, 75, 0}, - {1039, 76, 76, 0}, - {1163, 128, 128, 0}, - {1174, 82, 82, 0}, - {1175, 72, 72, 0}, - {1250, 0, 0, 40653}, - {1400, 120, 120, 0}, - {1402, 122, 122, 0}, - {1516, 83, 83, 0}, - {1563, 84, 84, 0}, - {1656, 124, 124, 0}, - {1657, 124, 124, 0}, - {1658, 129, 129, 0}, - {1681, 125, 125, 43300}, - {1682, 125, 125, 43300}, - {1683, 133, 133, 0}, - {1684, 133, 133, 0}, - {1691, 134, 134, 0}, - {1692, 134, 134, 0}, - {1693, 135, 135, 0}, - {1707, 135, 135, 0}, - {1784, 84, 84, 0}, - {1793, 137, 137, 0}, - {1956, 0, 0, 43824}, - {2051, 140, 140, 0}, - {2054, 121, 121, 0}, - {2096, 0, 0, 44430}, - {2136, 0, 0, 0},// <- TODO: find item for spell 59961 - {2137, 0, 0, 0},// <- TODO: find item for spell 60021 - {2138, 0, 0, 0},// <- TODO: find item for spell 59976 - {2143, 0, 0, 44178}, - {2144, 0, 0, 0},// <- TODO: find item for spell 60024 - {2145, 0, 0, 0},// <- TODO: find item for spell 60024 - {2186, 141, 141, 0}, - {2187, 142, 142, 0}, - {2188, 143, 143, 0} }; AchievementMgr::AchievementMgr(Player *player) @@ -364,7 +307,7 @@ void AchievementMgr::CheckAllAchievementCriteria() void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, uint32 miscvalue1, uint32 miscvalue2, Unit *unit, uint32 time) { sLog.outDetail("AchievementMgr::UpdateAchievementCriteria(%u, %u, %u, %u)", type, miscvalue1, miscvalue2, time); - AchievementCriteriaEntryList const& achievementCriteriaList = objmgr.GetAchievementCriteriaByType(type); + AchievementCriteriaEntryList const& achievementCriteriaList = achievementmgr.GetAchievementCriteriaByType(type); for(AchievementCriteriaEntryList::const_iterator i = achievementCriteriaList.begin(); i!=achievementCriteriaList.end(); ++i) { AchievementCriteriaEntry const *achievementCriteria = (*i); @@ -523,19 +466,9 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui { if (!miscvalue1 || miscvalue1 != achievementCriteria->cast_spell.spellID) continue; + // those requirements couldn't be found in the dbc - - const CriteriaCastSpellRequirement *requirement = NULL; - for (uint32 i=0; iID) - { - requirement = &criteriaCastSpellRequirements[i]; - break; - } - } - - if (requirement) + if (CriteriaCastSpellRequirement const* requirement = AchievementGlobalMgr::GetCriteriaCastSpellRequirement(achievementCriteria)) { if (!unit) continue; @@ -549,6 +482,7 @@ void AchievementMgr::UpdateAchievementCriteria(AchievementCriteriaTypes type, ui if (requirement->playerClass && (unit->GetTypeId() != TYPEID_PLAYER || unit->getClass()!=requirement->playerClass)) continue; } + SetCriteriaProgress(achievementCriteria, 1, true); break; } @@ -653,7 +587,7 @@ bool AchievementMgr::IsCompletedCriteria(AchievementCriteriaEntry const* achieve if(achievement->flags & (ACHIEVEMENT_FLAG_REALM_FIRST_REACH | ACHIEVEMENT_FLAG_REALM_FIRST_KILL)) { // someone on this realm has already completed that achievement - if(objmgr.allCompletedAchievements.find(achievement->ID)!=objmgr.allCompletedAchievements.end()) + if(achievementmgr.IsRealmCompleted(achievement)) return false; } @@ -838,55 +772,58 @@ void AchievementMgr::CompletedAchievement(AchievementEntry const* achievement) // don't insert for ACHIEVEMENT_FLAG_REALM_FIRST_KILL since otherwise only the first group member would reach that achievement // TODO: where do set this instead? if(!(achievement->flags & ACHIEVEMENT_FLAG_REALM_FIRST_KILL)) - objmgr.allCompletedAchievements.insert(achievement->ID); + achievementmgr.SetRealmCompleted(achievement); UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_ACHIEVEMENT); - // reward items and titles - // TODO: rewards should be send by mail - AchievementReward const* reward = NULL; - for (uint32 i=0; iID) - { - reward = &achievementRewards[i]; - break; - } - } + // reward items and titles if any + AchievementReward const* reward = achievementmgr.GetAchievementReward(achievement); - if (reward) + // no rewards + if(!reward) + return; + + // titles + if(uint32 titleId = reward->titleId[GetPlayer()->GetTeam() == HORDE?0:1]) { - uint32 titleId = reward->titleId[GetPlayer()->GetTeam() == HORDE?0:1]; if(CharTitlesEntry const* titleEntry = sCharTitlesStore.LookupEntry(titleId)) GetPlayer()->SetTitle(titleEntry); + } - if (reward->itemId) + // mail + if(reward->sender) + { + Item* item = reward->itemId ? Item::CreateItem(reward->itemId,1,GetPlayer ()) : NULL; + + MailItemsInfo mi; + if(item) { - ItemPrototype const *pProto = objmgr.GetItemPrototype( reward->itemId ); + // save new item before send + item->SaveToDB(); // save for prevent lost at next mail load, if send fail then item will deleted - if(!pProto) + // item + mi.AddItem(item->GetGUIDLow(), item->GetEntry(), item); + } + + int loc_idx = GetPlayer()->GetSession()->GetSessionDbLocaleIndex(); + + // subject and text + std::string subject = reward->subject; + std::string text = reward->text; + if ( loc_idx >= 0 ) + { + if(AchievementRewardLocale const* loc = achievementmgr.GetAchievementRewardLocale(achievement)) { - GetPlayer()->SendEquipError( EQUIP_ERR_ITEM_NOT_FOUND, NULL, NULL ); - return; - } - - ItemPosCountVec dest; - uint32 no_space = 0; - uint8 msg = GetPlayer()->CanStoreNewItem( NULL_BAG, NULL_SLOT, dest, reward->itemId, 1, &no_space ); - - if( msg != EQUIP_ERR_OK ) - { - GetPlayer()->SendEquipError( msg, NULL, NULL ); - return; - } - Item* pItem = GetPlayer()->StoreNewItem( dest, reward->itemId, true); - - if(!pItem) - { - GetPlayer()->SendEquipError( EQUIP_ERR_ITEM_NOT_FOUND, NULL, NULL ); - return; + if (loc->subject.size() > size_t(loc_idx) && !loc->subject[loc_idx].empty()) + subject = loc->subject[loc_idx]; + if (loc->text.size() > size_t(loc_idx) && !loc->text[loc_idx].empty()) + text = loc->text[loc_idx]; } } + + uint32 itemTextId = objmgr.CreateItemText( text ); + + WorldSession::SendMailTo(GetPlayer(), MAIL_CREATURE, MAIL_STATIONERY_NORMAL, reward->sender, GetPlayer()->GetGUIDLow(), subject, itemTextId , &mi, 0, 0, MAIL_CHECK_MASK_NONE); } } @@ -932,3 +869,217 @@ void AchievementMgr::BuildAllDataPacket(WorldPacket *data) *data << int32(-1); } + +//========================================================== +AchievementCriteriaEntryList const& AchievementGlobalMgr::GetAchievementCriteriaByType(AchievementCriteriaTypes type) +{ + return m_AchievementCriteriasByType[type]; +} + +void AchievementGlobalMgr::LoadAchievementCriteriaList() +{ + for (uint32 entryId = 0; entryIdrequiredType].push_back(criteria); + } +} + + +void AchievementGlobalMgr::LoadCompletedAchievements() +{ + QueryResult *result = CharacterDatabase.Query("SELECT achievement FROM character_achievement GROUP BY achievement"); + + if(!result) + return; + + do + { + Field *fields = result->Fetch(); + m_allCompletedAchievements.insert(fields[0].GetUInt32()); + } while(result->NextRow()); + + delete result; +} + +void AchievementGlobalMgr::LoadRewards() +{ + m_achievementRewards.clear(); // need for reload case + + // 0 1 2 3 4 5 6 + QueryResult *result = WorldDatabase.Query("SELECT entry, title_A, title_H, item, sender, subject, text FROM achievement_reward"); + + if(!result) + { + barGoLink bar(1); + + bar.step(); + + sLog.outString(""); + sLog.outString(">> Loaded 0 achievement rewards. DB table `achievement_reward` is empty."); + return; + } + + barGoLink bar(result->GetRowCount()); + + do + { + Field *fields = result->Fetch(); + bar.step(); + + uint32 entry = fields[0].GetUInt32(); + if (!sAchievementStore.LookupEntry(entry)) + { + sLog.outErrorDb( "Table `achievement_reward` has wrong achievement (Entry: %u), ignore", entry); + continue; + } + + AchievementReward reward; + reward.titleId[0] = fields[1].GetUInt32(); + reward.titleId[1] = fields[2].GetUInt32(); + reward.itemId = fields[3].GetUInt32(); + reward.sender = fields[4].GetUInt32(); + reward.subject = fields[5].GetCppString(); + reward.text = fields[6].GetCppString(); + + if ((reward.titleId[0]==0)!=(reward.titleId[1]==0)) + sLog.outErrorDb( "Table `achievement_reward` (Entry: %u) has title (A: %u H: %u) only for one from teams.", entry, reward.titleId[0], reward.titleId[1]); + + // must be title or mail at least + if (!reward.titleId[0] && !reward.titleId[1] && !reward.sender) + { + sLog.outErrorDb( "Table `achievement_reward` (Entry: %u) not have title or item reward data, ignore.", entry); + continue; + } + + if (reward.titleId[0]) + { + CharTitlesEntry const* titleEntry = sCharTitlesStore.LookupEntry(reward.titleId[0]); + if (!titleEntry) + { + sLog.outErrorDb( "Table `achievement_reward` (Entry: %u) has invalid title id (%u) in `title_A`, set to 0", entry, reward.titleId[0]); + reward.titleId[0] = 0; + } + } + + if (reward.titleId[1]) + { + CharTitlesEntry const* titleEntry = sCharTitlesStore.LookupEntry(reward.titleId[1]); + if (!titleEntry) + { + sLog.outErrorDb( "Table `achievement_reward` (Entry: %u) has invalid title id (%u) in `title_A`, set to 0", entry, reward.titleId[1]); + reward.titleId[1] = 0; + } + } + + //check mail data before item for report including wrong item case + if (reward.sender) + { + if (!objmgr.GetCreatureTemplate(reward.sender)) + { + sLog.outErrorDb( "Table `achievement_reward` (Entry: %u) has invalid creature entry %u as sender, mail reward skipped.", entry, reward.sender); + reward.sender = 0; + } + } + else + { + if (reward.itemId) + sLog.outErrorDb( "Table `achievement_reward` (Entry: %u) not have sender data but have item reward, item will not rewarded", entry); + + if (!reward.subject.empty()) + sLog.outErrorDb( "Table `achievement_reward` (Entry: %u) not have sender data but have mail subject.", entry); + + if (!reward.text.empty()) + sLog.outErrorDb( "Table `achievement_reward` (Entry: %u) not have sender data but have mail text.", entry); + } + + if (reward.itemId) + { + if (!objmgr.GetItemPrototype(reward.itemId)) + { + sLog.outErrorDb( "Table `achievement_reward` (Entry: %u) has invalid item id %u, reward mail will be without item.", entry, reward.itemId); + reward.itemId = 0; + } + } + + m_achievementRewards[entry] = reward; + + } while (result->NextRow()); + + delete result; + + sLog.outString(); + sLog.outString( ">> Loaded %u achievement reward locale strings", m_achievementRewardLocales.size() ); +} + +void AchievementGlobalMgr::LoadRewardLocales() +{ + m_achievementRewardLocales.clear(); // need for reload case + + QueryResult *result = WorldDatabase.Query("SELECT entry,subject_loc1,text_loc1,subject_loc2,text_loc2,subject_loc3,text_loc3,subject_loc4,text_loc4,subject_loc5,text_loc5,subject_loc6,text_loc6,subject_loc7,text_loc7,subject_loc8,text_loc8 FROM locales_achievement_reward"); + + if(!result) + { + barGoLink bar(1); + + bar.step(); + + sLog.outString(""); + sLog.outString(">> Loaded 0 achievement reward locale strings. DB table `locales_achievement_reward` is empty."); + return; + } + + barGoLink bar(result->GetRowCount()); + + do + { + Field *fields = result->Fetch(); + bar.step(); + + uint32 entry = fields[0].GetUInt32(); + + if(m_achievementRewards.find(entry)==m_achievementRewards.end()) + { + sLog.outErrorDb( "Table `locales_achievement_reward` (Entry: %u) has locale strings for not existed achievement reward .", entry); + continue; + } + + AchievementRewardLocale& data = m_achievementRewardLocales[entry]; + + for(int i = 1; i < MAX_LOCALE; ++i) + { + std::string str = fields[1+2*(i-1)].GetCppString(); + if(!str.empty()) + { + int idx = objmgr.GetOrNewIndexForLocale(LocaleConstant(i)); + if(idx >= 0) + { + if(data.subject.size() <= idx) + data.subject.resize(idx+1); + + data.subject[idx] = str; + } + } + str = fields[1+2*(i-1)+1].GetCppString(); + if(!str.empty()) + { + int idx = objmgr.GetOrNewIndexForLocale(LocaleConstant(i)); + if(idx >= 0) + { + if(data.text.size() <= idx) + data.text.resize(idx+1); + + data.text[idx] = str; + } + } + } + } while (result->NextRow()); + + delete result; + + sLog.outString(); + sLog.outString( ">> Loaded %u achievement reward locale strings", m_achievementRewardLocales.size() ); +} diff --git a/src/game/AchievementMgr.h b/src/game/AchievementMgr.h index 871d3d5d8..a34729519 100644 --- a/src/game/AchievementMgr.h +++ b/src/game/AchievementMgr.h @@ -19,13 +19,19 @@ #define __MANGOS_ACHIEVEMENTMGR_H #include "Common.h" +#include "Policies/Singleton.h" #include "Database/DBCEnums.h" #include "Database/DBCStores.h" #include "Database/DatabaseEnv.h" +#include +#include + #define CRITERIA_CAST_SPELL_REQ_COUNT 46 #define ACHIEVEMENT_REWARD_COUNT 57 +typedef std::list AchievementCriteriaEntryList; + struct CriteriaProgress { uint32 counter; @@ -43,11 +49,24 @@ struct CriteriaCastSpellRequirement struct AchievementReward { - uint32 achievementId; uint32 titleId[2]; uint32 itemId; + uint32 sender; + std::string subject; + std::string text; }; +typedef std::map AchievementRewards; + +struct AchievementRewardLocale +{ + std::vector subject; + std::vector text; +}; + +typedef std::map AchievementRewardLocales; + + struct CompletedAchievementData { time_t date; @@ -95,7 +114,61 @@ class AchievementMgr Player* m_player; CriteriaProgressMap m_criteriaProgress; CompletedAchievementMap m_completedAchievements; - static const CriteriaCastSpellRequirement criteriaCastSpellRequirements[]; - static const AchievementReward achievementRewards[]; }; + +class AchievementGlobalMgr +{ + public: + AchievementCriteriaEntryList const& GetAchievementCriteriaByType(AchievementCriteriaTypes type); + + AchievementReward const* GetAchievementReward(AchievementEntry const* achievement) const + { + AchievementRewards::const_iterator iter = m_achievementRewards.find(achievement->ID); + return iter!=m_achievementRewards.end() ? &iter->second : NULL; + } + + AchievementRewardLocale const* GetAchievementRewardLocale(AchievementEntry const* achievement) const + { + AchievementRewardLocales::const_iterator iter = m_achievementRewardLocales.find(achievement->ID); + return iter!=m_achievementRewardLocales.end() ? &iter->second : NULL; + } + + static CriteriaCastSpellRequirement const * GetCriteriaCastSpellRequirement(AchievementCriteriaEntry const *achievementCriteria) + { + for (uint32 i=0; i < CRITERIA_CAST_SPELL_REQ_COUNT; ++i) + if (m_criteriaCastSpellRequirements[i].achievementCriteriaId == achievementCriteria->ID) + return &m_criteriaCastSpellRequirements[i]; + + return NULL; + } + + bool IsRealmCompleted(AchievementEntry const* achievement) const + { + return m_allCompletedAchievements.find(achievement->ID) != m_allCompletedAchievements.end(); + } + + void SetRealmCompleted(AchievementEntry const* achievement) + { + m_allCompletedAchievements.insert(achievement->ID); + } + + void LoadAchievementCriteriaList(); + void LoadCompletedAchievements(); + void LoadRewards(); + void LoadRewardLocales(); + private: + static const CriteriaCastSpellRequirement m_criteriaCastSpellRequirements[]; + + // store achievement criterias by type to speed up lookup + AchievementCriteriaEntryList m_AchievementCriteriasByType[ACHIEVEMENT_CRITERIA_TYPE_TOTAL]; + + typedef std::set AllCompletedAchievements; + AllCompletedAchievements m_allCompletedAchievements; + + AchievementRewards m_achievementRewards; + AchievementRewardLocales m_achievementRewardLocales; +}; + +#define achievementmgr MaNGOS::Singleton::Instance() + #endif diff --git a/src/game/ObjectMgr.cpp b/src/game/ObjectMgr.cpp index b2fceffbc..6613128b7 100644 --- a/src/game/ObjectMgr.cpp +++ b/src/game/ObjectMgr.cpp @@ -580,22 +580,6 @@ void ObjectMgr::LoadCreatureLocales() sLog.outString( ">> Loaded %u creature locale strings", mCreatureLocaleMap.size() ); } -void ObjectMgr::LoadCompletedAchievements() -{ - QueryResult *result = CharacterDatabase.Query("SELECT achievement FROM character_achievement GROUP BY achievement"); - - if(!result) - return; - - do - { - Field *fields = result->Fetch(); - allCompletedAchievements.insert(fields[0].GetUInt32()); - } while(result->NextRow()); - - delete result; -} - void ObjectMgr::LoadNpcOptionLocales() { mNpcOptionLocaleMap.clear(); // need for reload case @@ -6333,23 +6317,6 @@ int ObjectMgr::GetOrNewIndexForLocale( LocaleConstant loc ) return m_LocalForIndex.size()-1; } -AchievementCriteriaEntryList const& ObjectMgr::GetAchievementCriteriaByType(AchievementCriteriaTypes type) -{ - return m_AchievementCriteriasByType[type]; -} - -void ObjectMgr::LoadAchievementCriteriaList() -{ - for (uint32 entryId = 0; entryIdrequiredType].push_back(criteria); - } -} - void ObjectMgr::LoadBattleMastersEntry() { mBattleMastersMap.clear(); // need for reload case diff --git a/src/game/ObjectMgr.h b/src/game/ObjectMgr.h index dafa115c3..eac5a6bf2 100644 --- a/src/game/ObjectMgr.h +++ b/src/game/ObjectMgr.h @@ -242,8 +242,6 @@ typedef std::list CacheNpcOptionList; typedef UNORDERED_MAP CacheVendorItemMap; typedef UNORDERED_MAP CacheTrainerSpellMap; -typedef std::list AchievementCriteriaEntryList; - enum SkillRangeType { SKILL_RANGE_LANGUAGE, // 300..300 @@ -567,7 +565,6 @@ class ObjectMgr void LoadNpcTextId(); void LoadVendors(); void LoadTrainerSpell(); - void LoadCompletedAchievements(); std::string GeneratePetName(uint32 entry); uint32 GetBaseXP(uint32 level); @@ -772,14 +769,13 @@ class ObjectMgr void AddVendorItem(uint32 entry,uint32 item, uint32 maxcount, uint32 incrtime, uint32 ExtendedCost); bool RemoveVendorItem(uint32 entry,uint32 item); bool IsVendorItemValid( uint32 vendor_entry, uint32 item, uint32 maxcount, uint32 ptime, uint32 ExtendedCost, Player* pl = NULL, std::set* skip_vendors = NULL ) const; - void LoadAchievementCriteriaList(); - AchievementCriteriaEntryList const& GetAchievementCriteriaByType(AchievementCriteriaTypes type); - std::set allCompletedAchievements; void LoadScriptNames(); ScriptNameMap &GetScriptNames() { return m_scriptNames; } const char * GetScriptName(uint32 id) { return id < m_scriptNames.size() ? m_scriptNames[id].c_str() : ""; } uint32 GetScriptId(const char *name); + + int GetOrNewIndexForLocale(LocaleConstant loc); protected: // first free id for selected id type @@ -848,7 +844,6 @@ class ObjectMgr typedef std::vector LocalForIndex; LocalForIndex m_LocalForIndex; - int GetOrNewIndexForLocale(LocaleConstant loc); int DBCLocaleIndex; @@ -902,9 +897,6 @@ class ObjectMgr CacheNpcTextIdMap m_mCacheNpcTextIdMap; CacheVendorItemMap m_mCacheVendorItemMap; CacheTrainerSpellMap m_mCacheTrainerSpellMap; - - // store achievement criterias by type to speed up lookup - AchievementCriteriaEntryList m_AchievementCriteriasByType[ACHIEVEMENT_CRITERIA_TYPE_TOTAL]; }; #define objmgr MaNGOS::Singleton::Instance() diff --git a/src/game/World.cpp b/src/game/World.cpp index 766a574ee..74be1cbe8 100644 --- a/src/game/World.cpp +++ b/src/game/World.cpp @@ -35,6 +35,7 @@ #include "SkillDiscovery.h" #include "World.h" #include "AccountMgr.h" +#include "AchievementMgr.h" #include "ObjectMgr.h" #include "SpellMgr.h" #include "Chat.h" @@ -1072,12 +1073,6 @@ void World::SetInitialWorldSettings() sLog.outString( "Loading InstanceTemplate" ); objmgr.LoadInstanceTemplate(); - sLog.outString( "Loading AchievementCriteriaList..." ); - objmgr.LoadAchievementCriteriaList(); - - sLog.outString( "Loading completed achievements..." ); - objmgr.LoadCompletedAchievements(); - sLog.outString( "Loading SkillLineAbilityMultiMap Data..." ); spellmgr.LoadSkillLineAbilityMap(); @@ -1236,6 +1231,18 @@ void World::SetInitialWorldSettings() sLog.outString( "Loading Skill Fishing base level requirements..." ); objmgr.LoadFishingBaseSkillLevel(); + sLog.outString( "Loading AchievementCriteriaList..." ); + achievementmgr.LoadAchievementCriteriaList(); + + sLog.outString( "Loading achievement rewards..." ); + achievementmgr.LoadRewards(); + + sLog.outString( "Loading achievement reward locale strings..." ); + achievementmgr.LoadRewardLocales(); + + sLog.outString( "Loading completed achievements..." ); + achievementmgr.LoadCompletedAchievements(); + ///- Load dynamic data tables from the database sLog.outString( "Loading Auctions..." ); objmgr.LoadAuctionItems(); diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index c956a0705..802bcea25 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 "7039" + #define REVISION_NR "7040" #endif // __REVISION_NR_H__ From e30f8dd816be065d846326caf1ce840104080ba3 Mon Sep 17 00:00:00 2001 From: GriffonHeart Date: Tue, 6 Jan 2009 19:43:01 +0300 Subject: [PATCH 098/145] [7041] Add 7-8 rank warlock stone Signed-off-by: DiSlord --- src/game/SpellEffects.cpp | 8 ++++++-- src/shared/revision_nr.h | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp index 0d443ced8..afef5ea93 100644 --- a/src/game/SpellEffects.cpp +++ b/src/game/SpellEffects.cpp @@ -4615,13 +4615,15 @@ void Spell::EffectScriptEffect(uint32 effIndex) } } - static uint32 const itypes[6][3] = { + static uint32 const itypes[8][3] = { { 5512,19004,19005}, // Minor Healthstone { 5511,19006,19007}, // Lesser Healthstone { 5509,19008,19009}, // Healthstone { 5510,19010,19011}, // Greater Healthstone { 9421,19012,19013}, // Major Healthstone - {22103,22104,22105} // Master Healthstone + {22103,22104,22105}, // Master Healthstone + {36889,36890,36891}, // Demonic Healthstone + {36892,36893,36894} // Fel Healthstone }; switch(m_spellInfo->Id) @@ -4632,6 +4634,8 @@ void Spell::EffectScriptEffect(uint32 effIndex) case 11729: itemtype=itypes[3][rank];break; // Greater Healthstone case 11730: itemtype=itypes[4][rank];break; // Major Healthstone case 27230: itemtype=itypes[5][rank];break; // Master Healthstone + case 47871: itemtype=itypes[6][rank];break; // Demonic Healthstone + case 47878: itemtype=itypes[7][rank];break; // Fel Healthstone default: return; } diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 802bcea25..05ad9af7f 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 "7040" + #define REVISION_NR "7041" #endif // __REVISION_NR_H__ From 9f5eee701acc2dca4d64385a1e7cf21e970f3b05 Mon Sep 17 00:00:00 2001 From: Turk3y Date: Wed, 7 Jan 2009 04:16:08 +0100 Subject: [PATCH 099/145] Fixed typo in SpellMgr::GetSpellAllowedInLocationError. This should fix problems with flasks and elixirs using. Signed-off-by: ApoC --- src/game/SpellMgr.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/game/SpellMgr.cpp b/src/game/SpellMgr.cpp index 5fc3ca3f8..06fe60522 100644 --- a/src/game/SpellMgr.cpp +++ b/src/game/SpellMgr.cpp @@ -2304,7 +2304,7 @@ uint8 GetSpellAllowedInLocationError(SpellEntry const *spellInfo,uint32 map_id,u } // elixirs not have another limitations - return true; + return 0; } } From 48a90cc42d674e9a97a55e33ffed61b8602d8df2 Mon Sep 17 00:00:00 2001 From: ApoC Date: Wed, 7 Jan 2009 04:21:09 +0100 Subject: [PATCH 100/145] [7042] Forget to add revision number. Signed-off-by: ApoC --- src/shared/revision_nr.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 05ad9af7f..1c80b3c7c 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 "7041" + #define REVISION_NR "7042" #endif // __REVISION_NR_H__ From a3f3caf25a4fa440971a744d76b2a3afafc60028 Mon Sep 17 00:00:00 2001 From: DiSlord Date: Wed, 7 Jan 2009 16:21:18 +0300 Subject: [PATCH 101/145] [7043] Remove not need code Signed-off-by: DiSlord --- src/game/SpellAuras.cpp | 14 -------------- src/shared/revision_nr.h | 2 +- 2 files changed, 1 insertion(+), 15 deletions(-) diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp index aac4b3940..ff08aec06 100644 --- a/src/game/SpellAuras.cpp +++ b/src/game/SpellAuras.cpp @@ -4021,13 +4021,6 @@ void Aura::HandlePeriodicTriggerSpell(bool apply, bool Real) m_isPeriodic = apply; m_isTrigger = apply; - - // Curse of the Plaguebringer - if (!apply && m_spellProto->Id == 29213 && m_removeMode!=AURA_REMOVE_BY_DISPEL) - { - // Cast Wrath of the Plaguebringer if not dispelled - m_target->CastSpell(m_target, 29214, true, 0, this); - } } void Aura::HandlePeriodicEnergize(bool apply, bool Real) @@ -4045,13 +4038,6 @@ void Aura::HandlePeriodicHeal(bool apply, bool Real) m_isPeriodic = apply; - // only at real apply - if (Real && apply && GetSpellProto()->Mechanic == MECHANIC_BANDAGE) - { - // provided m_target as original caster to prevent apply aura caster selection for this negative buff - m_target->CastSpell(m_target,11196,true,NULL,this,m_target->GetGUID()); - } - // For prevent double apply bonuses bool loading = (m_target->GetTypeId() == TYPEID_PLAYER && ((Player*)m_target)->GetSession()->PlayerLoading()); diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 1c80b3c7c..b2dbfe075 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 "7042" + #define REVISION_NR "7043" #endif // __REVISION_NR_H__ From 177ab58d5190382d125e5f12642564ab8dfcbabf Mon Sep 17 00:00:00 2001 From: DiSlord Date: Wed, 7 Jan 2009 16:40:49 +0300 Subject: [PATCH 102/145] [7044] Fix some priest spell (48110, 48111, 48112, 48113) crash Signed-off-by: DiSlord --- sql/mangos.sql | 6 +++++- sql/updates/7044_01_mangos_spell_proc_event.sql | 17 +++++++++++++++++ sql/updates/Makefile.am | 2 ++ src/shared/revision_nr.h | 2 +- 4 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 sql/updates/7044_01_mangos_spell_proc_event.sql diff --git a/sql/mangos.sql b/sql/mangos.sql index 1f737da9e..1e201ab29 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_7040_01_mangos_achievement_reward` bit(1) default NULL + `required_7044_01_mangos_spell_proc_event` bit(1) default NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Used DB version notes'; -- @@ -16655,6 +16655,10 @@ INSERT INTO `spell_proc_event` VALUES (47580, 0x00000000, 6, 0x00000000, 0x00000000, 0x00000040, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (47581, 0x00000000, 6, 0x00000000, 0x00000000, 0x00000040, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (47582, 0x00000000, 6, 0x00000000, 0x00000000, 0x00000040, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(48110, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x000A02A8, 0x00000000, 0.000000, 0.000000, 0), +(48111, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x000A02A8, 0x00000000, 0.000000, 0.000000, 0), +(48112, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x000A02A8, 0x00000000, 0.000000, 0.000000, 0), +(48113, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x000A02A8, 0x00000000, 0.000000, 0.000000, 0), (48159, 0x00000000, 6, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (48160, 0x00000000, 6, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (48483, 0x00000000, 7, 0x00008800, 0x00000440, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), diff --git a/sql/updates/7044_01_mangos_spell_proc_event.sql b/sql/updates/7044_01_mangos_spell_proc_event.sql new file mode 100644 index 000000000..576d5611a --- /dev/null +++ b/sql/updates/7044_01_mangos_spell_proc_event.sql @@ -0,0 +1,17 @@ +ALTER TABLE db_version CHANGE COLUMN required_7040_01_mangos_achievement_reward required_7044_01_mangos_spell_proc_event bit; + +-- (48110) Prayer of Mending (Rank 2) +DELETE FROM `spell_proc_event` WHERE `entry` IN (48110); +INSERT INTO `spell_proc_event` VALUES (48110, 0x00, 0, 0x00000000, 0x00000000, 0x00000000, 0x000A02A8, 0x00000000, 0.000000, 0.000000, 0); + +-- (48112) Prayer of Mending (Rank 2) +DELETE FROM `spell_proc_event` WHERE `entry` IN (48112); +INSERT INTO `spell_proc_event` VALUES (48112, 0x00, 0, 0x00000000, 0x00000000, 0x00000000, 0x000A02A8, 0x00000000, 0.000000, 0.000000, 0); + +-- (48111) Prayer of Mending (Rank 3) +DELETE FROM `spell_proc_event` WHERE `entry` IN (48111); +INSERT INTO `spell_proc_event` VALUES (48111, 0x00, 0, 0x00000000, 0x00000000, 0x00000000, 0x000A02A8, 0x00000000, 0.000000, 0.000000, 0); + +-- (48113) Prayer of Mending (Rank 3) +DELETE FROM `spell_proc_event` WHERE `entry` IN (48113); +INSERT INTO `spell_proc_event` VALUES (48113, 0x00, 0, 0x00000000, 0x00000000, 0x00000000, 0x000A02A8, 0x00000000, 0.000000, 0.000000, 0); \ No newline at end of file diff --git a/sql/updates/Makefile.am b/sql/updates/Makefile.am index b42eb7212..b02628e6d 100644 --- a/sql/updates/Makefile.am +++ b/sql/updates/Makefile.am @@ -115,6 +115,7 @@ pkgdata_DATA = \ 7033_01_mangos_spell_proc_event.sql \ 7034_01_mangos_spell_proc_event.sql \ 7040_01_mangos_achievement_reward.sql \ + 7044_01_mangos_spell_proc_event.sql \ README ## Additional files to include when running 'make dist' @@ -210,4 +211,5 @@ EXTRA_DIST = \ 7033_01_mangos_spell_proc_event.sql \ 7034_01_mangos_spell_proc_event.sql \ 7040_01_mangos_achievement_reward.sql \ + 7044_01_mangos_spell_proc_event.sql \ README diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index b2dbfe075..91a4faed9 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 "7043" + #define REVISION_NR "7044" #endif // __REVISION_NR_H__ From ccdad44e6cf95fd523e64ebe5610b256de86b4f0 Mon Sep 17 00:00:00 2001 From: DiSlord Date: Wed, 7 Jan 2009 17:22:24 +0300 Subject: [PATCH 103/145] Implement AURA_STATE_HEALTH_ABOVE_75_PERCENT use Signed-off-by: DiSlord --- src/game/SharedDefines.h | 2 +- src/game/Unit.cpp | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/game/SharedDefines.h b/src/game/SharedDefines.h index c60964171..48b45883f 100644 --- a/src/game/SharedDefines.h +++ b/src/game/SharedDefines.h @@ -707,7 +707,7 @@ enum AuraState //AURA_STATE_UNKNOWN20 = 20, // c | only (45317 Suicide) //AURA_STATE_UNKNOWN21 = 21, // | not used //AURA_STATE_UNKNOWN22 = 22, // C | not implemented yet (Requires Evasive Charges to use) - AURA_STATE_HEALTH_ABOVE_75_PERCENT = 23, // C | not implemented yet + AURA_STATE_HEALTH_ABOVE_75_PERCENT = 23, // C | }; // Spell mechanics diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index 9a46287c0..6b318e740 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -216,6 +216,7 @@ void Unit::Update( uint32 p_time ) ModifyAuraState(AURA_STATE_HEALTHLESS_20_PERCENT, GetHealth() < GetMaxHealth()*0.20f); ModifyAuraState(AURA_STATE_HEALTHLESS_35_PERCENT, GetHealth() < GetMaxHealth()*0.35f); + ModifyAuraState(AURA_STATE_HEALTH_ABOVE_75_PERCENT, GetHealth() > GetMaxHealth()*0.75f); i_motionMaster.UpdateMotion(p_time); } From d12944d8f2f44d0cffb6c854a4c70be1787490c4 Mon Sep 17 00:00:00 2001 From: DiSlord Date: Wed, 7 Jan 2009 17:59:12 +0300 Subject: [PATCH 104/145] [7045] Some additional check More correct spell select for creatures if spell PreventionType == SPELL_PREVENTION_TYPE_SILENCE Also add check for PreventionType == SPELL_PREVENTION_TYPE_PACIFY Signed-off-by: DiSlord --- src/game/Creature.cpp | 8 ++++++-- src/shared/revision_nr.h | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/game/Creature.cpp b/src/game/Creature.cpp index d278e7a35..30195fa52 100644 --- a/src/game/Creature.cpp +++ b/src/game/Creature.cpp @@ -1596,7 +1596,9 @@ SpellEntry const *Creature::reachWithSpellAttack(Unit *pVictim) // continue; if( dist > range || dist < minrange ) continue; - if(HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_SILENCED)) + if(spellInfo->PreventionType == SPELL_PREVENTION_TYPE_SILENCE && HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_SILENCED)) + continue; + if(spellInfo->PreventionType == SPELL_PREVENTION_TYPE_PACIFY && HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PACIFIED)) continue; return spellInfo; } @@ -1640,7 +1642,9 @@ SpellEntry const *Creature::reachWithSpellCure(Unit *pVictim) // continue; if( dist > range || dist < minrange ) continue; - if(HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_SILENCED)) + if(spellInfo->PreventionType == SPELL_PREVENTION_TYPE_SILENCE && HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_SILENCED)) + continue; + if(spellInfo->PreventionType == SPELL_PREVENTION_TYPE_PACIFY && HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PACIFIED)) continue; return spellInfo; } diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 91a4faed9..416d1c8f1 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 "7044" + #define REVISION_NR "7045" #endif // __REVISION_NR_H__ From cc5fc88fb2ae374ee4a91b3fc038ce1857b86be0 Mon Sep 17 00:00:00 2001 From: VladimirMangos Date: Wed, 7 Jan 2009 17:47:57 +0300 Subject: [PATCH 105/145] [7046] Do more security level checks in commands using HasLowerSecurity. Make use .account set addon safe for players. --- src/game/Chat.cpp | 43 +++++++++++++++++++++++---------- src/game/Chat.h | 3 ++- src/game/ChatHandler.cpp | 2 +- src/game/Level2.cpp | 48 +++++++------------------------------ src/game/Level3.cpp | 43 ++++++++++++++++----------------- src/mangosd/CliRunnable.cpp | 17 ++++--------- src/shared/revision_nr.h | 2 +- 7 files changed, 66 insertions(+), 92 deletions(-) diff --git a/src/game/Chat.cpp b/src/game/Chat.cpp index f21193476..b78aae2d6 100644 --- a/src/game/Chat.cpp +++ b/src/game/Chat.cpp @@ -627,29 +627,46 @@ bool ChatHandler::isAvailable(ChatCommand const& cmd) const return m_session->GetSecurity() >= cmd.SecurityLevel; } -bool ChatHandler::HasLowerSecurity(Player* target, uint64 guid) +bool ChatHandler::HasLowerSecurity(Player* target, uint64 guid, bool strong) { - uint32 target_sec; - - if (!sWorld.getConfig(CONFIG_GM_LOWER_SECURITY)) - return false; - - // allow everything from RA console - if (!m_session) - return false; + WorldSession* target_session = NULL; + uint32 target_account = 0; if (target) - target_sec = target->GetSession()->GetSecurity(); + target_session = target->GetSession(); else if (guid) - target_sec = accmgr.GetSecurity(objmgr.GetPlayerAccountIdByGUID(guid)); - else + target_account = objmgr.GetPlayerAccountIdByGUID(guid); + + if(!target_session && !target_account) { SendSysMessage(LANG_PLAYER_NOT_FOUND); SetSentErrorMessage(true); return true; } - if (m_session->GetSecurity() < target_sec) + return HasLowerSecurityAccount(target_session,target_account,strong); +} + +bool ChatHandler::HasLowerSecurityAccount(WorldSession* target, uint32 target_account, bool strong) +{ + uint32 target_sec; + + // ignore only for non-players for non strong checks (when allow apply command at least to same sec level) + if (m_session->GetSecurity() > SEC_PLAYER && !strong && !sWorld.getConfig(CONFIG_GM_LOWER_SECURITY)) + return false; + + // allow everything from console and RA console + if (!m_session) + return false; + + if (target) + target_sec = target->GetSecurity(); + else if (target_account) + target_sec = accmgr.GetSecurity(target_account); + else + return true; // caller must report error for (target==NULL && target_account==0) + + if (m_session->GetSecurity() < target_sec || strong && m_session->GetSecurity() <= target_sec) { SendSysMessage(LANG_YOURS_SECURITY_IS_LOW); SetSentErrorMessage(true); diff --git a/src/game/Chat.h b/src/game/Chat.h index 68abd1395..12352f88a 100644 --- a/src/game/Chat.h +++ b/src/game/Chat.h @@ -77,7 +77,8 @@ class ChatHandler virtual bool isAvailable(ChatCommand const& cmd) const; virtual bool needReportToTarget(Player* chr) const; - bool HasLowerSecurity(Player* target, uint64 guid); + bool HasLowerSecurity(Player* target, uint64 guid, bool strong = false); + bool HasLowerSecurityAccount(WorldSession* target, uint32 account, bool strong = false); void SendGlobalSysMessage(const char *str); diff --git a/src/game/ChatHandler.cpp b/src/game/ChatHandler.cpp index 1de6ca458..ea5061001 100644 --- a/src/game/ChatHandler.cpp +++ b/src/game/ChatHandler.cpp @@ -190,7 +190,7 @@ void WorldSession::HandleMessagechatOpcode( WorldPacket & recv_data ) Player *player = objmgr.GetPlayer(to.c_str()); uint32 tSecurity = GetSecurity(); - uint32 pSecurity = player ? player->GetSession()->GetSecurity() : 0; + uint32 pSecurity = player ? player->GetSession()->GetSecurity() : SEC_PLAYER; if(!player || tSecurity == SEC_PLAYER && pSecurity > SEC_PLAYER && !player->isAcceptWhispers()) { WorldPacket data(SMSG_CHAT_PLAYER_NOT_FOUND, (to.size()+1)); diff --git a/src/game/Level2.cpp b/src/game/Level2.cpp index 695564617..6ea8c6b6d 100644 --- a/src/game/Level2.cpp +++ b/src/game/Level2.cpp @@ -86,27 +86,11 @@ bool ChatHandler::HandleMuteCommand(const char* args) Player *chr = objmgr.GetPlayer(guid); - // check security - uint32 account_id = 0; - uint32 security = 0; - - if (chr) - { - account_id = chr->GetSession()->GetAccountId(); - security = chr->GetSession()->GetSecurity(); - } - else - { - account_id = objmgr.GetPlayerAccountIdByGUID(guid); - security = accmgr.GetSecurity(account_id); - } - - if(m_session && security >= m_session->GetSecurity()) - { - SendSysMessage(LANG_YOURS_SECURITY_IS_LOW); - SetSentErrorMessage(true); + // must have strong lesser security level + if(HasLowerSecurity (chr,guid,true)) return false; - } + + uint32 account_id = chr ? chr->GetSession()->GetAccountId() : objmgr.GetPlayerAccountIdByGUID(guid); time_t mutetime = time(NULL) + notspeaktime*60; @@ -152,27 +136,11 @@ bool ChatHandler::HandleUnmuteCommand(const char* args) Player *chr = objmgr.GetPlayer(guid); - // check security - uint32 account_id = 0; - uint32 security = 0; - - if (chr) - { - account_id = chr->GetSession()->GetAccountId(); - security = chr->GetSession()->GetSecurity(); - } - else - { - account_id = objmgr.GetPlayerAccountIdByGUID(guid); - security = accmgr.GetSecurity(account_id); - } - - if(m_session && security >= m_session->GetSecurity()) - { - SendSysMessage(LANG_YOURS_SECURITY_IS_LOW); - SetSentErrorMessage(true); + // must have strong lesser security level + if(HasLowerSecurity (chr,guid,true)) return false; - } + + uint32 account_id = chr ? chr->GetSession()->GetAccountId() : objmgr.GetPlayerAccountIdByGUID(guid); if (chr) { diff --git a/src/game/Level3.cpp b/src/game/Level3.cpp index f50fff61e..44f626210 100644 --- a/src/game/Level3.cpp +++ b/src/game/Level3.cpp @@ -696,7 +696,6 @@ bool ChatHandler::HandleAccountSetGmLevelCommand(const char* args) std::string targetAccountName; uint32 targetAccountId = 0; - uint32 targetSecurity = 0; /// only target player different from self allowed (if targetPlayer!=NULL then not console) Player* targetPlayer = getSelectedPlayer(); @@ -710,13 +709,6 @@ bool ChatHandler::HandleAccountSetGmLevelCommand(const char* args) arg2 = arg1; targetAccountId = targetPlayer->GetSession()->GetAccountId(); - targetSecurity = targetPlayer->GetSession()->GetSecurity(); - if(!accmgr.GetName(targetAccountId,targetAccountName)) - { - PSendSysMessage(LANG_ACCOUNT_NOT_EXIST,targetAccountName.c_str()); - SetSentErrorMessage(true); - return false; - } } else { @@ -733,7 +725,12 @@ bool ChatHandler::HandleAccountSetGmLevelCommand(const char* args) } targetAccountId = accmgr.GetId(targetAccountName); - targetSecurity = accmgr.GetSecurity(targetAccountId); + if(!targetAccountId) + { + PSendSysMessage(LANG_ACCOUNT_NOT_EXIST,targetAccountName.c_str()); + SetSentErrorMessage(true); + return false; + } } int32 gm = (int32)atoi(arg2); @@ -744,12 +741,14 @@ bool ChatHandler::HandleAccountSetGmLevelCommand(const char* args) return false; } - /// m_session==NULL only for console - uint32 plSecurity = m_session ? m_session->GetSecurity() : SEC_CONSOLE; - /// can set security level only for target with less security and to less security that we have /// This is also reject self apply in fact - if(targetSecurity >= plSecurity || uint32(gm) >= plSecurity ) + if(HasLowerSecurityAccount(NULL,targetAccountId,true)) + return false; + + /// account can't set security to same or grater level, need more power GM or console + uint32 plSecurity = m_session ? m_session->GetSecurity() : SEC_CONSOLE; + if (uint32(gm) >= plSecurity ) { SendSysMessage(LANG_YOURS_SECURITY_IS_LOW); SetSentErrorMessage(true); @@ -798,19 +797,10 @@ bool ChatHandler::HandleAccountSetPasswordCommand(const char* args) return false; } - uint32 targetSecurity = accmgr.GetSecurity(targetAccountId); - - /// m_session==NULL only for console - uint32 plSecurity = m_session ? m_session->GetSecurity() : SEC_CONSOLE; - /// can set password only for target with less security /// This is also reject self apply in fact - if (targetSecurity >= plSecurity) - { - SendSysMessage (LANG_YOURS_SECURITY_IS_LOW); - SetSentErrorMessage (true); + if(HasLowerSecurityAccount (NULL,targetAccountId,true)) return false; - } if (strcmp(szPassword1,szPassword2)) { @@ -6192,8 +6182,15 @@ bool ChatHandler::HandleAccountSetAddonCommand(const char* args) SetSentErrorMessage(true); return false; } + } + // Let set addon state only for lesser (strong) security level + // or to self account + if (m_session && m_session->GetAccountId () != account_id && + HasLowerSecurityAccount (NULL,account_id,true)) + return false; + int lev=atoi(szExp); //get int anyway (0 if error) if(lev < 0) return false; diff --git a/src/mangosd/CliRunnable.cpp b/src/mangosd/CliRunnable.cpp index 69b289f39..7575b0dad 100644 --- a/src/mangosd/CliRunnable.cpp +++ b/src/mangosd/CliRunnable.cpp @@ -80,19 +80,10 @@ bool ChatHandler::HandleAccountDeleteCommand(const char* args) } /// Commands not recommended call from chat, but support anyway - if(m_session) - { - uint32 targetSecurity = accmgr.GetSecurity(account_id); - - /// can delete only for account with less security - /// This is also reject self apply in fact - if (targetSecurity >= m_session->GetSecurity()) - { - SendSysMessage (LANG_YOURS_SECURITY_IS_LOW); - SetSentErrorMessage (true); - return false; - } - } + /// can delete only for account with less security + /// This is also reject self apply in fact + if(HasLowerSecurityAccount (NULL,account_id,true)) + return false; AccountOpResult result = accmgr.DeleteAccount(account_id); switch(result) diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 416d1c8f1..8bdff3b61 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 "7045" + #define REVISION_NR "7046" #endif // __REVISION_NR_H__ From ebf7c767dad85a4eb40a48f642009de8ad64925b Mon Sep 17 00:00:00 2001 From: DiSlord Date: Wed, 7 Jan 2009 20:14:00 +0300 Subject: [PATCH 106/145] [7047] Fix Draenei race spell add at client switch Signed-off-by: DiSlord --- sql/mangos.sql | 21 ++++++++++--------- sql/updates/01_characters_character_spell.sql | 9 ++++++++ .../02_mangos_playercreateinfo_action.sql | 9 ++++++++ .../03_mangos_playercreateinfo_spell.sql | 10 +++++++++ src/shared/revision_nr.h | 2 +- 5 files changed, 40 insertions(+), 11 deletions(-) create mode 100644 sql/updates/01_characters_character_spell.sql create mode 100644 sql/updates/02_mangos_playercreateinfo_action.sql create mode 100644 sql/updates/03_mangos_playercreateinfo_spell.sql diff --git a/sql/mangos.sql b/sql/mangos.sql index 1e201ab29..3472a58b6 100644 --- a/sql/mangos.sql +++ b/sql/mangos.sql @@ -9713,14 +9713,14 @@ INSERT INTO `playercreateinfo_action` VALUES (11,2,0,6603,0,0), (11,2,1,21084,0,0), (11,2,2,635,0,0), -(11,2,3,28880,0,0), +(11,2,3,59542,0,0), (11,2,10,159,128,0), (11,2,11,4540,128,0), (11,2,83,4540,128,0), (11,3,0,6603,0,0), (11,3,1,2973,0,0), (11,3,2,75,0,0), -(11,3,3,28880,0,0), +(11,3,3,59543,0,0), (11,3,10,159,128,0), (11,3,11,4540,128,0), (11,3,72,6603,0,0), @@ -9731,7 +9731,7 @@ INSERT INTO `playercreateinfo_action` VALUES (11,5,0,6603,0,0), (11,5,1,585,0,0), (11,5,2,2050,0,0), -(11,5,3,28880,0,0), +(11,5,3,59544,0,0), (11,5,10,159,128,0), (11,5,11,4540,128,0), (11,5,83,4540,128,0), @@ -9741,16 +9741,17 @@ INSERT INTO `playercreateinfo_action` VALUES (11,6,3,45462,0,0), (11,6,4,45902,0,0), (11,6,5,47541,0,0), +(11,6,6,59545,0,0), (11,7,0,6603,0,0), (11,7,1,403,0,0), (11,7,2,331,0,0), -(11,7,3,28880,0,0), +(11,7,3,59547,0,0), (11,7,10,159,128,0), (11,7,11,4540,128,0), (11,8,0,6603,0,0), (11,8,1,133,0,0), (11,8,2,168,0,0), -(11,8,3,28880,0,0), +(11,8,3,59548,0,0), (11,8,10,159,128,0), (11,8,11,4540,128,0), (11,8,83,4540,128,0); @@ -12271,7 +12272,7 @@ INSERT INTO `playercreateinfo_spell` VALUES (11,2,22810,'Opening - No Text',1), (11,2,27762,'Libram',1), (11,2,28875,'Gemcutting',1), -(11,2,28880,'Gift of the Naaru',1), +(11,2,59542,'Gift of the Naaru',1), (11,2,29932,'Language Draenei',1), (11,3,75,'Auto Shot',1), (11,3,81,'Dodge',1), @@ -12308,7 +12309,7 @@ INSERT INTO `playercreateinfo_spell` VALUES (11,3,22810,'Opening - No Text',1), (11,3,24949,'Defensive State 2(DND)',1), (11,3,28875,'Gemcutting',1), -(11,3,28880,'Gift of the Naaru',1), +(11,3,59543,'Gift of the Naaru',1), (11,3,29932,'Language Draenei',1), (11,3,34082,'Advantaged State(DND)',1), (11,5,81,'Dodge',1), @@ -12344,7 +12345,7 @@ INSERT INTO `playercreateinfo_spell` VALUES (11,5,22810,'Opening - No Text',1), (11,5,28875,'Gemcutting',1), (11,5,28878,'Inspiring Presence',1), -(11,5,28880,'Gift of the Naaru',1), +(11,5,59544,'Gift of the Naaru',1), (11,5,29932,'Language Draenei',1), (11,6,81,'Dodge',1), (11,6,196,'One-Handed Axes',1), @@ -12450,7 +12451,7 @@ INSERT INTO `playercreateinfo_spell` VALUES (11,7,27763,'Totem',1), (11,7,28875,'Gemcutting',1), (11,7,28878,'Inspiring Presence',1), -(11,7,28880,'Gift of the Naaru',1), +(11,7,59547,'Gift of the Naaru',1), (11,7,29932,'Language Draenei',1), (11,8,81,'Dodge',1), (11,8,133,'Fireball',1), @@ -12485,7 +12486,7 @@ INSERT INTO `playercreateinfo_spell` VALUES (11,8,22810,'Opening - No Text',1), (11,8,28875,'Gemcutting',1), (11,8,28878,'Inspiring Presence',1), -(11,8,28880,'Gift of the Naaru',1), +(11,8,59548,'Gift of the Naaru',1), (11,8,29932,'Language Draenei',1); /*!40000 ALTER TABLE `playercreateinfo_spell` ENABLE KEYS */; UNLOCK TABLES; diff --git a/sql/updates/01_characters_character_spell.sql b/sql/updates/01_characters_character_spell.sql new file mode 100644 index 000000000..fa17e0c4c --- /dev/null +++ b/sql/updates/01_characters_character_spell.sql @@ -0,0 +1,9 @@ +DELETE FROM `character_spell` WHERE `spell` IN ('28880', 59542, 59543, 59544, 59545, 59547, 59548); + +INSERT INTO character_spell SELECT characters.guid as guid, 28880, -1, 1, 0 FROM `characters` WHERE characters.race=11 AND characters.class = 1; +INSERT INTO character_spell SELECT characters.guid as guid, 59542, -1, 1, 0 FROM `characters` WHERE characters.race=11 AND characters.class = 2; +INSERT INTO character_spell SELECT characters.guid as guid, 59543, -1, 1, 0 FROM `characters` WHERE characters.race=11 AND characters.class = 3; +INSERT INTO character_spell SELECT characters.guid as guid, 59544, -1, 1, 0 FROM `characters` WHERE characters.race=11 AND characters.class = 5; +INSERT INTO character_spell SELECT characters.guid as guid, 59545, -1, 1, 0 FROM `characters` WHERE characters.race=11 AND characters.class = 6; +INSERT INTO character_spell SELECT characters.guid as guid, 59547, -1, 1, 0 FROM `characters` WHERE characters.race=11 AND characters.class = 7; +INSERT INTO character_spell SELECT characters.guid as guid, 59548, -1, 1, 0 FROM `characters` WHERE characters.race=11 AND characters.class = 8; diff --git a/sql/updates/02_mangos_playercreateinfo_action.sql b/sql/updates/02_mangos_playercreateinfo_action.sql new file mode 100644 index 000000000..834753dcd --- /dev/null +++ b/sql/updates/02_mangos_playercreateinfo_action.sql @@ -0,0 +1,9 @@ +DELETE FROM `playercreateinfo_action` WHERE `action` IN ('28880', 59542, 59543, 59544, 59545, 59547, 59548); +INSERT INTO `playercreateinfo_action` VALUES +(11,1,74,28880,0,0), +(11,2,3,59542,0,0), +(11,3,3,59543,0,0), +(11,5,3,59544,0,0), +(11,6,6,59545,0,0), +(11,7,3,59547,0,0), +(11,8,3,59548,0,0); \ No newline at end of file diff --git a/sql/updates/03_mangos_playercreateinfo_spell.sql b/sql/updates/03_mangos_playercreateinfo_spell.sql new file mode 100644 index 000000000..cd55d875a --- /dev/null +++ b/sql/updates/03_mangos_playercreateinfo_spell.sql @@ -0,0 +1,10 @@ +DELETE FROM `playercreateinfo_spell` WHERE `Spell` IN ('28880', 59542, 59543, 59544, 59545, 59547, 59548); + +INSERT INTO `playercreateinfo_spell` VALUES +(11,1,28880,'Gift of the Naaru',1), +(11,2,59542,'Gift of the Naaru',1), +(11,3,59543,'Gift of the Naaru',1), +(11,5,59544,'Gift of the Naaru',1), +(11,6,59545,'Gift of the Naaru',1), +(11,7,59547,'Gift of the Naaru',1), +(11,8,59548,'Gift of the Naaru',1); \ No newline at end of file diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 8bdff3b61..eb0a94666 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 "7046" + #define REVISION_NR "7047" #endif // __REVISION_NR_H__ From 5f894bf4221f7ca9eb7886fc9ec1007c907443a3 Mon Sep 17 00:00:00 2001 From: DiSlord Date: Wed, 7 Jan 2009 21:48:32 +0300 Subject: [PATCH 107/145] Fix prev commit --- sql/characters.sql | 2 +- sql/mangos.sql | 2 +- ...ter_spell.sql => 7047_01_characters_character_spell.sql} | 2 ++ ...ction.sql => 7047_02_mangos_playercreateinfo_action.sql} | 2 ++ ..._spell.sql => 7047_03_mangos_playercreateinfo_spell.sql} | 2 ++ sql/updates/Makefile.am | 6 ++++++ 6 files changed, 14 insertions(+), 2 deletions(-) rename sql/updates/{01_characters_character_spell.sql => 7047_01_characters_character_spell.sql} (88%) rename sql/updates/{02_mangos_playercreateinfo_action.sql => 7047_02_mangos_playercreateinfo_action.sql} (69%) rename sql/updates/{03_mangos_playercreateinfo_spell.sql => 7047_03_mangos_playercreateinfo_spell.sql} (74%) diff --git a/sql/characters.sql b/sql/characters.sql index 4cbaab5da..1a1753b34 100644 --- a/sql/characters.sql +++ b/sql/characters.sql @@ -21,7 +21,7 @@ DROP TABLE IF EXISTS `character_db_version`; CREATE TABLE `character_db_version` ( - `required_6976_02_characters_character_db_version` bit(1) default NULL + `required_7047_01_characters_character_spell` bit(1) default NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Last applied sql update to DB'; -- diff --git a/sql/mangos.sql b/sql/mangos.sql index 3472a58b6..bd799f281 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_7044_01_mangos_spell_proc_event` bit(1) default NULL + `required_7047_03_mangos_playercreateinfo_spell` bit(1) default NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Used DB version notes'; -- diff --git a/sql/updates/01_characters_character_spell.sql b/sql/updates/7047_01_characters_character_spell.sql similarity index 88% rename from sql/updates/01_characters_character_spell.sql rename to sql/updates/7047_01_characters_character_spell.sql index fa17e0c4c..7d0458d81 100644 --- a/sql/updates/01_characters_character_spell.sql +++ b/sql/updates/7047_01_characters_character_spell.sql @@ -1,3 +1,5 @@ +ALTER TABLE character_db_version CHANGE COLUMN required_6976_02_characters_character_db_version required_7047_01_characters_character_spell bit; + DELETE FROM `character_spell` WHERE `spell` IN ('28880', 59542, 59543, 59544, 59545, 59547, 59548); INSERT INTO character_spell SELECT characters.guid as guid, 28880, -1, 1, 0 FROM `characters` WHERE characters.race=11 AND characters.class = 1; diff --git a/sql/updates/02_mangos_playercreateinfo_action.sql b/sql/updates/7047_02_mangos_playercreateinfo_action.sql similarity index 69% rename from sql/updates/02_mangos_playercreateinfo_action.sql rename to sql/updates/7047_02_mangos_playercreateinfo_action.sql index 834753dcd..894334b86 100644 --- a/sql/updates/02_mangos_playercreateinfo_action.sql +++ b/sql/updates/7047_02_mangos_playercreateinfo_action.sql @@ -1,3 +1,5 @@ +ALTER TABLE db_version CHANGE COLUMN required_7044_01_mangos_spell_proc_event required_7047_02_mangos_playercreateinfo_action bit; + DELETE FROM `playercreateinfo_action` WHERE `action` IN ('28880', 59542, 59543, 59544, 59545, 59547, 59548); INSERT INTO `playercreateinfo_action` VALUES (11,1,74,28880,0,0), diff --git a/sql/updates/03_mangos_playercreateinfo_spell.sql b/sql/updates/7047_03_mangos_playercreateinfo_spell.sql similarity index 74% rename from sql/updates/03_mangos_playercreateinfo_spell.sql rename to sql/updates/7047_03_mangos_playercreateinfo_spell.sql index cd55d875a..c82490788 100644 --- a/sql/updates/03_mangos_playercreateinfo_spell.sql +++ b/sql/updates/7047_03_mangos_playercreateinfo_spell.sql @@ -1,3 +1,5 @@ +ALTER TABLE db_version CHANGE COLUMN required_7047_02_mangos_playercreateinfo_action required_7047_03_mangos_playercreateinfo_spell bit; + DELETE FROM `playercreateinfo_spell` WHERE `Spell` IN ('28880', 59542, 59543, 59544, 59545, 59547, 59548); INSERT INTO `playercreateinfo_spell` VALUES diff --git a/sql/updates/Makefile.am b/sql/updates/Makefile.am index b02628e6d..9d3b30057 100644 --- a/sql/updates/Makefile.am +++ b/sql/updates/Makefile.am @@ -116,6 +116,9 @@ pkgdata_DATA = \ 7034_01_mangos_spell_proc_event.sql \ 7040_01_mangos_achievement_reward.sql \ 7044_01_mangos_spell_proc_event.sql \ + 7047_01_characters_character_spell.sql \ + 7047_02_mangos_playercreateinfo_action.sql \ + 7047_03_mangos_playercreateinfo_spell.sql \ README ## Additional files to include when running 'make dist' @@ -212,4 +215,7 @@ EXTRA_DIST = \ 7034_01_mangos_spell_proc_event.sql \ 7040_01_mangos_achievement_reward.sql \ 7044_01_mangos_spell_proc_event.sql \ + 7047_01_characters_character_spell.sql \ + 7047_02_mangos_playercreateinfo_action.sql \ + 7047_03_mangos_playercreateinfo_spell.sql \ README From eacc6e069c6fe3ed08123f3a0b157f1a91bf13a4 Mon Sep 17 00:00:00 2001 From: DiSlord Date: Wed, 7 Jan 2009 21:49:00 +0300 Subject: [PATCH 108/145] [7048] Fix typo (incorrect 55440 dummy proc) Signed-off-by: DiSlord --- src/game/Unit.cpp | 22 +++++++++++----------- src/shared/revision_nr.h | 2 +- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index 6b318e740..a6326bafd 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -5362,6 +5362,17 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, Aura* triggeredByAu target = this; break; } + // Glyph of Healing Wave + case 55440: + { + // Not proc from self heals + if (this==pVictim) + return false; + basepoints0 = triggeredByAura->GetModifier()->m_amount * damage / 100; + target = this; + triggered_spell_id = 55533; + break; + } } // Earth Shield @@ -5441,17 +5452,6 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, Aura* triggeredByAu return true; } - // Glyph of Healing Wave - case 55440: - { - // Not proc from self heals - if (this==pVictim) - return false; - basepoints0 = triggeredByAura->GetModifier()->m_amount * damage / 100; - target = this; - triggered_spell_id = 55533; - break; - } break; } case SPELLFAMILY_DEATHKNIGHT: diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index eb0a94666..c40cac1a8 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 "7047" + #define REVISION_NR "7048" #endif // __REVISION_NR_H__ From 32a7c35a95450bdc959bc4742fe0ac297bfb84d4 Mon Sep 17 00:00:00 2001 From: DiSlord Date: Thu, 8 Jan 2009 00:27:24 +0300 Subject: [PATCH 109/145] Restore damage calc for some paladin seal after client switch Allow proc shaman heal shield on non players Signed-off-by: DiSlord --- src/game/SpellAuras.cpp | 31 ++++++++++++++--------- src/game/Unit.cpp | 54 ++++++----------------------------------- 2 files changed, 28 insertions(+), 57 deletions(-) diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp index ff08aec06..0f1856d3f 100644 --- a/src/game/SpellAuras.cpp +++ b/src/game/SpellAuras.cpp @@ -4240,27 +4240,36 @@ void Aura::HandlePeriodicDamage(bool apply, bool Real) // Consecration if (m_spellProto->SpellFamilyFlags & 0x0000000000000020LL) { - if (apply && !loading) + if (apply && !loading && caster) { - if(Unit* caster = GetCaster()) + Unit::AuraList const& classScripts = caster->GetAurasByType(SPELL_AURA_OVERRIDE_CLASS_SCRIPTS); + for(Unit::AuraList::const_iterator k = classScripts.begin(); k != classScripts.end(); ++k) { - Unit::AuraList const& classScripts = caster->GetAurasByType(SPELL_AURA_OVERRIDE_CLASS_SCRIPTS); - for(Unit::AuraList::const_iterator k = classScripts.begin(); k != classScripts.end(); ++k) + int32 tickcount = GetSpellDuration(m_spellProto) / m_spellProto->EffectAmplitude[m_effIndex]; + switch((*k)->GetModifier()->m_miscvalue) { - int32 tickcount = GetSpellDuration(m_spellProto) / m_spellProto->EffectAmplitude[m_effIndex]; - switch((*k)->GetModifier()->m_miscvalue) + case 5147: // Improved Consecration - Libram of the Eternal Rest { - case 5147: // Improved Consecration - Libram of the Eternal Rest - { - m_modifier.m_amount += (*k)->GetModifier()->m_amount / tickcount; - break; - } + m_modifier.m_amount += (*k)->GetModifier()->m_amount / tickcount; + break; } } } } return; } + // Seal of Vengeance 0.013*$SPH+0.025*$AP per tick + if(m_spellProto->SpellFamilyFlags & 0x0000080000000000LL) + { + if (apply && !loading && caster) + { + float ap = caster->GetTotalAttackPowerValue(BASE_ATTACK); + int32 holy = caster->SpellBaseDamageBonus(GetSpellSchoolMask(m_spellProto)) + + caster->SpellBaseDamageBonusForVictim(GetSpellSchoolMask(m_spellProto), m_target); + m_modifier.m_amount += int32(ap * 0.025f) + int32(holy * 13 / 1000); + } + return; + } break; } default: diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index a6326bafd..e4b8a9729 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -5047,48 +5047,15 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, Aura* triggeredByAu } case SPELLFAMILY_PALADIN: { - // TODO: spell list, formula change in 3.0.3 - // Seal of Righteousness - melee proc dummy + // Seal of Righteousness - melee proc dummy (addition ${$MWS*(0.022*$AP+0.044*$SPH)} damage) if (dummySpell->SpellFamilyFlags&0x000000008000000LL && triggeredByAura->GetEffIndex()==0) { - if(GetTypeId() != TYPEID_PLAYER) - return false; - - uint32 spellId; - switch (triggeredByAura->GetId()) - { - case 21084: spellId = 25742; break; // Rank 1 - case 20287: spellId = 25740; break; // Rank 2 - case 20288: spellId = 25739; break; // Rank 3 - case 20289: spellId = 25738; break; // Rank 4 - case 20290: spellId = 25737; break; // Rank 5 - case 20291: spellId = 25736; break; // Rank 6 - case 20292: spellId = 25735; break; // Rank 7 - case 20293: spellId = 25713; break; // Rank 8 - case 27155: spellId = 27156; break; // Rank 9 - default: - sLog.outError("Unit::HandleDummyAuraProc: non handled possibly SoR (Id = %u)", triggeredByAura->GetId()); - return false; - } - Item *item = ((Player*)this)->GetItemByPos(INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_MAINHAND); - float speed = (item ? item->GetProto()->Delay : BASE_ATTACK_TIME)/1000.0f; - - float damageBasePoints; - if(item && item->GetProto()->InventoryType == INVTYPE_2HWEAPON) - // two hand weapon - damageBasePoints=1.20f*triggeredByAura->GetModifier()->m_amount * 1.2f * 1.03f * speed/100.0f + 1; - else - // one hand weapon/no weapon - damageBasePoints=0.85f*ceil(triggeredByAura->GetModifier()->m_amount * 1.2f * 1.03f * speed/100.0f) - 1; - - int32 damagePoint = int32(damageBasePoints + 0.03f * (GetWeaponDamageRange(BASE_ATTACK,MINDAMAGE)+GetWeaponDamageRange(BASE_ATTACK,MAXDAMAGE))/2.0f) + 1; - - // apply damage bonuses manually - if(damagePoint >= 0) - damagePoint = SpellDamageBonus(pVictim, dummySpell, damagePoint, SPELL_DIRECT_DAMAGE); - - CastCustomSpell(pVictim,spellId,&damagePoint,NULL,NULL,true,NULL, triggeredByAura); - return true; // no hidden cooldown + triggered_spell_id = 25742; + float ap = GetTotalAttackPowerValue(BASE_ATTACK); + int32 holy = SpellBaseDamageBonus(SPELL_SCHOOL_MASK_HOLY) + + SpellBaseDamageBonusForVictim(SPELL_SCHOOL_MASK_HOLY, pVictim); + basepoints0 = GetAttackTime(BASE_ATTACK) * int32(ap*0.022f + 0.044f * holy) / 1000; + break; } // Seal of Blood do damage trigger if(dummySpell->SpellFamilyFlags & 0x0000040000000000LL) @@ -5144,8 +5111,7 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, Aura* triggeredByAu } break; } - // TODO: fix basepoint calculation (changed in 3.0.3) - // Seal of Vengeance + // Seal of Vengeance (damage calc on apply aura) case 31801: { if(effIndex != 0) // effect 1,2 used by seal unleashing code @@ -5378,10 +5344,6 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, Aura* triggeredByAu // Earth Shield if(dummySpell->SpellFamilyFlags & 0x0000040000000000LL) { - if(GetTypeId() != TYPEID_PLAYER) - return false; - - // heal basepoints0 = triggeredByAura->GetModifier()->m_amount; target = this; triggered_spell_id = 379; From c2741b50e712d02163ae4fcd3c3b76a9dc80bdbc Mon Sep 17 00:00:00 2001 From: DiSlord Date: Thu, 8 Jan 2009 01:12:22 +0300 Subject: [PATCH 110/145] [7049] Work vs Auras Allow stack some auras from some caster in one Move apply/remove aura state on apply/remove aura (on 1 add / on last remove) Correctly fill aura flag and send duration update to client Not use m_procCharges for store satack amount, used m_stackAmount Fixes in HandlePeriodicDamage (use m_stackAmount, fix formulas to 303, optimisation) Fixes in Spell::EffectSchoolDMG (use m_stackAmount, fix formulas to 303) Remove unused uint32 m_PeriodicEventId from aura struct Add Unit::RemoveSingleSpellAurasFromStack for remove one Spell auras from stack Add Aura::RefreshAura() for refresh aura duration Signed-off-by: DiSlord --- src/game/SpellAuras.cpp | 440 +++++++++++++++++++------------------- src/game/SpellAuras.h | 38 ++-- src/game/SpellEffects.cpp | 103 +++++---- src/game/Unit.cpp | 114 +++++----- src/game/Unit.h | 1 + src/shared/revision_nr.h | 2 +- 6 files changed, 352 insertions(+), 346 deletions(-) diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp index 0f1856d3f..6581df7ae 100644 --- a/src/game/SpellAuras.cpp +++ b/src/game/SpellAuras.cpp @@ -337,14 +337,16 @@ pAuraHandler AuraHandler[TOTAL_AURAS]= }; Aura::Aura(SpellEntry const* spellproto, uint32 eff, int32 *currentBasePoints, Unit *target, Unit *caster, Item* castItem) : -m_procCharges(0), m_spellmod(NULL), m_effIndex(eff), m_caster_guid(0), m_target(target), -m_timeCla(1000), m_castItemGuid(castItem?castItem->GetGUID():0), m_auraSlot(MAX_AURAS), -m_positive(false), m_permanent(false), m_isPeriodic(false), m_isTrigger(false), m_isAreaAura(false), -m_isPersistent(false), m_updated(false), m_removeMode(AURA_REMOVE_BY_DEFAULT), m_isRemovedOnShapeLost(true), m_in_use(false), -m_periodicTimer(0), m_PeriodicEventId(0), m_AuraDRGroup(DIMINISHING_NONE) +m_spellmod(NULL), m_caster_guid(0), m_castItemGuid(castItem?castItem->GetGUID():0), m_target(target), +m_timeCla(1000), m_periodicTimer(0), m_removeMode(AURA_REMOVE_BY_DEFAULT), m_AuraDRGroup(DIMINISHING_NONE), +m_effIndex(eff), m_auraSlot(MAX_AURAS), m_auraFlags(AFLAG_NONE), m_auraLevel(1), m_procCharges(0), m_stackAmount(1), +m_positive(false), m_permanent(false), m_isPeriodic(false), m_isTrigger(false), m_isAreaAura(false), m_isPersistent(false), +m_updated(false), m_isRemovedOnShapeLost(true), m_in_use(false) { assert(target); + int32 size = sizeof(Aura); + assert(spellproto && spellproto == sSpellStore.LookupEntry( spellproto->Id ) && "`info` must be pointer to sSpellStore element"); m_spellProto = spellproto; @@ -889,12 +891,12 @@ void Aura::_AddAura() if(!m_target) return; - // we can found aura in NULL_AURA_SLOT and then need store state instead check slot != NULL_AURA_SLOT - bool samespell = false; + // Second aura if some spell bool secondaura = false; + // Try find slot for aura uint8 slot = NULL_AURA_SLOT; - - for(uint8 i = 0; i < 3; i++) + // Lookup for some spell auras (and get slot from it) + for(uint8 i = 0; i < m_effIndex; i++) { Unit::spellEffectPair spair = Unit::spellEffectPair(GetId(), i); for(Unit::AuraMap::const_iterator itr = m_target->GetAuras().lower_bound(spair); itr != m_target->GetAuras().upper_bound(spair); ++itr) @@ -902,18 +904,30 @@ void Aura::_AddAura() // allow use single slot only by auras from same caster if(itr->second->GetCasterGUID()==GetCasterGUID()) { - samespell = true; - if (m_effIndex > itr->second->GetEffIndex()) - secondaura = true; slot = itr->second->GetAuraSlot(); + secondaura = true; break; } } - - if(samespell) + if (secondaura) break; } - + // Lookup free slot + if (!secondaura && m_target->GetVisibleAurasCount() < MAX_AURAS) + { + Unit::VisibleAuraMap const *visibleAuras = m_target->GetVisibleAuras(); + for(uint8 i = 0; i < MAX_AURAS; ++i) + { + Unit::VisibleAuraMap::const_iterator itr = visibleAuras->find(i); + if(itr == visibleAuras->end()) + { + slot = i; + // update for out of range group members (on 1 slot use) + m_target->UpdateAuraForGroup(slot); + break; + } + } + } // not call total regen auras at adding switch (m_modifier.m_auraname) { @@ -939,59 +953,44 @@ void Aura::_AddAura() if((!m_isPassive || (caster && caster->GetTypeId() == TYPEID_UNIT && ((Creature*)caster)->isTotem())) && (m_spellProto->Effect[GetEffIndex()] != SPELL_EFFECT_APPLY_AREA_AURA_ENEMY || m_target != caster)) { - if(!samespell) // new slot need + SetAuraSlot( slot ); + if(slot < MAX_AURAS) // slot found send data to client { - if(m_target->GetVisibleAurasCount() < MAX_AURAS) - { - Unit::VisibleAuraMap const *visibleAuras = m_target->GetVisibleAuras(); - for(uint8 i = 0; i < MAX_AURAS; ++i) - { - Unit::VisibleAuraMap::const_iterator itr = visibleAuras->find(i); - if(itr == visibleAuras->end()) - { - slot = i; - break; - } - } - } - - SetAuraSlot( slot ); - - // Not update fields for not first spell's aura, all data already in fields - if(!secondaura) - { - if(slot < MAX_AURAS) // slot found - { - SetAura(false); - SetAuraFlags((1 << GetEffIndex()) | AFLAG_NOT_CASTER | ((GetAuraMaxDuration() > 0) ? AFLAG_DURATION : AFLAG_NONE) | (IsPositive() ? AFLAG_POSITIVE : AFLAG_NEGATIVE)); - SetAuraLevel(caster ? caster->getLevel() : sWorld.getConfig(CONFIG_MAX_PLAYER_LEVEL)); - SendAuraUpdate(false); - - // update for out of range group members - m_target->UpdateAuraForGroup(slot); - } - } - } - else // use found slot - { - SetAuraSlot( slot ); - // Not recalculate stack count for second aura of the same spell - if (!secondaura) - UpdateSlotCounterAndDuration(true); + SetAura(false); + SetAuraFlags((1 << GetEffIndex()) | AFLAG_NOT_CASTER | ((GetAuraMaxDuration() > 0) ? AFLAG_DURATION : AFLAG_NONE) | (IsPositive() ? AFLAG_POSITIVE : AFLAG_NEGATIVE)); + SetAuraLevel(caster ? caster->getLevel() : sWorld.getConfig(CONFIG_MAX_PLAYER_LEVEL)); + SendAuraUpdate(false); } - // Update Seals information - if( IsSealSpell(GetSpellProto()) ) - m_target->ModifyAuraState(AURA_STATE_JUDGEMENT, true); - - // Conflagrate aura state - if (GetSpellProto()->SpellFamilyName == SPELLFAMILY_WARLOCK && (GetSpellProto()->SpellFamilyFlags & 4)) - m_target->ModifyAuraState(AURA_STATE_IMMOLATE, true); - - if(GetSpellProto()->SpellFamilyName == SPELLFAMILY_DRUID - && (GetSpellProto()->SpellFamilyFlags == 0x40 || GetSpellProto()->SpellFamilyFlags == 0x10)) + //***************************************************** + // Update target aura state flag (at 1 aura apply) + // TODO: Make it easer + //***************************************************** + if (!secondaura) { - m_target->ModifyAuraState(AURA_STATE_SWIFTMEND, true); + // Update Seals information + if( IsSealSpell(GetSpellProto()) ) + m_target->ModifyAuraState(AURA_STATE_JUDGEMENT, true); + + // Conflagrate aura state on Immolate + if (m_spellProto->SpellFamilyName == SPELLFAMILY_WARLOCK && m_spellProto->SpellFamilyFlags & 4) + m_target->ModifyAuraState(AURA_STATE_IMMOLATE, true); + + // Faerie Fire (druid versions) + if( m_spellProto->SpellFamilyName == SPELLFAMILY_DRUID && m_spellProto->SpellFamilyFlags & 0x0000000000000400LL) + m_target->ModifyAuraState(AURA_STATE_FAERIE_FIRE, true); + + // Victorious + if( m_spellProto->SpellFamilyName == SPELLFAMILY_WARRIOR && m_spellProto->SpellFamilyFlags & 0x0004000000000000LL) + m_target->ModifyAuraState(AURA_STATE_WARRIOR_VICTORY_RUSH, true); + + // Swiftmend state on Regrowth & Rejuvenation + if(m_spellProto->SpellFamilyName == SPELLFAMILY_DRUID && m_spellProto->SpellFamilyFlags & 0x50 ) + m_target->ModifyAuraState(AURA_STATE_SWIFTMEND, true); + + // Deadly poison aura state + if(m_spellProto->SpellFamilyName == SPELLFAMILY_ROGUE && m_spellProto->SpellFamilyFlags & 0x10000) + m_target->ModifyAuraState(AURA_STATE_DEADLY_POISON, true); } } } @@ -1029,8 +1028,7 @@ void Aura::_RemoveAura() if(m_target->GetVisibleAura(slot) == 0) return; - bool samespell = false; - bool sameaura = false; + bool lastaura = true; // find other aura in same slot (current already removed from list) for(uint8 i = 0; i < 3; i++) @@ -1040,30 +1038,30 @@ void Aura::_RemoveAura() { if(itr->second->GetAuraSlot()==slot) { - samespell = true; - - if(GetEffIndex()==i) - sameaura = true; - + lastaura = false; break; } } - if(samespell) + if(!lastaura) break; } // only remove icon when the last aura of the spell is removed (current aura already removed from list) - if (!samespell) + if (lastaura) { SetAura(true); SetAuraFlags(AFLAG_NONE); SetAuraLevel(0); - SetAuraCharges(0); SendAuraUpdate(true); // update for out of range group members m_target->UpdateAuraForGroup(slot); + //***************************************************** + // Update target aura state flag (at last aura remove) + // TODO: Make it easer + //***************************************************** + // Update Seals information if( IsSealSpell(GetSpellProto()) ) m_target->ModifyAuraState(AURA_STATE_JUDGEMENT,false); @@ -1071,16 +1069,22 @@ void Aura::_RemoveAura() if (GetSpellProto()->SpellFamilyName == SPELLFAMILY_WARLOCK && (GetSpellProto()->SpellFamilyFlags & 4)) m_target->ModifyAuraState(AURA_STATE_IMMOLATE, false); + // Faerie Fire (druid versions) + if( m_spellProto->SpellFamilyName == SPELLFAMILY_DRUID && m_spellProto->SpellFamilyFlags & 0x0000000000000400LL) + m_target->ModifyAuraState(AURA_STATE_FAERIE_FIRE, false); + + // Victorious + if( m_spellProto->SpellFamilyName == SPELLFAMILY_WARRIOR && m_spellProto->SpellFamilyFlags & 0x0004000000000000LL) + m_target->ModifyAuraState(AURA_STATE_WARRIOR_VICTORY_RUSH, false); + // Swiftmend aura state - if(GetSpellProto()->SpellFamilyName == SPELLFAMILY_DRUID - && (GetSpellProto()->SpellFamilyFlags == 0x40 || GetSpellProto()->SpellFamilyFlags == 0x10)) + if(GetSpellProto()->SpellFamilyName == SPELLFAMILY_DRUID && GetSpellProto()->SpellFamilyFlags & 0x50) { bool found = false; Unit::AuraList const& RejorRegr = m_target->GetAurasByType(SPELL_AURA_PERIODIC_HEAL); for(Unit::AuraList::const_iterator i = RejorRegr.begin(); i != RejorRegr.end(); ++i) { - if((*i)->GetSpellProto()->SpellFamilyName == SPELLFAMILY_DRUID - && ((*i)->GetSpellProto()->SpellFamilyFlags == 0x40 || (*i)->GetSpellProto()->SpellFamilyFlags == 0x10) ) + if((*i)->GetSpellProto()->SpellFamilyName == SPELLFAMILY_DRUID && (*i)->GetSpellProto()->SpellFamilyFlags & 0x50 ) { found = true; break; @@ -1090,6 +1094,26 @@ void Aura::_RemoveAura() m_target->ModifyAuraState(AURA_STATE_SWIFTMEND, false); } + // Deadly poison aura state + if(m_spellProto->SpellFamilyName == SPELLFAMILY_ROGUE && m_spellProto->SpellFamilyFlags & 0x10000) + { + // current aura already removed, search present of another + bool found = false; + Unit::AuraList const& auras = m_target->GetAurasByType(SPELL_AURA_PERIODIC_DAMAGE); + for(Unit::AuraList::const_iterator itr = auras.begin(); itr != auras.end(); ++itr) + { + SpellEntry const* itr_spell = (*itr)->GetSpellProto(); + if(itr_spell && itr_spell->SpellFamilyName==SPELLFAMILY_ROGUE && itr_spell->SpellFamilyFlags & 0x10000) + { + found = true; + break; + } + } + // this has been last deadly poison aura + if(!found) + m_target->ModifyAuraState(AURA_STATE_DEADLY_POISON,false); + } + // reset cooldown state for spells if(caster && caster->GetTypeId() == TYPEID_PLAYER) { @@ -1097,8 +1121,6 @@ void Aura::_RemoveAura() ((Player*)caster)->SendCooldownEvent(GetSpellProto()); } } - else if(sameaura) // decrease count for spell, only for same aura effect, or this spell auras in remove process. - UpdateSlotCounterAndDuration(false); } void Aura::SendAuraUpdate(bool remove) @@ -1117,7 +1139,7 @@ void Aura::SendAuraUpdate(bool remove) uint8 auraFlags = GetAuraFlags(); data << uint8(auraFlags); data << uint8(GetAuraLevel()); - data << uint8(GetAuraCharges()); + data << uint8(m_procCharges ? m_procCharges : m_stackAmount); if(!(auraFlags & AFLAG_NOT_CASTER)) { @@ -1133,35 +1155,51 @@ void Aura::SendAuraUpdate(bool remove) m_target->SendMessageToSet(&data, true); } -void Aura::UpdateSlotCounterAndDuration(bool add) +void Aura::SetStackAmount(uint8 stackAmount) { - uint8 slot = GetAuraSlot(); - if(slot >= MAX_AURAS) - return; - - // calculate amount of similar auras by same effect index (similar different spells) - int8 count = 0; - - // calculate auras and update durations in case aura adding - Unit::AuraList const& aura_list = m_target->GetAurasByType(GetModifier()->m_auraname); - for(Unit::AuraList::const_iterator i = aura_list.begin();i != aura_list.end(); ++i) + if (stackAmount != m_stackAmount) { - if( (*i)->GetId()==GetId() && (*i)->GetEffIndex()==m_effIndex && - (*i)->GetCasterGUID()==GetCasterGUID() ) + Unit *target = GetTarget(); + Unit *caster = GetCaster(); + if (!target || !caster) + return; + m_stackAmount = stackAmount; + int32 amount = m_stackAmount * caster->CalculateSpellDamage(m_spellProto, m_effIndex, m_currentBasePoints, target); + // Reapply if amount change + if (amount!=m_modifier.m_amount) { - ++count; - - if(add) - (*i)->SetAuraDuration(GetAuraDuration()); + ApplyModifier(false, true); + m_modifier.m_amount = amount; + ApplyModifier(true, true); } } + RefreshAura(); +} - // at aura add aura not added yet, at aura remove aura already removed - // in field stored (count-1) - if(!add) - --count; +bool Aura::modStackAmount(int32 num) +{ + // Can`t mod + if (!m_spellProto->StackAmount) + return true; - SetAuraCharges(count); + // Modify stack but limit it + int32 stackAmount = m_stackAmount + num; + if (stackAmount > m_spellProto->StackAmount) + stackAmount = m_spellProto->StackAmount; + else if (stackAmount <=0) // Last aura from stack removed + { + m_stackAmount = 0; + return true; // need remove aura + } + + // Update stack amount + SetStackAmount(stackAmount); + return false; +} + +void Aura::RefreshAura() +{ + m_duration = m_maxduration; SendAuraUpdate(false); } @@ -2148,12 +2186,6 @@ void Aura::HandleAuraDummy(bool apply, bool Real) m_target->RemoveAurasDueToSpell(spellId); return; } - // Victorious - if(GetId()==32216 && m_target->getClass()==CLASS_WARRIOR) - { - m_target->ModifyAuraState(AURA_STATE_WARRIOR_VICTORY_RUSH, apply); - return; - } //Summon Fire Elemental if (GetId() == 40133 && caster) { @@ -2213,8 +2245,11 @@ void Aura::HandleAuraDummy(bool apply, bool Real) return; // final heal - if(m_target->IsInWorld()) - m_target->CastCustomSpell(m_target,33778,&m_modifier.m_amount,NULL,NULL,true,NULL,this,GetCasterGUID()); + if(m_target->IsInWorld() && m_stackAmount > 0) + { + int32 amount = m_modifier.m_amount / m_stackAmount; + m_target->CastCustomSpell(m_target,33778,&amount,NULL,NULL,true,NULL,this,GetCasterGUID()); + } } return; } @@ -3593,15 +3628,11 @@ void Aura::HandleAuraModSilence(bool apply, bool Real) return; // Search Mana Tap auras on caster - int32 energy = 0; - Unit::AuraList const& m_dummyAuras = caster->GetAurasByType(SPELL_AURA_DUMMY); - for(Unit::AuraList::const_iterator i = m_dummyAuras.begin(); i != m_dummyAuras.end(); ++i) - if ((*i)->GetId() == 28734) - ++energy; - if (energy) + Aura * dummy = caster->GetDummyAura(28734); + if (dummy) { - energy *= 10; - caster->CastCustomSpell(caster, 25048, &energy, NULL, NULL, true); + int32 bp = dummy->GetStackAmount() * 10; + caster->CastCustomSpell(caster, 25048, &bp, NULL, NULL, true); caster->RemoveAurasDueToSpell(28734); } } @@ -4089,6 +4120,10 @@ void Aura::HandlePeriodicDamage(bool apply, bool Real) Unit *caster = GetCaster(); + // Custom damage calculation after + if (!apply || loading || !caster) + return; + switch (m_spellProto->SpellFamilyName) { case SPELLFAMILY_GENERIC: @@ -4097,8 +4132,7 @@ void Aura::HandlePeriodicDamage(bool apply, bool Real) if ( m_spellProto->SpellIconID == 147 && m_spellProto->SpellVisual[0] == 0 ) { // $AP*0.18/6 bonus per tick - if (apply && !loading && caster) - m_modifier.m_amount += int32(caster->GetTotalAttackPowerValue(BASE_ATTACK) * 3 / 100); + m_modifier.m_amount += int32(caster->GetTotalAttackPowerValue(BASE_ATTACK) * 3 / 100); return; } break; @@ -4108,16 +4142,12 @@ void Aura::HandlePeriodicDamage(bool apply, bool Real) // Rend if (m_spellProto->SpellFamilyFlags & 0x0000000000000020LL) { - // 0.00743*(($MWB+$mwb)/2+$AP/14*$MWS) bonus per tick - if (apply && !loading && caster) - { - float ap = caster->GetTotalAttackPowerValue(BASE_ATTACK); - int32 mws = caster->GetAttackTime(BASE_ATTACK); - float mwb_min = caster->GetWeaponDamageRange(BASE_ATTACK,MINDAMAGE); - float mwb_max = caster->GetWeaponDamageRange(BASE_ATTACK,MAXDAMAGE); - // WARNING! in 3.0 multiplier 0.00743f change to 0.6 - m_modifier.m_amount+=int32(((mwb_min+mwb_max)/2+ap*mws/14000)*0.00743f); - } + // $0.2*(($MWB+$mwb)/2+$AP/14*$MWS) bonus per tick + float ap = caster->GetTotalAttackPowerValue(BASE_ATTACK); + int32 mws = caster->GetAttackTime(BASE_ATTACK); + float mwb_min = caster->GetWeaponDamageRange(BASE_ATTACK,MINDAMAGE); + float mwb_max = caster->GetWeaponDamageRange(BASE_ATTACK,MAXDAMAGE); + m_modifier.m_amount+=int32(((mwb_min+mwb_max)/2+ap*mws/14000)*0.2f); return; } break; @@ -4127,90 +4157,77 @@ void Aura::HandlePeriodicDamage(bool apply, bool Real) // Rake if (m_spellProto->SpellFamilyFlags & 0x0000000000001000LL) { - // $AP*0.06/3 bonus per tick - if (apply && !loading && caster) - m_modifier.m_amount += int32(caster->GetTotalAttackPowerValue(BASE_ATTACK) * 2 / 100); + // $AP*0.06 bonus per tick + m_modifier.m_amount += int32(caster->GetTotalAttackPowerValue(BASE_ATTACK) * 6 / 100); return; } // Lacerate if (m_spellProto->SpellFamilyFlags & 0x000000010000000000LL) { // $AP*0.05/5 bonus per tick - if (apply && !loading && caster) - m_modifier.m_amount += int32(caster->GetTotalAttackPowerValue(BASE_ATTACK) / 100); + m_modifier.m_amount += int32(caster->GetTotalAttackPowerValue(BASE_ATTACK) / 100); return; } // Rip if (m_spellProto->SpellFamilyFlags & 0x000000000000800000LL) { - // $AP * min(0.06*$cp, 0.24)/6 [Yes, there is no difference, whether 4 or 5 CPs are being used] - if (apply && !loading && caster && caster->GetTypeId() == TYPEID_PLAYER) + // 0.01*$AP*cp + if (caster->GetTypeId() != TYPEID_PLAYER) + return; + + uint8 cp = ((Player*)caster)->GetComboPoints(); + + // Idol of Feral Shadows. Cant be handled as SpellMod in SpellAura:Dummy due its dependency from CPs + Unit::AuraList const& dummyAuras = caster->GetAurasByType(SPELL_AURA_DUMMY); + for(Unit::AuraList::const_iterator itr = dummyAuras.begin(); itr != dummyAuras.end(); ++itr) { - uint8 cp = ((Player*)caster)->GetComboPoints(); - - // Idol of Feral Shadows. Cant be handled as SpellMod in SpellAura:Dummy due its dependency from CPs - Unit::AuraList const& dummyAuras = caster->GetAurasByType(SPELL_AURA_DUMMY); - for(Unit::AuraList::const_iterator itr = dummyAuras.begin(); itr != dummyAuras.end(); ++itr) + if((*itr)->GetId()==34241) { - if((*itr)->GetId()==34241) - { - m_modifier.m_amount += cp * (*itr)->GetModifier()->m_amount; - break; - } + m_modifier.m_amount += cp * (*itr)->GetModifier()->m_amount; + break; } - - if (cp > 4) cp = 4; - m_modifier.m_amount += int32(caster->GetTotalAttackPowerValue(BASE_ATTACK) * cp / 100); } + m_modifier.m_amount += int32(caster->GetTotalAttackPowerValue(BASE_ATTACK) * cp / 100); + return; + } + // Lock Jaw + if (m_spellProto->SpellFamilyFlags & 0x1000000000000000LL) + { + // 0.15*$AP + m_modifier.m_amount += int32(caster->GetTotalAttackPowerValue(BASE_ATTACK) * 15 / 100); return; } break; } case SPELLFAMILY_ROGUE: { - // Deadly poison aura state - if((m_spellProto->SpellFamilyFlags & 0x10000) && m_spellProto->SpellVisual[0]==5100) - { - if(apply) - m_target->ModifyAuraState(AURA_STATE_DEADLY_POISON,true); - else - { - // current aura already removed, search present of another - bool found = false; - Unit::AuraList const& auras = m_target->GetAurasByType(SPELL_AURA_PERIODIC_DAMAGE); - for(Unit::AuraList::const_iterator itr = auras.begin(); itr != auras.end(); ++itr) - { - SpellEntry const* itr_spell = (*itr)->GetSpellProto(); - if(itr_spell && itr_spell->SpellFamilyName==SPELLFAMILY_ROGUE && (itr_spell->SpellFamilyFlags & 0x10000) && itr_spell->SpellVisual[0]==5100) - { - found = true; - break; - } - } - // this has been last deadly poison aura - if(!found) - m_target->ModifyAuraState(AURA_STATE_DEADLY_POISON,false); - } - return; - } // Rupture if (m_spellProto->SpellFamilyFlags & 0x000000000000100000LL) { - // Dmg/tick = $AP*min(0.01*$cp, 0.03) [Like Rip: only the first three CP increase the contribution from AP] - if (apply && !loading && caster && caster->GetTypeId() == TYPEID_PLAYER) - { - uint8 cp = ((Player*)caster)->GetComboPoints(); - if (cp > 3) cp = 3; - m_modifier.m_amount += int32(caster->GetTotalAttackPowerValue(BASE_ATTACK) * cp / 100); - } + if (caster->GetTypeId() != TYPEID_PLAYER) + return; + //1 point : ${($m1+$b1*1+0.015*$AP)*4} damage over 8 secs + //2 points: ${($m1+$b1*2+0.024*$AP)*5} damage over 10 secs + //3 points: ${($m1+$b1*3+0.03*$AP)*6} damage over 12 secs + //4 points: ${($m1+$b1*4+0.03428571*$AP)*7} damage over 14 secs + //5 points: ${($m1+$b1*5+0.0375*$AP)*8} damage over 16 secs + float AP_per_combo[] = {0, 0.015f, 0.024, 0.03, 0.03428571, 0.0375}; + uint8 cp = ((Player*)caster)->GetComboPoints(); + if (cp > 5) cp = 5; + m_modifier.m_amount += int32(caster->GetTotalAttackPowerValue(BASE_ATTACK) * AP_per_combo[cp]); return; } // Garrote if (m_spellProto->SpellFamilyFlags & 0x000000000000000100LL) { - // $AP*0.18/6 bonus per tick - if (apply && !loading && caster) - m_modifier.m_amount += int32(caster->GetTotalAttackPowerValue(BASE_ATTACK) * 3 / 100); + // $AP*0.07 bonus per tick + m_modifier.m_amount += int32(caster->GetTotalAttackPowerValue(BASE_ATTACK) * 7 / 100); + return; + } + if (m_spellProto->SpellFamilyFlags & 0x0000000000010000) + { + // 0.08*$AP / 4 * amount of stack + m_modifier.m_amount += int32(caster->GetTotalAttackPowerValue(BASE_ATTACK) * 2 * GetStackAmount() * / 100); return; } break; @@ -4221,16 +4238,14 @@ void Aura::HandlePeriodicDamage(bool apply, bool Real) if (m_spellProto->SpellFamilyFlags & 0x0000000000004000LL) { // $RAP*0.1/5 bonus per tick - if (apply && !loading && caster) - m_modifier.m_amount += int32(caster->GetTotalAttackPowerValue(RANGED_ATTACK) * 10 / 500); + m_modifier.m_amount += int32(caster->GetTotalAttackPowerValue(RANGED_ATTACK) * 10 / 500); return; } // Immolation Trap if (m_spellProto->SpellFamilyFlags & 0x0000000000000004LL && m_spellProto->SpellIconID == 678) { // $RAP*0.1/5 bonus per tick - if (apply && !loading && caster) - m_modifier.m_amount += int32(caster->GetTotalAttackPowerValue(RANGED_ATTACK) * 10 / 500); + m_modifier.m_amount += int32(caster->GetTotalAttackPowerValue(RANGED_ATTACK) * 10 / 500); return; } break; @@ -4240,34 +4255,35 @@ void Aura::HandlePeriodicDamage(bool apply, bool Real) // Consecration if (m_spellProto->SpellFamilyFlags & 0x0000000000000020LL) { - if (apply && !loading && caster) + // ($m1+0.04*$SPH+0.04*$AP) + float ap = caster->GetTotalAttackPowerValue(BASE_ATTACK); + int32 holy = caster->SpellBaseDamageBonus(GetSpellSchoolMask(m_spellProto)) + + caster->SpellBaseDamageBonusForVictim(GetSpellSchoolMask(m_spellProto), m_target); + m_modifier.m_amount += int32(0.04f*holy + 0.04f*ap); + + // Improved Consecration - Libram of the Eternal Rest + Unit::AuraList const& classScripts = caster->GetAurasByType(SPELL_AURA_OVERRIDE_CLASS_SCRIPTS); + for(Unit::AuraList::const_iterator k = classScripts.begin(); k != classScripts.end(); ++k) { - Unit::AuraList const& classScripts = caster->GetAurasByType(SPELL_AURA_OVERRIDE_CLASS_SCRIPTS); - for(Unit::AuraList::const_iterator k = classScripts.begin(); k != classScripts.end(); ++k) + switch((*k)->GetModifier()->m_miscvalue) { - int32 tickcount = GetSpellDuration(m_spellProto) / m_spellProto->EffectAmplitude[m_effIndex]; - switch((*k)->GetModifier()->m_miscvalue) + case 5147: { - case 5147: // Improved Consecration - Libram of the Eternal Rest - { - m_modifier.m_amount += (*k)->GetModifier()->m_amount / tickcount; - break; - } + int32 tickcount = GetSpellDuration(m_spellProto) / m_spellProto->EffectAmplitude[m_effIndex]; + m_modifier.m_amount += (*k)->GetModifier()->m_amount / tickcount; + break; } } } return; } - // Seal of Vengeance 0.013*$SPH+0.025*$AP per tick + // Seal of Vengeance 0.013*$SPH+0.025*$AP per tick (also can stack) if(m_spellProto->SpellFamilyFlags & 0x0000080000000000LL) { - if (apply && !loading && caster) - { - float ap = caster->GetTotalAttackPowerValue(BASE_ATTACK); - int32 holy = caster->SpellBaseDamageBonus(GetSpellSchoolMask(m_spellProto)) + - caster->SpellBaseDamageBonusForVictim(GetSpellSchoolMask(m_spellProto), m_target); - m_modifier.m_amount += int32(ap * 0.025f) + int32(holy * 13 / 1000); - } + float ap = caster->GetTotalAttackPowerValue(BASE_ATTACK); + int32 holy = caster->SpellBaseDamageBonus(GetSpellSchoolMask(m_spellProto)) + + caster->SpellBaseDamageBonusForVictim(GetSpellSchoolMask(m_spellProto), m_target); + m_modifier.m_amount += int32((0.013f*holy + 0.025f*ap) * GetStackAmount()); return; } break; @@ -4333,14 +4349,6 @@ void Aura::HandleAuraModResistance(bool apply, bool Real) m_target->ApplyResistanceBuffModsMod(SpellSchools(x),m_positive,m_modifier.m_amount, apply); } } - - // Faerie Fire (druid versions) - if( m_spellProto->SpellIconID == 109 && - m_spellProto->SpellFamilyName == SPELLFAMILY_DRUID && - m_spellProto->SpellFamilyFlags & 0x0000000000000400LL ) - { - m_target->ModifyAuraState(AURA_STATE_FAERIE_FIRE,apply); - } } void Aura::HandleAuraModBaseResistancePCT(bool apply, bool Real) diff --git a/src/game/SpellAuras.h b/src/game/SpellAuras.h index 0746f0b72..b3c7c395d 100644 --- a/src/game/SpellAuras.h +++ b/src/game/SpellAuras.h @@ -275,6 +275,11 @@ class MANGOS_DLL_SPEC Aura void SetAura(bool remove) { m_target->SetVisibleAura(m_auraSlot, remove ? 0 : GetId()); } void SendAuraUpdate(bool remove); + int8 GetStackAmount() {return m_stackAmount;} + void SetStackAmount(uint8 num); + bool modStackAmount(int32 num); // return true if last charge dropped + void RefreshAura(); + bool IsPositive() { return m_positive; } void SetNegative() { m_positive = false; } void SetPositive() { m_positive = true; } @@ -320,23 +325,28 @@ class MANGOS_DLL_SPEC Aura Modifier m_modifier; SpellModifier *m_spellmod; - uint32 m_effIndex; + SpellEntry const *m_spellProto; - int32 m_currentBasePoints; // cache SpellEntry::EffectBasePoints and use for set custom base points - uint64 m_caster_guid; Unit* m_target; - int32 m_maxduration; - int32 m_duration; - int32 m_timeCla; + uint64 m_caster_guid; uint64 m_castItemGuid; // it is NOT safe to keep a pointer to the item because it may get deleted time_t m_applyTime; - AuraRemoveMode m_removeMode; + int32 m_currentBasePoints; // cache SpellEntry::EffectBasePoints and use for set custom base points + int32 m_maxduration; // Max aura duration + int32 m_duration; // Current time + int32 m_timeCla; // Timer for power per sec calcultion + int32 m_periodicTimer; // Timer for periodic auras - uint8 m_auraSlot; - uint8 m_auraFlags; - uint8 m_auraLevel; - int8 m_procCharges; + AuraRemoveMode m_removeMode:8; // Store info for know remove aura reason + DiminishingGroup m_AuraDRGroup:8; // Diminishing + + uint8 m_effIndex; // Aura effect index in spell + uint8 m_auraSlot; // Aura slot on unit (for show in client) + uint8 m_auraFlags; // Aura info flag (for send data to client) + uint8 m_auraLevel; // Aura level (store caster level for correct show level dep amount) + uint8 m_procCharges; // Aura charges (0 for infinite) + uint8 m_stackAmount; // Aura stack amount bool m_positive:1; bool m_permanent:1; @@ -347,14 +357,10 @@ class MANGOS_DLL_SPEC Aura bool m_isPersistent:1; bool m_isDeathPersist:1; bool m_isRemovedOnShapeLost:1; - bool m_updated:1; + bool m_updated:1; // Prevent remove aura by stack if set bool m_in_use:1; // true while in Aura::ApplyModifier call - int32 m_periodicTimer; - uint32 m_PeriodicEventId; - DiminishingGroup m_AuraDRGroup; private: - void UpdateSlotCounterAndDuration(bool add); void CleanupTriggeredSpells(); }; diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp index afef5ea93..c4ee30bfe 100644 --- a/src/game/SpellEffects.cpp +++ b/src/game/SpellEffects.cpp @@ -480,31 +480,29 @@ void Spell::EffectSchoolDMG(uint32 effect_idx) // consume from stack dozes not more that have combo-points if(uint32 combo = ((Player*)m_caster)->GetComboPoints()) { - // count consumed deadly poison doses at target - uint32 doses = 0; - - // remove consumed poison doses + Aura *poison = 0; + // Lookup for Deadly poison (only attacker applied) Unit::AuraList const& auras = unitTarget->GetAurasByType(SPELL_AURA_PERIODIC_DAMAGE); for(Unit::AuraList::const_iterator itr = auras.begin(); itr!=auras.end() && combo;) - { - // Deadly poison (only attacker applied) - if( (*itr)->GetSpellProto()->SpellFamilyName==SPELLFAMILY_ROGUE && ((*itr)->GetSpellProto()->SpellFamilyFlags & 0x10000) && - (*itr)->GetSpellProto()->SpellVisual[0]==5100 && (*itr)->GetCasterGUID()==m_caster->GetGUID() ) + if( (*itr)->GetSpellProto()->SpellFamilyName==SPELLFAMILY_ROGUE && + (*itr)->GetSpellProto()->SpellFamilyFlags & 0x10000 && + (*itr)->GetCasterGUID()==m_caster->GetGUID() ) { - --combo; - ++doses; - - unitTarget->RemoveSingleAuraFromStack((*itr)->GetId(), (*itr)->GetEffIndex()); - - itr = auras.begin(); + poison = *itr; + break; } - else - ++itr; + // count consumed deadly poison doses at target + if (poison) + { + uint32 spellId = poison->GetId(); + uint32 doses = poison->GetStackAmount(); + if (doses > combo) + doses = combo; + for (int i=0; i< doses; i++) + unitTarget->RemoveSingleSpellAurasFromStack(spellId); + damage *= doses; + damage += int32(((Player*)m_caster)->GetTotalAttackPowerValue(BASE_ATTACK) * 0.03f * doses); } - - damage *= doses; - damage += int32(((Player*)m_caster)->GetTotalAttackPowerValue(BASE_ATTACK) * 0.03f * doses); - // Eviscerate and Envenom Bonus Damage (item set effect) if(m_caster->GetDummyAura(37169)) damage += ((Player*)m_caster)->GetComboPoints()*40; @@ -572,19 +570,25 @@ void Spell::EffectSchoolDMG(uint32 effect_idx) } case SPELLFAMILY_PALADIN: { - // Judgement of Vengeance + // Judgement of Vengeance ${1+0.22*$SPH+0.14*$AP} + 10% for each application of Holy Vengeance on the target if((m_spellInfo->SpellFamilyFlags & 0x800000000LL) && m_spellInfo->SpellIconID==2292) { + float ap = m_caster->GetTotalAttackPowerValue(BASE_ATTACK); + int32 holy = m_caster->SpellBaseDamageBonus(GetSpellSchoolMask(m_spellInfo)) + + m_caster->SpellBaseDamageBonusForVictim(GetSpellSchoolMask(m_spellInfo), unitTarget); + damage+=int32(ap * 0.14f) + int32(holy * 22 / 100); + // Get stack of Holy Vengeance on the target added by caster uint32 stacks = 0; Unit::AuraList const& auras = unitTarget->GetAurasByType(SPELL_AURA_PERIODIC_DAMAGE); for(Unit::AuraList::const_iterator itr = auras.begin(); itr!=auras.end(); ++itr) if((*itr)->GetId() == 31803 && (*itr)->GetCasterGUID()==m_caster->GetGUID()) - ++stacks; - if(!stacks) - //No damage if the target isn't affected by this - damage = -1; - else - damage *= stacks; + { + stacks = (*itr)->GetStackAmount(); + break; + } + // + 10% for each application of Holy Vengeance on the target + if(stacks) + damage += damage * stacks * 10 /100; } // Avenger's Shield ($m1+0.07*$SPH+0.07*$AP) else if(m_spellInfo->SpellFamilyFlags & 0x0000000000004000LL) @@ -943,16 +947,12 @@ void Spell::EffectDummy(uint32 i) } case 28730: // Arcane Torrent (Mana) { - int32 count = 0; - Unit::AuraList const& m_dummyAuras = m_caster->GetAurasByType(SPELL_AURA_DUMMY); - for(Unit::AuraList::const_iterator i = m_dummyAuras.begin(); i != m_dummyAuras.end(); ++i) - if ((*i)->GetId() == 28734) - ++count; - if (count) - { - m_caster->RemoveAurasDueToSpell(28734); - int32 bp = damage * count; + Aura * dummy = m_caster->GetDummyAura(28734); + if (dummy) + { + int32 bp = damage * dummy->GetStackAmount(); m_caster->CastCustomSpell(m_caster, 28733, &bp, NULL, NULL, true); + m_caster->RemoveAurasDueToSpell(28734); } return; } @@ -4217,21 +4217,22 @@ void Spell::EffectWeaponDmg(uint32 i) // Devastate bonus and sunder armor refresh else if(m_spellInfo->SpellVisual[0] == 671 && m_spellInfo->SpellIconID == 1508) { - customBonusDamagePercentMod = true; - bonusDamagePercentMod = 0.0f; // only applied if auras found - - Unit::AuraList const& list = unitTarget->GetAurasByType(SPELL_AURA_MOD_RESISTANCE); - for(Unit::AuraList::const_iterator itr=list.begin();itr!=list.end();++itr) + uint32 stack = 0; + // Need refresh all Sunder Armor auras from this caster + Unit::AuraMap& suAuras = unitTarget->GetAuras(); + for(Unit::AuraMap::iterator itr = suAuras.begin(); itr != suAuras.end(); ++itr) { - SpellEntry const *proto = (*itr)->GetSpellProto(); - if(proto->SpellVisual[0] == 406 && proto->SpellIconID == 565) + SpellEntry const *spellInfo = (*itr).second->GetSpellProto(); + if( spellInfo->SpellFamilyName == SPELLFAMILY_WARRIOR && + spellInfo->SpellFamilyFlags & 0x0000000000004000LL && + (*itr).second->GetCasterGUID() == m_caster->GetGUID()) { - int32 duration = GetSpellDuration(proto); - (*itr)->SetAuraDuration(duration); - (*itr)->SendAuraUpdate(false); - bonusDamagePercentMod += 1.0f; // +100% + (*itr).second->RefreshAura(); + stack = (*itr).second->GetStackAmount(); } } + if (stack) + spell_bonus += stack * CalculateDamage(2, unitTarget); } break; } @@ -4644,12 +4645,11 @@ void Spell::EffectScriptEffect(uint32 effIndex) } // Brittle Armor - need remove one 24575 Brittle Armor aura case 24590: - unitTarget->RemoveSingleAuraFromStack(24575, 0); - unitTarget->RemoveSingleAuraFromStack(24575, 1); + unitTarget->RemoveSingleSpellAurasFromStack(24575); return; // Mercurial Shield - need remove one 26464 Mercurial Shield aura case 26465: - unitTarget->RemoveSingleAuraFromStack(26464, 0); + unitTarget->RemoveSingleSpellAurasFromStack(26464); return; // Orb teleport spells case 25140: @@ -4900,8 +4900,7 @@ void Spell::EffectScriptEffect(uint32 effIndex) if (!(familyFlag & 0x000000800000C000LL)) continue; // Refresh aura duration - aura->SetAuraDuration(aura->GetAuraMaxDuration()); - aura->SendAuraUpdate(false); + aura->RefreshAura(); // Serpent Sting - Instantly deals 40% of the damage done by your Serpent Sting. if (familyFlag & 0x0000000000004000LL && aura->GetEffIndex() == 0) diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index e4b8a9729..430fe3f13 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -1131,10 +1131,7 @@ void Unit::DealSpellDamage(SpellNonMeleeDamage *damageInfo, bool durabilityLoss) { SpellEntry const *spellInfo = (*itr).second->GetSpellProto(); if( spellInfo->AttributesEx3 & 0x40000 && spellInfo->SpellFamilyName == SPELLFAMILY_PALADIN && ((*itr).second->GetCasterGUID() == GetGUID())) - { - (*itr).second->SetAuraDuration((*itr).second->GetAuraMaxDuration()); - (*itr).second->SendAuraUpdate(false); - } + (*itr).second->RefreshAura(); } } // Call default DealDamage @@ -1490,10 +1487,7 @@ void Unit::DealMeleeDamage(CalcDamageInfo *damageInfo, bool durabilityLoss) { SpellEntry const *spellInfo = (*itr).second->GetSpellProto(); if( spellInfo->AttributesEx3 & 0x40000 && spellInfo->SpellFamilyName == SPELLFAMILY_PALADIN && ((*itr).second->GetCasterGUID() == GetGUID())) - { - (*itr).second->SetAuraDuration((*itr).second->GetAuraMaxDuration()); - (*itr).second->SendAuraUpdate(false); - } + (*itr).second->RefreshAura(); } } @@ -3195,48 +3189,45 @@ bool Unit::AddAura(Aura *Aur) // passive and persistent auras can stack with themselves any number of times if (!Aur->IsPassive() && !Aur->IsPersistent()) { - // replace aura if next will > spell StackAmount - if(aurSpellInfo->StackAmount) + for(AuraMap::iterator i2 = m_Auras.lower_bound(spair); i2 != m_Auras.upper_bound(spair); ++i2) { - if(m_Auras.count(spair) >= aurSpellInfo->StackAmount) - RemoveAura(i,AURA_REMOVE_BY_STACK); - } - // if StackAmount==0 not allow auras from same caster - else - { - for(AuraMap::iterator i2 = m_Auras.lower_bound(spair); i2 != m_Auras.upper_bound(spair); ++i2) + if(i2->second->GetCasterGUID()==Aur->GetCasterGUID()) { - if(i2->second->GetCasterGUID()==Aur->GetCasterGUID()) + // Aura can stack on self -> Stack it; + if(aurSpellInfo->StackAmount) { + i2->second->modStackAmount(1); + delete Aur; + return false; + } + // can be only single (this check done at _each_ aura add + RemoveAura(i2,AURA_REMOVE_BY_STACK); + break; + } + + bool stop = false; + switch(aurSpellInfo->EffectApplyAuraName[Aur->GetEffIndex()]) + { + // DoT/HoT/etc + case SPELL_AURA_PERIODIC_DAMAGE: // allow stack + case SPELL_AURA_PERIODIC_DAMAGE_PERCENT: + case SPELL_AURA_PERIODIC_LEECH: + case SPELL_AURA_PERIODIC_HEAL: + case SPELL_AURA_OBS_MOD_HEALTH: + case SPELL_AURA_PERIODIC_MANA_LEECH: + case SPELL_AURA_PERIODIC_ENERGIZE: + case SPELL_AURA_OBS_MOD_MANA: + case SPELL_AURA_POWER_BURN_MANA: + break; + default: // not allow // can be only single (this check done at _each_ aura add RemoveAura(i2,AURA_REMOVE_BY_STACK); - break; - } - - bool stop = false; - switch(aurSpellInfo->EffectApplyAuraName[Aur->GetEffIndex()]) - { - // DoT/HoT/etc - case SPELL_AURA_PERIODIC_DAMAGE: // allow stack - case SPELL_AURA_PERIODIC_DAMAGE_PERCENT: - case SPELL_AURA_PERIODIC_LEECH: - case SPELL_AURA_PERIODIC_HEAL: - case SPELL_AURA_OBS_MOD_HEALTH: - case SPELL_AURA_PERIODIC_MANA_LEECH: - case SPELL_AURA_PERIODIC_ENERGIZE: - case SPELL_AURA_OBS_MOD_MANA: - case SPELL_AURA_POWER_BURN_MANA: - break; - default: // not allow - // can be only single (this check done at _each_ aura add - RemoveAura(i2,AURA_REMOVE_BY_STACK); - stop = true; - break; - } - - if(stop) + stop = true; break; } + + if(stop) + break; } } } @@ -3591,7 +3582,16 @@ void Unit::RemoveSingleAuraFromStack(uint32 spellId, uint32 effindex) { AuraMap::iterator iter = m_Auras.find(spellEffectPair(spellId, effindex)); if(iter != m_Auras.end()) - RemoveAura(iter); + { + if (iter->second->modStackAmount(-1)) + RemoveAura(iter); + } +} + +void Unit::RemoveSingleSpellAurasFromStack(uint32 spellId) +{ + for (int i=0; i<3; ++i) + RemoveSingleAuraFromStack(spellId, i); } void Unit::RemoveAurasDueToSpell(uint32 spellId, Aura* except) @@ -4265,15 +4265,14 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, Aura* triggeredByAu if (!procSpell || procSpell->Id == 24659) return false; // Need remove one 24659 aura - RemoveSingleAuraFromStack(24659, 0); - RemoveSingleAuraFromStack(24659, 1); + RemoveSingleSpellAurasFromStack(24659); return true; } // Restless Strength case 24661: { // Need remove one 24662 aura - RemoveSingleAuraFromStack(24662, 0); + RemoveSingleSpellAurasFromStack(24662); return true; } // Adaptive Warding (Frostfire Regalia set) @@ -5851,14 +5850,10 @@ bool Unit::HandleProcTriggerSpell(Unit *pVictim, uint32 damage, Aura* triggeredB return false; // stacking CastSpell(this, 37658, true, NULL, triggeredByAura); - // counting - uint32 count = 0; - AuraList const& dummyAura = GetAurasByType(SPELL_AURA_DUMMY); - for(AuraList::const_iterator itr = dummyAura.begin(); itr != dummyAura.end(); ++itr) - if((*itr)->GetId()==37658) - ++count; + + Aura * dummy = GetDummyAura(37658); // release at 3 aura in stack (cont contain in basepoint of trigger aura) - if(count < triggerAmount) + if(!dummy || dummy->GetStackAmount() < triggerAmount) return false; RemoveAurasDueToSpell(37658); @@ -5872,17 +5867,14 @@ bool Unit::HandleProcTriggerSpell(Unit *pVictim, uint32 damage, Aura* triggeredB return false; // stacking CastSpell(this, 54842, true, NULL, triggeredByAura); + // counting - uint32 count = 0; - AuraList const& dummyAura = GetAurasByType(SPELL_AURA_DUMMY); - for(AuraList::const_iterator itr = dummyAura.begin(); itr != dummyAura.end(); ++itr) - if((*itr)->GetId()==54842) - ++count; + Aura * dummy = GetDummyAura(54842); // release at 3 aura in stack (cont contain in basepoint of trigger aura) - if(count < triggerAmount) + if(!dummy || dummy->GetStackAmount() < triggerAmount) return false; - RemoveAurasDueToSpell(54842); + RemoveAurasDueToSpell(54842); trigger_spell_id = 54843; target = pVictim; } diff --git a/src/game/Unit.h b/src/game/Unit.h index 067c73bd9..cc59b46d5 100644 --- a/src/game/Unit.h +++ b/src/game/Unit.h @@ -1087,6 +1087,7 @@ class MANGOS_DLL_SPEC Unit : public WorldObject void RemoveAura(AuraMap::iterator &i, AuraRemoveMode mode = AURA_REMOVE_BY_DEFAULT); void RemoveAura(uint32 spellId, uint32 effindex, Aura* except = NULL); + void RemoveSingleSpellAurasFromStack(uint32 spellId); void RemoveSingleAuraFromStack(uint32 spellId, uint32 effindex); void RemoveAurasDueToSpell(uint32 spellId, Aura* except = NULL); void RemoveAurasDueToItemSpell(Item* castItem,uint32 spellId); diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index c40cac1a8..f77657a8f 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 "7048" + #define REVISION_NR "7049" #endif // __REVISION_NR_H__ From 40d7fecb363521f4c3e4cb5f749c99deee2996de Mon Sep 17 00:00:00 2001 From: DiSlord Date: Thu, 8 Jan 2009 01:30:17 +0300 Subject: [PATCH 111/145] [7050] Add crit req for some paladin spell proc Signed-off-by: DiSlord --- sql/mangos.sql | 8 ++++---- sql/updates/7050_01_mangos_spell_proc_event.sql | 13 +++++++++++++ sql/updates/Makefile.am | 2 ++ src/shared/revision_nr.h | 2 +- 4 files changed, 20 insertions(+), 5 deletions(-) create mode 100644 sql/updates/7050_01_mangos_spell_proc_event.sql diff --git a/sql/mangos.sql b/sql/mangos.sql index bd799f281..0082274e7 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_7047_03_mangos_playercreateinfo_spell` bit(1) default NULL + `required_7050_01_mangos_spell_proc_event` bit(1) default NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Used DB version notes'; -- @@ -16482,12 +16482,12 @@ INSERT INTO `spell_proc_event` VALUES (34586, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 1.500000, 0.000000, 0), (34598, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45), (34749, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000008, 0.000000, 0.000000, 0), -(34753, 0x00000000, 6, 0x00001800, 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(34753, 0x00000000, 6, 0x00001800, 0x00000004, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), (34774, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 1.500000, 0.000000, 20), (34783, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000800, 0.000000, 0.000000, 0), (34827, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), -(34859, 0x00000000, 6, 0x00001800, 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), -(34860, 0x00000000, 6, 0x00001800, 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(34859, 0x00000000, 6, 0x00001800, 0x00000004, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(34860, 0x00000000, 6, 0x00001800, 0x00000004, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), (34914, 0x00000000, 6, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (34916, 0x00000000, 6, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (34917, 0x00000000, 6, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), diff --git a/sql/updates/7050_01_mangos_spell_proc_event.sql b/sql/updates/7050_01_mangos_spell_proc_event.sql new file mode 100644 index 000000000..bd01cabdd --- /dev/null +++ b/sql/updates/7050_01_mangos_spell_proc_event.sql @@ -0,0 +1,13 @@ +ALTER TABLE db_version CHANGE COLUMN required_7047_03_mangos_playercreateinfo_spell required_7050_01_mangos_spell_proc_event bit; + +-- (34753) Holy Concentration (Rank 1) +DELETE FROM `spell_proc_event` WHERE `entry` IN (34753); +INSERT INTO `spell_proc_event` VALUES (34753, 0x00, 6, 0x00001800, 0x00000004, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0); + +-- (34859) Holy Concentration (Rank 2) +DELETE FROM `spell_proc_event` WHERE `entry` IN (34859); +INSERT INTO `spell_proc_event` VALUES (34859, 0x00, 6, 0x00001800, 0x00000004, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0); + +-- (34860) Holy Concentration (Rank 3) +DELETE FROM `spell_proc_event` WHERE `entry` IN (34860); +INSERT INTO `spell_proc_event` VALUES (34860, 0x00, 6, 0x00001800, 0x00000004, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0); \ No newline at end of file diff --git a/sql/updates/Makefile.am b/sql/updates/Makefile.am index 9d3b30057..44a6ec84d 100644 --- a/sql/updates/Makefile.am +++ b/sql/updates/Makefile.am @@ -119,6 +119,7 @@ pkgdata_DATA = \ 7047_01_characters_character_spell.sql \ 7047_02_mangos_playercreateinfo_action.sql \ 7047_03_mangos_playercreateinfo_spell.sql \ + 7050_01_mangos_spell_proc_event.sql \ README ## Additional files to include when running 'make dist' @@ -218,4 +219,5 @@ EXTRA_DIST = \ 7047_01_characters_character_spell.sql \ 7047_02_mangos_playercreateinfo_action.sql \ 7047_03_mangos_playercreateinfo_spell.sql \ + 7050_01_mangos_spell_proc_event.sql \ README diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index f77657a8f..5ebbc3b04 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 "7049" + #define REVISION_NR "7050" #endif // __REVISION_NR_H__ From e573bd9ea8c5ec680a129ef667172cc0cc7de436 Mon Sep 17 00:00:00 2001 From: DiSlord Date: Thu, 8 Jan 2009 03:49:36 +0300 Subject: [PATCH 112/145] [7051] Implement some mage dummy triggers (fix typo) 44546 and ranks 44449 and ranks 54747 and ranks Signed-off-by: DiSlord --- sql/mangos.sql | 12 +++- .../7051_01_mangos_spell_proc_event.sql | 41 ++++++++++++ sql/updates/Makefile.am | 2 + src/game/SpellAuras.cpp | 4 +- src/game/SpellEffects.cpp | 3 +- src/game/SpellMgr.h | 11 ++++ src/game/Unit.cpp | 62 ++++++++++++++++--- src/shared/revision_nr.h | 2 +- 8 files changed, 123 insertions(+), 14 deletions(-) create mode 100644 sql/updates/7051_01_mangos_spell_proc_event.sql diff --git a/sql/mangos.sql b/sql/mangos.sql index 0082274e7..2c5910e1a 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_7050_01_mangos_spell_proc_event` bit(1) default NULL + `required_7051_01_mangos_spell_proc_event` bit(1) default NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Used DB version notes'; -- @@ -16595,6 +16595,14 @@ INSERT INTO `spell_proc_event` VALUES (44445, 0x00000000, 3, 0x00000013, 0x00001000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (44446, 0x00000000, 3, 0x00000013, 0x00001000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (44448, 0x00000000, 3, 0x00000013, 0x00001000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(44449, 0x00000000, 3, 0x20E21277, 0x00019048, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(44469, 0x00000000, 3, 0x20E21277, 0x00019048, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(44470, 0x00000000, 3, 0x20E21277, 0x00019048, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(44471, 0x00000000, 3, 0x20E21277, 0x00019048, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(44472, 0x00000000, 3, 0x20E21277, 0x00019048, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(44546, 0x00000000, 3, 0x020002A0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(44548, 0x00000000, 3, 0x020002A0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(44549, 0x00000000, 3, 0x020002A0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (44835, 0x00000000, 7, 0x00000000, 0x00000080, 0x00000000, 0x00000010, 0x00000000, 0.000000, 0.000000, 0), (45054, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 15), (45057, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 30), @@ -16786,6 +16794,8 @@ 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), (54738, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(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), (54936, 0x00000000, 10, 0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), diff --git a/sql/updates/7051_01_mangos_spell_proc_event.sql b/sql/updates/7051_01_mangos_spell_proc_event.sql new file mode 100644 index 000000000..8775ee158 --- /dev/null +++ b/sql/updates/7051_01_mangos_spell_proc_event.sql @@ -0,0 +1,41 @@ +ALTER TABLE db_version CHANGE COLUMN required_7050_01_mangos_spell_proc_event required_7051_01_mangos_spell_proc_event bit; + +-- (44546) Brain Freeze (Rank 1) +DELETE FROM `spell_proc_event` WHERE `entry` IN (44546); +INSERT INTO `spell_proc_event` VALUES (44546, 0x00, 3, 0x020002A0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (44548) Brain Freeze (Rank 2) +DELETE FROM `spell_proc_event` WHERE `entry` IN (44548); +INSERT INTO `spell_proc_event` VALUES (44548, 0x00, 3, 0x020002A0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (44549) Brain Freeze (Rank 3) +DELETE FROM `spell_proc_event` WHERE `entry` IN (44549); +INSERT INTO `spell_proc_event` VALUES (44549, 0x00, 3, 0x020002A0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (44449) Burnout (Rank 1) +DELETE FROM `spell_proc_event` WHERE `entry` IN (44449); +INSERT INTO `spell_proc_event` VALUES (44449, 0x00, 3, 0x20E21277, 0x00019048, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0); + +-- (44469) Burnout (Rank 2) +DELETE FROM `spell_proc_event` WHERE `entry` IN (44469); +INSERT INTO `spell_proc_event` VALUES (44469, 0x00, 3, 0x20E21277, 0x00019048, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0); + +-- (44470) Burnout (Rank 3) +DELETE FROM `spell_proc_event` WHERE `entry` IN (44470); +INSERT INTO `spell_proc_event` VALUES (44470, 0x00, 3, 0x20E21277, 0x00019048, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0); + +-- (44471) Burnout (Rank 4) +DELETE FROM `spell_proc_event` WHERE `entry` IN (44471); +INSERT INTO `spell_proc_event` VALUES (44471, 0x00, 3, 0x20E21277, 0x00019048, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0); + +-- (44472) Burnout (Rank 5) +DELETE FROM `spell_proc_event` WHERE `entry` IN (44472); +INSERT INTO `spell_proc_event` VALUES (44472, 0x00, 3, 0x20E21277, 0x00019048, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0); + +-- (54747) Burning Determination (Rank 1) +DELETE FROM `spell_proc_event` WHERE `entry` IN (54747); +INSERT INTO `spell_proc_event` VALUES (54747, 0x00, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0); + +-- (54749) Burning Determination (Rank 2) +DELETE FROM `spell_proc_event` WHERE `entry` IN (54749); +INSERT INTO `spell_proc_event` VALUES (54749, 0x00, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0); diff --git a/sql/updates/Makefile.am b/sql/updates/Makefile.am index 44a6ec84d..660fb3d11 100644 --- a/sql/updates/Makefile.am +++ b/sql/updates/Makefile.am @@ -120,6 +120,7 @@ pkgdata_DATA = \ 7047_02_mangos_playercreateinfo_action.sql \ 7047_03_mangos_playercreateinfo_spell.sql \ 7050_01_mangos_spell_proc_event.sql \ + 7051_01_mangos_spell_proc_event.sql \ README ## Additional files to include when running 'make dist' @@ -220,4 +221,5 @@ EXTRA_DIST = \ 7047_02_mangos_playercreateinfo_action.sql \ 7047_03_mangos_playercreateinfo_spell.sql \ 7050_01_mangos_spell_proc_event.sql \ + 7051_01_mangos_spell_proc_event.sql \ README diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp index 6581df7ae..e982d1e47 100644 --- a/src/game/SpellAuras.cpp +++ b/src/game/SpellAuras.cpp @@ -1239,6 +1239,7 @@ void Aura::HandleAddModifier(bool apply, bool Real) case 34754: // Clearcasting case 34936: // Backlash case 48108: // Hot Streak + case 57761: // Fireball! SetAuraCharges(1); break; } @@ -4224,10 +4225,11 @@ void Aura::HandlePeriodicDamage(bool apply, bool Real) m_modifier.m_amount += int32(caster->GetTotalAttackPowerValue(BASE_ATTACK) * 7 / 100); return; } + // Deadly Poison if (m_spellProto->SpellFamilyFlags & 0x0000000000010000) { // 0.08*$AP / 4 * amount of stack - m_modifier.m_amount += int32(caster->GetTotalAttackPowerValue(BASE_ATTACK) * 2 * GetStackAmount() * / 100); + m_modifier.m_amount += int32(caster->GetTotalAttackPowerValue(BASE_ATTACK) * 2 * GetStackAmount() / 100); return; } break; diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp index c4ee30bfe..c060f2508 100644 --- a/src/game/SpellEffects.cpp +++ b/src/game/SpellEffects.cpp @@ -2247,7 +2247,8 @@ void Spell::EffectPowerDrain(uint32 i) unitTarget->ModifyPower(drain_power,-new_damage); - if(drain_power == POWER_MANA) + // Don`t restore from self drain + if(drain_power == POWER_MANA && m_caster != unitTarget) { float manaMultiplier = m_spellInfo->EffectMultipleValue[i]; if(manaMultiplier==0) diff --git a/src/game/SpellMgr.h b/src/game/SpellMgr.h index f07d2a6fb..602beb00b 100644 --- a/src/game/SpellMgr.h +++ b/src/game/SpellMgr.h @@ -448,6 +448,17 @@ inline uint32 GetSpellMechanicMask(SpellEntry const* spellInfo, int32 effect) return mask; } +inline uint32 GetAllSpellMechanicMask(SpellEntry const* spellInfo) +{ + uint32 mask = 0; + if (spellInfo->Mechanic) + mask |= 1<Mechanic; + for (int i=0; i< 3; ++i) + if (spellInfo->EffectMechanic[i]) + mask |= 1<EffectMechanic[i]; + return mask; +} + inline Mechanics GetEffectMechanic(SpellEntry const* spellInfo, int32 effect) { if (spellInfo->EffectMechanic[effect]) diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index 430fe3f13..64a124e56 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -4595,7 +4595,8 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, Aura* triggeredByAu return false; // mana cost save - basepoints0 = procSpell->manaCost * triggeredByAura->GetModifier()->m_amount/100; + int32 cost = procSpell->manaCost + procSpell->ManaCostPercentage * GetCreateMana() / 100; + basepoints0 = cost * triggeredByAura->GetModifier()->m_amount/100; if( basepoints0 <=0 ) return false; @@ -4626,6 +4627,20 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, Aura* triggeredByAu mod->m_amount = 25; return true; } + // Burnout + if (dummySpell->SpellIconID == 2998) + { + if(!procSpell) + return false; + + int32 cost = procSpell->manaCost + procSpell->ManaCostPercentage * GetCreateMana() / 100; + basepoints0 = cost * triggeredByAura->GetModifier()->m_amount/100; + if( basepoints0 <=0 ) + return false; + triggered_spell_id = 44450; + target = this; + break; + } // Incanter's Regalia set (add trigger chance to Mana Shield) if (dummySpell->SpellFamilyFlags & 0x0000000000008000LL) { @@ -4694,15 +4709,8 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, Aura* triggeredByAu if (procSpell == 0 || !(procEx & (PROC_EX_NORMAL_HIT|PROC_EX_CRITICAL_HIT)) || this == pVictim) return false; // Need stun or root mechanic - if (procSpell->Mechanic != MECHANIC_ROOT && procSpell->Mechanic != MECHANIC_STUN) - { - int32 i; - for (i=0; i<3; i++) - if (procSpell->EffectMechanic[i] == MECHANIC_ROOT || procSpell->EffectMechanic[i] == MECHANIC_STUN) - break; - if (i == 3) - return false; - } + if (!(GetAllSpellMechanicMask(procSpell) & ((1<Id) { @@ -6100,6 +6108,40 @@ bool Unit::HandleProcTriggerSpell(Unit *pVictim, uint32 damage, Aura* triggeredB return false; break; } + // Brain Freeze + case 57761: + { + if(!procSpell) + return false; + // For trigger from Blizzard need exist Improved Blizzard + if (procSpell->SpellFamilyName==SPELLFAMILY_MAGE && procSpell->SpellFamilyFlags & 0x0000000000000080) + { + bool found = false; + AuraList const& mOverrideClassScript = GetAurasByType(SPELL_AURA_OVERRIDE_CLASS_SCRIPTS); + for(AuraList::const_iterator i = mOverrideClassScript.begin(); i != mOverrideClassScript.end(); ++i) + { + int32 script = (*i)->GetModifier()->m_miscvalue; + if(script==836 || script==988 || script==989) + { + found=true; + break; + } + } + if(!found) + return false; + } + break; + } + // Burning Determination + case 54748: + { + if(!procSpell) + return false; + // Need Interrupt or Silenced mechanic + if (!(GetAllSpellMechanicMask(procSpell) & ((1<HasSpellCooldown(trigger_spell_id)) diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 5ebbc3b04..f1fcf43c1 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 "7050" + #define REVISION_NR "7051" #endif // __REVISION_NR_H__ From 6a4ee36f21ca0893e890ea96a26c24a9635df9be Mon Sep 17 00:00:00 2001 From: DiSlord Date: Thu, 8 Jan 2009 04:03:45 +0300 Subject: [PATCH 113/145] [7052] Fix proc priest 47549 and ranks Signed-off-by: DiSlord --- sql/mangos.sql | 5 ++++- sql/updates/7052_01_mangos_spell_proc_event.sql | 13 +++++++++++++ sql/updates/Makefile.am | 2 ++ src/shared/revision_nr.h | 2 +- 4 files changed, 20 insertions(+), 2 deletions(-) create mode 100644 sql/updates/7052_01_mangos_spell_proc_event.sql diff --git a/sql/mangos.sql b/sql/mangos.sql index 2c5910e1a..fbe1260c3 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_7051_01_mangos_spell_proc_event` bit(1) default NULL + `required_7052_01_mangos_spell_proc_event` bit(1) default NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Used DB version notes'; -- @@ -16660,6 +16660,9 @@ INSERT INTO `spell_proc_event` VALUES (47537, 0x00000000, 6, 0x00001800, 0x00008000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (47538, 0x00000000, 6, 0x00001800, 0x00008000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (47539, 0x00000000, 6, 0x00001800, 0x00008000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47549, 0x00000000, 6, 0x00000000, 0x00020000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47551, 0x00000000, 6, 0x00000000, 0x00020000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47552, 0x00000000, 6, 0x00000000, 0x00020000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (47572, 0x00000000, 6, 0x00010000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (47580, 0x00000000, 6, 0x00000000, 0x00000000, 0x00000040, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (47581, 0x00000000, 6, 0x00000000, 0x00000000, 0x00000040, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), diff --git a/sql/updates/7052_01_mangos_spell_proc_event.sql b/sql/updates/7052_01_mangos_spell_proc_event.sql new file mode 100644 index 000000000..a59e3526d --- /dev/null +++ b/sql/updates/7052_01_mangos_spell_proc_event.sql @@ -0,0 +1,13 @@ +ALTER TABLE db_version CHANGE COLUMN required_7051_01_mangos_spell_proc_event required_7052_01_mangos_spell_proc_event bit; + +-- (47549) Improved Holy Concentration (Rank 1) +DELETE FROM `spell_proc_event` WHERE `entry` IN (47549); +INSERT INTO `spell_proc_event` VALUES (47549, 0x00, 6, 0x00000000, 0x00020000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (47551) Improved Holy Concentration (Rank 2) +DELETE FROM `spell_proc_event` WHERE `entry` IN (47551); +INSERT INTO `spell_proc_event` VALUES (47551, 0x00, 6, 0x00000000, 0x00020000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (47552) Improved Holy Concentration (Rank 3) +DELETE FROM `spell_proc_event` WHERE `entry` IN (47552); +INSERT INTO `spell_proc_event` VALUES (47552, 0x00, 6, 0x00000000, 0x00020000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); \ No newline at end of file diff --git a/sql/updates/Makefile.am b/sql/updates/Makefile.am index 660fb3d11..25eeba863 100644 --- a/sql/updates/Makefile.am +++ b/sql/updates/Makefile.am @@ -121,6 +121,7 @@ pkgdata_DATA = \ 7047_03_mangos_playercreateinfo_spell.sql \ 7050_01_mangos_spell_proc_event.sql \ 7051_01_mangos_spell_proc_event.sql \ + 7052_01_mangos_spell_proc_event.sql \ README ## Additional files to include when running 'make dist' @@ -222,4 +223,5 @@ EXTRA_DIST = \ 7047_03_mangos_playercreateinfo_spell.sql \ 7050_01_mangos_spell_proc_event.sql \ 7051_01_mangos_spell_proc_event.sql \ + 7052_01_mangos_spell_proc_event.sql \ README diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index f1fcf43c1..9df5b1c27 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 "7051" + #define REVISION_NR "7052" #endif // __REVISION_NR_H__ From 54a9efe8275f3601819d13064804ac42a9c83f6b Mon Sep 17 00:00:00 2001 From: DiSlord Date: Thu, 8 Jan 2009 04:34:12 +0300 Subject: [PATCH 114/145] Fix some proc Add hidden cooldown to 60493 Fix some paladin/warlock triggers (see sql update for names) Signed-off-by: DiSlord --- sql/mangos.sql | 17 +++++- sql/updates/01_mangos_spell_proc_event.sql | 60 ++++++++++++++++++++++ 2 files changed, 76 insertions(+), 1 deletion(-) create mode 100644 sql/updates/01_mangos_spell_proc_event.sql diff --git a/sql/mangos.sql b/sql/mangos.sql index fbe1260c3..bd6cc8807 100644 --- a/sql/mangos.sql +++ b/sql/mangos.sql @@ -16424,6 +16424,9 @@ INSERT INTO `spell_proc_event` VALUES (31833, 0x00000000, 10, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (31835, 0x00000000, 10, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (31836, 0x00000000, 10, 0x80000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(31876, 0x00000000, 10, 0x00800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(31877, 0x00000000, 10, 0x00800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(31878, 0x00000000, 10, 0x00800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (31904, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), (32385, 0x00000000, 5, 0x00000402, 0x00000011, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (32387, 0x00000000, 5, 0x00000402, 0x00000011, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), @@ -16506,6 +16509,7 @@ INSERT INTO `spell_proc_event` VALUES (35121, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), (36096, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000800, 0.000000, 0.000000, 0), (36111, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(36541, 0x00000004, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (37165, 0x00000000, 8, 0x00200400, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (37168, 0x00000000, 8, 0x003E0000, 0x00000009, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (37170, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 1.000000, 0.000000, 0), @@ -16520,6 +16524,7 @@ INSERT INTO `spell_proc_event` VALUES (37237, 0x00000000, 11, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), (37247, 0x00000008, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 45), (37377, 0x00000020, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(37379, 0x00000020, 5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (37384, 0x00000000, 5, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (37443, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), (37514, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000020, 0.000000, 0.000000, 0), @@ -16791,7 +16796,13 @@ INSERT INTO `spell_proc_event` VALUES (53553, 0x00000000, 10, 0x00001000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (53569, 0x00000000, 10, 0x00200000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), (53576, 0x00000000, 10, 0x00200000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(53671, 0x00000000, 10, 0x00800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(53673, 0x00000000, 10, 0x00800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (54149, 0x00000000, 10, 0x00200000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(54151, 0x00000000, 10, 0x00800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(54154, 0x00000000, 10, 0x00800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(54155, 0x00000000, 10, 0x00800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(54278, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), (54486, 0x00000000, 0, 0x20000021, 0x00009000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (54488, 0x00000000, 0, 0x20000021, 0x00009000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (54489, 0x00000000, 0, 0x20000021, 0x00009000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), @@ -16860,8 +16871,11 @@ INSERT INTO `spell_proc_event` VALUES (59327, 0x00000000, 15, 0x08000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (59725, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000800, 0.000000, 0.000000, 0), (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), (60200, 0x00000000, 15, 0x00001000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(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), (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), @@ -16879,7 +16893,8 @@ INSERT INTO `spell_proc_event` VALUES (60770, 0x00000000, 11, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (60818, 0x00000000, 10, 0x00000000, 0x00000200, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (60826, 0x00000000, 15, 0x01400000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), -(61324, 0x00000000, 10, 0x00000000, 0x00020000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); +(61188, 0x00000000, 5, 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(61324, 0x00000000, 10, 0x00000000, 0x00020000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0; /*!40000 ALTER TABLE `spell_proc_event` ENABLE KEYS */; UNLOCK TABLES; diff --git a/sql/updates/01_mangos_spell_proc_event.sql b/sql/updates/01_mangos_spell_proc_event.sql new file mode 100644 index 000000000..a739b2759 --- /dev/null +++ b/sql/updates/01_mangos_spell_proc_event.sql @@ -0,0 +1,60 @@ +-- (60493) Dying Curse () +DELETE FROM `spell_proc_event` WHERE `entry` IN (60493); +INSERT INTO `spell_proc_event` VALUES (60493, 0x00, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45); + +-- (60503) Taste for Blood () +DELETE FROM `spell_proc_event` WHERE `entry` IN (60503); +INSERT INTO `spell_proc_event` VALUES (60503, 0x00, 4, 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (61188) Chaotic Mind () +DELETE FROM `spell_proc_event` WHERE `entry` IN (61188); +INSERT INTO `spell_proc_event` VALUES (61188, 0x00, 5, 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (60170) Corruption Triggers Crit () +DELETE FROM `spell_proc_event` WHERE `entry` IN (60170); +INSERT INTO `spell_proc_event` VALUES (60170, 0x00, 5, 0x00000006, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (36541) Curse of Burning Shadows () +DELETE FROM `spell_proc_event` WHERE `entry` IN (36541); +INSERT INTO `spell_proc_event` VALUES (36541, 0x04, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (54278) Empowered Imp () +DELETE FROM `spell_proc_event` WHERE `entry` IN (54278); +INSERT INTO `spell_proc_event` VALUES (54278, 0x00, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0); + +-- (37379) Flameshadow () +DELETE FROM `spell_proc_event` WHERE `entry` IN (37379); +INSERT INTO `spell_proc_event` VALUES (37379, 0x20, 5, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (53671) Judgements of the Pure (Rank 1) +DELETE FROM `spell_proc_event` WHERE `entry` IN (53671); +INSERT INTO `spell_proc_event` VALUES (53671, 0x00, 10, 0x00800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (53673) Judgements of the Pure (Rank 2) +DELETE FROM `spell_proc_event` WHERE `entry` IN (53673); +INSERT INTO `spell_proc_event` VALUES (53673, 0x00, 10, 0x00800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (54151) Judgements of the Pure (Rank 3) +DELETE FROM `spell_proc_event` WHERE `entry` IN (54151); +INSERT INTO `spell_proc_event` VALUES (54151, 0x00, 10, 0x00800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (54154) Judgements of the Pure (Rank 4) +DELETE FROM `spell_proc_event` WHERE `entry` IN (54154); +INSERT INTO `spell_proc_event` VALUES (54154, 0x00, 10, 0x00800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (54155) Judgements of the Pure (Rank 5) +DELETE FROM `spell_proc_event` WHERE `entry` IN (54155); +INSERT INTO `spell_proc_event` VALUES (54155, 0x00, 10, 0x00800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (31876) Judgements of the Wise (Rank 1) +DELETE FROM `spell_proc_event` WHERE `entry` IN (31876); +INSERT INTO `spell_proc_event` VALUES (31876, 0x00, 10, 0x00800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (31877) Judgements of the Wise (Rank 2) +DELETE FROM `spell_proc_event` WHERE `entry` IN (31877); +INSERT INTO `spell_proc_event` VALUES (31877, 0x00, 10, 0x00800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (31878) Judgements of the Wise (Rank 3) +DELETE FROM `spell_proc_event` WHERE `entry` IN (31878); +INSERT INTO `spell_proc_event` VALUES (31878, 0x00, 10, 0x00800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + From d2ab274638d2b5378e82fb83e8c8fdc4a5675329 Mon Sep 17 00:00:00 2001 From: DiSlord Date: Thu, 8 Jan 2009 04:37:04 +0300 Subject: [PATCH 115/145] [7053] Fix last commit --- sql/mangos.sql | 2 +- ...spell_proc_event.sql => 7053_01_mangos_spell_proc_event.sql} | 2 ++ sql/updates/Makefile.am | 2 ++ src/shared/revision_nr.h | 2 +- 4 files changed, 6 insertions(+), 2 deletions(-) rename sql/updates/{01_mangos_spell_proc_event.sql => 7053_01_mangos_spell_proc_event.sql} (96%) diff --git a/sql/mangos.sql b/sql/mangos.sql index bd6cc8807..f3aee2f48 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_7052_01_mangos_spell_proc_event` bit(1) default NULL + `required_7053_01_mangos_spell_proc_event` bit(1) default NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Used DB version notes'; -- diff --git a/sql/updates/01_mangos_spell_proc_event.sql b/sql/updates/7053_01_mangos_spell_proc_event.sql similarity index 96% rename from sql/updates/01_mangos_spell_proc_event.sql rename to sql/updates/7053_01_mangos_spell_proc_event.sql index a739b2759..5d29f5d40 100644 --- a/sql/updates/01_mangos_spell_proc_event.sql +++ b/sql/updates/7053_01_mangos_spell_proc_event.sql @@ -1,3 +1,5 @@ +ALTER TABLE db_version CHANGE COLUMN required_7052_01_mangos_spell_proc_event required_7053_01_mangos_spell_proc_event bit; + -- (60493) Dying Curse () DELETE FROM `spell_proc_event` WHERE `entry` IN (60493); INSERT INTO `spell_proc_event` VALUES (60493, 0x00, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 45); diff --git a/sql/updates/Makefile.am b/sql/updates/Makefile.am index 25eeba863..53f2194cf 100644 --- a/sql/updates/Makefile.am +++ b/sql/updates/Makefile.am @@ -122,6 +122,7 @@ pkgdata_DATA = \ 7050_01_mangos_spell_proc_event.sql \ 7051_01_mangos_spell_proc_event.sql \ 7052_01_mangos_spell_proc_event.sql \ + 7053_01_mangos_spell_proc_event.sql \ README ## Additional files to include when running 'make dist' @@ -224,4 +225,5 @@ EXTRA_DIST = \ 7050_01_mangos_spell_proc_event.sql \ 7051_01_mangos_spell_proc_event.sql \ 7052_01_mangos_spell_proc_event.sql \ + 7053_01_mangos_spell_proc_event.sql \ README diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 9df5b1c27..ffbc899fe 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 "7052" + #define REVISION_NR "7053" #endif // __REVISION_NR_H__ From e1499bcdd9aa3470254ab015ca6a840e45ea9fd8 Mon Sep 17 00:00:00 2001 From: GriffonHeart Date: Thu, 8 Jan 2009 16:25:11 +0300 Subject: [PATCH 116/145] [7054] Missing update to 7041 Signed-off-by: DiSlord --- src/game/SpellEffects.cpp | 2 ++ src/shared/revision_nr.h | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp index c060f2508..faff6b0e8 100644 --- a/src/game/SpellEffects.cpp +++ b/src/game/SpellEffects.cpp @@ -4599,6 +4599,8 @@ void Spell::EffectScriptEffect(uint32 effIndex) case 11729: case 11730: case 27230: + case 47871: + case 47878: { uint32 itemtype; uint32 rank = 0; diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index ffbc899fe..a5e7d1c94 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 "7053" + #define REVISION_NR "7054" #endif // __REVISION_NR_H__ From e07baf29148cb504e97cfa552e31711e16226475 Mon Sep 17 00:00:00 2001 From: VladimirMangos Date: Thu, 8 Jan 2009 19:13:48 +0300 Subject: [PATCH 117/145] [7055] Build getrevision as Win32 application for x64 platform. This allow build x64 binaries at Win32 platform. --- src/shared/revision_nr.h | 2 +- win/mangosdVC80.sln | 8 ++++---- win/mangosdVC90.sln | 8 ++++---- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index a5e7d1c94..23c3df242 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 "7054" + #define REVISION_NR "7055" #endif // __REVISION_NR_H__ diff --git a/win/mangosdVC80.sln b/win/mangosdVC80.sln index 4440cd0b8..a1e677c88 100644 --- a/win/mangosdVC80.sln +++ b/win/mangosdVC80.sln @@ -138,12 +138,12 @@ Global {04BAF755-0D67-46F8-B1C6-77AE5368F3CB}.Release|x64.Build.0 = Release|x64 {803F488E-4C5A-4866-8D5C-1E6C03C007C2}.Debug|Win32.ActiveCfg = Debug|Win32 {803F488E-4C5A-4866-8D5C-1E6C03C007C2}.Debug|Win32.Build.0 = Debug|Win32 - {803F488E-4C5A-4866-8D5C-1E6C03C007C2}.Debug|x64.ActiveCfg = Debug|x64 - {803F488E-4C5A-4866-8D5C-1E6C03C007C2}.Debug|x64.Build.0 = Debug|x64 + {803F488E-4C5A-4866-8D5C-1E6C03C007C2}.Debug|x64.ActiveCfg = Debug|Win32 + {803F488E-4C5A-4866-8D5C-1E6C03C007C2}.Debug|x64.Build.0 = Debug|Win32 {803F488E-4C5A-4866-8D5C-1E6C03C007C2}.Release|Win32.ActiveCfg = Release|Win32 {803F488E-4C5A-4866-8D5C-1E6C03C007C2}.Release|Win32.Build.0 = Release|Win32 - {803F488E-4C5A-4866-8D5C-1E6C03C007C2}.Release|x64.ActiveCfg = Release|x64 - {803F488E-4C5A-4866-8D5C-1E6C03C007C2}.Release|x64.Build.0 = Release|x64 + {803F488E-4C5A-4866-8D5C-1E6C03C007C2}.Release|x64.ActiveCfg = Release|Win32 + {803F488E-4C5A-4866-8D5C-1E6C03C007C2}.Release|x64.Build.0 = Release|Win32 {AD537C9A-FECA-1BAD-6757-8A6348EA12C8}.Debug|Win32.ActiveCfg = Debug|Win32 {AD537C9A-FECA-1BAD-6757-8A6348EA12C8}.Debug|Win32.Build.0 = Debug|Win32 {AD537C9A-FECA-1BAD-6757-8A6348EA12C8}.Debug|x64.ActiveCfg = Debug|x64 diff --git a/win/mangosdVC90.sln b/win/mangosdVC90.sln index 02a13a939..22c8fcb47 100644 --- a/win/mangosdVC90.sln +++ b/win/mangosdVC90.sln @@ -138,12 +138,12 @@ Global {04BAF755-0D67-46F8-B1C6-77AE5368F3CB}.Release|x64.Build.0 = Release|x64 {803F488E-4C5A-4866-8D5C-1E6C03C007C2}.Debug|Win32.ActiveCfg = Debug|Win32 {803F488E-4C5A-4866-8D5C-1E6C03C007C2}.Debug|Win32.Build.0 = Debug|Win32 - {803F488E-4C5A-4866-8D5C-1E6C03C007C2}.Debug|x64.ActiveCfg = Debug|x64 - {803F488E-4C5A-4866-8D5C-1E6C03C007C2}.Debug|x64.Build.0 = Debug|x64 + {803F488E-4C5A-4866-8D5C-1E6C03C007C2}.Debug|x64.ActiveCfg = Debug|Win32 + {803F488E-4C5A-4866-8D5C-1E6C03C007C2}.Debug|x64.Build.0 = Debug|Win32 {803F488E-4C5A-4866-8D5C-1E6C03C007C2}.Release|Win32.ActiveCfg = Release|Win32 {803F488E-4C5A-4866-8D5C-1E6C03C007C2}.Release|Win32.Build.0 = Release|Win32 - {803F488E-4C5A-4866-8D5C-1E6C03C007C2}.Release|x64.ActiveCfg = Release|x64 - {803F488E-4C5A-4866-8D5C-1E6C03C007C2}.Release|x64.Build.0 = Release|x64 + {803F488E-4C5A-4866-8D5C-1E6C03C007C2}.Release|x64.ActiveCfg = Release|Win32 + {803F488E-4C5A-4866-8D5C-1E6C03C007C2}.Release|x64.Build.0 = Release|Win32 {BD537C9A-FECA-1BAD-6757-8A6348EA12C8}.Debug|Win32.ActiveCfg = Debug|Win32 {BD537C9A-FECA-1BAD-6757-8A6348EA12C8}.Debug|Win32.Build.0 = Debug|Win32 {BD537C9A-FECA-1BAD-6757-8A6348EA12C8}.Debug|x64.ActiveCfg = Debug|x64 From 71b33ca2f18095bcec50bb730f94d272f204b82a Mon Sep 17 00:00:00 2001 From: DiSlord Date: Fri, 9 Jan 2009 00:57:27 +0300 Subject: [PATCH 118/145] [7056] Proc system add Add use autorepeat flag and set more corect triggers flag for ranged autorepeat spells Restore work paladin 20210 and ranks after client switch Add 6-7 scripted paladin shock spell (also add it in dummy and fix flag) Hidden cooldown and hacky (need more fixes in triggers) fix for 33953 Remove not used code Signed-off-by: DiSlord --- sql/mangos.sql | 15 +++++----- .../7056_01_mangos_spell_proc_event.sql | 25 +++++++++++++++++ sql/updates/Makefile.am | 2 ++ src/game/Player.cpp | 16 +---------- src/game/Player.h | 2 +- src/game/SharedDefines.h | 2 +- src/game/Spell.cpp | 28 ++++++++++++------- src/game/SpellEffects.cpp | 2 ++ src/game/SpellMgr.h | 3 +- src/game/Unit.cpp | 11 +++++--- src/shared/revision_nr.h | 2 +- 11 files changed, 67 insertions(+), 41 deletions(-) create mode 100644 sql/updates/7056_01_mangos_spell_proc_event.sql diff --git a/sql/mangos.sql b/sql/mangos.sql index f3aee2f48..90791f536 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_7053_01_mangos_spell_proc_event` bit(1) default NULL + `required_7056_01_mangos_spell_proc_event` bit(1) default NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Used DB version notes'; -- @@ -16272,11 +16272,11 @@ INSERT INTO `spell_proc_event` VALUES (20165, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 20.000000, 0.000000, 0), (20166, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 20.000000, 0.000000, 0), (20182, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), -(20210, 0x00000000, 10, 0xC0200000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), -(20212, 0x00000000, 10, 0xC0200000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), -(20213, 0x00000000, 10, 0xC0200000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), -(20214, 0x00000000, 10, 0xC0200000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), -(20215, 0x00000000, 10, 0xC0200000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(20210, 0x00000000, 10, 0xC0000000, 0x00010000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(20212, 0x00000000, 10, 0xC0000000, 0x00010000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(20213, 0x00000000, 10, 0xC0000000, 0x00010000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(20214, 0x00000000, 10, 0xC0000000, 0x00010000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(20215, 0x00000000, 10, 0xC0000000, 0x00010000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), (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), (20375, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 7.000000, 0.000000, 0), @@ -16468,6 +16468,7 @@ INSERT INTO `spell_proc_event` VALUES (33881, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), (33882, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), (33883, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(33953, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00004000, 0x00000000, 0.000000, 0.000000, 45), (34080, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000008, 0.000000, 0.000000, 0), (34138, 0x00000000, 11, 0x00000080, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (34139, 0x00000000, 10, 0x40000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), @@ -16894,7 +16895,7 @@ INSERT INTO `spell_proc_event` VALUES (60818, 0x00000000, 10, 0x00000000, 0x00000200, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (60826, 0x00000000, 15, 0x01400000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (61188, 0x00000000, 5, 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), -(61324, 0x00000000, 10, 0x00000000, 0x00020000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0; +(61324, 0x00000000, 10, 0x00000000, 0x00020000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); /*!40000 ALTER TABLE `spell_proc_event` ENABLE KEYS */; UNLOCK TABLES; diff --git a/sql/updates/7056_01_mangos_spell_proc_event.sql b/sql/updates/7056_01_mangos_spell_proc_event.sql new file mode 100644 index 000000000..c4788253e --- /dev/null +++ b/sql/updates/7056_01_mangos_spell_proc_event.sql @@ -0,0 +1,25 @@ +ALTER TABLE db_version CHANGE COLUMN required_7053_01_mangos_spell_proc_event required_7056_01_mangos_spell_proc_event bit; + +-- (20210) Illumination (Rank 1) +DELETE FROM `spell_proc_event` WHERE `entry` IN (20210); +INSERT INTO `spell_proc_event` VALUES (20210, 0x00, 10, 0xC0000000, 0x00010000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0); + +-- (20212) Illumination (Rank 2) +DELETE FROM `spell_proc_event` WHERE `entry` IN (20212); +INSERT INTO `spell_proc_event` VALUES (20212, 0x00, 10, 0xC0000000, 0x00010000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0); + +-- (20213) Illumination (Rank 3) +DELETE FROM `spell_proc_event` WHERE `entry` IN (20213); +INSERT INTO `spell_proc_event` VALUES (20213, 0x00, 10, 0xC0000000, 0x00010000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0); + +-- (20214) Illumination (Rank 4) +DELETE FROM `spell_proc_event` WHERE `entry` IN (20214); +INSERT INTO `spell_proc_event` VALUES (20214, 0x00, 10, 0xC0000000, 0x00010000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0); + +-- (20215) Illumination (Rank 5) +DELETE FROM `spell_proc_event` WHERE `entry` IN (20215); +INSERT INTO `spell_proc_event` VALUES (20215, 0x00, 10, 0xC0000000, 0x00010000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0); + +-- (33953) Essence of Life () +DELETE FROM `spell_proc_event` WHERE `entry` IN (33953); +INSERT INTO `spell_proc_event` VALUES (33953, 0x00, 0, 0x00000000, 0x00000000, 0x00000000, 0x00004000, 0x00000000, 0.000000, 0.000000, 45); \ No newline at end of file diff --git a/sql/updates/Makefile.am b/sql/updates/Makefile.am index 53f2194cf..b3aa5cd69 100644 --- a/sql/updates/Makefile.am +++ b/sql/updates/Makefile.am @@ -123,6 +123,7 @@ pkgdata_DATA = \ 7051_01_mangos_spell_proc_event.sql \ 7052_01_mangos_spell_proc_event.sql \ 7053_01_mangos_spell_proc_event.sql \ + 7056_01_mangos_spell_proc_event.sql \ README ## Additional files to include when running 'make dist' @@ -226,4 +227,5 @@ EXTRA_DIST = \ 7051_01_mangos_spell_proc_event.sql \ 7052_01_mangos_spell_proc_event.sql \ 7053_01_mangos_spell_proc_event.sql \ + 7056_01_mangos_spell_proc_event.sql \ README diff --git a/src/game/Player.cpp b/src/game/Player.cpp index 33c6fd816..033769d75 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -4844,22 +4844,8 @@ void Player::UpdateWeaponSkill (WeaponAttackType attType) UpdateAllCritPercentages(); } -void Player::UpdateCombatSkills(Unit *pVictim, WeaponAttackType attType, MeleeHitOutcome outcome, bool defence) +void Player::UpdateCombatSkills(Unit *pVictim, WeaponAttackType attType, bool defence) { -/* Not need, this checked on call this func from trigger system - switch(outcome) - { - case MELEE_HIT_CRIT: - case MELEE_HIT_DODGE: - case MELEE_HIT_PARRY: - case MELEE_HIT_BLOCK: - case MELEE_HIT_BLOCK_CRIT: - return; - - default: - break; - } -*/ uint32 plevel = getLevel(); // if defense than pVictim == attacker uint32 greylevel = MaNGOS::XP::GetGrayLevel(plevel); uint32 moblevel = pVictim->getLevelForTarget(this); diff --git a/src/game/Player.h b/src/game/Player.h index 99f464c12..f844192f7 100644 --- a/src/game/Player.h +++ b/src/game/Player.h @@ -1739,7 +1739,7 @@ class MANGOS_DLL_SPEC Player : public Unit void UpdateDefense(); void UpdateWeaponSkill (WeaponAttackType attType); - void UpdateCombatSkills(Unit *pVictim, WeaponAttackType attType, MeleeHitOutcome outcome, bool defence); + void UpdateCombatSkills(Unit *pVictim, WeaponAttackType attType, bool defence); void SetSkill(uint32 id, uint16 currVal, uint16 maxVal); uint16 GetMaxSkillValue(uint32 skill) const; // max + perm. bonus diff --git a/src/game/SharedDefines.h b/src/game/SharedDefines.h index 48b45883f..c39b751fa 100644 --- a/src/game/SharedDefines.h +++ b/src/game/SharedDefines.h @@ -280,7 +280,7 @@ enum ItemQualities #define SPELL_ATTR_EX2_UNK2 0x00000004 // 2 #define SPELL_ATTR_EX2_UNK3 0x00000008 // 3 #define SPELL_ATTR_EX2_UNK4 0x00000010 // 4 -#define SPELL_ATTR_EX2_UNK5 0x00000020 // 5 +#define SPELL_ATTR_EX2_AUTOREPEAT_FLAG 0x00000020 // 5 #define SPELL_ATTR_EX2_UNK6 0x00000040 // 6 #define SPELL_ATTR_EX2_UNK7 0x00000080 // 7 #define SPELL_ATTR_EX2_UNK8 0x00000100 // 8 not set in 3.0.3 diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp index f8baab82f..ac2370e9c 100644 --- a/src/game/Spell.cpp +++ b/src/game/Spell.cpp @@ -709,22 +709,30 @@ void Spell::prepareDataForTriggerSystem() m_procVictim = PROC_FLAG_TAKEN_MELEE_SPELL_HIT; break; case SPELL_DAMAGE_CLASS_RANGED: - m_procAttacker = PROC_FLAG_SUCCESSFUL_RANGED_SPELL_HIT; - m_procVictim = PROC_FLAG_TAKEN_RANGED_SPELL_HIT; - break; - default: - if (IsPositiveSpell(m_spellInfo->Id)) // Check for positive spell + // Auto attack + if (m_spellInfo->AttributesEx2 & SPELL_ATTR_EX2_AUTOREPEAT_FLAG) { - m_procAttacker = PROC_FLAG_SUCCESSFUL_POSITIVE_SPELL; - m_procVictim = PROC_FLAG_TAKEN_POSITIVE_SPELL; + m_procAttacker = PROC_FLAG_SUCCESSFUL_RANGED_HIT; + m_procVictim = PROC_FLAG_TAKEN_RANGED_HIT; } - // Wands - else if (IsAutoRepeatRangedSpell(m_spellInfo) && m_spellInfo->Id != SPELL_ID_AUTOSHOT) + else // Ranged spell attack { m_procAttacker = PROC_FLAG_SUCCESSFUL_RANGED_SPELL_HIT; m_procVictim = PROC_FLAG_TAKEN_RANGED_SPELL_HIT; } - else + break; + default: + if (IsPositiveSpell(m_spellInfo->Id)) // Check for positive spell + { + m_procAttacker = PROC_FLAG_SUCCESSFUL_POSITIVE_SPELL; + m_procVictim = PROC_FLAG_TAKEN_POSITIVE_SPELL; + } + else if (m_spellInfo->AttributesEx2 & SPELL_ATTR_EX2_AUTOREPEAT_FLAG) // Wands auto attack + { + m_procAttacker = PROC_FLAG_SUCCESSFUL_RANGED_HIT; + m_procVictim = PROC_FLAG_TAKEN_RANGED_HIT; + } + else // Negative spell { m_procAttacker = PROC_FLAG_SUCCESSFUL_NEGATIVE_SPELL_HIT; m_procVictim = PROC_FLAG_TAKEN_NEGATIVE_SPELL_HIT; diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp index faff6b0e8..8625da213 100644 --- a/src/game/SpellEffects.cpp +++ b/src/game/SpellEffects.cpp @@ -1517,6 +1517,8 @@ void Spell::EffectDummy(uint32 i) case 20930: hurt = 25902; heal = 25903; break; case 27174: hurt = 27176; heal = 27175; break; case 33072: hurt = 33073; heal = 33074; break; + case 48824: hurt = 48822; heal = 48820; break; + case 48825: hurt = 48823; heal = 48821; break; default: sLog.outError("Spell::EffectDummy: Spell %u not handled in HS",m_spellInfo->Id); return; diff --git a/src/game/SpellMgr.h b/src/game/SpellMgr.h index 602beb00b..d92a2cf41 100644 --- a/src/game/SpellMgr.h +++ b/src/game/SpellMgr.h @@ -417,10 +417,9 @@ inline bool isSpellBreakStealth(SpellEntry const* spellInfo) inline bool IsAutoRepeatRangedSpell(SpellEntry const* spellInfo) { - return (spellInfo->Attributes & SPELL_ATTR_RANGED) && (spellInfo->AttributesEx2 == 0x000020 /*autorepeat*/); + return (spellInfo->Attributes & SPELL_ATTR_RANGED) && (spellInfo->AttributesEx2 & SPELL_ATTR_EX2_AUTOREPEAT_FLAG); } - uint8 GetErrorAtShapeshiftedCast (SpellEntry const *spellInfo, uint32 form); inline bool IsChanneledSpell(SpellEntry const* spellInfo) diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index 64a124e56..557d12bd3 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -5825,8 +5825,8 @@ bool Unit::HandleProcTriggerSpell(Unit *pVictim, uint32 damage, Aura* triggeredB return false; // procspell is triggered spell but we need mana cost of original casted spell uint32 originalSpellId = procSpell->Id; - // Holy Shock - if(procSpell->SpellFamilyFlags & 0x00200000) + // Holy Shock heal + if(procSpell->SpellFamilyFlags & 0x0001000000000000LL) { switch(procSpell->Id) { @@ -5835,6 +5835,8 @@ bool Unit::HandleProcTriggerSpell(Unit *pVictim, uint32 damage, Aura* triggeredB case 25903: originalSpellId = 20930; break; case 27175: originalSpellId = 27174; break; case 33074: originalSpellId = 33072; break; + case 48820: originalSpellId = 48824; break; + case 48821: originalSpellId = 48825; break; default: sLog.outError("Unit::HandleProcTriggerSpell: Spell %u not handled in HShock",procSpell->Id); return false; @@ -5847,7 +5849,8 @@ bool Unit::HandleProcTriggerSpell(Unit *pVictim, uint32 damage, Aura* triggeredB return false; } // percent stored in effect 1 (class scripts) base points - basepoints0 = originalSpell->manaCost*(auraSpellInfo->EffectBasePoints[1]+1)/100; + int32 cost = originalSpell->manaCost + originalSpell->ManaCostPercentage * GetCreateMana() / 100; + basepoints0 = cost*(auraSpellInfo->EffectBasePoints[1]+1)/100; trigger_spell_id = 20272; target = this; } @@ -9816,7 +9819,7 @@ void Unit::ProcDamageAndSpellFor( bool isVictim, Unit * pTarget, uint32 procFlag if (procExtra&(PROC_EX_NORMAL_HIT|PROC_EX_MISS|PROC_EX_RESIST)) { if (pTarget->GetTypeId() != TYPEID_PLAYER && pTarget->GetCreatureType() != CREATURE_TYPE_CRITTER) - ((Player*)this)->UpdateCombatSkills(pTarget, attType, MELEE_HIT_MISS, isVictim); + ((Player*)this)->UpdateCombatSkills(pTarget, attType, isVictim); } // Update defence if player is victim and parry/dodge/block if (isVictim && procExtra&(PROC_EX_DODGE|PROC_EX_PARRY|PROC_EX_BLOCK)) diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 23c3df242..fe01bdea2 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 "7055" + #define REVISION_NR "7056" #endif // __REVISION_NR_H__ From 6b8d42b7219b04a95852e7f456348d47e8f16384 Mon Sep 17 00:00:00 2001 From: DiSlord Date: Fri, 9 Jan 2009 03:05:29 +0300 Subject: [PATCH 119/145] [7057] Restore brocen after client switch (and add new 3 ranks) Shaman enchant spell proc Signed-off-by: DiSlord --- src/game/Unit.cpp | 17 +++++++++++------ src/shared/revision_nr.h | 2 +- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index 557d12bd3..a06c90f86 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -5254,14 +5254,19 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, Aura* triggeredByAu if( cooldown && ((Player*)this)->HasSpellCooldown(dummySpell->Id)) return false; + // Now amount of extra power stored in 1 effect of Enchant spell + // Get it by item enchant id uint32 spellId; switch (castItem->GetEnchantmentId(EnchantmentSlot(TEMP_ENCHANTMENT_SLOT))) { - case 283: spellId = 33757; break; //1 Rank - case 284: spellId = 33756; break; //2 Rank - case 525: spellId = 33755; break; //3 Rank - case 1669:spellId = 33754; break; //4 Rank - case 2636:spellId = 33727; break; //5 Rank + case 283: spellId = 8232; break; // 1 Rank + case 284: spellId = 8235; break; // 2 Rank + case 525: spellId = 10486; break; // 3 Rank + case 1669:spellId = 16362; break; // 4 Rank + case 2636:spellId = 25505; break; // 5 Rank + case 3785:spellId = 58801; break; // 6 Rank + case 3786:spellId = 58803; break; // 7 Rank + case 3787:spellId = 58804; break; // 8 Rank default: { sLog.outError("Unit::HandleDummyAuraProc: non handled item enchantment (rank?) %u for spell id: %u (Windfury)", @@ -5277,7 +5282,7 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, Aura* triggeredByAu return false; } - int32 extra_attack_power = CalculateSpellDamage(windfurySpellEntry,0,windfurySpellEntry->EffectBasePoints[0],pVictim); + int32 extra_attack_power = CalculateSpellDamage(windfurySpellEntry, 1, windfurySpellEntry->EffectBasePoints[1], pVictim); // Off-Hand case if ( castItem->GetSlot() == EQUIPMENT_SLOT_OFFHAND ) diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index fe01bdea2..790abfa28 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 "7056" + #define REVISION_NR "7057" #endif // __REVISION_NR_H__ From fb10c7c8f28af9acf4348ce0fe6d5b93499173f8 Mon Sep 17 00:00:00 2001 From: Arthorius Date: Fri, 9 Jan 2009 03:49:26 +0300 Subject: [PATCH 120/145] Implement DK 43265 and ranks Signed-off-by: DiSlord --- src/game/SpellAuras.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp index e982d1e47..92ce181c7 100644 --- a/src/game/SpellAuras.cpp +++ b/src/game/SpellAuras.cpp @@ -6572,8 +6572,12 @@ void Aura::PeriodicDummyTick() case SPELLFAMILY_DEATHKNIGHT: { // Death and Decay -// if (spell->SpellFamilyFlags & 0x0000000000000020LL) -// return; + if (spell->SpellFamilyFlags & 0x0000000000000020LL) + { + if (caster) + caster->CastCustomSpell(m_target, 52212, &m_modifier.m_amount, NULL, NULL, true); + return; + } // Raise Dead // if (spell->SpellFamilyFlags & 0x0000000000001000LL) // return; From b968b36979b0445b71bb344ceb61498fd044de78 Mon Sep 17 00:00:00 2001 From: DiSlord Date: Fri, 9 Jan 2009 19:28:27 +0300 Subject: [PATCH 121/145] [7058] Add 669 summon type Fix typo in mangosd.conf (by SergiK_KilleR) Signed-off-by: DiSlord --- src/game/SharedDefines.h | 1 + src/game/SpellEffects.cpp | 1 + src/mangosd/mangosd.conf.dist.in | 4 ++-- src/shared/revision_nr.h | 2 +- 4 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/game/SharedDefines.h b/src/game/SharedDefines.h index c39b751fa..1fdf67964 100644 --- a/src/game/SharedDefines.h +++ b/src/game/SharedDefines.h @@ -2076,6 +2076,7 @@ enum SummonType SUMMON_TYPE_UNKNOWN5 = 409, SUMMON_TYPE_UNKNOWN2 = 427, SUMMON_TYPE_POSESSED2 = 428, + SUMMON_TYPE_FORCE_OF_NATURE = 669, SUMMON_TYPE_GUARDIAN2 = 1161 }; diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp index 8625da213..35d0e79c4 100644 --- a/src/game/SpellEffects.cpp +++ b/src/game/SpellEffects.cpp @@ -3139,6 +3139,7 @@ void Spell::EffectSummonType(uint32 i) case SUMMON_TYPE_GUARDIAN: case SUMMON_TYPE_POSESSED: case SUMMON_TYPE_POSESSED2: + case SUMMON_TYPE_FORCE_OF_NATURE: case SUMMON_TYPE_GUARDIAN2: EffectSummonGuardian(i); break; diff --git a/src/mangosd/mangosd.conf.dist.in b/src/mangosd/mangosd.conf.dist.in index fe3f54847..c0f099640 100644 --- a/src/mangosd/mangosd.conf.dist.in +++ b/src/mangosd/mangosd.conf.dist.in @@ -346,9 +346,9 @@ LogColors = "" # # Expansion # Allow server use content from expansion -# 2 - check expansion 2 maps existence, and if client support expansion 2 and account have +# Default: 2 - check expansion 2 maps existence, and if client support expansion 2 and account have # expansion 2 setting then allow visit expansion 2 maps, allow create new class character) -# Default: 1 - check expansion 1 maps existence, and if client support expansion 1 and account have +# 1 - check expansion 1 maps existence, and if client support expansion 1 and account have # expansion 1 setting then allow visit expansion 1 maps, allow create new races character) # 0 - not check expansion maps existence, not allow wisit its, not allow create new race or new class # characters, ignore account expansion setting) diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 790abfa28..9a302fffa 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 "7057" + #define REVISION_NR "7058" #endif // __REVISION_NR_H__ From 3b15d1ec7e2b7de9ad28af3e9d0fcff69de98463 Mon Sep 17 00:00:00 2001 From: VladimirMangos Date: Fri, 9 Jan 2009 21:05:44 +0300 Subject: [PATCH 122/145] Remove unused local variable. --- src/game/SpellAuras.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp index 92ce181c7..fb368539d 100644 --- a/src/game/SpellAuras.cpp +++ b/src/game/SpellAuras.cpp @@ -345,8 +345,6 @@ m_updated(false), m_isRemovedOnShapeLost(true), m_in_use(false) { assert(target); - int32 size = sizeof(Aura); - assert(spellproto && spellproto == sSpellStore.LookupEntry( spellproto->Id ) && "`info` must be pointer to sSpellStore element"); m_spellProto = spellproto; From e1a4ad241d09c9f3f8ce6f1cacc139c242408d1a Mon Sep 17 00:00:00 2001 From: VladimirMangos Date: Fri, 9 Jan 2009 22:27:16 +0300 Subject: [PATCH 123/145] [7059] Drop spell slot fields as unused for characters and pets. Also temporary fix spell slot setting in 7047_01_characters_character_spell.sql --- sql/characters.sql | 4 +-- .../7047_01_characters_character_spell.sql | 14 +++++----- .../7059_01_characters_character_spell.sql | 4 +++ sql/updates/7059_02_characters_pet_spell.sql | 4 +++ sql/updates/Makefile.am | 4 +++ src/game/CharacterHandler.cpp | 2 +- src/game/Pet.cpp | 26 ++++-------------- src/game/Pet.h | 3 +-- src/game/Player.cpp | 27 ++++--------------- src/game/Player.h | 5 +--- src/shared/revision_nr.h | 2 +- 11 files changed, 34 insertions(+), 61 deletions(-) create mode 100644 sql/updates/7059_01_characters_character_spell.sql create mode 100644 sql/updates/7059_02_characters_pet_spell.sql diff --git a/sql/characters.sql b/sql/characters.sql index 1a1753b34..bc423f3e4 100644 --- a/sql/characters.sql +++ b/sql/characters.sql @@ -21,7 +21,7 @@ DROP TABLE IF EXISTS `character_db_version`; CREATE TABLE `character_db_version` ( - `required_7047_01_characters_character_spell` bit(1) default NULL + `required_7059_02_characters_pet_spell` bit(1) default NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Last applied sql update to DB'; -- @@ -626,7 +626,6 @@ DROP TABLE IF EXISTS `character_spell`; CREATE TABLE `character_spell` ( `guid` int(11) unsigned NOT NULL default '0' COMMENT 'Global Unique Identifier', `spell` int(11) unsigned NOT NULL default '0' COMMENT 'Spell Identifier', - `slot` int(11) unsigned NOT NULL default '0', `active` tinyint(3) unsigned NOT NULL default '1', `disabled` tinyint(3) unsigned NOT NULL default '0', PRIMARY KEY (`guid`,`spell`) @@ -1216,7 +1215,6 @@ DROP TABLE IF EXISTS `pet_spell`; CREATE TABLE `pet_spell` ( `guid` int(11) unsigned NOT NULL default '0' COMMENT 'Global Unique Identifier', `spell` int(11) unsigned NOT NULL default '0' COMMENT 'Spell Identifier', - `slot` int(11) unsigned NOT NULL default '0', `active` int(11) unsigned NOT NULL default '0', PRIMARY KEY (`guid`,`spell`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='Pet System'; diff --git a/sql/updates/7047_01_characters_character_spell.sql b/sql/updates/7047_01_characters_character_spell.sql index 7d0458d81..a0f3abc8d 100644 --- a/sql/updates/7047_01_characters_character_spell.sql +++ b/sql/updates/7047_01_characters_character_spell.sql @@ -2,10 +2,10 @@ ALTER TABLE character_db_version CHANGE COLUMN required_6976_02_characters_chara DELETE FROM `character_spell` WHERE `spell` IN ('28880', 59542, 59543, 59544, 59545, 59547, 59548); -INSERT INTO character_spell SELECT characters.guid as guid, 28880, -1, 1, 0 FROM `characters` WHERE characters.race=11 AND characters.class = 1; -INSERT INTO character_spell SELECT characters.guid as guid, 59542, -1, 1, 0 FROM `characters` WHERE characters.race=11 AND characters.class = 2; -INSERT INTO character_spell SELECT characters.guid as guid, 59543, -1, 1, 0 FROM `characters` WHERE characters.race=11 AND characters.class = 3; -INSERT INTO character_spell SELECT characters.guid as guid, 59544, -1, 1, 0 FROM `characters` WHERE characters.race=11 AND characters.class = 5; -INSERT INTO character_spell SELECT characters.guid as guid, 59545, -1, 1, 0 FROM `characters` WHERE characters.race=11 AND characters.class = 6; -INSERT INTO character_spell SELECT characters.guid as guid, 59547, -1, 1, 0 FROM `characters` WHERE characters.race=11 AND characters.class = 7; -INSERT INTO character_spell SELECT characters.guid as guid, 59548, -1, 1, 0 FROM `characters` WHERE characters.race=11 AND characters.class = 8; +INSERT INTO character_spell SELECT characters.guid as guid, 28880, 4294967295, 1, 0 FROM `characters` WHERE characters.race=11 AND characters.class = 1; +INSERT INTO character_spell SELECT characters.guid as guid, 59542, 4294967295, 1, 0 FROM `characters` WHERE characters.race=11 AND characters.class = 2; +INSERT INTO character_spell SELECT characters.guid as guid, 59543, 4294967295, 1, 0 FROM `characters` WHERE characters.race=11 AND characters.class = 3; +INSERT INTO character_spell SELECT characters.guid as guid, 59544, 4294967295, 1, 0 FROM `characters` WHERE characters.race=11 AND characters.class = 5; +INSERT INTO character_spell SELECT characters.guid as guid, 59545, 4294967295, 1, 0 FROM `characters` WHERE characters.race=11 AND characters.class = 6; +INSERT INTO character_spell SELECT characters.guid as guid, 59547, 4294967295, 1, 0 FROM `characters` WHERE characters.race=11 AND characters.class = 7; +INSERT INTO character_spell SELECT characters.guid as guid, 59548, 4294967295, 1, 0 FROM `characters` WHERE characters.race=11 AND characters.class = 8; diff --git a/sql/updates/7059_01_characters_character_spell.sql b/sql/updates/7059_01_characters_character_spell.sql new file mode 100644 index 000000000..6280798cc --- /dev/null +++ b/sql/updates/7059_01_characters_character_spell.sql @@ -0,0 +1,4 @@ +ALTER TABLE character_db_version CHANGE COLUMN required_7047_01_characters_character_spell required_7059_01_characters_character_spell bit; + +ALTER TABLE character_spell + DROP slot; diff --git a/sql/updates/7059_02_characters_pet_spell.sql b/sql/updates/7059_02_characters_pet_spell.sql new file mode 100644 index 000000000..e2ee87b9f --- /dev/null +++ b/sql/updates/7059_02_characters_pet_spell.sql @@ -0,0 +1,4 @@ +ALTER TABLE character_db_version CHANGE COLUMN required_7059_01_characters_character_spell required_7059_02_characters_pet_spell bit; + +ALTER TABLE pet_spell + DROP slot; diff --git a/sql/updates/Makefile.am b/sql/updates/Makefile.am index b3aa5cd69..84b5ad302 100644 --- a/sql/updates/Makefile.am +++ b/sql/updates/Makefile.am @@ -124,6 +124,8 @@ pkgdata_DATA = \ 7052_01_mangos_spell_proc_event.sql \ 7053_01_mangos_spell_proc_event.sql \ 7056_01_mangos_spell_proc_event.sql \ + 7059_01_characters_character_spell.sql \ + 7059_02_characters_pet_spell.sql \ README ## Additional files to include when running 'make dist' @@ -228,4 +230,6 @@ EXTRA_DIST = \ 7052_01_mangos_spell_proc_event.sql \ 7053_01_mangos_spell_proc_event.sql \ 7056_01_mangos_spell_proc_event.sql \ + 7059_01_characters_character_spell.sql \ + 7059_02_characters_pet_spell.sql \ README diff --git a/src/game/CharacterHandler.cpp b/src/game/CharacterHandler.cpp index ed4f4ec73..42132fea2 100644 --- a/src/game/CharacterHandler.cpp +++ b/src/game/CharacterHandler.cpp @@ -64,7 +64,7 @@ bool LoginQueryHolder::Initialize() res &= SetPQuery(PLAYER_LOGIN_QUERY_LOADGROUP, "SELECT leaderGuid FROM group_member WHERE memberGuid ='%u'", GUID_LOPART(m_guid)); res &= SetPQuery(PLAYER_LOGIN_QUERY_LOADBOUNDINSTANCES, "SELECT id, permanent, map, difficulty, resettime FROM character_instance LEFT JOIN instance ON instance = id WHERE guid = '%u'", GUID_LOPART(m_guid)); res &= SetPQuery(PLAYER_LOGIN_QUERY_LOADAURAS, "SELECT caster_guid,spell,effect_index,stackcount,amount,maxduration,remaintime,remaincharges FROM character_aura WHERE guid = '%u'", GUID_LOPART(m_guid)); - res &= SetPQuery(PLAYER_LOGIN_QUERY_LOADSPELLS, "SELECT spell,slot,active,disabled FROM character_spell WHERE guid = '%u'", GUID_LOPART(m_guid)); + res &= SetPQuery(PLAYER_LOGIN_QUERY_LOADSPELLS, "SELECT spell,active,disabled FROM character_spell WHERE guid = '%u'", GUID_LOPART(m_guid)); res &= SetPQuery(PLAYER_LOGIN_QUERY_LOADQUESTSTATUS, "SELECT quest,status,rewarded,explored,timer,mobcount1,mobcount2,mobcount3,mobcount4,itemcount1,itemcount2,itemcount3,itemcount4 FROM character_queststatus WHERE guid = '%u'", GUID_LOPART(m_guid)); res &= SetPQuery(PLAYER_LOGIN_QUERY_LOADDAILYQUESTSTATUS,"SELECT quest,time FROM character_queststatus_daily WHERE guid = '%u'", GUID_LOPART(m_guid)); res &= SetPQuery(PLAYER_LOGIN_QUERY_LOADTUTORIALS, "SELECT tut0,tut1,tut2,tut3,tut4,tut5,tut6,tut7 FROM character_tutorial WHERE account = '%u' AND realmid = '%u'", GetAccountId(), realmID); diff --git a/src/game/Pet.cpp b/src/game/Pet.cpp index fed9aa3de..93894e4d3 100644 --- a/src/game/Pet.cpp +++ b/src/game/Pet.cpp @@ -1078,7 +1078,7 @@ void Pet::_SaveSpellCooldowns() void Pet::_LoadSpells() { - QueryResult *result = CharacterDatabase.PQuery("SELECT spell,slot,active FROM pet_spell WHERE guid = '%u'",m_charmInfo->GetPetNumber()); + QueryResult *result = CharacterDatabase.PQuery("SELECT spell,active FROM pet_spell WHERE guid = '%u'",m_charmInfo->GetPetNumber()); if(result) { @@ -1086,7 +1086,7 @@ void Pet::_LoadSpells() { Field *fields = result->Fetch(); - addSpell(fields[0].GetUInt16(), fields[2].GetUInt16(), PETSPELL_UNCHANGED, fields[1].GetUInt16()); + addSpell(fields[0].GetUInt16(), fields[1].GetUInt16(), PETSPELL_UNCHANGED); } while( result->NextRow() ); @@ -1103,7 +1103,7 @@ void Pet::_SaveSpells() if (itr->second->state == PETSPELL_REMOVED || itr->second->state == PETSPELL_CHANGED) CharacterDatabase.PExecute("DELETE FROM pet_spell WHERE guid = '%u' and spell = '%u'", m_charmInfo->GetPetNumber(), itr->first); if (itr->second->state == PETSPELL_NEW || itr->second->state == PETSPELL_CHANGED) - CharacterDatabase.PExecute("INSERT INTO pet_spell (guid,spell,slot,active) VALUES ('%u', '%u', '%u','%u')", m_charmInfo->GetPetNumber(), itr->first, itr->second->slotId,itr->second->active); + CharacterDatabase.PExecute("INSERT INTO pet_spell (guid,spell,active) VALUES ('%u', '%u', '%u')", m_charmInfo->GetPetNumber(), itr->first, itr->second->active); if (itr->second->state == PETSPELL_REMOVED) _removeSpell(itr->first); @@ -1239,7 +1239,7 @@ void Pet::_SaveAuras() } } -bool Pet::addSpell(uint16 spell_id, uint16 active, PetSpellState state, uint16 slot_id, PetSpellType type) +bool Pet::addSpell(uint16 spell_id, uint16 active, PetSpellState state, PetSpellType type) { SpellEntry const *spellInfo = sSpellStore.LookupEntry(spell_id); if (!spellInfo) @@ -1299,7 +1299,6 @@ bool Pet::addSpell(uint16 spell_id, uint16 active, PetSpellState state, uint16 s if(spellmgr.GetFirstSpellInChain(itr->first) == chainstart) { - slot_id = itr->second->slotId; newspell->active = itr->second->active; if(newspell->active == ACT_ENABLED) @@ -1311,21 +1310,6 @@ bool Pet::addSpell(uint16 spell_id, uint16 active, PetSpellState state, uint16 s } } - uint16 tmpslot = slot_id; - - if (tmpslot == 0xffff) - { - uint16 maxid = 0; - PetSpellMap::iterator itr; - for (itr = m_spells.begin(); itr != m_spells.end(); ++itr) - { - if(itr->second->state == PETSPELL_REMOVED) continue; - if (itr->second->slotId > maxid) maxid = itr->second->slotId; - } - tmpslot = maxid + 1; - } - - newspell->slotId = tmpslot; m_spells[spell_id] = newspell; if (IsPassiveSpell(spell_id)) @@ -1589,7 +1573,7 @@ void Pet::LearnPetPassives() if(petStore != sPetFamilySpellsStore.end()) { for(PetFamilySpellsSet::const_iterator petSet = petStore->second.begin(); petSet != petStore->second.end(); ++petSet) - addSpell(*petSet, ACT_DECIDE, PETSPELL_NEW, 0xffff, PETSPELL_FAMILY); + addSpell(*petSet, ACT_DECIDE, PETSPELL_NEW, PETSPELL_FAMILY); } } diff --git a/src/game/Pet.h b/src/game/Pet.h index f64364e15..383089280 100644 --- a/src/game/Pet.h +++ b/src/game/Pet.h @@ -66,7 +66,6 @@ enum PetSpellType struct PetSpell { - uint16 slotId; uint16 active; PetSpellState state : 16; @@ -189,7 +188,7 @@ class Pet : public Creature void _LoadSpells(); void _SaveSpells(); - bool addSpell(uint16 spell_id,uint16 active = ACT_DECIDE, PetSpellState state = PETSPELL_NEW, uint16 slot_id=0xffff, PetSpellType type = PETSPELL_NORMAL); + bool addSpell(uint16 spell_id,uint16 active = ACT_DECIDE, PetSpellState state = PETSPELL_NEW, PetSpellType type = PETSPELL_NORMAL); bool learnSpell(uint16 spell_id); void learnLevelupSpells(); bool unlearnSpell(uint16 spell_id); diff --git a/src/game/Player.cpp b/src/game/Player.cpp index 033769d75..094208d30 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -2528,7 +2528,7 @@ void Player::AddNewMailDeliverTime(time_t deliver_time) } } -bool Player::addSpell(uint32 spell_id, bool active, bool learning, bool loading, uint16 slot_id, bool disabled) +bool Player::addSpell(uint32 spell_id, bool active, bool learning, bool loading, bool disabled) { SpellEntry const *spellInfo = sSpellStore.LookupEntry(spell_id); if (!spellInfo) @@ -2646,7 +2646,7 @@ bool Player::addSpell(uint32 spell_id, bool active, bool learning, bool loading, else if(uint32 prev_spell = spellmgr.GetPrevSpellInChain(spell_id)) { if(loading) // at spells loading, no output, but allow save - addSpell(prev_spell,active,true,loading,SPELL_WITHOUT_SLOT_ID,disabled); + addSpell(prev_spell,active,true,loading,disabled); else // at normal learning learnSpell(prev_spell); } @@ -2704,23 +2704,6 @@ bool Player::addSpell(uint32 spell_id, bool active, bool learning, bool loading, } } - uint16 tmpslot=slot_id; - - if (tmpslot == SPELL_WITHOUT_SLOT_ID) - { - uint16 maxid = 0; - PlayerSpellMap::iterator itr; - for (itr = m_spells.begin(); itr != m_spells.end(); ++itr) - { - if(itr->second->state == PLAYERSPELL_REMOVED) - continue; - if (itr->second->slotId > maxid) - maxid = itr->second->slotId; - } - tmpslot = maxid + 1; - } - - newspell->slotId = tmpslot; m_spells[spell_id] = newspell; // return false if spell disabled @@ -14941,7 +14924,7 @@ void Player::_LoadSpells(QueryResult *result) delete itr->second; m_spells.clear(); - //QueryResult *result = CharacterDatabase.PQuery("SELECT spell,slot,active FROM character_spell WHERE guid = '%u'",GetGUIDLow()); + //QueryResult *result = CharacterDatabase.PQuery("SELECT spell,active,disabled FROM character_spell WHERE guid = '%u'",GetGUIDLow()); if(result) { @@ -14949,7 +14932,7 @@ void Player::_LoadSpells(QueryResult *result) { Field *fields = result->Fetch(); - addSpell(fields[0].GetUInt16(), fields[2].GetBool(), false, true, fields[1].GetUInt16(), fields[3].GetBool()); + addSpell(fields[0].GetUInt16(), fields[1].GetBool(), false, true, fields[2].GetBool()); } while( result->NextRow() ); @@ -15712,7 +15695,7 @@ void Player::_SaveSpells() if (itr->second->state == PLAYERSPELL_REMOVED || itr->second->state == PLAYERSPELL_CHANGED) CharacterDatabase.PExecute("DELETE FROM character_spell WHERE guid = '%u' and spell = '%u'", GetGUIDLow(), itr->first); if (itr->second->state == PLAYERSPELL_NEW || itr->second->state == PLAYERSPELL_CHANGED) - CharacterDatabase.PExecute("INSERT INTO character_spell (guid,spell,slot,active,disabled) VALUES ('%u', '%u', '%u','%u','%u')", GetGUIDLow(), itr->first, itr->second->slotId,itr->second->active ? 1 : 0,itr->second->disabled ? 1 : 0); + CharacterDatabase.PExecute("INSERT INTO character_spell (guid,spell,active,disabled) VALUES ('%u', '%u', '%u', '%u')", GetGUIDLow(), itr->first, itr->second->active ? 1 : 0,itr->second->disabled ? 1 : 0); if (itr->second->state == PLAYERSPELL_REMOVED) _removeSpell(itr->first); diff --git a/src/game/Player.h b/src/game/Player.h index f844192f7..1ed97d833 100644 --- a/src/game/Player.h +++ b/src/game/Player.h @@ -72,14 +72,11 @@ enum PlayerSpellState struct PlayerSpell { - uint16 slotId : 16; PlayerSpellState state : 8; bool active : 1; bool disabled : 1; }; -#define SPELL_WITHOUT_SLOT_ID uint16(-1) - // Spell modifier (used for modify other spells) struct SpellModifier { @@ -1470,7 +1467,7 @@ class MANGOS_DLL_SPEC Player : public Unit void SendProficiency(uint8 pr1, uint32 pr2); void SendInitialSpells(); - bool addSpell(uint32 spell_id, bool active, bool learning = true, bool loading = false, uint16 slot_id=SPELL_WITHOUT_SLOT_ID, bool disabled = false); + bool addSpell(uint32 spell_id, bool active, bool learning = true, bool loading = false, bool disabled = false); void learnSpell(uint32 spell_id); void removeSpell(uint32 spell_id, bool disabled = false); void resetSpells(); diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 9a302fffa..038ed3ff5 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 "7058" + #define REVISION_NR "7059" #endif // __REVISION_NR_H__ From 8b270d67a8f6eee4223eb6f756af09483ff504c1 Mon Sep 17 00:00:00 2001 From: DiSlord Date: Fri, 9 Jan 2009 22:01:47 +0300 Subject: [PATCH 124/145] Implement Priest 47509 dummy proc and Ranks Signed-off-by: DiSlord --- src/game/Unit.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index a06c90f86..ee53ef53d 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -4836,6 +4836,13 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, Aura* triggeredByAu pVictim->CastCustomSpell(pVictim,34919,&basepoints0,NULL,NULL,true,castItem,triggeredByAura); return true; // no hidden cooldown } + // Divine Aegis + if (dummySpell->SpellIconID == 2820) + { + basepoints0 = damage * triggeredByAura->GetModifier()->m_amount/100; + triggered_spell_id = 47753; + break; + } switch(dummySpell->Id) { // Vampiric Embrace From cb66f99fc2287992260e9d727c3f5c2ac5c9895d Mon Sep 17 00:00:00 2001 From: DiSlord Date: Sat, 10 Jan 2009 00:52:16 +0300 Subject: [PATCH 125/145] Fix priest 47540 and ranks Also stop chanelling mage AM/priest 47540 if target die Set DK cast 52212 as triggered from aura. Signed-off-by: DiSlord --- src/game/Spell.cpp | 11 +++++++++-- src/game/SpellAuras.cpp | 21 ++++++++++++++++++++- src/game/SpellEffects.cpp | 24 ++++++++++++++++++++++++ 3 files changed, 53 insertions(+), 3 deletions(-) diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp index ac2370e9c..07f490780 100644 --- a/src/game/Spell.cpp +++ b/src/game/Spell.cpp @@ -689,6 +689,9 @@ void Spell::prepareDataForTriggerSystem() case SPELLFAMILY_WARLOCK: // For Hellfire Effect / Rain of Fire / Seed of Corruption triggers need do it if (m_spellInfo->SpellFamilyFlags & 0x0000800000000060LL) m_canTrigger = true; break; + case SPELLFAMILY_PRIEST: // For Penance heal/damage triggers need do it + if (m_spellInfo->SpellFamilyFlags & 0x0001800000000000LL) m_canTrigger = true; + break; case SPELLFAMILY_HUNTER: // Hunter Explosive Trap Effect/Immolation Trap Effect/Frost Trap Aura/Snake Trap Effect if (m_spellInfo->SpellFamilyFlags & 0x0000200000000014LL) m_canTrigger = true; break; @@ -2258,8 +2261,12 @@ void Spell::handle_immediate() // start channeling if applicable if(IsChanneledSpell(m_spellInfo)) { - m_spellState = SPELL_STATE_CASTING; - SendChannelStart(GetSpellDuration(m_spellInfo)); + int32 duration = GetSpellDuration(m_spellInfo); + if (duration) + { + m_spellState = SPELL_STATE_CASTING; + SendChannelStart(duration); + } } // process immediate effects (items, ground, etc.) also initialize some variables diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp index fb368539d..46154ce57 100644 --- a/src/game/SpellAuras.cpp +++ b/src/game/SpellAuras.cpp @@ -2145,6 +2145,25 @@ void Aura::HandleAuraDummy(bool apply, bool Real) m_target->CastSpell(m_target,47287,true,NULL,this); return; } + + if (caster && m_removeMode == AURA_REMOVE_BY_DEATH) + { + // Stop caster Arcane Missle chanelling on death + if (m_spellProto->SpellFamilyName == SPELLFAMILY_MAGE && + m_spellProto->SpellFamilyFlags&0x0000000000000800LL) + { + caster->InterruptSpell(CURRENT_CHANNELED_SPELL); + return; + } + // Stop caster Penance chanelling on death + if (m_spellProto->SpellFamilyName == SPELLFAMILY_PRIEST && + m_spellProto->SpellFamilyFlags2 & 0x00000080) + { + caster->InterruptSpell(CURRENT_CHANNELED_SPELL); + return; + } + + } } // AT APPLY & REMOVE @@ -6573,7 +6592,7 @@ void Aura::PeriodicDummyTick() if (spell->SpellFamilyFlags & 0x0000000000000020LL) { if (caster) - caster->CastCustomSpell(m_target, 52212, &m_modifier.m_amount, NULL, NULL, true); + caster->CastCustomSpell(m_target, 52212, &m_modifier.m_amount, NULL, NULL, true, 0, this); return; } // Raise Dead diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp index 35d0e79c4..0eae48c20 100644 --- a/src/game/SpellEffects.cpp +++ b/src/game/SpellEffects.cpp @@ -1352,6 +1352,30 @@ void Spell::EffectDummy(uint32 i) } break; case SPELLFAMILY_PRIEST: + // Penance + if (m_spellInfo->SpellFamilyFlags & 0x0080000000000000LL) + { + if (!unitTarget) + return; + + int hurt = 0; + int heal = 0; + switch(m_spellInfo->Id) + { + case 47540: hurt = 47758; heal = 47757; break; + case 53005: hurt = 53001; heal = 52986; break; + case 53006: hurt = 53002; heal = 52987; break; + case 53007: hurt = 53003; heal = 52988; break; + default: + sLog.outError("Spell::EffectDummy: Spell %u Penance need set correct heal/damage spell", m_spellInfo->Id); + return; + } + if (m_caster->IsFriendlyTo(unitTarget)) + m_caster->CastSpell(unitTarget, heal, true, 0); + else + m_caster->CastSpell(unitTarget, hurt, true, 0); + return; + } switch(m_spellInfo->Id ) { case 28598: // Touch of Weakness triggered spell From 87a0960cdbbdff620ba843ba47dd545360f73273 Mon Sep 17 00:00:00 2001 From: DiSlord Date: Sat, 10 Jan 2009 00:59:17 +0300 Subject: [PATCH 126/145] [7060] Implement priest dummy proc 47555 and ranks Disable proc from SPELL_AURA_PERIODIC_DAMAGE (need prevent drop charge in some cases) Add data for shaman 51556 and ranks (but need dummy for work) Signed-off-by: DiSlord --- sql/mangos.sql | 9 +++++- .../7060_01_mangos_spell_proc_event.sql | 31 +++++++++++++++++++ sql/updates/Makefile.am | 2 ++ src/game/Unit.cpp | 15 +++++++-- src/game/Unit.h | 2 +- src/shared/revision_nr.h | 2 +- 6 files changed, 55 insertions(+), 6 deletions(-) create mode 100644 sql/updates/7060_01_mangos_spell_proc_event.sql diff --git a/sql/mangos.sql b/sql/mangos.sql index 90791f536..df027d44d 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_7056_01_mangos_spell_proc_event` bit(1) default NULL + `required_7060_01_mangos_spell_proc_event` bit(1) default NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Used DB version notes'; -- @@ -16433,6 +16433,7 @@ INSERT INTO `spell_proc_event` VALUES (32392, 0x00000000, 5, 0x00000402, 0x00000011, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (32393, 0x00000000, 5, 0x00000402, 0x00000011, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (32394, 0x00000000, 5, 0x00000402, 0x00000011, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(32409, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (32587, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000040, 0.000000, 0.000000, 0), (32593, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), (32594, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 3), @@ -16669,6 +16670,9 @@ INSERT INTO `spell_proc_event` VALUES (47549, 0x00000000, 6, 0x00000000, 0x00020000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (47551, 0x00000000, 6, 0x00000000, 0x00020000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (47552, 0x00000000, 6, 0x00000000, 0x00020000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47555, 0x00000000, 6, 0x00001800, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47556, 0x00000000, 6, 0x00001800, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47557, 0x00000000, 6, 0x00001800, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (47572, 0x00000000, 6, 0x00010000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (47580, 0x00000000, 6, 0x00000000, 0x00000000, 0x00000040, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (47581, 0x00000000, 6, 0x00000000, 0x00000000, 0x00000040, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), @@ -16726,6 +16730,9 @@ INSERT INTO `spell_proc_event` VALUES (51359, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 10), (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), +(51556, 0x00000000, 11, 0x000000C0, 0x00000000, 0x00000010, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(51557, 0x00000000, 11, 0x000000C0, 0x00000000, 0x00000010, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(51558, 0x00000000, 11, 0x000000C0, 0x00000000, 0x00000010, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), (51562, 0x00000000, 11, 0x00000100, 0x00000000, 0x00000010, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (51563, 0x00000000, 11, 0x00000100, 0x00000000, 0x00000010, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (51564, 0x00000000, 11, 0x00000100, 0x00000000, 0x00000010, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), diff --git a/sql/updates/7060_01_mangos_spell_proc_event.sql b/sql/updates/7060_01_mangos_spell_proc_event.sql new file mode 100644 index 000000000..dbe87be7f --- /dev/null +++ b/sql/updates/7060_01_mangos_spell_proc_event.sql @@ -0,0 +1,31 @@ +ALTER TABLE db_version CHANGE COLUMN required_7056_01_mangos_spell_proc_event required_7060_01_mangos_spell_proc_event bit; + +-- (51556) Ancestral Awakening (Rank 1) +DELETE FROM `spell_proc_event` WHERE `entry` IN (51556); +INSERT INTO `spell_proc_event` VALUES (51556, 0x00, 11, 0x000000C0, 0x00000000, 0x00000010, 0x00000000, 0x00000002, 0.000000, 0.000000, 0); + +-- (51557) Ancestral Awakening (Rank 2) +DELETE FROM `spell_proc_event` WHERE `entry` IN (51557); +INSERT INTO `spell_proc_event` VALUES (51557, 0x00, 11, 0x000000C0, 0x00000000, 0x00000010, 0x00000000, 0x00000002, 0.000000, 0.000000, 0); + +-- (51558) Ancestral Awakening (Rank 3) +DELETE FROM `spell_proc_event` WHERE `entry` IN (51558); +INSERT INTO `spell_proc_event` VALUES (51558, 0x00, 11, 0x000000C0, 0x00000000, 0x00000010, 0x00000000, 0x00000002, 0.000000, 0.000000, 0); + +-- (47555) Serendipity (Rank 1) +DELETE FROM `spell_proc_event` WHERE `entry` IN (47555); +INSERT INTO `spell_proc_event` VALUES (47555, 0x00, 6, 0x00001800, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (47556) Serendipity (Rank 2) +DELETE FROM `spell_proc_event` WHERE `entry` IN (47556); +INSERT INTO `spell_proc_event` VALUES (47556, 0x00, 6, 0x00001800, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (47557) Serendipity (Rank 3) +DELETE FROM `spell_proc_event` WHERE `entry` IN (47557); +INSERT INTO `spell_proc_event` VALUES (47557, 0x00, 6, 0x00001800, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (32409) Shadow Word: Death () +DELETE FROM `spell_proc_event` WHERE `entry` IN (32409); +INSERT INTO `spell_proc_event` VALUES (32409, 0x00, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + + diff --git a/sql/updates/Makefile.am b/sql/updates/Makefile.am index 84b5ad302..d3ef16ecb 100644 --- a/sql/updates/Makefile.am +++ b/sql/updates/Makefile.am @@ -126,6 +126,7 @@ pkgdata_DATA = \ 7056_01_mangos_spell_proc_event.sql \ 7059_01_characters_character_spell.sql \ 7059_02_characters_pet_spell.sql \ + 7060_01_mangos_spell_proc_event.sql \ README ## Additional files to include when running 'make dist' @@ -232,4 +233,5 @@ EXTRA_DIST = \ 7056_01_mangos_spell_proc_event.sql \ 7059_01_characters_character_spell.sql \ 7059_02_characters_pet_spell.sql \ + 7060_01_mangos_spell_proc_event.sql \ README diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index ee53ef53d..f2798d29d 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -6181,7 +6181,7 @@ bool Unit::HandleProcTriggerSpell(Unit *pVictim, uint32 damage, Aura* triggeredB return true; } -bool Unit::HandleOverrideClassScriptAuraProc(Unit *pVictim, Aura *triggeredByAura, SpellEntry const *procSpell, uint32 cooldown) +bool Unit::HandleOverrideClassScriptAuraProc(Unit *pVictim, uint32 damage, Aura *triggeredByAura, SpellEntry const *procSpell, uint32 cooldown) { int32 scriptId = triggeredByAura->GetModifier()->m_miscvalue; @@ -6248,6 +6248,16 @@ bool Unit::HandleOverrideClassScriptAuraProc(Unit *pVictim, Aura *triggeredByAur case 5497: // Improved Mana Gems (Serpent-Coil Braid) triggered_spell_id = 37445; // Mana Surge break; + 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, 0, 0, true, 0, triggeredByAura); + return true; + } } // not processed @@ -9745,7 +9755,6 @@ bool InitTriggerAuraData() isTriggerAura[i]=false; isNonTriggerAura[i] = false; } - isTriggerAura[SPELL_AURA_PERIODIC_DAMAGE] = true; isTriggerAura[SPELL_AURA_DUMMY] = true; isTriggerAura[SPELL_AURA_MOD_CONFUSE] = true; isTriggerAura[SPELL_AURA_MOD_THREAT] = true; @@ -9980,7 +9989,7 @@ void Unit::ProcDamageAndSpellFor( bool isVictim, Unit * pTarget, uint32 procFlag case SPELL_AURA_OVERRIDE_CLASS_SCRIPTS: { sLog.outDebug("ProcDamageAndSpell: casting spell id %u (triggered by %s aura of spell %u)", spellInfo->Id,(isVictim?"a victim's":"an attacker's"), triggeredByAura->GetId()); - if (!HandleOverrideClassScriptAuraProc(pTarget, triggeredByAura, procSpell, cooldown)) + if (!HandleOverrideClassScriptAuraProc(pTarget, damage, triggeredByAura, procSpell, cooldown)) continue; break; } diff --git a/src/game/Unit.h b/src/game/Unit.h index cc59b46d5..376e59cf8 100644 --- a/src/game/Unit.h +++ b/src/game/Unit.h @@ -1445,7 +1445,7 @@ class MANGOS_DLL_SPEC Unit : public WorldObject bool HandleDummyAuraProc( Unit *pVictim, uint32 damage, Aura* triggredByAura, SpellEntry const *procSpell, uint32 procFlag, uint32 procEx, uint32 cooldown); bool HandleHasteAuraProc( Unit *pVictim, uint32 damage, Aura* triggredByAura, SpellEntry const *procSpell, uint32 procFlag, uint32 procEx, uint32 cooldown); bool HandleProcTriggerSpell(Unit *pVictim, uint32 damage, Aura* triggredByAura, SpellEntry const *procSpell, uint32 procFlag, uint32 procEx, uint32 cooldown); - bool HandleOverrideClassScriptAuraProc(Unit *pVictim, Aura* triggredByAura, SpellEntry const *procSpell, uint32 cooldown); + bool HandleOverrideClassScriptAuraProc(Unit *pVictim, uint32 damage, Aura* triggredByAura, SpellEntry const *procSpell, uint32 cooldown); bool HandleMeandingAuraProc(Aura* triggeredByAura); uint32 m_state; // Even derived shouldn't modify diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 038ed3ff5..fc4d04942 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 "7059" + #define REVISION_NR "7060" #endif // __REVISION_NR_H__ From e266f04edacd7728c5b3fe06972edb854874b88d Mon Sep 17 00:00:00 2001 From: DiSlord Date: Sat, 10 Jan 2009 01:21:23 +0300 Subject: [PATCH 127/145] [7061] Use correct flag for trigger from 47540 and ranks (use healing part) in all related triggers Signed-off-by: DiSlord --- sql/mangos.sql | 22 +++++----- .../7061_01_mangos_spell_proc_event.sql | 41 +++++++++++++++++++ sql/updates/Makefile.am | 2 + src/shared/revision_nr.h | 2 +- 4 files changed, 55 insertions(+), 12 deletions(-) create mode 100644 sql/updates/7061_01_mangos_spell_proc_event.sql diff --git a/sql/mangos.sql b/sql/mangos.sql index df027d44d..9b2ecd547 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_7060_01_mangos_spell_proc_event` bit(1) default NULL + `required_7061_01_mangos_spell_proc_event` bit(1) default NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Used DB version notes'; -- @@ -16184,7 +16184,7 @@ INSERT INTO `spell_proc_event` VALUES (14322, 0x00000000, 9, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (14531, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), (14774, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), -(14892, 0x00000000, 6, 0x10001E00, 0x00000004, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(14892, 0x00000000, 6, 0x10001E00, 0x00010004, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), (15088, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), (15128, 0x00000004, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (15268, 0x00000020, 6, 0x06080000, 0x00000002, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), @@ -16197,8 +16197,8 @@ INSERT INTO `spell_proc_event` VALUES (15337, 0x00000000, 6, 0x00002000, 0x00000002, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), (15338, 0x00000000, 6, 0x00002000, 0x00000002, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), (15346, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 6.000000, 0.000000, 0), -(15362, 0x00000000, 6, 0x10001E00, 0x00000004, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), -(15363, 0x00000000, 6, 0x10001E00, 0x00000004, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(15362, 0x00000000, 6, 0x10001E00, 0x00010004, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(15363, 0x00000000, 6, 0x10001E00, 0x00010004, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), (15600, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 1.000000, 0.000000, 0), (16164, 0x00000000, 11, 0x90100003, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), (16176, 0x00000000, 11, 0x000001C0, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), @@ -16660,13 +16660,13 @@ INSERT INTO `spell_proc_event` VALUES (47509, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), (47511, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), (47515, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), -(47516, 0x00000000, 6, 0x00001800, 0x00008000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), -(47517, 0x00000000, 6, 0x00001800, 0x00008000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), -(47535, 0x00000000, 6, 0x00001800, 0x00008000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), -(47536, 0x00000000, 6, 0x00001800, 0x00008000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), -(47537, 0x00000000, 6, 0x00001800, 0x00008000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), -(47538, 0x00000000, 6, 0x00001800, 0x00008000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), -(47539, 0x00000000, 6, 0x00001800, 0x00008000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47516, 0x00000000, 6, 0x00001800, 0x00010000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47517, 0x00000000, 6, 0x00001800, 0x00010000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), +(47535, 0x00000000, 6, 0x00001800, 0x00800000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(47536, 0x00000000, 6, 0x00001800, 0x00800000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(47537, 0x00000000, 6, 0x00001800, 0x00800000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(47538, 0x00000000, 6, 0x00001800, 0x00800000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), +(47539, 0x00000000, 6, 0x00001800, 0x00800000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), (47549, 0x00000000, 6, 0x00000000, 0x00020000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (47551, 0x00000000, 6, 0x00000000, 0x00020000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (47552, 0x00000000, 6, 0x00000000, 0x00020000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), diff --git a/sql/updates/7061_01_mangos_spell_proc_event.sql b/sql/updates/7061_01_mangos_spell_proc_event.sql new file mode 100644 index 000000000..a4f85f40f --- /dev/null +++ b/sql/updates/7061_01_mangos_spell_proc_event.sql @@ -0,0 +1,41 @@ +ALTER TABLE db_version CHANGE COLUMN required_7060_01_mangos_spell_proc_event required_7061_01_mangos_spell_proc_event bit; + +-- (47516) Grace (Rank 1) +DELETE FROM `spell_proc_event` WHERE `entry` IN (47516); +INSERT INTO `spell_proc_event` VALUES (47516, 0x00, 6, 0x00001800, 0x00010000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (47517) Grace (Rank 2) +DELETE FROM `spell_proc_event` WHERE `entry` IN (47517); +INSERT INTO `spell_proc_event` VALUES (47517, 0x00, 6, 0x00001800, 0x00010000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0); + +-- (14892) Inspiration (Rank 1) +DELETE FROM `spell_proc_event` WHERE `entry` IN (14892); +INSERT INTO `spell_proc_event` VALUES (14892, 0x00, 6, 0x10001E00, 0x00010004, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0); + +-- (15362) Inspiration (Rank 2) +DELETE FROM `spell_proc_event` WHERE `entry` IN (15362); +INSERT INTO `spell_proc_event` VALUES (15362, 0x00, 6, 0x10001E00, 0x00010004, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0); + +-- (15363) Inspiration (Rank 3) +DELETE FROM `spell_proc_event` WHERE `entry` IN (15363); +INSERT INTO `spell_proc_event` VALUES (15363, 0x00, 6, 0x10001E00, 0x00010004, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0); + +-- (47535) Rapture (Rank 1) +DELETE FROM `spell_proc_event` WHERE `entry` IN (47535); +INSERT INTO `spell_proc_event` VALUES (47535, 0x00, 6, 0x00001800, 0x00800000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0); + +-- (47536) Rapture (Rank 2) +DELETE FROM `spell_proc_event` WHERE `entry` IN (47536); +INSERT INTO `spell_proc_event` VALUES (47536, 0x00, 6, 0x00001800, 0x00800000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0); + +-- (47537) Rapture (Rank 3) +DELETE FROM `spell_proc_event` WHERE `entry` IN (47537); +INSERT INTO `spell_proc_event` VALUES (47537, 0x00, 6, 0x00001800, 0x00800000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0); + +-- (47538) Rapture (Rank 4) +DELETE FROM `spell_proc_event` WHERE `entry` IN (47538); +INSERT INTO `spell_proc_event` VALUES (47538, 0x00, 6, 0x00001800, 0x00800000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0); + +-- (47539) Rapture (Rank 5) +DELETE FROM `spell_proc_event` WHERE `entry` IN (47539); +INSERT INTO `spell_proc_event` VALUES (47539, 0x00, 6, 0x00001800, 0x00800000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0); diff --git a/sql/updates/Makefile.am b/sql/updates/Makefile.am index d3ef16ecb..614499b91 100644 --- a/sql/updates/Makefile.am +++ b/sql/updates/Makefile.am @@ -127,6 +127,7 @@ pkgdata_DATA = \ 7059_01_characters_character_spell.sql \ 7059_02_characters_pet_spell.sql \ 7060_01_mangos_spell_proc_event.sql \ + 7061_01_mangos_spell_proc_event.sql \ README ## Additional files to include when running 'make dist' @@ -234,4 +235,5 @@ EXTRA_DIST = \ 7059_01_characters_character_spell.sql \ 7059_02_characters_pet_spell.sql \ 7060_01_mangos_spell_proc_event.sql \ + 7061_01_mangos_spell_proc_event.sql \ README diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index fc4d04942..66122ee5b 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 "7060" + #define REVISION_NR "7061" #endif // __REVISION_NR_H__ From 4051db9767bc1683b5d1df9ca6e5c919a15998d1 Mon Sep 17 00:00:00 2001 From: CHEG Date: Sat, 10 Jan 2009 03:09:36 +0100 Subject: [PATCH 128/145] [7062] Fixed arena team inviting. Signed-off-by: ApoC --- src/game/ArenaTeamHandler.cpp | 2 +- src/shared/revision_nr.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/game/ArenaTeamHandler.cpp b/src/game/ArenaTeamHandler.cpp index 5a3e3c16d..f2a71f8c1 100644 --- a/src/game/ArenaTeamHandler.cpp +++ b/src/game/ArenaTeamHandler.cpp @@ -171,7 +171,7 @@ void WorldSession::HandleArenaTeamInviteAcceptOpcode(WorldPacket & /*recv_data*/ if(!at) return; - if(_player->GetArenaTeamId(at->GetType())) + if(_player->GetArenaTeamId(at->GetSlot())) { SendArenaTeamCommandResult(ERR_ARENA_TEAM_CREATE_S,"","",ERR_ALREADY_IN_ARENA_TEAM); // already in arena team that size return; diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 66122ee5b..056767fe6 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 "7061" + #define REVISION_NR "7062" #endif // __REVISION_NR_H__ From 48bebc405613176cbc12f6a988e85f4347feec0a Mon Sep 17 00:00:00 2001 From: DiSlord Date: Sat, 10 Jan 2009 19:07:24 +0300 Subject: [PATCH 129/145] [7063] Absorb auras fixes (add custom handle for some auras) Fix Shaman 51474 and ranks Fix Rogue 31130 and ranks Fix Druid 33851 and ranks Fix DK 49145 and ranks, 49157 (TODO: need use only on transform), 50462, 53766, 51052, Fix 41475 - boss cast Fix 39228, 60218 (item 27770/37220 spells) Hidden cooldown for 53601. Signed-off-by: DiSlord --- sql/mangos.sql | 5 +- .../7063_01_mangos_spell_proc_event.sql | 13 + sql/updates/Makefile.am | 2 + src/game/SpellAuras.cpp | 9 +- src/game/Unit.cpp | 278 ++++++++++++++---- src/shared/revision_nr.h | 2 +- 6 files changed, 245 insertions(+), 64 deletions(-) create mode 100644 sql/updates/7063_01_mangos_spell_proc_event.sql diff --git a/sql/mangos.sql b/sql/mangos.sql index 9b2ecd547..fac322049 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_7061_01_mangos_spell_proc_event` bit(1) default NULL + `required_7063_01_mangos_spell_proc_event` bit(1) default NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Used DB version notes'; -- @@ -16730,6 +16730,8 @@ INSERT INTO `spell_proc_event` VALUES (51359, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 10), (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), +(51478, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0), (51556, 0x00000000, 11, 0x000000C0, 0x00000000, 0x00000010, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), (51557, 0x00000000, 11, 0x000000C0, 0x00000000, 0x00000010, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), (51558, 0x00000000, 11, 0x000000C0, 0x00000000, 0x00000010, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), @@ -16804,6 +16806,7 @@ INSERT INTO `spell_proc_event` VALUES (53553, 0x00000000, 10, 0x00001000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (53569, 0x00000000, 10, 0x00200000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), (53576, 0x00000000, 10, 0x00200000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), +(53601, 0x00000000, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 6), (53671, 0x00000000, 10, 0x00800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (53673, 0x00000000, 10, 0x00800000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 0), (54149, 0x00000000, 10, 0x00200000, 0x00000000, 0x00000000, 0x00000000, 0x00000002, 0.000000, 0.000000, 0), diff --git a/sql/updates/7063_01_mangos_spell_proc_event.sql b/sql/updates/7063_01_mangos_spell_proc_event.sql new file mode 100644 index 000000000..d3bbbe754 --- /dev/null +++ b/sql/updates/7063_01_mangos_spell_proc_event.sql @@ -0,0 +1,13 @@ +ALTER TABLE db_version CHANGE COLUMN required_7061_01_mangos_spell_proc_event required_7063_01_mangos_spell_proc_event bit; + +-- (51474) Astral Shift (Rank 1) +DELETE FROM `spell_proc_event` WHERE `entry` IN (51474); +INSERT INTO `spell_proc_event` VALUES (51474, 0x00, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0); + +-- (51478) Astral Shift (Rank 2) +DELETE FROM `spell_proc_event` WHERE `entry` IN (51478); +INSERT INTO `spell_proc_event` VALUES (51478, 0x00, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0.000000, 0.000000, 0); + +-- (53601) Sacred Shield (Rank 1) +DELETE FROM `spell_proc_event` WHERE `entry` IN (53601); +INSERT INTO `spell_proc_event` VALUES (53601, 0x00, 0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0.000000, 0.000000, 6); \ No newline at end of file diff --git a/sql/updates/Makefile.am b/sql/updates/Makefile.am index 614499b91..696dc7718 100644 --- a/sql/updates/Makefile.am +++ b/sql/updates/Makefile.am @@ -128,6 +128,7 @@ pkgdata_DATA = \ 7059_02_characters_pet_spell.sql \ 7060_01_mangos_spell_proc_event.sql \ 7061_01_mangos_spell_proc_event.sql \ + 7063_01_mangos_spell_proc_event.sql \ README ## Additional files to include when running 'make dist' @@ -236,4 +237,5 @@ EXTRA_DIST = \ 7059_02_characters_pet_spell.sql \ 7060_01_mangos_spell_proc_event.sql \ 7061_01_mangos_spell_proc_event.sql \ + 7063_01_mangos_spell_proc_event.sql \ README diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp index 46154ce57..28b636d5f 100644 --- a/src/game/SpellAuras.cpp +++ b/src/game/SpellAuras.cpp @@ -6582,8 +6582,13 @@ void Aura::PeriodicDummyTick() case SPELLFAMILY_SHAMAN: { // Astral Shift -// if (spell->Id == 52179) -// return; + if (spell->Id == 52179) + { + // Periodic need for remove visual on stun/fear/silence lost + if (!(m_target->GetUInt32Value(UNIT_FIELD_FLAGS)&(UNIT_FLAG_STUNNED|UNIT_FLAG_FLEEING|UNIT_FLAG_SILENCED))) + m_target->RemoveAurasDueToSpell(52179); + return; + } break; } case SPELLFAMILY_DEATHKNIGHT: diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index f2798d29d..1ceb35bff 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -1621,87 +1621,235 @@ void Unit::CalcAbsorbResist(Unit *pVictim,SpellSchoolMask schoolMask, DamageEffe int32 RemainingDamage = damage - *resist; + // Get unit state (need for some absorb check) + uint32 unitflag = pVictim->GetUInt32Value(UNIT_FIELD_FLAGS); + // Need remove expired auras after + bool existExpired = false; // absorb without mana cost - int32 reflectDamage = 0; - Aura* reflectAura = NULL; AuraList const& vSchoolAbsorb = pVictim->GetAurasByType(SPELL_AURA_SCHOOL_ABSORB); - for(AuraList::const_iterator i = vSchoolAbsorb.begin(), next; i != vSchoolAbsorb.end() && RemainingDamage > 0; i = next) + for(AuraList::const_iterator i = vSchoolAbsorb.begin(); i != vSchoolAbsorb.end() && RemainingDamage > 0; ++i) { - next = i; ++next; - - if (((*i)->GetModifier()->m_miscvalue & schoolMask)==0) + Modifier* mod = (*i)->GetModifier(); + if (!(mod->m_miscvalue & schoolMask)) continue; - // Cheat Death - if((*i)->GetSpellProto()->SpellFamilyName==SPELLFAMILY_ROGUE && (*i)->GetSpellProto()->SpellIconID == 2109) - { - if (((Player*)pVictim)->HasSpellCooldown(31231)) - continue; - if (pVictim->GetHealth() <= RemainingDamage) - { - int32 chance = (*i)->GetModifier()->m_amount; - if (roll_chance_i(chance)) - { - pVictim->CastSpell(pVictim,31231,true); - ((Player*)pVictim)->AddSpellCooldown(31231,0,time(NULL)+60); + SpellEntry const* spellProto = (*i)->GetSpellProto(); - // with health > 10% lost health until health==10%, in other case no losses - uint32 health10 = pVictim->GetMaxHealth()/10; - RemainingDamage = pVictim->GetHealth() > health10 ? pVictim->GetHealth() - health10 : 0; - } - } + // Max Amount can be absorbed by this aura + int32 currentAbsorb = mod->m_amount; + + // Found empty aura (umpossible but..) + if (currentAbsorb <=0) + { + existExpired = true; continue; } - - int32 currentAbsorb; - - // Reflective Shield - if ((pVictim != this) && (*i)->GetSpellProto()->SpellFamilyName == SPELLFAMILY_PRIEST && (*i)->GetSpellProto()->SpellFamilyFlags == 0x1) + // Handle custom absorb auras + // TODO: try find better way + switch(spellProto->SpellFamilyName) { - if(Unit* caster = (*i)->GetCaster()) + case SPELLFAMILY_GENERIC: { - AuraList const& vOverRideCS = caster->GetAurasByType(SPELL_AURA_DUMMY); - for(AuraList::const_iterator k = vOverRideCS.begin(); k != vOverRideCS.end(); ++k) + // Astral Shift + if (spellProto->SpellIconID == 3066) { - switch((*k)->GetModifier()->m_miscvalue) + //reduces all damage taken while stun, fear or silence + if (unitflag & (UNIT_FLAG_STUNNED|UNIT_FLAG_FLEEING|UNIT_FLAG_SILENCED)) + RemainingDamage -= RemainingDamage * currentAbsorb / 100; + continue; + } + // Nerves of Steel + if (spellProto->SpellIconID == 2115) + { + // while affected by Stun and Fear + if (unitflag&(UNIT_FLAG_STUNNED|UNIT_FLAG_FLEEING)) + RemainingDamage -= RemainingDamage * currentAbsorb / 100; + continue; + } + // Spell Deflection + if (spellProto->SpellIconID == 3006) + { + // You have a chance equal to your Parry chance + if (damagetype == DIRECT_DAMAGE && // Only for direct damage + roll_chance_f(pVictim->GetUnitParryChance())) // Roll chance + RemainingDamage -= RemainingDamage * currentAbsorb / 100; + continue; + } + // Reflective Shield (Lady Malande boss) + if (spellProto->Id == 41475) + { + int32 reflectDamage = 0; + if(RemainingDamage < currentAbsorb) + reflectDamage = RemainingDamage / 2; + else + reflectDamage = currentAbsorb / 2; + pVictim->CastCustomSpell(this, 33619, &reflectDamage, NULL, NULL, true, NULL, *i); + break; + } + if (spellProto->Id == 39228 || // Argussian Compass + spellProto->Id == 60218) // Essence of Gossamer + { + // Max absorb stored in 1 dummy effect + if (spellProto->EffectBasePoints[1] < currentAbsorb) + currentAbsorb = spellProto->EffectBasePoints[1]; + break; + } + break; + } + case SPELLFAMILY_DRUID: + { + // Primal Tenacity + if (spellProto->SpellIconID == 2253) + { + //reduces all damage taken while Stunned + if (unitflag & UNIT_FLAG_STUNNED) + RemainingDamage -= RemainingDamage * currentAbsorb / 100; + continue; + } + break; + } + case SPELLFAMILY_ROGUE: + { + // Cheat Death + if(spellProto->SpellIconID == 2109) + { + if (pVictim->GetTypeId()==TYPEID_PLAYER && // Only players + pVictim->GetHealth() <= RemainingDamage && // Only if damage kill + !((Player*)pVictim)->HasSpellCooldown(31231) && // Only if no cooldown + roll_chance_i(currentAbsorb)) // Only if roll { - case 5065: // Rank 1 - case 5064: // Rank 2 - case 5063: // Rank 3 - { - if(RemainingDamage >= (*i)->GetModifier()->m_amount) - reflectDamage = (*i)->GetModifier()->m_amount * (*k)->GetModifier()->m_amount/100; - else - reflectDamage = (*k)->GetModifier()->m_amount * RemainingDamage/100; - reflectAura = *i; - - } break; - default: break; + pVictim->CastSpell(pVictim,31231,true); + ((Player*)pVictim)->AddSpellCooldown(31231,0,time(NULL)+60); + // with health > 10% lost health until health==10%, in other case no losses + uint32 health10 = pVictim->GetMaxHealth()/10; + RemainingDamage = pVictim->GetHealth() > health10 ? pVictim->GetHealth() - health10 : 0; } - - if(reflectDamage) - break; + continue; } + break; } + case SPELLFAMILY_PRIEST: + { + // Reflective Shield + if (spellProto->SpellFamilyFlags == 0x1) + { + if (pVictim == this) + break; + Unit* caster = (*i)->GetCaster(); + if (!caster) + break; + int32 reflectDamage = 0; + AuraList const& vOverRideCS = caster->GetAurasByType(SPELL_AURA_DUMMY); + for(AuraList::const_iterator k = vOverRideCS.begin(); k != vOverRideCS.end(); ++k) + { + switch((*k)->GetModifier()->m_miscvalue) + { + case 5065: // Rank 1 + case 5064: // Rank 2 + case 5063: // Rank 3 + { + if(RemainingDamage >= currentAbsorb) + reflectDamage = (*k)->GetModifier()->m_amount * currentAbsorb/100; + else + reflectDamage = (*k)->GetModifier()->m_amount * RemainingDamage/100; + } break; + default: break; + } + if (reflectDamage) + { + pVictim->CastCustomSpell(this, 33619, &reflectDamage, NULL, NULL, true, NULL, *i); + break; + } + } + break; + } + break; + } + case SPELLFAMILY_SHAMAN: + { + // Astral Shift + if (spellProto->SpellIconID == 3066) + { + //reduces all damage taken while stun, fear or silence + if (unitflag & (UNIT_FLAG_STUNNED|UNIT_FLAG_FLEEING|UNIT_FLAG_SILENCED)) + RemainingDamage -= RemainingDamage * currentAbsorb / 100; + continue; + } + break; + } + case SPELLFAMILY_DEATHKNIGHT: + { + // Shadow of Death + if (spellProto->SpellIconID == 1958) + { + // TODO: absorb only while transform + continue; + } + // Anti-Magic Shell (on self) + if (spellProto->Id == 48707) + { + // damage absorbed by Anti-Magic Shell energizes the DK with additional runic power. + // This, if I'm not mistaken, shows that we get back ~2% of the absorbed damage as runic power. + int32 absorbed = RemainingDamage * currentAbsorb / 100; + int32 regen = absorbed * 2 / 10; + pVictim->CastCustomSpell(pVictim, 49088, ®en, 0, 0, true, 0, *i); + RemainingDamage -= absorbed; + continue; + } + // Anti-Magic Shell (on single party/raid member) + if (spellProto->Id == 50462) + { + RemainingDamage -= RemainingDamage * currentAbsorb / 100; + continue; + } + // Anti-Magic Zone + if (spellProto->Id == 50461) + { + Unit* caster = (*i)->GetCaster(); + if (!caster) + continue; + int32 absorbed = RemainingDamage * currentAbsorb / 100; + int32 canabsorb = caster->GetHealth(); + if (canabsorb < absorbed) + absorbed = canabsorb; + DealDamage(caster, absorbed, NULL, damagetype, schoolMask, 0, false); + RemainingDamage -= absorbed; + continue; + } + break; + } + default: + break; } - if (RemainingDamage >= (*i)->GetModifier()->m_amount) - { - currentAbsorb = (*i)->GetModifier()->m_amount; - pVictim->RemoveAurasDueToSpell((*i)->GetId()); - next = vSchoolAbsorb.begin(); - } - else - { + // currentAbsorb - damage can be absorbed by shield + // If need absorb less damage + if (RemainingDamage < currentAbsorb) currentAbsorb = RemainingDamage; - (*i)->GetModifier()->m_amount -= RemainingDamage; - } RemainingDamage -= currentAbsorb; + + // Reduce shield amount + mod->m_amount-=currentAbsorb; + // Need remove it later + if (mod->m_amount<=0) + existExpired = true; + } + + // Remove all expired absorb auras + if (existExpired) + { + for(AuraList::const_iterator i = vSchoolAbsorb.begin(), next; i != vSchoolAbsorb.end();) + { + if ((*i)->GetModifier()->m_amount<=0) + { + pVictim->RemoveAurasDueToSpell((*i)->GetId()); + i = vSchoolAbsorb.begin(); + } + else + ++i; + } } - // do not cast spells while looping auras; auras can get invalid otherwise - if (reflectDamage) - pVictim->CastCustomSpell(this, 33619, &reflectDamage, NULL, NULL, true, NULL, reflectAura); // absorb by mana cost AuraList const& vManaShield = pVictim->GetAurasByType(SPELL_AURA_MANA_SHIELD); @@ -6147,6 +6295,16 @@ bool Unit::HandleProcTriggerSpell(Unit *pVictim, uint32 damage, Aura* triggeredB } break; } + // Astral Shift + case 52179: + { + if(!procSpell) + return false; + // Need stun, fear or silence mechanic + if (!(GetAllSpellMechanicMask(procSpell) & ((1< Date: Sat, 10 Jan 2009 21:23:18 +0300 Subject: [PATCH 130/145] [7064] Fix warrior 46968 and ranks damage from AP Signed-off-by: DiSlord --- src/game/SpellEffects.cpp | 8 ++++++++ src/shared/revision_nr.h | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp index 0eae48c20..79c5d6250 100644 --- a/src/game/SpellEffects.cpp +++ b/src/game/SpellEffects.cpp @@ -384,6 +384,14 @@ void Spell::EffectSchoolDMG(uint32 effect_idx) // Heroic Throw ${$m1+$AP*.50} else if(m_spellInfo->SpellFamilyFlags & 0x0000000100000000LL) damage+= uint32(m_caster->GetTotalAttackPowerValue(BASE_ATTACK) * 0.5f); + // Shockwave ${$m3/100*$AP} + else if(m_spellInfo->SpellFamilyFlags & 0x0000800000000000LL) + { + int32 pct = m_caster->CalculateSpellDamage(m_spellInfo, 2, m_spellInfo->EffectBasePoints[2], unitTarget); + if (pct > 0) + damage+= int32(m_caster->GetTotalAttackPowerValue(BASE_ATTACK) * pct / 100); + break; + } break; } case SPELLFAMILY_WARLOCK: diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 3b84da0a4..b1d43f5e3 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 "7063" + #define REVISION_NR "7064" #endif // __REVISION_NR_H__ From 439db0eae36e266a5d7a5be703aa46383a1e00b1 Mon Sep 17 00:00:00 2001 From: VladimirMangos Date: Sat, 10 Jan 2009 20:57:46 +0300 Subject: [PATCH 131/145] [7065] Fix herbs consum at milling. Use 5 items from stack instead all stack. --- src/game/LootHandler.cpp | 16 ++++++++++++---- src/shared/revision_nr.h | 2 +- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/game/LootHandler.cpp b/src/game/LootHandler.cpp index 1e3b9c6d0..57d1b6910 100644 --- a/src/game/LootHandler.cpp +++ b/src/game/LootHandler.cpp @@ -372,14 +372,22 @@ void WorldSession::DoLootRelease( uint64 lguid ) Item *pItem = player->GetItemByGuid(lguid ); if(!pItem) return; - if( (pItem->GetProto()->BagFamily & BAG_FAMILY_MASK_MINING_SUPP) && - pItem->GetProto()->Class == ITEM_CLASS_TRADE_GOODS && - pItem->GetCount() >= 5) + + ItemPrototype const* proto = pItem->GetProto(); + + // destroy only 5 items from stack in case prospecting and milling + if( (proto->BagFamily & (BAG_FAMILY_MASK_MINING_SUPP|BAG_FAMILY_MASK_HERBS)) && + proto->Class == ITEM_CLASS_TRADE_GOODS) { pItem->m_lootGenerated = false; pItem->loot.clear(); - uint32 count = 5; + uint32 count = pItem->GetCount(); + + // >=5 checked in spell code, but will work for cheating cases also with removing from another stacks. + if(count > 5) + count = 5; + player->DestroyItemCount(pItem, count, true); } else diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index b1d43f5e3..ef8e329c7 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 "7064" + #define REVISION_NR "7065" #endif // __REVISION_NR_H__ From 6165da2b3a4c979ac2ac11c28bdaa91f5b5d7e26 Mon Sep 17 00:00:00 2001 From: Mordred Date: Sat, 10 Jan 2009 11:49:31 +0100 Subject: [PATCH 132/145] [7066] Fix crash in console commands in HasLowerSecurityAccount() Signed-off-by: VladimirMangos --- src/game/Chat.cpp | 8 ++++---- src/shared/revision_nr.h | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/game/Chat.cpp b/src/game/Chat.cpp index b78aae2d6..449267f87 100644 --- a/src/game/Chat.cpp +++ b/src/game/Chat.cpp @@ -651,14 +651,14 @@ bool ChatHandler::HasLowerSecurityAccount(WorldSession* target, uint32 target_ac { uint32 target_sec; - // ignore only for non-players for non strong checks (when allow apply command at least to same sec level) - if (m_session->GetSecurity() > SEC_PLAYER && !strong && !sWorld.getConfig(CONFIG_GM_LOWER_SECURITY)) - return false; - // allow everything from console and RA console if (!m_session) return false; + // ignore only for non-players for non strong checks (when allow apply command at least to same sec level) + if (m_session->GetSecurity() > SEC_PLAYER && !strong && !sWorld.getConfig(CONFIG_GM_LOWER_SECURITY)) + return false; + if (target) target_sec = target->GetSecurity(); else if (target_account) diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index ef8e329c7..a1e4566a2 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 "7065" + #define REVISION_NR "7066" #endif // __REVISION_NR_H__ From f956a3bf10313042ee6b0f99722ecb55cfb05bad Mon Sep 17 00:00:00 2001 From: VladimirMangos Date: Sun, 11 Jan 2009 01:59:04 +0300 Subject: [PATCH 133/145] [7067] Move inactive form/stance passive spells from `playercreateinfo_spell` to `spell_learn_spell` with active field. This let have in `playercreateinfo_spell` only expected at character creating spells for simplify updating. --- sql/characters.sql | 2 +- sql/mangos.sql | 5374 ++++++++--------- .../7067_01_mangos_playercreateinfo_spell.sql | 6 + .../7067_02_mangos_spell_learn_spell.sql | 33 + .../7067_03_characters_character_spell.sql | 3 + sql/updates/Makefile.am | 6 + src/game/ObjectMgr.cpp | 6 +- src/game/Player.cpp | 22 +- src/game/Player.h | 6 +- src/game/SpellMgr.cpp | 5 +- src/game/SpellMgr.h | 1 + src/shared/revision_nr.h | 2 +- 12 files changed, 2742 insertions(+), 2724 deletions(-) create mode 100644 sql/updates/7067_01_mangos_playercreateinfo_spell.sql create mode 100644 sql/updates/7067_02_mangos_spell_learn_spell.sql create mode 100644 sql/updates/7067_03_characters_character_spell.sql diff --git a/sql/characters.sql b/sql/characters.sql index bc423f3e4..30b624107 100644 --- a/sql/characters.sql +++ b/sql/characters.sql @@ -21,7 +21,7 @@ DROP TABLE IF EXISTS `character_db_version`; CREATE TABLE `character_db_version` ( - `required_7059_02_characters_pet_spell` bit(1) default NULL + `required_7067_03_characters_character_spell` bit(1) default NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Last applied sql update to DB'; -- diff --git a/sql/mangos.sql b/sql/mangos.sql index fac322049..e9154169e 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_7063_01_mangos_spell_proc_event` bit(1) default NULL + `required_7067_02_mangos_spell_learn_spell` bit(1) default NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Used DB version notes'; -- @@ -9790,7 +9790,6 @@ CREATE TABLE `playercreateinfo_spell` ( `class` tinyint(3) unsigned NOT NULL default '0', `Spell` mediumint(8) unsigned NOT NULL default '0', `Note` varchar(255) default NULL, - `Active` tinyint(3) unsigned NOT NULL default '1', PRIMARY KEY (`race`,`class`,`Spell`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; @@ -9801,2693 +9800,2644 @@ CREATE TABLE `playercreateinfo_spell` ( LOCK TABLES `playercreateinfo_spell` WRITE; /*!40000 ALTER TABLE `playercreateinfo_spell` DISABLE KEYS */; INSERT INTO `playercreateinfo_spell` VALUES -(1,1,78,'Heroic Strike',1), -(1,1,81,'Dodge',1), -(1,1,107,'Block',1), -(1,1,196,'One-Handed Axes',1), -(1,1,198,'One-Handed Maces',1), -(1,1,201,'One-Handed Swords',1), -(1,1,203,'Unarmed',1), -(1,1,204,'Defense',1), -(1,1,522,'SPELLDEFENSE(DND)',1), -(1,1,668,'Language Common',1), -(1,1,2382,'Generic',1), -(1,1,2457,'Battle Stance',1), -(1,1,2479,'Honorless Target',1), -(1,1,3050,'Detect',1), -(1,1,3365,'Opening',1), -(1,1,5301,'Defensive State(DND)',1), -(1,1,6233,'Closing',1), -(1,1,6246,'Closing',1), -(1,1,6247,'Opening',1), -(1,1,6477,'Opening',1), -(1,1,6478,'Opening',1), -(1,1,6603,'Attack',1), -(1,1,7266,'Duel',1), -(1,1,7267,'Grovel',1), -(1,1,7355,'Stuck',1), -(1,1,7376,'Defensive Stance Passive',0), -(1,1,7381,'Berserker Stance Passive',0), -(1,1,8386,'Attacking',1), -(1,1,8737,'Mail',1), -(1,1,9077,'Leather',1), -(1,1,9078,'Cloth',1), -(1,1,9116,'Shield',1), -(1,1,9125,'Generic',1), -(1,1,20597,'Sword Specialization',1), -(1,1,20598,'The Human Spirit',1), -(1,1,20599,'Diplomacy',1), -(1,1,20600,'Perception',1), -(1,1,20864,'Mace Specialization',1), -(1,1,21156,'Battle Stance Passive',0), -(1,1,21651,'Opening',1), -(1,1,21652,'Closing',1), -(1,1,22027,'Remove Insignia',1), -(1,1,22810,'Opening - No Text',1), -(1,1,32215,'Victorious State',1), -(1,2,81,'Dodge',1), -(1,2,107,'Block',1), -(1,2,198,'One-Handed Maces',1), -(1,2,199,'Two-Handed Maces',1), -(1,2,203,'Unarmed',1), -(1,2,204,'Defense',1), -(1,2,522,'SPELLDEFENSE(DND)',1), -(1,2,635,'Holy Light',1), -(1,2,668,'Language Common',1), -(1,2,2382,'Generic',1), -(1,2,2479,'Honorless Target',1), -(1,2,3050,'Detect',1), -(1,2,3365,'Opening',1), -(1,2,6233,'Closing',1), -(1,2,6246,'Closing',1), -(1,2,6247,'Opening',1), -(1,2,6477,'Opening',1), -(1,2,6478,'Opening',1), -(1,2,6603,'Attack',1), -(1,2,7266,'Duel',1), -(1,2,7267,'Grovel',1), -(1,2,7355,'Stuck',1), -(1,2,8386,'Attacking',1), -(1,2,8737,'Mail',1), -(1,2,9077,'Leather',1), -(1,2,9078,'Cloth',1), -(1,2,9116,'Shield',1), -(1,2,9125,'Generic',1), -(1,2,21084,'Seal of Righteousness',1), -(1,2,20597,'Sword Specialization',1), -(1,2,20598,'The Human Spirit',1), -(1,2,20599,'Diplomacy',1), -(1,2,20600,'Perception',1), -(1,2,20864,'Mace Specialization',1), -(1,2,21651,'Opening',1), -(1,2,21652,'Closing',1), -(1,2,22027,'Remove Insignia',1), -(1,2,22810,'Opening - No Text',1), -(1,2,27762,'Libram',1), -(1,4,81,'Dodge',1), -(1,4,203,'Unarmed',1), -(1,4,204,'Defense',1), -(1,4,522,'SPELLDEFENSE(DND)',1), -(1,4,668,'Language Common',1), -(1,4,1180,'Daggers',1), -(1,4,1752,'Sinister Strike',1), -(1,4,2098,'Eviscerate',1), -(1,4,2382,'Generic',1), -(1,4,2479,'Honorless Target',1), -(1,4,2567,'Thrown',1), -(1,4,2764,'Throw',1), -(1,4,3050,'Detect',1), -(1,4,3365,'Opening',1), -(1,4,6233,'Closing',1), -(1,4,6246,'Closing',1), -(1,4,6247,'Opening',1), -(1,4,6477,'Opening',1), -(1,4,6478,'Opening',1), -(1,4,6603,'Attack',1), -(1,4,7266,'Duel',1), -(1,4,7267,'Grovel',1), -(1,4,7355,'Stuck',1), -(1,4,8386,'Attacking',1), -(1,4,9077,'Leather',1), -(1,4,9078,'Cloth',1), -(1,4,9125,'Generic',1), -(1,4,16092,'Defensive State(DND)',1), -(1,4,20597,'Sword Specialization',1), -(1,4,20598,'The Human Spirit',1), -(1,4,20599,'Diplomacy',1), -(1,4,20600,'Perception',1), -(1,4,20864,'Mace Specialization',1), -(1,4,21184,'Rogue Passive(DND)',1), -(1,4,21651,'Opening',1), -(1,4,21652,'Closing',1), -(1,4,22027,'Remove Insignia',1), -(1,4,22810,'Opening - No Text',1), -(1,5,81,'Dodge',1), -(1,5,198,'One-Handed Maces',1), -(1,5,203,'Unarmed',1), -(1,5,204,'Defense',1), -(1,5,522,'SPELLDEFENSE(DND)',1), -(1,5,585,'Smite',1), -(1,5,668,'Language Common',1), -(1,5,2050,'Lesser Heal',1), -(1,5,2382,'Generic',1), -(1,5,2479,'Honorless Target',1), -(1,5,3050,'Detect',1), -(1,5,3365,'Opening',1), -(1,5,5009,'Wands',1), -(1,5,5019,'Shoot',1), -(1,5,6233,'Closing',1), -(1,5,6246,'Closing',1), -(1,5,6247,'Opening',1), -(1,5,6477,'Opening',1), -(1,5,6478,'Opening',1), -(1,5,6603,'Attack',1), -(1,5,7266,'Duel',1), -(1,5,7267,'Grovel',1), -(1,5,7355,'Stuck',1), -(1,5,8386,'Attacking',1), -(1,5,9078,'Cloth',1), -(1,5,9125,'Generic',1), -(1,5,20597,'Sword Specialization',1), -(1,5,20598,'The Human Spirit',1), -(1,5,20599,'Diplomacy',1), -(1,5,20600,'Perception',1), -(1,5,20864,'Mace Specialization',1), -(1,5,21651,'Opening',1), -(1,5,21652,'Closing',1), -(1,5,22027,'Remove Insignia',1), -(1,5,22810,'Opening - No Text',1), -(1,6,81,'Dodge',1), -(1,6,196,'One-Handed Axes',1), -(1,6,197,'Two-Handed Axes',1), -(1,6,200,'Polearms',1), -(1,6,201,'One-Handed Swords',1), -(1,6,202,'Two-Handed Swords',1), -(1,6,203,'Unarmed',1), -(1,6,204,'Defense',1), -(1,6,522,'SPELLDEFENSE (DND)',1), -(1,6,668,'Language Common',1), -(1,6,674,'Dual Wield',1), -(1,6,750,'Plate Mail',1), -(1,6,1843,'Disarm',1), -(1,6,2382,'Generic',1), -(1,6,2479,'Honorless Target',1), -(1,6,3050,'Detect',1), -(1,6,3127,'Parry',1), -(1,6,3275,'Linen Bandage',1), -(1,6,3276,'Heavy Linen Bandage',1), -(1,6,3277,'Wool Bandage',1), -(1,6,3278,'Heavy Wool Bandage',1), -(1,6,3365,'Opening',1), -(1,6,6233,'Closing',1), -(1,6,6246,'Closing',1), -(1,6,6247,'Opening',1), -(1,6,6477,'Opening',1), -(1,6,6478,'Opening',1), -(1,6,6603,'Attack',1), -(1,6,7266,'Duel',1), -(1,6,7267,'Grovel',1), -(1,6,7355,'Stuck',1), -(1,6,7928,'Silk Bandage',1), -(1,6,7929,'Heavy Silk Bandage',1), -(1,6,7934,'Anti-Venom',1), -(1,6,8386,'Attacking',1), -(1,6,8737,'Mail',1), -(1,6,9077,'Leather',1), -(1,6,9078,'Cloth',1), -(1,6,9125,'Generic',1), -(1,6,10840,'Mageweave Bandage',1), -(1,6,10841,'Heavy Mageweave Bandage',1), -(1,6,10846,'First Aid',1), -(1,6,18629,'Runecloth Bandage',1), -(1,6,18630,'Heavy Runecloth Bandage',1), -(1,6,20597,'Sword Specialization',1), -(1,6,20598,'The Human Spirit',1), -(1,6,20599,'Diplomacy',1), -(1,6,20864,'Mace Specialization',1), -(1,6,21651,'Opening',1), -(1,6,21652,'Closing',1), -(1,6,22027,'Remove Insignia',1), -(1,6,22810,'Opening - No Text',1), -(1,6,33391,'Journeyman Riding',1), -(1,6,45462,'Plague Strike',1), -(1,6,45477,'Icy Touch',1), -(1,6,45902,'Blood Strike',1), -(1,6,45903,'Offensive State (DND)',1), -(1,6,45927,'Summon Friend',1), -(1,6,47541,'Death Coil',1), -(1,6,48266,'Blood Presence',1), -(1,6,49410,'Forceful Deflection',1), -(1,6,49576,'Death Grip',1), -(1,6,52665,'Sigil',1), -(1,6,58985,'Perception',1), -(1,6,59752,'Every Man for Himself',1), -(1,6,59879,'Blood Plague',1), -(1,6,59921,'Frost Fever',1), -(1,6,61437,'Opening',1), -(1,6,61455,'Runic Focus',1), -(1,8,81,'Dodge',1), -(1,8,133,'Fireball',1), -(1,8,168,'Frost Armor',1), -(1,8,203,'Unarmed',1), -(1,8,204,'Defense',1), -(1,8,227,'Staves',1), -(1,8,522,'SPELLDEFENSE(DND)',1), -(1,8,668,'Language Common',1), -(1,8,2382,'Generic',1), -(1,8,2479,'Honorless Target',1), -(1,8,3050,'Detect',1), -(1,8,3365,'Opening',1), -(1,8,5009,'Wands',1), -(1,8,5019,'Shoot',1), -(1,8,6233,'Closing',1), -(1,8,6246,'Closing',1), -(1,8,6247,'Opening',1), -(1,8,6477,'Opening',1), -(1,8,6478,'Opening',1), -(1,8,6603,'Attack',1), -(1,8,7266,'Duel',1), -(1,8,7267,'Grovel',1), -(1,8,7355,'Stuck',1), -(1,8,8386,'Attacking',1), -(1,8,9078,'Cloth',1), -(1,8,9125,'Generic',1), -(1,8,20597,'Sword Specialization',1), -(1,8,20598,'The Human Spirit',1), -(1,8,20599,'Diplomacy',1), -(1,8,20600,'Perception',1), -(1,8,20864,'Mace Specialization',1), -(1,8,21651,'Opening',1), -(1,8,21652,'Closing',1), -(1,8,22027,'Remove Insignia',1), -(1,8,22810,'Opening - No Text',1), -(1,9,81,'Dodge',1), -(1,9,203,'Unarmed',1), -(1,9,204,'Defense',1), -(1,9,522,'SPELLDEFENSE(DND)',1), -(1,9,668,'Language Common',1), -(1,9,686,'Shadow Bolt',1), -(1,9,687,'Demon Skin',1), -(1,9,1180,'Daggers',1), -(1,9,2382,'Generic',1), -(1,9,2479,'Honorless Target',1), -(1,9,3050,'Detect',1), -(1,9,3365,'Opening',1), -(1,9,5009,'Wands',1), -(1,9,5019,'Shoot',1), -(1,9,6233,'Closing',1), -(1,9,6246,'Closing',1), -(1,9,6247,'Opening',1), -(1,9,6477,'Opening',1), -(1,9,6478,'Opening',1), -(1,9,6603,'Attack',1), -(1,9,7266,'Duel',1), -(1,9,7267,'Grovel',1), -(1,9,7355,'Stuck',1), -(1,9,8386,'Attacking',1), -(1,9,9078,'Cloth',1), -(1,9,9125,'Generic',1), -(1,9,20597,'Sword Specialization',1), -(1,9,20598,'The Human Spirit',1), -(1,9,20599,'Diplomacy',1), -(1,9,20600,'Perception',1), -(1,9,20864,'Mace Specialization',1), -(1,9,21651,'Opening',1), -(1,9,21652,'Closing',1), -(1,9,22027,'Remove Insignia',1), -(1,9,22810,'Opening - No Text',1), -(2,1,78,'Heroic Strike',1), -(2,1,81,'Dodge',1), -(2,1,107,'Block',1), -(2,1,196,'One-Handed Axes',1), -(2,1,197,'Two-Handed Axes',1), -(2,1,201,'One-Handed Swords',1), -(2,1,203,'Unarmed',1), -(2,1,204,'Defense',1), -(2,1,522,'SPELLDEFENSE(DND)',1), -(2,1,669,'Language Orcish',1), -(2,1,2382,'Generic',1), -(2,1,2457,'Battle Stance',1), -(2,1,2479,'Honorless Target',1), -(2,1,3050,'Detect',1), -(2,1,3365,'Opening',1), -(2,1,5301,'Defensive State(DND)',1), -(2,1,6233,'Closing',1), -(2,1,6246,'Closing',1), -(2,1,6247,'Opening',1), -(2,1,6477,'Opening',1), -(2,1,6478,'Opening',1), -(2,1,6603,'Attack',1), -(2,1,7266,'Duel',1), -(2,1,7267,'Grovel',1), -(2,1,7355,'Stuck',1), -(2,1,7376,'Defensive Stance Passive',0), -(2,1,7381,'Berserker Stance Passive',0), -(2,1,8386,'Attacking',1), -(2,1,8737,'Mail',1), -(2,1,9077,'Leather',1), -(2,1,9078,'Cloth',1), -(2,1,9116,'Shield',1), -(2,1,9125,'Generic',1), -(2,1,20572,'Blood Fury',1), -(2,1,20573,'Hardiness',1), -(2,1,20574,'Axe Specialization',1), -(2,1,21156,'Battle Stance Passive',0), -(2,1,21563,'Command',1), -(2,1,21651,'Opening',1), -(2,1,21652,'Closing',1), -(2,1,22027,'Remove Insignia',1), -(2,1,22810,'Opening - No Text',1), -(2,1,32215,'Victorious State',1), -(2,3,75,'Auto Shot',1), -(2,3,81,'Dodge',1), -(2,3,196,'One-Handed Axes',1), -(2,3,203,'Unarmed',1), -(2,3,204,'Defense',1), -(2,3,264,'Bows',1), -(2,3,522,'SPELLDEFENSE(DND)',1), -(2,3,669,'Language Orcish',1), -(2,3,2382,'Generic',1), -(2,3,2479,'Honorless Target',1), -(2,3,2973,'Raptor Strike',1), -(2,3,3050,'Detect',1), -(2,3,3365,'Opening',1), -(2,3,6233,'Closing',1), -(2,3,6246,'Closing',1), -(2,3,6247,'Opening',1), -(2,3,6477,'Opening',1), -(2,3,6478,'Opening',1), -(2,3,6603,'Attack',1), -(2,3,7266,'Duel',1), -(2,3,7267,'Grovel',1), -(2,3,7355,'Stuck',1), -(2,3,8386,'Attacking',1), -(2,3,9077,'Leather',1), -(2,3,9078,'Cloth',1), -(2,3,9125,'Generic',1), -(2,3,13358,'Defensive State(DND)',1), -(2,3,20572,'Blood Fury',1), -(2,3,20573,'Hardiness',1), -(2,3,20574,'Axe Specialization',1), -(2,3,20576,'Command',1), -(2,3,21651,'Opening',1), -(2,3,21652,'Closing',1), -(2,3,22027,'Remove Insignia',1), -(2,3,22810,'Opening - No Text',1), -(2,3,24949,'Defensive State 2(DND)',1), -(2,3,34082,'Advantaged State(DND)',1), -(2,4,81,'Dodge',1), -(2,4,203,'Unarmed',1), -(2,4,204,'Defense',1), -(2,4,522,'SPELLDEFENSE(DND)',1), -(2,4,669,'Language Orcish',1), -(2,4,1180,'Daggers',1), -(2,4,1752,'Sinister Strike',1), -(2,4,2098,'Eviscerate',1), -(2,4,2382,'Generic',1), -(2,4,2479,'Honorless Target',1), -(2,4,2567,'Thrown',1), -(2,4,2764,'Throw',1), -(2,4,3050,'Detect',1), -(2,4,3365,'Opening',1), -(2,4,6233,'Closing',1), -(2,4,6246,'Closing',1), -(2,4,6247,'Opening',1), -(2,4,6477,'Opening',1), -(2,4,6478,'Opening',1), -(2,4,6603,'Attack',1), -(2,4,7266,'Duel',1), -(2,4,7267,'Grovel',1), -(2,4,7355,'Stuck',1), -(2,4,8386,'Attacking',1), -(2,4,9077,'Leather',1), -(2,4,9078,'Cloth',1), -(2,4,9125,'Generic',1), -(2,4,16092,'Defensive State(DND)',1), -(2,4,20572,'Blood Fury',1), -(2,4,20573,'Hardiness',1), -(2,4,20574,'Axe Specialization',1), -(2,4,21184,'Rogue Passive(DND)',1), -(2,4,21563,'Command',1), -(2,4,21651,'Opening',1), -(2,4,21652,'Closing',1), -(2,4,22027,'Remove Insignia',1), -(2,4,22810,'Opening - No Text',1), -(2,6,81,'Dodge',1), -(2,6,196,'One-Handed Axes',1), -(2,6,197,'Two-Handed Axes',1), -(2,6,200,'Polearms',1), -(2,6,201,'One-Handed Swords',1), -(2,6,202,'Two-Handed Swords',1), -(2,6,203,'Unarmed',1), -(2,6,204,'Defense',1), -(2,6,522,'SPELLDEFENSE (DND)',1), -(2,6,669,'Language Orcish',1), -(2,6,674,'Dual Wield',1), -(2,6,750,'Plate Mail',1), -(2,6,1843,'Disarm',1), -(2,6,2382,'Generic',1), -(2,6,2479,'Honorless Target',1), -(2,6,3050,'Detect',1), -(2,6,3127,'Parry',1), -(2,6,3275,'Linen Bandage',1), -(2,6,3276,'Heavy Linen Bandage',1), -(2,6,3277,'Wool Bandage',1), -(2,6,3278,'Heavy Wool Bandage',1), -(2,6,3365,'Opening',1), -(2,6,6233,'Closing',1), -(2,6,6246,'Closing',1), -(2,6,6247,'Opening',1), -(2,6,6477,'Opening',1), -(2,6,6478,'Opening',1), -(2,6,6603,'Attack',1), -(2,6,7266,'Duel',1), -(2,6,7267,'Grovel',1), -(2,6,7355,'Stuck',1), -(2,6,7928,'Silk Bandage',1), -(2,6,7929,'Heavy Silk Bandage',1), -(2,6,7934,'Anti-Venom',1), -(2,6,8386,'Attacking',1), -(2,6,8737,'Mail',1), -(2,6,9077,'Leather',1), -(2,6,9078,'Cloth',1), -(2,6,9125,'Generic',1), -(2,6,10840,'Mageweave Bandage',1), -(2,6,10841,'Heavy Mageweave Bandage',1), -(2,6,10846,'First Aid',1), -(2,6,18629,'Runecloth Bandage',1), -(2,6,18630,'Heavy Runecloth Bandage',1), -(2,6,20572,'Blood Fury',1), -(2,6,20573,'Hardiness',1), -(2,6,20574,'Axe Specialization',1), -(2,6,21651,'Opening',1), -(2,6,21652,'Closing',1), -(2,6,22027,'Remove Insignia',1), -(2,6,22810,'Opening - No Text',1), -(2,6,33391,'Journeyman Riding',1), -(2,6,45462,'Plague Strike',1), -(2,6,45477,'Icy Touch',1), -(2,6,45902,'Blood Strike',1), -(2,6,45903,'Offensive State (DND)',1), -(2,6,45927,'Summon Friend',1), -(2,6,47541,'Death Coil',1), -(2,6,48266,'Blood Presence',1), -(2,6,49410,'Forceful Deflection',1), -(2,6,49576,'Death Grip',1), -(2,6,52665,'Sigil',1), -(2,6,54562,'Command',1), -(2,6,59879,'Blood Plague',1), -(2,6,59921,'Frost Fever',1), -(2,6,61437,'Opening',1), -(2,6,61455,'Runic Focus',1), -(2,7,81,'Dodge',1), -(2,7,107,'Block',1), -(2,7,198,'One-Handed Maces',1), -(2,7,203,'Unarmed',1), -(2,7,204,'Defense',1), -(2,7,227,'Staves',1), -(2,7,331,'Healing Wave',1), -(2,7,403,'Lightning Bolt',1), -(2,7,522,'SPELLDEFENSE(DND)',1), -(2,7,669,'Language Orcish',1), -(2,7,2382,'Generic',1), -(2,7,2479,'Honorless Target',1), -(2,7,3050,'Detect',1), -(2,7,3365,'Opening',1), -(2,7,6233,'Closing',1), -(2,7,6246,'Closing',1), -(2,7,6247,'Opening',1), -(2,7,6477,'Opening',1), -(2,7,6478,'Opening',1), -(2,7,6603,'Attack',1), -(2,7,7266,'Duel',1), -(2,7,7267,'Grovel',1), -(2,7,7355,'Stuck',1), -(2,7,8386,'Attacking',1), -(2,7,9077,'Leather',1), -(2,7,9078,'Cloth',1), -(2,7,9116,'Shield',1), -(2,7,9125,'Generic',1), -(2,7,20573,'Hardiness',1), -(2,7,20574,'Axe Specialization',1), -(2,7,21563,'Command',1), -(2,7,21651,'Opening',1), -(2,7,21652,'Closing',1), -(2,7,22027,'Remove Insignia',1), -(2,7,22810,'Opening - No Text',1), -(2,7,27763,'Totem',1), -(2,7,33697,'Blood Fury',1), -(2,9,81,'Dodge',1), -(2,9,203,'Unarmed',1), -(2,9,204,'Defense',1), -(2,9,522,'SPELLDEFENSE(DND)',1), -(2,9,669,'Language Orcish',1), -(2,9,686,'Shadow Bolt',1), -(2,9,687,'Demon Skin',1), -(2,9,1180,'Daggers',1), -(2,9,2382,'Generic',1), -(2,9,2479,'Honorless Target',1), -(2,9,3050,'Detect',1), -(2,9,3365,'Opening',1), -(2,9,5009,'Wands',1), -(2,9,5019,'Shoot',1), -(2,9,6233,'Closing',1), -(2,9,6246,'Closing',1), -(2,9,6247,'Opening',1), -(2,9,6477,'Opening',1), -(2,9,6478,'Opening',1), -(2,9,6603,'Attack',1), -(2,9,7266,'Duel',1), -(2,9,7267,'Grovel',1), -(2,9,7355,'Stuck',1), -(2,9,8386,'Attacking',1), -(2,9,9078,'Cloth',1), -(2,9,9125,'Generic',1), -(2,9,20573,'Hardiness',1), -(2,9,20574,'Axe Specialization',1), -(2,9,20575,'Command',1), -(2,9,21651,'Opening',1), -(2,9,21652,'Closing',1), -(2,9,22027,'Remove Insignia',1), -(2,9,22810,'Opening - No Text',1), -(2,9,33702,'Blood Fury',1), -(3,1,78,'Heroic Strike',1), -(3,1,81,'Dodge',1), -(3,1,107,'Block',1), -(3,1,196,'One-Handed Axes',1), -(3,1,197,'Two-Handed Axes',1), -(3,1,198,'One-Handed Maces',1), -(3,1,203,'Unarmed',1), -(3,1,204,'Defense',1), -(3,1,522,'SPELLDEFENSE(DND)',1), -(3,1,668,'Language Common',1), -(3,1,672,'Language Dwarven',1), -(3,1,2382,'Generic',1), -(3,1,2457,'Battle Stance',1), -(3,1,2479,'Honorless Target',1), -(3,1,2481,'Find Treasure',1), -(3,1,3050,'Detect',1), -(3,1,3365,'Opening',1), -(3,1,5301,'Defensive State(DND)',1), -(3,1,6233,'Closing',1), -(3,1,6246,'Closing',1), -(3,1,6247,'Opening',1), -(3,1,6477,'Opening',1), -(3,1,6478,'Opening',1), -(3,1,6603,'Attack',1), -(3,1,7266,'Duel',1), -(3,1,7267,'Grovel',1), -(3,1,7355,'Stuck',1), -(3,1,7376,'Defensive Stance Passive',0), -(3,1,7381,'Berserker Stance Passive',0), -(3,1,8386,'Attacking',1), -(3,1,8737,'Mail',1), -(3,1,9077,'Leather',1), -(3,1,9078,'Cloth',1), -(3,1,9116,'Shield',1), -(3,1,9125,'Generic',1), -(3,1,20594,'Stoneform',1), -(3,1,20595,'Gun Specialization',1), -(3,1,20596,'Frost Resistance',1), -(3,1,21156,'Battle Stance Passive',0), -(3,1,21651,'Opening',1), -(3,1,21652,'Closing',1), -(3,1,22027,'Remove Insignia',1), -(3,1,22810,'Opening - No Text',1), -(3,1,32215,'Victorious State',1), -(3,2,81,'Dodge',1), -(3,2,107,'Block',1), -(3,2,198,'One-Handed Maces',1), -(3,2,199,'Two-Handed Maces',1), -(3,2,203,'Unarmed',1), -(3,2,204,'Defense',1), -(3,2,522,'SPELLDEFENSE(DND)',1), -(3,2,635,'Holy Light',1), -(3,2,668,'Language Common',1), -(3,2,672,'Language Dwarven',1), -(3,2,2382,'Generic',1), -(3,2,2479,'Honorless Target',1), -(3,2,2481,'Find Treasure',1), -(3,2,3050,'Detect',1), -(3,2,3365,'Opening',1), -(3,2,6233,'Closing',1), -(3,2,6246,'Closing',1), -(3,2,6247,'Opening',1), -(3,2,6477,'Opening',1), -(3,2,6478,'Opening',1), -(3,2,6603,'Attack',1), -(3,2,7266,'Duel',1), -(3,2,7267,'Grovel',1), -(3,2,7355,'Stuck',1), -(3,2,8386,'Attacking',1), -(3,2,8737,'Mail',1), -(3,2,9077,'Leather',1), -(3,2,9078,'Cloth',1), -(3,2,9116,'Shield',1), -(3,2,9125,'Generic',1), -(3,2,21084,'Seal of Righteousness',1), -(3,2,20594,'Stoneform',1), -(3,2,20595,'Gun Specialization',1), -(3,2,20596,'Frost Resistance',1), -(3,2,21651,'Opening',1), -(3,2,21652,'Closing',1), -(3,2,22027,'Remove Insignia',1), -(3,2,22810,'Opening - No Text',1), -(3,2,27762,'Libram',1), -(3,3,75,'Auto Shot',1), -(3,3,81,'Dodge',1), -(3,3,196,'One-Handed Axes',1), -(3,3,203,'Unarmed',1), -(3,3,204,'Defense',1), -(3,3,266,'Guns',1), -(3,3,522,'SPELLDEFENSE(DND)',1), -(3,3,668,'Language Common',1), -(3,3,672,'Language Dwarven',1), -(3,3,2382,'Generic',1), -(3,3,2479,'Honorless Target',1), -(3,3,2481,'Find Treasure',1), -(3,3,2973,'Raptor Strike',1), -(3,3,3050,'Detect',1), -(3,3,3365,'Opening',1), -(3,3,6233,'Closing',1), -(3,3,6246,'Closing',1), -(3,3,6247,'Opening',1), -(3,3,6477,'Opening',1), -(3,3,6478,'Opening',1), -(3,3,6603,'Attack',1), -(3,3,7266,'Duel',1), -(3,3,7267,'Grovel',1), -(3,3,7355,'Stuck',1), -(3,3,8386,'Attacking',1), -(3,3,9077,'Leather',1), -(3,3,9078,'Cloth',1), -(3,3,9125,'Generic',1), -(3,3,13358,'Defensive State(DND)',1), -(3,3,20594,'Stoneform',1), -(3,3,20595,'Gun Specialization',1), -(3,3,20596,'Frost Resistance',1), -(3,3,21651,'Opening',1), -(3,3,21652,'Closing',1), -(3,3,22027,'Remove Insignia',1), -(3,3,22810,'Opening - No Text',1), -(3,3,24949,'Defensive State 2(DND)',1), -(3,3,34082,'Advantaged State(DND)',1), -(3,4,81,'Dodge',1), -(3,4,203,'Unarmed',1), -(3,4,204,'Defense',1), -(3,4,522,'SPELLDEFENSE(DND)',1), -(3,4,668,'Language Common',1), -(3,4,672,'Language Dwarven',1), -(3,4,1180,'Daggers',1), -(3,4,1752,'Sinister Strike',1), -(3,4,2098,'Eviscerate',1), -(3,4,2382,'Generic',1), -(3,4,2479,'Honorless Target',1), -(3,4,2481,'Find Treasure',1), -(3,4,2567,'Thrown',1), -(3,4,2764,'Throw',1), -(3,4,3050,'Detect',1), -(3,4,3365,'Opening',1), -(3,4,6233,'Closing',1), -(3,4,6246,'Closing',1), -(3,4,6247,'Opening',1), -(3,4,6477,'Opening',1), -(3,4,6478,'Opening',1), -(3,4,6603,'Attack',1), -(3,4,7266,'Duel',1), -(3,4,7267,'Grovel',1), -(3,4,7355,'Stuck',1), -(3,4,8386,'Attacking',1), -(3,4,9077,'Leather',1), -(3,4,9078,'Cloth',1), -(3,4,9125,'Generic',1), -(3,4,16092,'Defensive State(DND)',1), -(3,4,20594,'Stoneform',1), -(3,4,20595,'Gun Specialization',1), -(3,4,20596,'Frost Resistance',1), -(3,4,21184,'Rogue Passive(DND)',1), -(3,4,21651,'Opening',1), -(3,4,21652,'Closing',1), -(3,4,22027,'Remove Insignia',1), -(3,4,22810,'Opening - No Text',1), -(3,5,81,'Dodge',1), -(3,5,198,'One-Handed Maces',1), -(3,5,203,'Unarmed',1), -(3,5,204,'Defense',1), -(3,5,522,'SPELLDEFENSE(DND)',1), -(3,5,585,'Smite',1), -(3,5,668,'Language Common',1), -(3,5,672,'Language Dwarven',1), -(3,5,2050,'Lesser Heal',1), -(3,5,2382,'Generic',1), -(3,5,2479,'Honorless Target',1), -(3,5,2481,'Find Treasure',1), -(3,5,3050,'Detect',1), -(3,5,3365,'Opening',1), -(3,5,5009,'Wands',1), -(3,5,5019,'Shoot',1), -(3,5,6233,'Closing',1), -(3,5,6246,'Closing',1), -(3,5,6247,'Opening',1), -(3,5,6477,'Opening',1), -(3,5,6478,'Opening',1), -(3,5,6603,'Attack',1), -(3,5,7266,'Duel',1), -(3,5,7267,'Grovel',1), -(3,5,7355,'Stuck',1), -(3,5,8386,'Attacking',1), -(3,5,9078,'Cloth',1), -(3,5,9125,'Generic',1), -(3,5,20594,'Stoneform',1), -(3,5,20595,'Gun Specialization',1), -(3,5,20596,'Frost Resistance',1), -(3,5,21651,'Opening',1), -(3,5,21652,'Closing',1), -(3,5,22027,'Remove Insignia',1), -(3,5,22810,'Opening - No Text',1), -(3,6,81,'Dodge',1), -(3,6,196,'One-Handed Axes',1), -(3,6,197,'Two-Handed Axes',1), -(3,6,200,'Polearms',1), -(3,6,201,'One-Handed Swords',1), -(3,6,202,'Two-Handed Swords',1), -(3,6,203,'Unarmed',1), -(3,6,204,'Defense',1), -(3,6,522,'SPELLDEFENSE (DND)',1), -(3,6,668,'Language Common',1), -(3,6,672,'Language Dwarven',1), -(3,6,674,'Dual Wield',1), -(3,6,750,'Plate Mail',1), -(3,6,1843,'Disarm',1), -(3,6,2382,'Generic',1), -(3,6,2479,'Honorless Target',1), -(3,6,2481,'Find Treasure',1), -(3,6,3050,'Detect',1), -(3,6,3127,'Parry',1), -(3,6,3275,'Linen Bandage',1), -(3,6,3276,'Heavy Linen Bandage',1), -(3,6,3277,'Wool Bandage',1), -(3,6,3278,'Heavy Wool Bandage',1), -(3,6,3365,'Opening',1), -(3,6,6233,'Closing',1), -(3,6,6246,'Closing',1), -(3,6,6247,'Opening',1), -(3,6,6477,'Opening',1), -(3,6,6478,'Opening',1), -(3,6,6603,'Attack',1), -(3,6,7266,'Duel',1), -(3,6,7267,'Grovel',1), -(3,6,7355,'Stuck',1), -(3,6,7928,'Silk Bandage',1), -(3,6,7929,'Heavy Silk Bandage',1), -(3,6,7934,'Anti-Venom',1), -(3,6,8386,'Attacking',1), -(3,6,8737,'Mail',1), -(3,6,9077,'Leather',1), -(3,6,9078,'Cloth',1), -(3,6,9125,'Generic',1), -(3,6,10840,'Mageweave Bandage',1), -(3,6,10841,'Heavy Mageweave Bandage',1), -(3,6,10846,'First Aid',1), -(3,6,18629,'Runecloth Bandage',1), -(3,6,18630,'Heavy Runecloth Bandage',1), -(3,6,20594,'Stoneform',1), -(3,6,20595,'Gun Specialization',1), -(3,6,20596,'Frost Resistance',1), -(3,6,21651,'Opening',1), -(3,6,21652,'Closing',1), -(3,6,22027,'Remove Insignia',1), -(3,6,22810,'Opening - No Text',1), -(3,6,33391,'Journeyman Riding',1), -(3,6,45462,'Plague Strike',1), -(3,6,45477,'Icy Touch',1), -(3,6,45902,'Blood Strike',1), -(3,6,45903,'Offensive State (DND)',1), -(3,6,45927,'Summon Friend',1), -(3,6,47541,'Death Coil',1), -(3,6,48266,'Blood Presence',1), -(3,6,49410,'Forceful Deflection',1), -(3,6,49576,'Death Grip',1), -(3,6,52665,'Sigil',1), -(3,6,59224,'Mace Specialization',1), -(3,6,59879,'Blood Plague',1), -(3,6,59921,'Frost Fever',1), -(3,6,61437,'Opening',1), -(3,6,61455,'Runic Focus',1), -(4,1,78,'Heroic Strike',1), -(4,1,81,'Dodge',1), -(4,1,107,'Block',1), -(4,1,198,'One-Handed Maces',1), -(4,1,201,'One-Handed Swords',1), -(4,1,203,'Unarmed',1), -(4,1,204,'Defense',1), -(4,1,522,'SPELLDEFENSE(DND)',1), -(4,1,668,'Language Common',1), -(4,1,671,'Language Darnassian',1), -(4,1,1180,'Daggers',1), -(4,1,2382,'Generic',1), -(4,1,2457,'Battle Stance',1), -(4,1,2479,'Honorless Target',1), -(4,1,3050,'Detect',1), -(4,1,3365,'Opening',1), -(4,1,5301,'Defensive State(DND)',1), -(4,1,6233,'Closing',1), -(4,1,6246,'Closing',1), -(4,1,6247,'Opening',1), -(4,1,6477,'Opening',1), -(4,1,6478,'Opening',1), -(4,1,6603,'Attack',1), -(4,1,7266,'Duel',1), -(4,1,7267,'Grovel',1), -(4,1,7355,'Stuck',1), -(4,1,7376,'Defensive Stance Passive',0), -(4,1,7381,'Berserker Stance Passive',0), -(4,1,8386,'Attacking',1), -(4,1,8737,'Mail',1), -(4,1,9077,'Leather',1), -(4,1,9078,'Cloth',1), -(4,1,9116,'Shield',1), -(4,1,9125,'Generic',1), -(4,1,20580,'Shadowmeld',1), -(4,1,20582,'Quickness',1), -(4,1,20583,'Nature Resistance',1), -(4,1,20585,'Wisp Spirit',1), -(4,1,21009,'Shadowmeld Passive',1), -(4,1,21156,'Battle Stance Passive',0), -(4,1,21651,'Opening',1), -(4,1,21652,'Closing',1), -(4,1,22027,'Remove Insignia',1), -(4,1,22810,'Opening - No Text',1), -(4,1,32215,'Victorious State',1), -(4,3,75,'Auto Shot',1), -(4,3,81,'Dodge',1), -(4,3,203,'Unarmed',1), -(4,3,204,'Defense',1), -(4,3,264,'Bows',1), -(4,3,522,'SPELLDEFENSE(DND)',1), -(4,3,668,'Language Common',1), -(4,3,671,'Language Darnassian',1), -(4,3,1180,'Daggers',1), -(4,3,2382,'Generic',1), -(4,3,2479,'Honorless Target',1), -(4,3,2973,'Raptor Strike',1), -(4,3,3050,'Detect',1), -(4,3,3365,'Opening',1), -(4,3,6233,'Closing',1), -(4,3,6246,'Closing',1), -(4,3,6247,'Opening',1), -(4,3,6477,'Opening',1), -(4,3,6478,'Opening',1), -(4,3,6603,'Attack',1), -(4,3,7266,'Duel',1), -(4,3,7267,'Grovel',1), -(4,3,7355,'Stuck',1), -(4,3,8386,'Attacking',1), -(4,3,9077,'Leather',1), -(4,3,9078,'Cloth',1), -(4,3,9125,'Generic',1), -(4,3,13358,'Defensive State(DND)',1), -(4,3,20580,'Shadowmeld',1), -(4,3,20582,'Quickness',1), -(4,3,20583,'Nature Resistance',1), -(4,3,20585,'Wisp Spirit',1), -(4,3,21009,'Shadowmeld Passive',1), -(4,3,21651,'Opening',1), -(4,3,21652,'Closing',1), -(4,3,22027,'Remove Insignia',1), -(4,3,22810,'Opening - No Text',1), -(4,3,24949,'Defensive State 2(DND)',1), -(4,3,34082,'Advantaged State(DND)',1), -(4,4,81,'Dodge',1), -(4,4,203,'Unarmed',1), -(4,4,204,'Defense',1), -(4,4,522,'SPELLDEFENSE(DND)',1), -(4,4,668,'Language Common',1), -(4,4,671,'Language Darnassian',1), -(4,4,1180,'Daggers',1), -(4,4,1752,'Sinister Strike',1), -(4,4,2098,'Eviscerate',1), -(4,4,2382,'Generic',1), -(4,4,2479,'Honorless Target',1), -(4,4,2567,'Thrown',1), -(4,4,2764,'Throw',1), -(4,4,3050,'Detect',1), -(4,4,3365,'Opening',1), -(4,4,6233,'Closing',1), -(4,4,6246,'Closing',1), -(4,4,6247,'Opening',1), -(4,4,6477,'Opening',1), -(4,4,6478,'Opening',1), -(4,4,6603,'Attack',1), -(4,4,7266,'Duel',1), -(4,4,7267,'Grovel',1), -(4,4,7355,'Stuck',1), -(4,4,8386,'Attacking',1), -(4,4,9077,'Leather',1), -(4,4,9078,'Cloth',1), -(4,4,9125,'Generic',1), -(4,4,16092,'Defensive State(DND)',1), -(4,4,20580,'Shadowmeld',1), -(4,4,20582,'Quickness',1), -(4,4,20583,'Nature Resistance',1), -(4,4,20585,'Wisp Spirit',1), -(4,4,21009,'Shadowmeld Passive',1), -(4,4,21184,'Rogue Passive(DND)',1), -(4,4,21651,'Opening',1), -(4,4,21652,'Closing',1), -(4,4,22027,'Remove Insignia',1), -(4,4,22810,'Opening - No Text',1), -(4,5,81,'Dodge',1), -(4,5,198,'One-Handed Maces',1), -(4,5,203,'Unarmed',1), -(4,5,204,'Defense',1), -(4,5,522,'SPELLDEFENSE(DND)',1), -(4,5,585,'Smite',1), -(4,5,668,'Language Common',1), -(4,5,671,'Language Darnassian',1), -(4,5,2050,'Lesser Heal',1), -(4,5,2382,'Generic',1), -(4,5,2479,'Honorless Target',1), -(4,5,3050,'Detect',1), -(4,5,3365,'Opening',1), -(4,5,5009,'Wands',1), -(4,5,5019,'Shoot',1), -(4,5,6233,'Closing',1), -(4,5,6246,'Closing',1), -(4,5,6247,'Opening',1), -(4,5,6477,'Opening',1), -(4,5,6478,'Opening',1), -(4,5,6603,'Attack',1), -(4,5,7266,'Duel',1), -(4,5,7267,'Grovel',1), -(4,5,7355,'Stuck',1), -(4,5,8386,'Attacking',1), -(4,5,9078,'Cloth',1), -(4,5,9125,'Generic',1), -(4,5,20580,'Shadowmeld',1), -(4,5,20582,'Quickness',1), -(4,5,20583,'Nature Resistance',1), -(4,5,20585,'Wisp Spirit',1), -(4,5,21009,'Shadowmeld Passive',1), -(4,5,21651,'Opening',1), -(4,5,21652,'Closing',1), -(4,5,22027,'Remove Insignia',1), -(4,5,22810,'Opening - No Text',1), -(4,6,81,'Dodge',1), -(4,6,196,'One-Handed Axes',1), -(4,6,197,'Two-Handed Axes',1), -(4,6,200,'Polearms',1), -(4,6,201,'One-Handed Swords',1), -(4,6,202,'Two-Handed Swords',1), -(4,6,203,'Unarmed',1), -(4,6,204,'Defense',1), -(4,6,522,'SPELLDEFENSE (DND)',1), -(4,6,668,'Language Common',1), -(4,6,671,'Language Darnassian',1), -(4,6,674,'Dual Wield',1), -(4,6,750,'Plate Mail',1), -(4,6,1843,'Disarm',1), -(4,6,2382,'Generic',1), -(4,6,2479,'Honorless Target',1), -(4,6,3050,'Detect',1), -(4,6,3127,'Parry',1), -(4,6,3275,'Linen Bandage',1), -(4,6,3276,'Heavy Linen Bandage',1), -(4,6,3277,'Wool Bandage',1), -(4,6,3278,'Heavy Wool Bandage',1), -(4,6,3365,'Opening',1), -(4,6,6233,'Closing',1), -(4,6,6246,'Closing',1), -(4,6,6247,'Opening',1), -(4,6,6477,'Opening',1), -(4,6,6478,'Opening',1), -(4,6,6603,'Attack',1), -(4,6,7266,'Duel',1), -(4,6,7267,'Grovel',1), -(4,6,7355,'Stuck',1), -(4,6,7928,'Silk Bandage',1), -(4,6,7929,'Heavy Silk Bandage',1), -(4,6,7934,'Anti-Venom',1), -(4,6,8386,'Attacking',1), -(4,6,8737,'Mail',1), -(4,6,9077,'Leather',1), -(4,6,9078,'Cloth',1), -(4,6,9125,'Generic',1), -(4,6,10840,'Mageweave Bandage',1), -(4,6,10841,'Heavy Mageweave Bandage',1), -(4,6,10846,'First Aid',1), -(4,6,18629,'Runecloth Bandage',1), -(4,6,18630,'Heavy Runecloth Bandage',1), -(4,6,20582,'Quickness',1), -(4,6,20583,'Nature Resistance',1), -(4,6,20585,'Wisp Spirit',1), -(4,6,21651,'Opening',1), -(4,6,21652,'Closing',1), -(4,6,22027,'Remove Insignia',1), -(4,6,22810,'Opening - No Text',1), -(4,6,33391,'Journeyman Riding',1), -(4,6,45462,'Plague Strike',1), -(4,6,45477,'Icy Touch',1), -(4,6,45902,'Blood Strike',1), -(4,6,45903,'Offensive State (DND)',1), -(4,6,45927,'Summon Friend',1), -(4,6,47541,'Death Coil',1), -(4,6,48266,'Blood Presence',1), -(4,6,49410,'Forceful Deflection',1), -(4,6,49576,'Death Grip',1), -(4,6,52665,'Sigil',1), -(4,6,58984,'Shadowmeld',1), -(4,6,59879,'Blood Plague',1), -(4,6,59921,'Frost Fever',1), -(4,6,61437,'Opening',1), -(4,6,61455,'Runic Focus',1), -(4,11,81,'Dodge',1), -(4,11,203,'Unarmed',1), -(4,11,204,'Defense',1), -(4,11,227,'Staves',1), -(4,11,522,'SPELLDEFENSE(DND)',1), -(4,11,668,'Language Common',1), -(4,11,671,'Language Darnassian',1), -(4,11,1178,'Bear Form(Passive)',0), -(4,11,1180,'Daggers',1), -(4,11,2382,'Generic',1), -(4,11,2479,'Honorless Target',1), -(4,11,3025,'Cat Form(Passive)',0), -(4,11,3050,'Detect',1), -(4,11,3365,'Opening',1), -(4,11,5176,'Wrath',1), -(4,11,5185,'Healing Touch',1), -(4,11,5419,'Travel Form(Passive)',0), -(4,11,5420,'Tree of Life',0), -(4,11,5421,'Aquatic Form(Passive)',0), -(4,11,6233,'Closing',1), -(4,11,6246,'Closing',1), -(4,11,6247,'Opening',1), -(4,11,6477,'Opening',1), -(4,11,6478,'Opening',1), -(4,11,6603,'Attack',1), -(4,11,7266,'Duel',1), -(4,11,7267,'Grovel',1), -(4,11,7355,'Stuck',1), -(4,11,8386,'Attacking',1), -(4,11,9077,'Leather',1), -(4,11,9078,'Cloth',1), -(4,11,9125,'Generic',1), -(4,11,9635,'Dire Bear Form(Passive)',0), -(4,11,20580,'Shadowmeld',1), -(4,11,20582,'Quickness',1), -(4,11,20583,'Nature Resistance',1), -(4,11,20585,'Wisp Spirit',1), -(4,11,21009,'Shadowmeld Passive',1), -(4,11,21178,'Bear Form(Passive2)',0), -(4,11,21651,'Opening',1), -(4,11,21652,'Closing',1), -(4,11,22027,'Remove Insignia',1), -(4,11,22810,'Opening - No Text',1), -(4,11,24905,'Moonkin Form(Passive)',0), -(4,11,27764,'Fetish',1), -(4,11,33948,'Flight Form(Passive)',0), -(4,11,34123,'Tree of Life(Passive)',0), -(4,11,40121,'Swift Flight Form(Passive)',0), -(5,1,78,'Heroic Strike',1), -(5,1,81,'Dodge',1), -(5,1,107,'Block',1), -(5,1,201,'One-Handed Swords',1), -(5,1,202,'Two-Handed Swords',1), -(5,1,203,'Unarmed',1), -(5,1,204,'Defense',1), -(5,1,522,'SPELLDEFENSE(DND)',1), -(5,1,669,'Language Orcish',1), -(5,1,1180,'Daggers',1), -(5,1,2382,'Generic',1), -(5,1,2457,'Battle Stance',1), -(5,1,2479,'Honorless Target',1), -(5,1,3050,'Detect',1), -(5,1,3365,'Opening',1), -(5,1,5227,'Underwater Breathing',1), -(5,1,5301,'Defensive State(DND)',1), -(5,1,6233,'Closing',1), -(5,1,6246,'Closing',1), -(5,1,6247,'Opening',1), -(5,1,6477,'Opening',1), -(5,1,6478,'Opening',1), -(5,1,6603,'Attack',1), -(5,1,7266,'Duel',1), -(5,1,7267,'Grovel',1), -(5,1,7355,'Stuck',1), -(5,1,7376,'Defensive Stance Passive',0), -(5,1,7381,'Berserker Stance Passive',0), -(5,1,7744,'Will of the Forsaken',1), -(5,1,8386,'Attacking',1), -(5,1,8737,'Mail',1), -(5,1,9077,'Leather',1), -(5,1,9078,'Cloth',1), -(5,1,9116,'Shield',1), -(5,1,9125,'Generic',1), -(5,1,17737,'Language Gutterspeak',1), -(5,1,20577,'Cannibalize',1), -(5,1,20579,'Shadow Resistance',1), -(5,1,21156,'Battle Stance Passive',0), -(5,1,21651,'Opening',1), -(5,1,21652,'Closing',1), -(5,1,22027,'Remove Insignia',1), -(5,1,22810,'Opening - No Text',1), -(5,1,32215,'Victorious State',1), -(5,4,81,'Dodge',1), -(5,4,203,'Unarmed',1), -(5,4,204,'Defense',1), -(5,4,522,'SPELLDEFENSE(DND)',1), -(5,4,669,'Language Orcish',1), -(5,4,1180,'Daggers',1), -(5,4,1752,'Sinister Strike',1), -(5,4,2098,'Eviscerate',1), -(5,4,2382,'Generic',1), -(5,4,2479,'Honorless Target',1), -(5,4,2567,'Thrown',1), -(5,4,2764,'Throw',1), -(5,4,3050,'Detect',1), -(5,4,3365,'Opening',1), -(5,4,5227,'Underwater Breathing',1), -(5,4,6233,'Closing',1), -(5,4,6246,'Closing',1), -(5,4,6247,'Opening',1), -(5,4,6477,'Opening',1), -(5,4,6478,'Opening',1), -(5,4,6603,'Attack',1), -(5,4,7266,'Duel',1), -(5,4,7267,'Grovel',1), -(5,4,7355,'Stuck',1), -(5,4,7744,'Will of the Forsaken',1), -(5,4,8386,'Attacking',1), -(5,4,9077,'Leather',1), -(5,4,9078,'Cloth',1), -(5,4,9125,'Generic',1), -(5,4,16092,'Defensive State(DND)',1), -(5,4,17737,'Language Gutterspeak',1), -(5,4,20577,'Cannibalize',1), -(5,4,20579,'Shadow Resistance',1), -(5,4,21184,'Rogue Passive(DND)',1), -(5,4,21651,'Opening',1), -(5,4,21652,'Closing',1), -(5,4,22027,'Remove Insignia',1), -(5,4,22810,'Opening - No Text',1), -(5,5,81,'Dodge',1), -(5,5,198,'One-Handed Maces',1), -(5,5,203,'Unarmed',1), -(5,5,204,'Defense',1), -(5,5,522,'SPELLDEFENSE(DND)',1), -(5,5,585,'Smite',1), -(5,5,669,'Language Orcish',1), -(5,5,2050,'Lesser Heal',1), -(5,5,2382,'Generic',1), -(5,5,2479,'Honorless Target',1), -(5,5,3050,'Detect',1), -(5,5,3365,'Opening',1), -(5,5,5009,'Wands',1), -(5,5,5019,'Shoot',1), -(5,5,5227,'Underwater Breathing',1), -(5,5,6233,'Closing',1), -(5,5,6246,'Closing',1), -(5,5,6247,'Opening',1), -(5,5,6477,'Opening',1), -(5,5,6478,'Opening',1), -(5,5,6603,'Attack',1), -(5,5,7266,'Duel',1), -(5,5,7267,'Grovel',1), -(5,5,7355,'Stuck',1), -(5,5,7744,'Will of the Forsaken',1), -(5,5,8386,'Attacking',1), -(5,5,9078,'Cloth',1), -(5,5,9125,'Generic',1), -(5,5,17737,'Language Gutterspeak',1), -(5,5,20577,'Cannibalize',1), -(5,5,20579,'Shadow Resistance',1), -(5,5,21651,'Opening',1), -(5,5,21652,'Closing',1), -(5,5,22027,'Remove Insignia',1), -(5,5,22810,'Opening - No Text',1), -(5,6,81,'Dodge',1), -(5,6,196,'One-Handed Axes',1), -(5,6,197,'Two-Handed Axes',1), -(5,6,200,'Polearms',1), -(5,6,201,'One-Handed Swords',1), -(5,6,202,'Two-Handed Swords',1), -(5,6,203,'Unarmed',1), -(5,6,204,'Defense',1), -(5,6,522,'SPELLDEFENSE (DND)',1), -(5,6,669,'Language Orcish',1), -(5,6,674,'Dual Wield',1), -(5,6,750,'Plate Mail',1), -(5,6,1843,'Disarm',1), -(5,6,2382,'Generic',1), -(5,6,2479,'Honorless Target',1), -(5,6,3050,'Detect',1), -(5,6,3127,'Parry',1), -(5,6,3275,'Linen Bandage',1), -(5,6,3276,'Heavy Linen Bandage',1), -(5,6,3277,'Wool Bandage',1), -(5,6,3278,'Heavy Wool Bandage',1), -(5,6,3365,'Opening',1), -(5,6,5227,'Underwater Breathing',1), -(5,6,6233,'Closing',1), -(5,6,6246,'Closing',1), -(5,6,6247,'Opening',1), -(5,6,6477,'Opening',1), -(5,6,6478,'Opening',1), -(5,6,6603,'Attack',1), -(5,6,7266,'Duel',1), -(5,6,7267,'Grovel',1), -(5,6,7355,'Stuck',1), -(5,6,7744,'Will of the Forsaken',1), -(5,6,7928,'Silk Bandage',1), -(5,6,7929,'Heavy Silk Bandage',1), -(5,6,7934,'Anti-Venom',1), -(5,6,8386,'Attacking',1), -(5,6,8737,'Mail',1), -(5,6,9077,'Leather',1), -(5,6,9078,'Cloth',1), -(5,6,9125,'Generic',1), -(5,6,10840,'Mageweave Bandage',1), -(5,6,10841,'Heavy Mageweave Bandage',1), -(5,6,10846,'First Aid',1), -(5,6,17737,'Language Gutterspeak',1), -(5,6,18629,'Runecloth Bandage',1), -(5,6,18630,'Heavy Runecloth Bandage',1), -(5,6,20577,'Cannibalize',1), -(5,6,20579,'Shadow Resistance',1), -(5,6,21651,'Opening',1), -(5,6,21652,'Closing',1), -(5,6,22027,'Remove Insignia',1), -(5,6,22810,'Opening - No Text',1), -(5,6,33391,'Journeyman Riding',1), -(5,6,45462,'Plague Strike',1), -(5,6,45477,'Icy Touch',1), -(5,6,45902,'Blood Strike',1), -(5,6,45903,'Offensive State (DND)',1), -(5,6,45927,'Summon Friend',1), -(5,6,47541,'Death Coil',1), -(5,6,48266,'Blood Presence',1), -(5,6,49410,'Forceful Deflection',1), -(5,6,49576,'Death Grip',1), -(5,6,52665,'Sigil',1), -(5,6,59879,'Blood Plague',1), -(5,6,59921,'Frost Fever',1), -(5,6,61437,'Opening',1), -(5,6,61455,'Runic Focus',1), -(5,8,81,'Dodge',1), -(5,8,133,'Fireball',1), -(5,8,168,'Frost Armor',1), -(5,8,203,'Unarmed',1), -(5,8,204,'Defense',1), -(5,8,227,'Staves',1), -(5,8,522,'SPELLDEFENSE(DND)',1), -(5,8,669,'Language Orcish',1), -(5,8,2382,'Generic',1), -(5,8,2479,'Honorless Target',1), -(5,8,3050,'Detect',1), -(5,8,3365,'Opening',1), -(5,8,5009,'Wands',1), -(5,8,5019,'Shoot',1), -(5,8,5227,'Underwater Breathing',1), -(5,8,6233,'Closing',1), -(5,8,6246,'Closing',1), -(5,8,6247,'Opening',1), -(5,8,6477,'Opening',1), -(5,8,6478,'Opening',1), -(5,8,6603,'Attack',1), -(5,8,7266,'Duel',1), -(5,8,7267,'Grovel',1), -(5,8,7355,'Stuck',1), -(5,8,7744,'Will of the Forsaken',1), -(5,8,8386,'Attacking',1), -(5,8,9078,'Cloth',1), -(5,8,9125,'Generic',1), -(5,8,17737,'Language Gutterspeak',1), -(5,8,20577,'Cannibalize',1), -(5,8,20579,'Shadow Resistance',1), -(5,8,21651,'Opening',1), -(5,8,21652,'Closing',1), -(5,8,22027,'Remove Insignia',1), -(5,8,22810,'Opening - No Text',1), -(5,9,81,'Dodge',1), -(5,9,203,'Unarmed',1), -(5,9,204,'Defense',1), -(5,9,522,'SPELLDEFENSE(DND)',1), -(5,9,669,'Language Orcish',1), -(5,9,686,'Shadow Bolt',1), -(5,9,687,'Demon Skin',1), -(5,9,1180,'Daggers',1), -(5,9,2382,'Generic',1), -(5,9,2479,'Honorless Target',1), -(5,9,3050,'Detect',1), -(5,9,3365,'Opening',1), -(5,9,5009,'Wands',1), -(5,9,5019,'Shoot',1), -(5,9,5227,'Underwater Breathing',1), -(5,9,6233,'Closing',1), -(5,9,6246,'Closing',1), -(5,9,6247,'Opening',1), -(5,9,6477,'Opening',1), -(5,9,6478,'Opening',1), -(5,9,6603,'Attack',1), -(5,9,7266,'Duel',1), -(5,9,7267,'Grovel',1), -(5,9,7355,'Stuck',1), -(5,9,7744,'Will of the Forsaken',1), -(5,9,8386,'Attacking',1), -(5,9,9078,'Cloth',1), -(5,9,9125,'Generic',1), -(5,9,17737,'Language Gutterspeak',1), -(5,9,20577,'Cannibalize',1), -(5,9,20579,'Shadow Resistance',1), -(5,9,21651,'Opening',1), -(5,9,21652,'Closing',1), -(5,9,22027,'Remove Insignia',1), -(5,9,22810,'Opening - No Text',1), -(6,1,78,'Heroic Strike',1), -(6,1,81,'Dodge',1), -(6,1,107,'Block',1), -(6,1,196,'One-Handed Axes',1), -(6,1,198,'One-Handed Maces',1), -(6,1,199,'Two-Handed Maces',1), -(6,1,203,'Unarmed',1), -(6,1,204,'Defense',1), -(6,1,522,'SPELLDEFENSE(DND)',1), -(6,1,669,'Language Orcish',1), -(6,1,670,'Language Taurahe',1), -(6,1,2382,'Generic',1), -(6,1,2457,'Battle Stance',1), -(6,1,2479,'Honorless Target',1), -(6,1,3050,'Detect',1), -(6,1,3365,'Opening',1), -(6,1,5301,'Defensive State(DND)',1), -(6,1,6233,'Closing',1), -(6,1,6246,'Closing',1), -(6,1,6247,'Opening',1), -(6,1,6477,'Opening',1), -(6,1,6478,'Opening',1), -(6,1,6603,'Attack',1), -(6,1,7266,'Duel',1), -(6,1,7267,'Grovel',1), -(6,1,7355,'Stuck',1), -(6,1,7376,'Defensive Stance Passive',0), -(6,1,7381,'Berserker Stance Passive',0), -(6,1,8386,'Attacking',1), -(6,1,8737,'Mail',1), -(6,1,9077,'Leather',1), -(6,1,9078,'Cloth',1), -(6,1,9116,'Shield',1), -(6,1,9125,'Generic',1), -(6,1,20549,'War Stomp',1), -(6,1,20550,'Endurance',1), -(6,1,20551,'Nature Resistance',1), -(6,1,20552,'Cultivation',1), -(6,1,21156,'Battle Stance Passive',0), -(6,1,21651,'Opening',1), -(6,1,21652,'Closing',1), -(6,1,22027,'Remove Insignia',1), -(6,1,22810,'Opening - No Text',1), -(6,1,32215,'Victorious State',1), -(6,3,75,'Auto Shot',1), -(6,3,81,'Dodge',1), -(6,3,196,'One-Handed Axes',1), -(6,3,203,'Unarmed',1), -(6,3,204,'Defense',1), -(6,3,266,'Guns',1), -(6,3,522,'SPELLDEFENSE(DND)',1), -(6,3,669,'Language Orcish',1), -(6,3,670,'Language Taurahe',1), -(6,3,2382,'Generic',1), -(6,3,2479,'Honorless Target',1), -(6,3,2973,'Raptor Strike',1), -(6,3,3050,'Detect',1), -(6,3,3365,'Opening',1), -(6,3,6233,'Closing',1), -(6,3,6246,'Closing',1), -(6,3,6247,'Opening',1), -(6,3,6477,'Opening',1), -(6,3,6478,'Opening',1), -(6,3,6603,'Attack',1), -(6,3,7266,'Duel',1), -(6,3,7267,'Grovel',1), -(6,3,7355,'Stuck',1), -(6,3,8386,'Attacking',1), -(6,3,9077,'Leather',1), -(6,3,9078,'Cloth',1), -(6,3,9125,'Generic',1), -(6,3,13358,'Defensive State(DND)',1), -(6,3,20549,'War Stomp',1), -(6,3,20550,'Endurance',1), -(6,3,20551,'Nature Resistance',1), -(6,3,20552,'Cultivation',1), -(6,3,21651,'Opening',1), -(6,3,21652,'Closing',1), -(6,3,22027,'Remove Insignia',1), -(6,3,22810,'Opening - No Text',1), -(6,3,24949,'Defensive State 2(DND)',1), -(6,3,34082,'Advantaged State(DND)',1), -(6,6,81,'Dodge',1), -(6,6,196,'One-Handed Axes',1), -(6,6,197,'Two-Handed Axes',1), -(6,6,200,'Polearms',1), -(6,6,201,'One-Handed Swords',1), -(6,6,202,'Two-Handed Swords',1), -(6,6,203,'Unarmed',1), -(6,6,204,'Defense',1), -(6,6,522,'SPELLDEFENSE (DND)',1), -(6,6,669,'Language Orcish',1), -(6,6,670,'Language Taurahe',1), -(6,6,674,'Dual Wield',1), -(6,6,750,'Plate Mail',1), -(6,6,1843,'Disarm',1), -(6,6,2382,'Generic',1), -(6,6,2479,'Honorless Target',1), -(6,6,3050,'Detect',1), -(6,6,3127,'Parry',1), -(6,6,3275,'Linen Bandage',1), -(6,6,3276,'Heavy Linen Bandage',1), -(6,6,3277,'Wool Bandage',1), -(6,6,3278,'Heavy Wool Bandage',1), -(6,6,3365,'Opening',1), -(6,6,6233,'Closing',1), -(6,6,6246,'Closing',1), -(6,6,6247,'Opening',1), -(6,6,6477,'Opening',1), -(6,6,6478,'Opening',1), -(6,6,6603,'Attack',1), -(6,6,7266,'Duel',1), -(6,6,7267,'Grovel',1), -(6,6,7355,'Stuck',1), -(6,6,7928,'Silk Bandage',1), -(6,6,7929,'Heavy Silk Bandage',1), -(6,6,7934,'Anti-Venom',1), -(6,6,8386,'Attacking',1), -(6,6,8737,'Mail',1), -(6,6,9077,'Leather',1), -(6,6,9078,'Cloth',1), -(6,6,9125,'Generic',1), -(6,6,10840,'Mageweave Bandage',1), -(6,6,10841,'Heavy Mageweave Bandage',1), -(6,6,10846,'First Aid',1), -(6,6,18629,'Runecloth Bandage',1), -(6,6,18630,'Heavy Runecloth Bandage',1), -(6,6,20549,'War Stomp',1), -(6,6,20550,'Endurance',1), -(6,6,20551,'Nature Resistance',1), -(6,6,20552,'Cultivation',1), -(6,6,21651,'Opening',1), -(6,6,21652,'Closing',1), -(6,6,22027,'Remove Insignia',1), -(6,6,22810,'Opening - No Text',1), -(6,6,33391,'Journeyman Riding',1), -(6,6,45462,'Plague Strike',1), -(6,6,45477,'Icy Touch',1), -(6,6,45902,'Blood Strike',1), -(6,6,45903,'Offensive State (DND)',1), -(6,6,45927,'Summon Friend',1), -(6,6,47541,'Death Coil',1), -(6,6,48266,'Blood Presence',1), -(6,6,49410,'Forceful Deflection',1), -(6,6,49576,'Death Grip',1), -(6,6,52665,'Sigil',1), -(6,6,59879,'Blood Plague',1), -(6,6,59921,'Frost Fever',1), -(6,6,61437,'Opening',1), -(6,6,61455,'Runic Focus',1), -(6,7,81,'Dodge',1), -(6,7,107,'Block',1), -(6,7,198,'One-Handed Maces',1), -(6,7,203,'Unarmed',1), -(6,7,204,'Defense',1), -(6,7,227,'Staves',1), -(6,7,331,'Healing Wave',1), -(6,7,403,'Lightning Bolt',1), -(6,7,522,'SPELLDEFENSE(DND)',1), -(6,7,669,'Language Orcish',1), -(6,7,670,'Language Taurahe',1), -(6,7,2382,'Generic',1), -(6,7,2479,'Honorless Target',1), -(6,7,3050,'Detect',1), -(6,7,3365,'Opening',1), -(6,7,6233,'Closing',1), -(6,7,6246,'Closing',1), -(6,7,6247,'Opening',1), -(6,7,6477,'Opening',1), -(6,7,6478,'Opening',1), -(6,7,6603,'Attack',1), -(6,7,7266,'Duel',1), -(6,7,7267,'Grovel',1), -(6,7,7355,'Stuck',1), -(6,7,8386,'Attacking',1), -(6,7,9077,'Leather',1), -(6,7,9078,'Cloth',1), -(6,7,9116,'Shield',1), -(6,7,9125,'Generic',1), -(6,7,20549,'War Stomp',1), -(6,7,20550,'Endurance',1), -(6,7,20551,'Nature Resistance',1), -(6,7,20552,'Cultivation',1), -(6,7,21651,'Opening',1), -(6,7,21652,'Closing',1), -(6,7,22027,'Remove Insignia',1), -(6,7,22810,'Opening - No Text',1), -(6,7,27763,'Totem',1), -(6,11,81,'Dodge',1), -(6,11,198,'One-Handed Maces',1), -(6,11,203,'Unarmed',1), -(6,11,204,'Defense',1), -(6,11,227,'Staves',1), -(6,11,522,'SPELLDEFENSE(DND)',1), -(6,11,669,'Language Orcish',1), -(6,11,670,'Language Taurahe',1), -(6,11,1178,'Bear Form(Passive)',0), -(6,11,2382,'Generic',1), -(6,11,2479,'Honorless Target',1), -(6,11,3025,'Cat Form(Passive)',0), -(6,11,3050,'Detect',1), -(6,11,3365,'Opening',1), -(6,11,5176,'Wrath',1), -(6,11,5185,'Healing Touch',1), -(6,11,5419,'Travel Form(Passive)',0), -(6,11,5420,'Tree of Life',0), -(6,11,5421,'Aquatic Form(Passive)',0), -(6,11,6233,'Closing',1), -(6,11,6246,'Closing',1), -(6,11,6247,'Opening',1), -(6,11,6477,'Opening',1), -(6,11,6478,'Opening',1), -(6,11,6603,'Attack',1), -(6,11,7266,'Duel',1), -(6,11,7267,'Grovel',1), -(6,11,7355,'Stuck',1), -(6,11,8386,'Attacking',1), -(6,11,9077,'Leather',1), -(6,11,9078,'Cloth',1), -(6,11,9125,'Generic',1), -(6,11,9635,'Dire Bear Form(Passive)',0), -(6,11,20549,'War Stomp',1), -(6,11,20550,'Endurance',1), -(6,11,20551,'Nature Resistance',1), -(6,11,20552,'Cultivation',1), -(6,11,21178,'Bear Form(Passive2)',0), -(6,11,21651,'Opening',1), -(6,11,21652,'Closing',1), -(6,11,22027,'Remove Insignia',1), -(6,11,22810,'Opening - No Text',1), -(6,11,24905,'Moonkin Form(Passive)',0), -(6,11,27764,'Fetish',1), -(6,11,33948,'Flight Form(Passive)',0), -(6,11,34123,'Tree of Life(Passive)',0), -(6,11,40121,'Swift Flight Form(Passive)',0), -(7,1,78,'Heroic Strike',1), -(7,1,81,'Dodge',1), -(7,1,107,'Block',1), -(7,1,198,'One-Handed Maces',1), -(7,1,201,'One-Handed Swords',1), -(7,1,203,'Unarmed',1), -(7,1,204,'Defense',1), -(7,1,522,'SPELLDEFENSE(DND)',1), -(7,1,668,'Language Common',1), -(7,1,1180,'Daggers',1), -(7,1,2382,'Generic',1), -(7,1,2457,'Battle Stance',1), -(7,1,2479,'Honorless Target',1), -(7,1,3050,'Detect',1), -(7,1,3365,'Opening',1), -(7,1,5301,'Defensive State(DND)',1), -(7,1,6233,'Closing',1), -(7,1,6246,'Closing',1), -(7,1,6247,'Opening',1), -(7,1,6477,'Opening',1), -(7,1,6478,'Opening',1), -(7,1,6603,'Attack',1), -(7,1,7266,'Duel',1), -(7,1,7267,'Grovel',1), -(7,1,7340,'Language Gnomish',1), -(7,1,7355,'Stuck',1), -(7,1,7376,'Defensive Stance Passive',0), -(7,1,7381,'Berserker Stance Passive',0), -(7,1,8386,'Attacking',1), -(7,1,8737,'Mail',1), -(7,1,9077,'Leather',1), -(7,1,9078,'Cloth',1), -(7,1,9116,'Shield',1), -(7,1,9125,'Generic',1), -(7,1,20589,'Escape Artist',1), -(7,1,20591,'Expansive Mind',1), -(7,1,20592,'Arcane Resistance',1), -(7,1,20593,'Engineering Specialization',1), -(7,1,21156,'Battle Stance Passive',0), -(7,1,21651,'Opening',1), -(7,1,21652,'Closing',1), -(7,1,22027,'Remove Insignia',1), -(7,1,22810,'Opening - No Text',1), -(7,1,32215,'Victorious State',1), -(7,4,81,'Dodge',1), -(7,4,203,'Unarmed',1), -(7,4,204,'Defense',1), -(7,4,522,'SPELLDEFENSE(DND)',1), -(7,4,668,'Language Common',1), -(7,4,1180,'Daggers',1), -(7,4,1752,'Sinister Strike',1), -(7,4,2098,'Eviscerate',1), -(7,4,2382,'Generic',1), -(7,4,2479,'Honorless Target',1), -(7,4,2567,'Thrown',1), -(7,4,2764,'Throw',1), -(7,4,3050,'Detect',1), -(7,4,3365,'Opening',1), -(7,4,6233,'Closing',1), -(7,4,6246,'Closing',1), -(7,4,6247,'Opening',1), -(7,4,6477,'Opening',1), -(7,4,6478,'Opening',1), -(7,4,6603,'Attack',1), -(7,4,7266,'Duel',1), -(7,4,7267,'Grovel',1), -(7,4,7340,'Language Gnomish',1), -(7,4,7355,'Stuck',1), -(7,4,8386,'Attacking',1), -(7,4,9077,'Leather',1), -(7,4,9078,'Cloth',1), -(7,4,9125,'Generic',1), -(7,4,16092,'Defensive State(DND)',1), -(7,4,20589,'Escape Artist',1), -(7,4,20591,'Expansive Mind',1), -(7,4,20592,'Arcane Resistance',1), -(7,4,20593,'Engineering Specialization',1), -(7,4,21184,'Rogue Passive(DND)',1), -(7,4,21651,'Opening',1), -(7,4,21652,'Closing',1), -(7,4,22027,'Remove Insignia',1), -(7,4,22810,'Opening - No Text',1), -(7,6,81,'Dodge',1), -(7,6,196,'One-Handed Axes',1), -(7,6,197,'Two-Handed Axes',1), -(7,6,200,'Polearms',1), -(7,6,201,'One-Handed Swords',1), -(7,6,202,'Two-Handed Swords',1), -(7,6,203,'Unarmed',1), -(7,6,204,'Defense',1), -(7,6,522,'SPELLDEFENSE (DND)',1), -(7,6,668,'Language Common',1), -(7,6,674,'Dual Wield',1), -(7,6,750,'Plate Mail',1), -(7,6,1843,'Disarm',1), -(7,6,2382,'Generic',1), -(7,6,2479,'Honorless Target',1), -(7,6,3050,'Detect',1), -(7,6,3127,'Parry',1), -(7,6,3275,'Linen Bandage',1), -(7,6,3276,'Heavy Linen Bandage',1), -(7,6,3277,'Wool Bandage',1), -(7,6,3278,'Heavy Wool Bandage',1), -(7,6,3365,'Opening',1), -(7,6,6233,'Closing',1), -(7,6,6246,'Closing',1), -(7,6,6247,'Opening',1), -(7,6,6477,'Opening',1), -(7,6,6478,'Opening',1), -(7,6,6603,'Attack',1), -(7,6,7266,'Duel',1), -(7,6,7267,'Grovel',1), -(7,6,7340,'Language Gnomish',1), -(7,6,7355,'Stuck',1), -(7,6,7928,'Silk Bandage',1), -(7,6,7929,'Heavy Silk Bandage',1), -(7,6,7934,'Anti-Venom',1), -(7,6,8386,'Attacking',1), -(7,6,8737,'Mail',1), -(7,6,9077,'Leather',1), -(7,6,9078,'Cloth',1), -(7,6,9125,'Generic',1), -(7,6,10840,'Mageweave Bandage',1), -(7,6,10841,'Heavy Mageweave Bandage',1), -(7,6,10846,'First Aid',1), -(7,6,18629,'Runecloth Bandage',1), -(7,6,18630,'Heavy Runecloth Bandage',1), -(7,6,20589,'Escape Artist',1), -(7,6,20591,'Expansive Mind',1), -(7,6,20592,'Arcane Resistance',1), -(7,6,20593,'Engineering Specialization',1), -(7,6,21651,'Opening',1), -(7,6,21652,'Closing',1), -(7,6,22027,'Remove Insignia',1), -(7,6,22810,'Opening - No Text',1), -(7,6,33391,'Journeyman Riding',1), -(7,6,45462,'Plague Strike',1), -(7,6,45477,'Icy Touch',1), -(7,6,45902,'Blood Strike',1), -(7,6,45903,'Offensive State (DND)',1), -(7,6,45927,'Summon Friend',1), -(7,6,47541,'Death Coil',1), -(7,6,48266,'Blood Presence',1), -(7,6,49410,'Forceful Deflection',1), -(7,6,49576,'Death Grip',1), -(7,6,52665,'Sigil',1), -(7,6,59879,'Blood Plague',1), -(7,6,59921,'Frost Fever',1), -(7,6,61437,'Opening',1), -(7,6,61455,'Runic Focus',1), -(7,8,81,'Dodge',1), -(7,8,133,'Fireball',1), -(7,8,168,'Frost Armor',1), -(7,8,203,'Unarmed',1), -(7,8,204,'Defense',1), -(7,8,227,'Staves',1), -(7,8,522,'SPELLDEFENSE(DND)',1), -(7,8,668,'Language Common',1), -(7,8,2382,'Generic',1), -(7,8,2479,'Honorless Target',1), -(7,8,3050,'Detect',1), -(7,8,3365,'Opening',1), -(7,8,5009,'Wands',1), -(7,8,5019,'Shoot',1), -(7,8,6233,'Closing',1), -(7,8,6246,'Closing',1), -(7,8,6247,'Opening',1), -(7,8,6477,'Opening',1), -(7,8,6478,'Opening',1), -(7,8,6603,'Attack',1), -(7,8,7266,'Duel',1), -(7,8,7267,'Grovel',1), -(7,8,7340,'Language Gnomish',1), -(7,8,7355,'Stuck',1), -(7,8,8386,'Attacking',1), -(7,8,9078,'Cloth',1), -(7,8,9125,'Generic',1), -(7,8,20589,'Escape Artist',1), -(7,8,20591,'Expansive Mind',1), -(7,8,20592,'Arcane Resistance',1), -(7,8,20593,'Engineering Specialization',1), -(7,8,21651,'Opening',1), -(7,8,21652,'Closing',1), -(7,8,22027,'Remove Insignia',1), -(7,8,22810,'Opening - No Text',1), -(7,9,81,'Dodge',1), -(7,9,203,'Unarmed',1), -(7,9,204,'Defense',1), -(7,9,522,'SPELLDEFENSE(DND)',1), -(7,9,668,'Language Common',1), -(7,9,686,'Shadow Bolt',1), -(7,9,687,'Demon Skin',1), -(7,9,1180,'Daggers',1), -(7,9,2382,'Generic',1), -(7,9,2479,'Honorless Target',1), -(7,9,3050,'Detect',1), -(7,9,3365,'Opening',1), -(7,9,5009,'Wands',1), -(7,9,5019,'Shoot',1), -(7,9,6233,'Closing',1), -(7,9,6246,'Closing',1), -(7,9,6247,'Opening',1), -(7,9,6477,'Opening',1), -(7,9,6478,'Opening',1), -(7,9,6603,'Attack',1), -(7,9,7266,'Duel',1), -(7,9,7267,'Grovel',1), -(7,9,7340,'Language Gnomish',1), -(7,9,7355,'Stuck',1), -(7,9,8386,'Attacking',1), -(7,9,9078,'Cloth',1), -(7,9,9125,'Generic',1), -(7,9,20589,'Escape Artist',1), -(7,9,20591,'Expansive Mind',1), -(7,9,20592,'Arcane Resistance',1), -(7,9,20593,'Engineering Specialization',1), -(7,9,21651,'Opening',1), -(7,9,21652,'Closing',1), -(7,9,22027,'Remove Insignia',1), -(7,9,22810,'Opening - No Text',1), -(8,1,78,'Heroic Strike',1), -(8,1,81,'Dodge',1), -(8,1,107,'Block',1), -(8,1,196,'One-Handed Axes',1), -(8,1,203,'Unarmed',1), -(8,1,204,'Defense',1), -(8,1,522,'SPELLDEFENSE(DND)',1), -(8,1,669,'Language Orcish',1), -(8,1,1180,'Daggers',1), -(8,1,2382,'Generic',1), -(8,1,2457,'Battle Stance',1), -(8,1,2479,'Honorless Target',1), -(8,1,2567,'Thrown',1), -(8,1,2764,'Throw',1), -(8,1,3050,'Detect',1), -(8,1,3365,'Opening',1), -(8,1,5301,'Defensive State(DND)',1), -(8,1,6233,'Closing',1), -(8,1,6246,'Closing',1), -(8,1,6247,'Opening',1), -(8,1,6477,'Opening',1), -(8,1,6478,'Opening',1), -(8,1,6603,'Attack',1), -(8,1,7266,'Duel',1), -(8,1,7267,'Grovel',1), -(8,1,7341,'Language Troll',1), -(8,1,7355,'Stuck',1), -(8,1,7376,'Defensive Stance Passive',0), -(8,1,7381,'Berserker Stance Passive',0), -(8,1,8386,'Attacking',1), -(8,1,8737,'Mail',1), -(8,1,9077,'Leather',1), -(8,1,9078,'Cloth',1), -(8,1,9116,'Shield',1), -(8,1,9125,'Generic',1), -(8,1,20555,'Regeneration',1), -(8,1,20557,'Beast Slaying',1), -(8,1,20558,'Throwing Specialization',1), -(8,1,21156,'Battle Stance Passive',0), -(8,1,21651,'Opening',1), -(8,1,21652,'Closing',1), -(8,1,22027,'Remove Insignia',1), -(8,1,22810,'Opening - No Text',1), -(8,1,26290,'Bow Specialization',1), -(8,1,26296,'Berserking',1), -(8,1,32215,'Victorious State',1), -(8,3,75,'Auto Shot',1), -(8,3,81,'Dodge',1), -(8,3,196,'One-Handed Axes',1), -(8,3,203,'Unarmed',1), -(8,3,204,'Defense',1), -(8,3,264,'Bows',1), -(8,3,522,'SPELLDEFENSE(DND)',1), -(8,3,669,'Language Orcish',1), -(8,3,2382,'Generic',1), -(8,3,2479,'Honorless Target',1), -(8,3,2973,'Raptor Strike',1), -(8,3,3050,'Detect',1), -(8,3,3365,'Opening',1), -(8,3,6233,'Closing',1), -(8,3,6246,'Closing',1), -(8,3,6247,'Opening',1), -(8,3,6477,'Opening',1), -(8,3,6478,'Opening',1), -(8,3,6603,'Attack',1), -(8,3,7266,'Duel',1), -(8,3,7267,'Grovel',1), -(8,3,7341,'Language Troll',1), -(8,3,7355,'Stuck',1), -(8,3,8386,'Attacking',1), -(8,3,9077,'Leather',1), -(8,3,9078,'Cloth',1), -(8,3,9125,'Generic',1), -(8,3,13358,'Defensive State(DND)',1), -(8,3,20554,'Berserking',1), -(8,3,20555,'Regeneration',1), -(8,3,20557,'Beast Slaying',1), -(8,3,20558,'Throwing Specialization',1), -(8,3,21651,'Opening',1), -(8,3,21652,'Closing',1), -(8,3,22027,'Remove Insignia',1), -(8,3,22810,'Opening - No Text',1), -(8,3,24949,'Defensive State 2(DND)',1), -(8,3,26290,'Bow Specialization',1), -(8,3,34082,'Advantaged State(DND)',1), -(8,4,81,'Dodge',1), -(8,4,203,'Unarmed',1), -(8,4,204,'Defense',1), -(8,4,522,'SPELLDEFENSE(DND)',1), -(8,4,669,'Language Orcish',1), -(8,4,1180,'Daggers',1), -(8,4,1752,'Sinister Strike',1), -(8,4,2098,'Eviscerate',1), -(8,4,2382,'Generic',1), -(8,4,2479,'Honorless Target',1), -(8,4,2567,'Thrown',1), -(8,4,2764,'Throw',1), -(8,4,3050,'Detect',1), -(8,4,3365,'Opening',1), -(8,4,6233,'Closing',1), -(8,4,6246,'Closing',1), -(8,4,6247,'Opening',1), -(8,4,6477,'Opening',1), -(8,4,6478,'Opening',1), -(8,4,6603,'Attack',1), -(8,4,7266,'Duel',1), -(8,4,7267,'Grovel',1), -(8,4,7341,'Language Troll',1), -(8,4,7355,'Stuck',1), -(8,4,8386,'Attacking',1), -(8,4,9077,'Leather',1), -(8,4,9078,'Cloth',1), -(8,4,9125,'Generic',1), -(8,4,16092,'Defensive State(DND)',1), -(8,4,20555,'Regeneration',1), -(8,4,20557,'Beast Slaying',1), -(8,4,20558,'Throwing Specialization',1), -(8,4,21184,'Rogue Passive(DND)',1), -(8,4,21651,'Opening',1), -(8,4,21652,'Closing',1), -(8,4,22027,'Remove Insignia',1), -(8,4,22810,'Opening - No Text',1), -(8,4,26290,'Bow Specialization',1), -(8,4,26297,'Berserking',1), -(8,5,81,'Dodge',1), -(8,5,198,'One-Handed Maces',1), -(8,5,203,'Unarmed',1), -(8,5,204,'Defense',1), -(8,5,522,'SPELLDEFENSE(DND)',1), -(8,5,585,'Smite',1), -(8,5,669,'Language Orcish',1), -(8,5,2050,'Lesser Heal',1), -(8,5,2382,'Generic',1), -(8,5,2479,'Honorless Target',1), -(8,5,3050,'Detect',1), -(8,5,3365,'Opening',1), -(8,5,5009,'Wands',1), -(8,5,5019,'Shoot',1), -(8,5,6233,'Closing',1), -(8,5,6246,'Closing',1), -(8,5,6247,'Opening',1), -(8,5,6477,'Opening',1), -(8,5,6478,'Opening',1), -(8,5,6603,'Attack',1), -(8,5,7266,'Duel',1), -(8,5,7267,'Grovel',1), -(8,5,7341,'Language Troll',1), -(8,5,7355,'Stuck',1), -(8,5,8386,'Attacking',1), -(8,5,9078,'Cloth',1), -(8,5,9125,'Generic',1), -(8,5,20554,'Berserking',1), -(8,5,20555,'Regeneration',1), -(8,5,20557,'Beast Slaying',1), -(8,5,20558,'Throwing Specialization',1), -(8,5,21651,'Opening',1), -(8,5,21652,'Closing',1), -(8,5,22027,'Remove Insignia',1), -(8,5,22810,'Opening - No Text',1), -(8,5,26290,'Bow Specialization',1), -(8,6,81,'Dodge',1), -(8,6,196,'One-Handed Axes',1), -(8,6,197,'Two-Handed Axes',1), -(8,6,200,'Polearms',1), -(8,6,201,'One-Handed Swords',1), -(8,6,202,'Two-Handed Swords',1), -(8,6,203,'Unarmed',1), -(8,6,204,'Defense',1), -(8,6,522,'SPELLDEFENSE (DND)',1), -(8,6,669,'Language Orcish',1), -(8,6,674,'Dual Wield',1), -(8,6,750,'Plate Mail',1), -(8,6,1843,'Disarm',1), -(8,6,2382,'Generic',1), -(8,6,2479,'Honorless Target',1), -(8,6,3050,'Detect',1), -(8,6,3127,'Parry',1), -(8,6,3275,'Linen Bandage',1), -(8,6,3276,'Heavy Linen Bandage',1), -(8,6,3277,'Wool Bandage',1), -(8,6,3278,'Heavy Wool Bandage',1), -(8,6,3365,'Opening',1), -(8,6,6233,'Closing',1), -(8,6,6246,'Closing',1), -(8,6,6247,'Opening',1), -(8,6,6477,'Opening',1), -(8,6,6478,'Opening',1), -(8,6,6603,'Attack',1), -(8,6,7266,'Duel',1), -(8,6,7267,'Grovel',1), -(8,6,7341,'Language Troll',1), -(8,6,7355,'Stuck',1), -(8,6,7928,'Silk Bandage',1), -(8,6,7929,'Heavy Silk Bandage',1), -(8,6,7934,'Anti-Venom',1), -(8,6,8386,'Attacking',1), -(8,6,8737,'Mail',1), -(8,6,9077,'Leather',1), -(8,6,9078,'Cloth',1), -(8,6,9125,'Generic',1), -(8,6,10840,'Mageweave Bandage',1), -(8,6,10841,'Heavy Mageweave Bandage',1), -(8,6,10846,'First Aid',1), -(8,6,18629,'Runecloth Bandage',1), -(8,6,18630,'Heavy Runecloth Bandage',1), -(8,6,20555,'Regeneration',1), -(8,6,20557,'Beast Slaying',1), -(8,6,20558,'Throwing Specialization',1), -(8,6,21651,'Opening',1), -(8,6,21652,'Closing',1), -(8,6,22027,'Remove Insignia',1), -(8,6,22810,'Opening - No Text',1), -(8,6,26290,'Bow Specialization',1), -(8,6,33391,'Journeyman Riding',1), -(8,6,45462,'Plague Strike',1), -(8,6,45477,'Icy Touch',1), -(8,6,45902,'Blood Strike',1), -(8,6,45903,'Offensive State (DND)',1), -(8,6,45927,'Summon Friend',1), -(8,6,47541,'Death Coil',1), -(8,6,48266,'Blood Presence',1), -(8,6,49410,'Forceful Deflection',1), -(8,6,49576,'Death Grip',1), -(8,6,50621,'Berserking',1), -(8,6,52665,'Sigil',1), -(8,6,58943,'Da Voodoo Shuffle',1), -(8,6,59879,'Blood Plague',1), -(8,6,59921,'Frost Fever',1), -(8,6,61437,'Opening',1), -(8,6,61455,'Runic Focus',1), -(8,7,81,'Dodge',1), -(8,7,107,'Block',1), -(8,7,198,'One-Handed Maces',1), -(8,7,203,'Unarmed',1), -(8,7,204,'Defense',1), -(8,7,227,'Staves',1), -(8,7,331,'Healing Wave',1), -(8,7,403,'Lightning Bolt',1), -(8,7,522,'SPELLDEFENSE(DND)',1), -(8,7,669,'Language Orcish',1), -(8,7,2382,'Generic',1), -(8,7,2479,'Honorless Target',1), -(8,7,3050,'Detect',1), -(8,7,3365,'Opening',1), -(8,7,6233,'Closing',1), -(8,7,6246,'Closing',1), -(8,7,6247,'Opening',1), -(8,7,6477,'Opening',1), -(8,7,6478,'Opening',1), -(8,7,6603,'Attack',1), -(8,7,7266,'Duel',1), -(8,7,7267,'Grovel',1), -(8,7,7341,'Language Troll',1), -(8,7,7355,'Stuck',1), -(8,7,8386,'Attacking',1), -(8,7,9077,'Leather',1), -(8,7,9078,'Cloth',1), -(8,7,9116,'Shield',1), -(8,7,9125,'Generic',1), -(8,7,20554,'Berserking',1), -(8,7,20555,'Regeneration',1), -(8,7,20557,'Beast Slaying',1), -(8,7,20558,'Throwing Specialization',1), -(8,7,21651,'Opening',1), -(8,7,21652,'Closing',1), -(8,7,22027,'Remove Insignia',1), -(8,7,22810,'Opening - No Text',1), -(8,7,26290,'Bow Specialization',1), -(8,7,27763,'Totem',1), -(8,8,81,'Dodge',1), -(8,8,133,'Fireball',1), -(8,8,168,'Frost Armor',1), -(8,8,203,'Unarmed',1), -(8,8,204,'Defense',1), -(8,8,227,'Staves',1), -(8,8,522,'SPELLDEFENSE(DND)',1), -(8,8,669,'Language Orcish',1), -(8,8,2382,'Generic',1), -(8,8,2479,'Honorless Target',1), -(8,8,3050,'Detect',1), -(8,8,3365,'Opening',1), -(8,8,5009,'Wands',1), -(8,8,5019,'Shoot',1), -(8,8,6233,'Closing',1), -(8,8,6246,'Closing',1), -(8,8,6247,'Opening',1), -(8,8,6477,'Opening',1), -(8,8,6478,'Opening',1), -(8,8,6603,'Attack',1), -(8,8,7266,'Duel',1), -(8,8,7267,'Grovel',1), -(8,8,7341,'Language Troll',1), -(8,8,7355,'Stuck',1), -(8,8,8386,'Attacking',1), -(8,8,9078,'Cloth',1), -(8,8,9125,'Generic',1), -(8,8,20554,'Berserking',1), -(8,8,20555,'Regeneration',1), -(8,8,20557,'Beast Slaying',1), -(8,8,20558,'Throwing Specialization',1), -(8,8,21651,'Opening',1), -(8,8,21652,'Closing',1), -(8,8,22027,'Remove Insignia',1), -(8,8,22810,'Opening - No Text',1), -(8,8,26290,'Bow Specialization',1), -(10,2,81,'Dodge',1), -(10,2,107,'Block',1), -(10,2,201,'One-Handed Swords',1), -(10,2,202,'Two-Handed Swords',1), -(10,2,203,'Unarmed',1), -(10,2,204,'Defense',1), -(10,2,522,'SPELLDEFENSE(DND)',1), -(10,2,635,'Holy Light',1), -(10,2,669,'Language Orcish',1), -(10,2,813,'Language Thalassian',1), -(10,2,822,'Magic Resistance',1), -(10,2,2382,'Generic',1), -(10,2,2479,'Honorless Target',1), -(10,2,3050,'Detect',1), -(10,2,3365,'Opening',1), -(10,2,6233,'Closing',1), -(10,2,6246,'Closing',1), -(10,2,6247,'Opening',1), -(10,2,6477,'Opening',1), -(10,2,6478,'Opening',1), -(10,2,6603,'Attack',1), -(10,2,7266,'Duel',1), -(10,2,7267,'Grovel',1), -(10,2,7355,'Stuck',1), -(10,2,8386,'Attacking',1), -(10,2,8737,'Mail',1), -(10,2,9077,'Leather',1), -(10,2,9078,'Cloth',1), -(10,2,9116,'Shield',1), -(10,2,9125,'Generic',1), -(10,2,21084,'Seal of Righteousness',1), -(10,2,21651,'Opening',1), -(10,2,21652,'Closing',1), -(10,2,22027,'Remove Insignia',1), -(10,2,22810,'Opening - No Text',1), -(10,2,27762,'Libram',1), -(10,2,28730,'Arcane Torrent',1), -(10,2,28734,'Mana Tap',1), -(10,2,28877,'Arcane Affinity',1), -(10,3,75,'Auto Shot',1), -(10,3,81,'Dodge',1), -(10,3,203,'Unarmed',1), -(10,3,204,'Defense',1), -(10,3,264,'Bows',1), -(10,3,522,'SPELLDEFENSE(DND)',1), -(10,3,669,'Language Orcish',1), -(10,3,813,'Language Thalassian',1), -(10,3,822,'Magic Resistance',1), -(10,3,1180,'Daggers',1), -(10,3,2382,'Generic',1), -(10,3,2479,'Honorless Target',1), -(10,3,2973,'Raptor Strike',1), -(10,3,3050,'Detect',1), -(10,3,3365,'Opening',1), -(10,3,6233,'Closing',1), -(10,3,6246,'Closing',1), -(10,3,6247,'Opening',1), -(10,3,6477,'Opening',1), -(10,3,6478,'Opening',1), -(10,3,6603,'Attack',1), -(10,3,7266,'Duel',1), -(10,3,7267,'Grovel',1), -(10,3,7355,'Stuck',1), -(10,3,8386,'Attacking',1), -(10,3,9077,'Leather',1), -(10,3,9078,'Cloth',1), -(10,3,9125,'Generic',1), -(10,3,13358,'Defensive State(DND)',1), -(10,3,21651,'Opening',1), -(10,3,21652,'Closing',1), -(10,3,22027,'Remove Insignia',1), -(10,3,22810,'Opening - No Text',1), -(10,3,24949,'Defensive State 2(DND)',1), -(10,3,28730,'Arcane Torrent',1), -(10,3,28734,'Mana Tap',1), -(10,3,28877,'Arcane Affinity',1), -(10,3,34082,'Advantaged State(DND)',1), -(10,4,81,'Dodge',1), -(10,4,203,'Unarmed',1), -(10,4,204,'Defense',1), -(10,4,522,'SPELLDEFENSE(DND)',1), -(10,4,669,'Language Orcish',1), -(10,4,813,'Language Thalassian',1), -(10,4,822,'Magic Resistance',1), -(10,4,1180,'Daggers',1), -(10,4,1752,'Sinister Strike',1), -(10,4,2098,'Eviscerate',1), -(10,4,2382,'Generic',1), -(10,4,2479,'Honorless Target',1), -(10,4,2567,'Thrown',1), -(10,4,2764,'Throw',1), -(10,4,3050,'Detect',1), -(10,4,3365,'Opening',1), -(10,4,6233,'Closing',1), -(10,4,6246,'Closing',1), -(10,4,6247,'Opening',1), -(10,4,6477,'Opening',1), -(10,4,6478,'Opening',1), -(10,4,6603,'Attack',1), -(10,4,7266,'Duel',1), -(10,4,7267,'Grovel',1), -(10,4,7355,'Stuck',1), -(10,4,8386,'Attacking',1), -(10,4,9077,'Leather',1), -(10,4,9078,'Cloth',1), -(10,4,9125,'Generic',1), -(10,4,16092,'Defensive State(DND)',1), -(10,4,21184,'Rogue Passive(DND)',1), -(10,4,21651,'Opening',1), -(10,4,21652,'Closing',1), -(10,4,22027,'Remove Insignia',1), -(10,4,22810,'Opening - No Text',1), -(10,4,25046,'Arcane Torrent',1), -(10,4,28734,'Mana Tap',1), -(10,4,28877,'Arcane Affinity',1), -(10,5,81,'Dodge',1), -(10,5,198,'One-Handed Maces',1), -(10,5,203,'Unarmed',1), -(10,5,204,'Defense',1), -(10,5,522,'SPELLDEFENSE(DND)',1), -(10,5,585,'Smite',1), -(10,5,669,'Language Orcish',1), -(10,5,813,'Language Thalassian',1), -(10,5,822,'Magic Resistance',1), -(10,5,2050,'Lesser Heal',1), -(10,5,2382,'Generic',1), -(10,5,2479,'Honorless Target',1), -(10,5,3050,'Detect',1), -(10,5,3365,'Opening',1), -(10,5,5009,'Wands',1), -(10,5,5019,'Shoot',1), -(10,5,6233,'Closing',1), -(10,5,6246,'Closing',1), -(10,5,6247,'Opening',1), -(10,5,6477,'Opening',1), -(10,5,6478,'Opening',1), -(10,5,6603,'Attack',1), -(10,5,7266,'Duel',1), -(10,5,7267,'Grovel',1), -(10,5,7355,'Stuck',1), -(10,5,8386,'Attacking',1), -(10,5,9078,'Cloth',1), -(10,5,9125,'Generic',1), -(10,5,21651,'Opening',1), -(10,5,21652,'Closing',1), -(10,5,22027,'Remove Insignia',1), -(10,5,22810,'Opening - No Text',1), -(10,5,28730,'Arcane Torrent',1), -(10,5,28734,'Mana Tap',1), -(10,5,28877,'Arcane Affinity',1), -(10,6,81,'Dodge',1), -(10,6,196,'One-Handed Axes',1), -(10,6,197,'Two-Handed Axes',1), -(10,6,200,'Polearms',1), -(10,6,201,'One-Handed Swords',1), -(10,6,202,'Two-Handed Swords',1), -(10,6,203,'Unarmed',1), -(10,6,204,'Defense',1), -(10,6,522,'SPELLDEFENSE (DND)',1), -(10,6,669,'Language Orcish',1), -(10,6,674,'Dual Wield',1), -(10,6,750,'Plate Mail',1), -(10,6,813,'Language Thalassian',1), -(10,6,822,'Magic Resistance',1), -(10,6,1843,'Disarm',1), -(10,6,2382,'Generic',1), -(10,6,2479,'Honorless Target',1), -(10,6,3050,'Detect',1), -(10,6,3127,'Parry',1), -(10,6,3275,'Linen Bandage',1), -(10,6,3276,'Heavy Linen Bandage',1), -(10,6,3277,'Wool Bandage',1), -(10,6,3278,'Heavy Wool Bandage',1), -(10,6,3365,'Opening',1), -(10,6,6233,'Closing',1), -(10,6,6246,'Closing',1), -(10,6,6247,'Opening',1), -(10,6,6477,'Opening',1), -(10,6,6478,'Opening',1), -(10,6,6603,'Attack',1), -(10,6,7266,'Duel',1), -(10,6,7267,'Grovel',1), -(10,6,7355,'Stuck',1), -(10,6,7928,'Silk Bandage',1), -(10,6,7929,'Heavy Silk Bandage',1), -(10,6,7934,'Anti-Venom',1), -(10,6,8386,'Attacking',1), -(10,6,8737,'Mail',1), -(10,6,9077,'Leather',1), -(10,6,9078,'Cloth',1), -(10,6,9125,'Generic',1), -(10,6,10840,'Mageweave Bandage',1), -(10,6,10841,'Heavy Mageweave Bandage',1), -(10,6,10846,'First Aid',1), -(10,6,18629,'Runecloth Bandage',1), -(10,6,18630,'Heavy Runecloth Bandage',1), -(10,6,21651,'Opening',1), -(10,6,21652,'Closing',1), -(10,6,22027,'Remove Insignia',1), -(10,6,22810,'Opening - No Text',1), -(10,6,28877,'Arcane Affinity',1), -(10,6,33391,'Journeyman Riding',1), -(10,6,45462,'Plague Strike',1), -(10,6,45477,'Icy Touch',1), -(10,6,45902,'Blood Strike',1), -(10,6,45903,'Offensive State (DND)',1), -(10,6,45927,'Summon Friend',1), -(10,6,47541,'Death Coil',1), -(10,6,48266,'Blood Presence',1), -(10,6,49410,'Forceful Deflection',1), -(10,6,49576,'Death Grip',1), -(10,6,50613,'Arcane Torrent',1), -(10,6,52665,'Sigil',1), -(10,6,59879,'Blood Plague',1), -(10,6,59921,'Frost Fever',1), -(10,6,61437,'Opening',1), -(10,6,61455,'Runic Focus',1), -(10,8,81,'Dodge',1), -(10,8,133,'Fireball',1), -(10,8,168,'Frost Armor',1), -(10,8,203,'Unarmed',1), -(10,8,204,'Defense',1), -(10,8,227,'Staves',1), -(10,8,522,'SPELLDEFENSE(DND)',1), -(10,8,669,'Language Orcish',1), -(10,8,813,'Language Thalassian',1), -(10,8,822,'Magic Resistance',1), -(10,8,2382,'Generic',1), -(10,8,2479,'Honorless Target',1), -(10,8,3050,'Detect',1), -(10,8,3365,'Opening',1), -(10,8,5009,'Wands',1), -(10,8,5019,'Shoot',1), -(10,8,6233,'Closing',1), -(10,8,6246,'Closing',1), -(10,8,6247,'Opening',1), -(10,8,6477,'Opening',1), -(10,8,6478,'Opening',1), -(10,8,6603,'Attack',1), -(10,8,7266,'Duel',1), -(10,8,7267,'Grovel',1), -(10,8,7355,'Stuck',1), -(10,8,8386,'Attacking',1), -(10,8,9078,'Cloth',1), -(10,8,9125,'Generic',1), -(10,8,21651,'Opening',1), -(10,8,21652,'Closing',1), -(10,8,22027,'Remove Insignia',1), -(10,8,22810,'Opening - No Text',1), -(10,8,28730,'Arcane Torrent',1), -(10,8,28734,'Mana Tap',1), -(10,8,28877,'Arcane Affinity',1), -(10,9,81,'Dodge',1), -(10,9,203,'Unarmed',1), -(10,9,204,'Defense',1), -(10,9,522,'SPELLDEFENSE(DND)',1), -(10,9,669,'Language Orcish',1), -(10,9,686,'Shadow Bolt',1), -(10,9,687,'Demon Skin',1), -(10,9,813,'Language Thalassian',1), -(10,9,822,'Magic Resistance',1), -(10,9,1180,'Daggers',1), -(10,9,2382,'Generic',1), -(10,9,2479,'Honorless Target',1), -(10,9,3050,'Detect',1), -(10,9,3365,'Opening',1), -(10,9,5009,'Wands',1), -(10,9,5019,'Shoot',1), -(10,9,6233,'Closing',1), -(10,9,6246,'Closing',1), -(10,9,6247,'Opening',1), -(10,9,6477,'Opening',1), -(10,9,6478,'Opening',1), -(10,9,6603,'Attack',1), -(10,9,7266,'Duel',1), -(10,9,7267,'Grovel',1), -(10,9,7355,'Stuck',1), -(10,9,8386,'Attacking',1), -(10,9,9078,'Cloth',1), -(10,9,9125,'Generic',1), -(10,9,21651,'Opening',1), -(10,9,21652,'Closing',1), -(10,9,22027,'Remove Insignia',1), -(10,9,22810,'Opening - No Text',1), -(10,9,28730,'Arcane Torrent',1), -(10,9,28734,'Mana Tap',1), -(10,9,28877,'Arcane Affinity',1), -(11,1,78,'Heroic Strike',1), -(11,1,81,'Dodge',1), -(11,1,107,'Block',1), -(11,1,198,'One-Handed Maces',1), -(11,1,201,'One-Handed Swords',1), -(11,1,202,'Two-Handed Swords',1), -(11,1,203,'Unarmed',1), -(11,1,204,'Defense',1), -(11,1,522,'SPELLDEFENSE(DND)',1), -(11,1,668,'Language Common',1), -(11,1,2382,'Generic',1), -(11,1,2457,'Battle Stance',1), -(11,1,2479,'Honorless Target',1), -(11,1,3050,'Detect',1), -(11,1,3365,'Opening',1), -(11,1,5301,'Defensive State(DND)',1), -(11,1,6233,'Closing',1), -(11,1,6246,'Closing',1), -(11,1,6247,'Opening',1), -(11,1,6477,'Opening',1), -(11,1,6478,'Opening',1), -(11,1,6562,'Heroic Presence',1), -(11,1,6603,'Attack',1), -(11,1,7266,'Duel',1), -(11,1,7267,'Grovel',1), -(11,1,7355,'Stuck',1), -(11,1,7376,'Defensive Stance Passive',0), -(11,1,7381,'Berserker Stance Passive',0), -(11,1,8386,'Attacking',1), -(11,1,8737,'Mail',1), -(11,1,9077,'Leather',1), -(11,1,9078,'Cloth',1), -(11,1,9116,'Shield',1), -(11,1,9125,'Generic',1), -(11,1,20579,'Shadow Resistance',1), -(11,1,21156,'Battle Stance Passive',0), -(11,1,21651,'Opening',1), -(11,1,21652,'Closing',1), -(11,1,22027,'Remove Insignia',1), -(11,1,22810,'Opening - No Text',1), -(11,1,28875,'Gemcutting',1), -(11,1,28880,'Gift of the Naaru',1), -(11,1,29932,'Language Draenei',1), -(11,1,32215,'Victorious State',1), -(11,2,81,'Dodge',1), -(11,2,107,'Block',1), -(11,2,198,'One-Handed Maces',1), -(11,2,199,'Two-Handed Maces',1), -(11,2,203,'Unarmed',1), -(11,2,204,'Defense',1), -(11,2,522,'SPELLDEFENSE(DND)',1), -(11,2,635,'Holy Light',1), -(11,2,668,'Language Common',1), -(11,2,2382,'Generic',1), -(11,2,2479,'Honorless Target',1), -(11,2,3050,'Detect',1), -(11,2,3365,'Opening',1), -(11,2,6233,'Closing',1), -(11,2,6246,'Closing',1), -(11,2,6247,'Opening',1), -(11,2,6477,'Opening',1), -(11,2,6478,'Opening',1), -(11,2,6562,'Heroic Presence',1), -(11,2,6603,'Attack',1), -(11,2,7266,'Duel',1), -(11,2,7267,'Grovel',1), -(11,2,7355,'Stuck',1), -(11,2,8386,'Attacking',1), -(11,2,8737,'Mail',1), -(11,2,9077,'Leather',1), -(11,2,9078,'Cloth',1), -(11,2,9116,'Shield',1), -(11,2,9125,'Generic',1), -(11,2,21084,'Seal of Righteousness',1), -(11,2,20579,'Shadow Resistance',1), -(11,2,21651,'Opening',1), -(11,2,21652,'Closing',1), -(11,2,22027,'Remove Insignia',1), -(11,2,22810,'Opening - No Text',1), -(11,2,27762,'Libram',1), -(11,2,28875,'Gemcutting',1), -(11,2,59542,'Gift of the Naaru',1), -(11,2,29932,'Language Draenei',1), -(11,3,75,'Auto Shot',1), -(11,3,81,'Dodge',1), -(11,3,201,'One-Handed Swords',1), -(11,3,203,'Unarmed',1), -(11,3,204,'Defense',1), -(11,3,522,'SPELLDEFENSE(DND)',1), -(11,3,668,'Language Common',1), -(11,3,2382,'Generic',1), -(11,3,2479,'Honorless Target',1), -(11,3,2973,'Raptor Strike',1), -(11,3,3050,'Detect',1), -(11,3,3365,'Opening',1), -(11,3,5011,'Crossbows',1), -(11,3,6233,'Closing',1), -(11,3,6246,'Closing',1), -(11,3,6247,'Opening',1), -(11,3,6477,'Opening',1), -(11,3,6478,'Opening',1), -(11,3,6562,'Heroic Presence',1), -(11,3,6603,'Attack',1), -(11,3,7266,'Duel',1), -(11,3,7267,'Grovel',1), -(11,3,7355,'Stuck',1), -(11,3,8386,'Attacking',1), -(11,3,9077,'Leather',1), -(11,3,9078,'Cloth',1), -(11,3,9125,'Generic',1), -(11,3,13358,'Defensive State(DND)',1), -(11,3,20579,'Shadow Resistance',1), -(11,3,21651,'Opening',1), -(11,3,21652,'Closing',1), -(11,3,22027,'Remove Insignia',1), -(11,3,22810,'Opening - No Text',1), -(11,3,24949,'Defensive State 2(DND)',1), -(11,3,28875,'Gemcutting',1), -(11,3,59543,'Gift of the Naaru',1), -(11,3,29932,'Language Draenei',1), -(11,3,34082,'Advantaged State(DND)',1), -(11,5,81,'Dodge',1), -(11,5,198,'One-Handed Maces',1), -(11,5,203,'Unarmed',1), -(11,5,204,'Defense',1), -(11,5,522,'SPELLDEFENSE(DND)',1), -(11,5,585,'Smite',1), -(11,5,668,'Language Common',1), -(11,5,2050,'Lesser Heal',1), -(11,5,2382,'Generic',1), -(11,5,2479,'Honorless Target',1), -(11,5,3050,'Detect',1), -(11,5,3365,'Opening',1), -(11,5,5009,'Wands',1), -(11,5,5019,'Shoot',1), -(11,5,6233,'Closing',1), -(11,5,6246,'Closing',1), -(11,5,6247,'Opening',1), -(11,5,6477,'Opening',1), -(11,5,6478,'Opening',1), -(11,5,6603,'Attack',1), -(11,5,7266,'Duel',1), -(11,5,7267,'Grovel',1), -(11,5,7355,'Stuck',1), -(11,5,8386,'Attacking',1), -(11,5,9078,'Cloth',1), -(11,5,9125,'Generic',1), -(11,5,20579,'Shadow Resistance',1), -(11,5,21651,'Opening',1), -(11,5,21652,'Closing',1), -(11,5,22027,'Remove Insignia',1), -(11,5,22810,'Opening - No Text',1), -(11,5,28875,'Gemcutting',1), -(11,5,28878,'Inspiring Presence',1), -(11,5,59544,'Gift of the Naaru',1), -(11,5,29932,'Language Draenei',1), -(11,6,81,'Dodge',1), -(11,6,196,'One-Handed Axes',1), -(11,6,197,'Two-Handed Axes',1), -(11,6,200,'Polearms',1), -(11,6,201,'One-Handed Swords',1), -(11,6,202,'Two-Handed Swords',1), -(11,6,203,'Unarmed',1), -(11,6,204,'Defense',1), -(11,6,522,'SPELLDEFENSE (DND)',1), -(11,6,668,'Language Common',1), -(11,6,674,'Dual Wield',1), -(11,6,750,'Plate Mail',1), -(11,6,1843,'Disarm',1), -(11,6,2382,'Generic',1), -(11,6,2479,'Honorless Target',1), -(11,6,3050,'Detect',1), -(11,6,3127,'Parry',1), -(11,6,3275,'Linen Bandage',1), -(11,6,3276,'Heavy Linen Bandage',1), -(11,6,3277,'Wool Bandage',1), -(11,6,3278,'Heavy Wool Bandage',1), -(11,6,3365,'Opening',1), -(11,6,6233,'Closing',1), -(11,6,6246,'Closing',1), -(11,6,6247,'Opening',1), -(11,6,6477,'Opening',1), -(11,6,6478,'Opening',1), -(11,6,6562,'Heroic Presence',1), -(11,6,6603,'Attack',1), -(11,6,7266,'Duel',1), -(11,6,7267,'Grovel',1), -(11,6,7355,'Stuck',1), -(11,6,7928,'Silk Bandage',1), -(11,6,7929,'Heavy Silk Bandage',1), -(11,6,7934,'Anti-Venom',1), -(11,6,8386,'Attacking',1), -(11,6,8737,'Mail',1), -(11,6,9077,'Leather',1), -(11,6,9078,'Cloth',1), -(11,6,9125,'Generic',1), -(11,6,10840,'Mageweave Bandage',1), -(11,6,10841,'Heavy Mageweave Bandage',1), -(11,6,10846,'First Aid',1), -(11,6,18629,'Runecloth Bandage',1), -(11,6,18630,'Heavy Runecloth Bandage',1), -(11,6,21651,'Opening',1), -(11,6,21652,'Closing',1), -(11,6,22027,'Remove Insignia',1), -(11,6,22810,'Opening - No Text',1), -(11,6,28875,'Gemcutting',1), -(11,6,29932,'Language Draenei',1), -(11,6,33391,'Journeyman Riding',1), -(11,6,45462,'Plague Strike',1), -(11,6,45477,'Icy Touch',1), -(11,6,45902,'Blood Strike',1), -(11,6,45903,'Offensive State (DND)',1), -(11,6,45927,'Summon Friend',1), -(11,6,47541,'Death Coil',1), -(11,6,48266,'Blood Presence',1), -(11,6,49410,'Forceful Deflection',1), -(11,6,49576,'Death Grip',1), -(11,6,52665,'Sigil',1), -(11,6,59539,'Shadow Resistance',1), -(11,6,59545,'Gift of the Naaru',1), -(11,6,59879,'Blood Plague',1), -(11,6,59921,'Frost Fever',1), -(11,6,61437,'Opening',1), -(11,6,61455,'Runic Focus',1), -(11,7,81,'Dodge',1), -(11,7,107,'Block',1), -(11,7,198,'One-Handed Maces',1), -(11,7,203,'Unarmed',1), -(11,7,204,'Defense',1), -(11,7,227,'Staves',1), -(11,7,331,'Healing Wave',1), -(11,7,403,'Lightning Bolt',1), -(11,7,522,'SPELLDEFENSE(DND)',1), -(11,7,668,'Language Common',1), -(11,7,2382,'Generic',1), -(11,7,2479,'Honorless Target',1), -(11,7,3050,'Detect',1), -(11,7,3365,'Opening',1), -(11,7,6233,'Closing',1), -(11,7,6246,'Closing',1), -(11,7,6247,'Opening',1), -(11,7,6477,'Opening',1), -(11,7,6478,'Opening',1), -(11,7,6603,'Attack',1), -(11,7,7266,'Duel',1), -(11,7,7267,'Grovel',1), -(11,7,7355,'Stuck',1), -(11,7,8386,'Attacking',1), -(11,7,9077,'Leather',1), -(11,7,9078,'Cloth',1), -(11,7,9116,'Shield',1), -(11,7,9125,'Generic',1), -(11,7,20579,'Shadow Resistance',1), -(11,7,21651,'Opening',1), -(11,7,21652,'Closing',1), -(11,7,22027,'Remove Insignia',1), -(11,7,22810,'Opening - No Text',1), -(11,7,27763,'Totem',1), -(11,7,28875,'Gemcutting',1), -(11,7,28878,'Inspiring Presence',1), -(11,7,59547,'Gift of the Naaru',1), -(11,7,29932,'Language Draenei',1), -(11,8,81,'Dodge',1), -(11,8,133,'Fireball',1), -(11,8,168,'Frost Armor',1), -(11,8,203,'Unarmed',1), -(11,8,204,'Defense',1), -(11,8,227,'Staves',1), -(11,8,522,'SPELLDEFENSE(DND)',1), -(11,8,668,'Language Common',1), -(11,8,2382,'Generic',1), -(11,8,2479,'Honorless Target',1), -(11,8,3050,'Detect',1), -(11,8,3365,'Opening',1), -(11,8,5009,'Wands',1), -(11,8,5019,'Shoot',1), -(11,8,6233,'Closing',1), -(11,8,6246,'Closing',1), -(11,8,6247,'Opening',1), -(11,8,6477,'Opening',1), -(11,8,6478,'Opening',1), -(11,8,6603,'Attack',1), -(11,8,7266,'Duel',1), -(11,8,7267,'Grovel',1), -(11,8,7355,'Stuck',1), -(11,8,8386,'Attacking',1), -(11,8,9078,'Cloth',1), -(11,8,9125,'Generic',1), -(11,8,20579,'Shadow Resistance',1), -(11,8,21651,'Opening',1), -(11,8,21652,'Closing',1), -(11,8,22027,'Remove Insignia',1), -(11,8,22810,'Opening - No Text',1), -(11,8,28875,'Gemcutting',1), -(11,8,28878,'Inspiring Presence',1), -(11,8,59548,'Gift of the Naaru',1), -(11,8,29932,'Language Draenei',1); +(1,1,78,'Heroic Strike'), +(1,1,81,'Dodge'), +(1,1,107,'Block'), +(1,1,196,'One-Handed Axes'), +(1,1,198,'One-Handed Maces'), +(1,1,201,'One-Handed Swords'), +(1,1,203,'Unarmed'), +(1,1,204,'Defense'), +(1,1,522,'SPELLDEFENSE(DND)'), +(1,1,668,'Language Common'), +(1,1,2382,'Generic'), +(1,1,2457,'Battle Stance'), +(1,1,2479,'Honorless Target'), +(1,1,3050,'Detect'), +(1,1,3365,'Opening'), +(1,1,5301,'Defensive State(DND)'), +(1,1,6233,'Closing'), +(1,1,6246,'Closing'), +(1,1,6247,'Opening'), +(1,1,6477,'Opening'), +(1,1,6478,'Opening'), +(1,1,6603,'Attack'), +(1,1,7266,'Duel'), +(1,1,7267,'Grovel'), +(1,1,7355,'Stuck'), +(1,1,8386,'Attacking'), +(1,1,8737,'Mail'), +(1,1,9077,'Leather'), +(1,1,9078,'Cloth'), +(1,1,9116,'Shield'), +(1,1,9125,'Generic'), +(1,1,20597,'Sword Specialization'), +(1,1,20598,'The Human Spirit'), +(1,1,20599,'Diplomacy'), +(1,1,20600,'Perception'), +(1,1,20864,'Mace Specialization'), +(1,1,21651,'Opening'), +(1,1,21652,'Closing'), +(1,1,22027,'Remove Insignia'), +(1,1,22810,'Opening - No Text'), +(1,1,32215,'Victorious State'), +(1,2,81,'Dodge'), +(1,2,107,'Block'), +(1,2,198,'One-Handed Maces'), +(1,2,199,'Two-Handed Maces'), +(1,2,203,'Unarmed'), +(1,2,204,'Defense'), +(1,2,522,'SPELLDEFENSE(DND)'), +(1,2,635,'Holy Light'), +(1,2,668,'Language Common'), +(1,2,2382,'Generic'), +(1,2,2479,'Honorless Target'), +(1,2,3050,'Detect'), +(1,2,3365,'Opening'), +(1,2,6233,'Closing'), +(1,2,6246,'Closing'), +(1,2,6247,'Opening'), +(1,2,6477,'Opening'), +(1,2,6478,'Opening'), +(1,2,6603,'Attack'), +(1,2,7266,'Duel'), +(1,2,7267,'Grovel'), +(1,2,7355,'Stuck'), +(1,2,8386,'Attacking'), +(1,2,8737,'Mail'), +(1,2,9077,'Leather'), +(1,2,9078,'Cloth'), +(1,2,9116,'Shield'), +(1,2,9125,'Generic'), +(1,2,21084,'Seal of Righteousness'), +(1,2,20597,'Sword Specialization'), +(1,2,20598,'The Human Spirit'), +(1,2,20599,'Diplomacy'), +(1,2,20600,'Perception'), +(1,2,20864,'Mace Specialization'), +(1,2,21651,'Opening'), +(1,2,21652,'Closing'), +(1,2,22027,'Remove Insignia'), +(1,2,22810,'Opening - No Text'), +(1,2,27762,'Libram'), +(1,4,81,'Dodge'), +(1,4,203,'Unarmed'), +(1,4,204,'Defense'), +(1,4,522,'SPELLDEFENSE(DND)'), +(1,4,668,'Language Common'), +(1,4,1180,'Daggers'), +(1,4,1752,'Sinister Strike'), +(1,4,2098,'Eviscerate'), +(1,4,2382,'Generic'), +(1,4,2479,'Honorless Target'), +(1,4,2567,'Thrown'), +(1,4,2764,'Throw'), +(1,4,3050,'Detect'), +(1,4,3365,'Opening'), +(1,4,6233,'Closing'), +(1,4,6246,'Closing'), +(1,4,6247,'Opening'), +(1,4,6477,'Opening'), +(1,4,6478,'Opening'), +(1,4,6603,'Attack'), +(1,4,7266,'Duel'), +(1,4,7267,'Grovel'), +(1,4,7355,'Stuck'), +(1,4,8386,'Attacking'), +(1,4,9077,'Leather'), +(1,4,9078,'Cloth'), +(1,4,9125,'Generic'), +(1,4,16092,'Defensive State(DND)'), +(1,4,20597,'Sword Specialization'), +(1,4,20598,'The Human Spirit'), +(1,4,20599,'Diplomacy'), +(1,4,20600,'Perception'), +(1,4,20864,'Mace Specialization'), +(1,4,21184,'Rogue Passive(DND)'), +(1,4,21651,'Opening'), +(1,4,21652,'Closing'), +(1,4,22027,'Remove Insignia'), +(1,4,22810,'Opening - No Text'), +(1,5,81,'Dodge'), +(1,5,198,'One-Handed Maces'), +(1,5,203,'Unarmed'), +(1,5,204,'Defense'), +(1,5,522,'SPELLDEFENSE(DND)'), +(1,5,585,'Smite'), +(1,5,668,'Language Common'), +(1,5,2050,'Lesser Heal'), +(1,5,2382,'Generic'), +(1,5,2479,'Honorless Target'), +(1,5,3050,'Detect'), +(1,5,3365,'Opening'), +(1,5,5009,'Wands'), +(1,5,5019,'Shoot'), +(1,5,6233,'Closing'), +(1,5,6246,'Closing'), +(1,5,6247,'Opening'), +(1,5,6477,'Opening'), +(1,5,6478,'Opening'), +(1,5,6603,'Attack'), +(1,5,7266,'Duel'), +(1,5,7267,'Grovel'), +(1,5,7355,'Stuck'), +(1,5,8386,'Attacking'), +(1,5,9078,'Cloth'), +(1,5,9125,'Generic'), +(1,5,20597,'Sword Specialization'), +(1,5,20598,'The Human Spirit'), +(1,5,20599,'Diplomacy'), +(1,5,20600,'Perception'), +(1,5,20864,'Mace Specialization'), +(1,5,21651,'Opening'), +(1,5,21652,'Closing'), +(1,5,22027,'Remove Insignia'), +(1,5,22810,'Opening - No Text'), +(1,6,81,'Dodge'), +(1,6,196,'One-Handed Axes'), +(1,6,197,'Two-Handed Axes'), +(1,6,200,'Polearms'), +(1,6,201,'One-Handed Swords'), +(1,6,202,'Two-Handed Swords'), +(1,6,203,'Unarmed'), +(1,6,204,'Defense'), +(1,6,522,'SPELLDEFENSE (DND)'), +(1,6,668,'Language Common'), +(1,6,674,'Dual Wield'), +(1,6,750,'Plate Mail'), +(1,6,1843,'Disarm'), +(1,6,2382,'Generic'), +(1,6,2479,'Honorless Target'), +(1,6,3050,'Detect'), +(1,6,3127,'Parry'), +(1,6,3275,'Linen Bandage'), +(1,6,3276,'Heavy Linen Bandage'), +(1,6,3277,'Wool Bandage'), +(1,6,3278,'Heavy Wool Bandage'), +(1,6,3365,'Opening'), +(1,6,6233,'Closing'), +(1,6,6246,'Closing'), +(1,6,6247,'Opening'), +(1,6,6477,'Opening'), +(1,6,6478,'Opening'), +(1,6,6603,'Attack'), +(1,6,7266,'Duel'), +(1,6,7267,'Grovel'), +(1,6,7355,'Stuck'), +(1,6,7928,'Silk Bandage'), +(1,6,7929,'Heavy Silk Bandage'), +(1,6,7934,'Anti-Venom'), +(1,6,8386,'Attacking'), +(1,6,8737,'Mail'), +(1,6,9077,'Leather'), +(1,6,9078,'Cloth'), +(1,6,9125,'Generic'), +(1,6,10840,'Mageweave Bandage'), +(1,6,10841,'Heavy Mageweave Bandage'), +(1,6,10846,'First Aid'), +(1,6,18629,'Runecloth Bandage'), +(1,6,18630,'Heavy Runecloth Bandage'), +(1,6,20597,'Sword Specialization'), +(1,6,20598,'The Human Spirit'), +(1,6,20599,'Diplomacy'), +(1,6,20864,'Mace Specialization'), +(1,6,21651,'Opening'), +(1,6,21652,'Closing'), +(1,6,22027,'Remove Insignia'), +(1,6,22810,'Opening - No Text'), +(1,6,33391,'Journeyman Riding'), +(1,6,45462,'Plague Strike'), +(1,6,45477,'Icy Touch'), +(1,6,45902,'Blood Strike'), +(1,6,45903,'Offensive State (DND)'), +(1,6,45927,'Summon Friend'), +(1,6,47541,'Death Coil'), +(1,6,48266,'Blood Presence'), +(1,6,49410,'Forceful Deflection'), +(1,6,49576,'Death Grip'), +(1,6,52665,'Sigil'), +(1,6,58985,'Perception'), +(1,6,59752,'Every Man for Himself'), +(1,6,59879,'Blood Plague'), +(1,6,59921,'Frost Fever'), +(1,6,61437,'Opening'), +(1,6,61455,'Runic Focus'), +(1,8,81,'Dodge'), +(1,8,133,'Fireball'), +(1,8,168,'Frost Armor'), +(1,8,203,'Unarmed'), +(1,8,204,'Defense'), +(1,8,227,'Staves'), +(1,8,522,'SPELLDEFENSE(DND)'), +(1,8,668,'Language Common'), +(1,8,2382,'Generic'), +(1,8,2479,'Honorless Target'), +(1,8,3050,'Detect'), +(1,8,3365,'Opening'), +(1,8,5009,'Wands'), +(1,8,5019,'Shoot'), +(1,8,6233,'Closing'), +(1,8,6246,'Closing'), +(1,8,6247,'Opening'), +(1,8,6477,'Opening'), +(1,8,6478,'Opening'), +(1,8,6603,'Attack'), +(1,8,7266,'Duel'), +(1,8,7267,'Grovel'), +(1,8,7355,'Stuck'), +(1,8,8386,'Attacking'), +(1,8,9078,'Cloth'), +(1,8,9125,'Generic'), +(1,8,20597,'Sword Specialization'), +(1,8,20598,'The Human Spirit'), +(1,8,20599,'Diplomacy'), +(1,8,20600,'Perception'), +(1,8,20864,'Mace Specialization'), +(1,8,21651,'Opening'), +(1,8,21652,'Closing'), +(1,8,22027,'Remove Insignia'), +(1,8,22810,'Opening - No Text'), +(1,9,81,'Dodge'), +(1,9,203,'Unarmed'), +(1,9,204,'Defense'), +(1,9,522,'SPELLDEFENSE(DND)'), +(1,9,668,'Language Common'), +(1,9,686,'Shadow Bolt'), +(1,9,687,'Demon Skin'), +(1,9,1180,'Daggers'), +(1,9,2382,'Generic'), +(1,9,2479,'Honorless Target'), +(1,9,3050,'Detect'), +(1,9,3365,'Opening'), +(1,9,5009,'Wands'), +(1,9,5019,'Shoot'), +(1,9,6233,'Closing'), +(1,9,6246,'Closing'), +(1,9,6247,'Opening'), +(1,9,6477,'Opening'), +(1,9,6478,'Opening'), +(1,9,6603,'Attack'), +(1,9,7266,'Duel'), +(1,9,7267,'Grovel'), +(1,9,7355,'Stuck'), +(1,9,8386,'Attacking'), +(1,9,9078,'Cloth'), +(1,9,9125,'Generic'), +(1,9,20597,'Sword Specialization'), +(1,9,20598,'The Human Spirit'), +(1,9,20599,'Diplomacy'), +(1,9,20600,'Perception'), +(1,9,20864,'Mace Specialization'), +(1,9,21651,'Opening'), +(1,9,21652,'Closing'), +(1,9,22027,'Remove Insignia'), +(1,9,22810,'Opening - No Text'), +(2,1,78,'Heroic Strike'), +(2,1,81,'Dodge'), +(2,1,107,'Block'), +(2,1,196,'One-Handed Axes'), +(2,1,197,'Two-Handed Axes'), +(2,1,201,'One-Handed Swords'), +(2,1,203,'Unarmed'), +(2,1,204,'Defense'), +(2,1,522,'SPELLDEFENSE(DND)'), +(2,1,669,'Language Orcish'), +(2,1,2382,'Generic'), +(2,1,2457,'Battle Stance'), +(2,1,2479,'Honorless Target'), +(2,1,3050,'Detect'), +(2,1,3365,'Opening'), +(2,1,5301,'Defensive State(DND)'), +(2,1,6233,'Closing'), +(2,1,6246,'Closing'), +(2,1,6247,'Opening'), +(2,1,6477,'Opening'), +(2,1,6478,'Opening'), +(2,1,6603,'Attack'), +(2,1,7266,'Duel'), +(2,1,7267,'Grovel'), +(2,1,7355,'Stuck'), +(2,1,8386,'Attacking'), +(2,1,8737,'Mail'), +(2,1,9077,'Leather'), +(2,1,9078,'Cloth'), +(2,1,9116,'Shield'), +(2,1,9125,'Generic'), +(2,1,20572,'Blood Fury'), +(2,1,20573,'Hardiness'), +(2,1,20574,'Axe Specialization'), +(2,1,21563,'Command'), +(2,1,21651,'Opening'), +(2,1,21652,'Closing'), +(2,1,22027,'Remove Insignia'), +(2,1,22810,'Opening - No Text'), +(2,1,32215,'Victorious State'), +(2,3,75,'Auto Shot'), +(2,3,81,'Dodge'), +(2,3,196,'One-Handed Axes'), +(2,3,203,'Unarmed'), +(2,3,204,'Defense'), +(2,3,264,'Bows'), +(2,3,522,'SPELLDEFENSE(DND)'), +(2,3,669,'Language Orcish'), +(2,3,2382,'Generic'), +(2,3,2479,'Honorless Target'), +(2,3,2973,'Raptor Strike'), +(2,3,3050,'Detect'), +(2,3,3365,'Opening'), +(2,3,6233,'Closing'), +(2,3,6246,'Closing'), +(2,3,6247,'Opening'), +(2,3,6477,'Opening'), +(2,3,6478,'Opening'), +(2,3,6603,'Attack'), +(2,3,7266,'Duel'), +(2,3,7267,'Grovel'), +(2,3,7355,'Stuck'), +(2,3,8386,'Attacking'), +(2,3,9077,'Leather'), +(2,3,9078,'Cloth'), +(2,3,9125,'Generic'), +(2,3,13358,'Defensive State(DND)'), +(2,3,20572,'Blood Fury'), +(2,3,20573,'Hardiness'), +(2,3,20574,'Axe Specialization'), +(2,3,20576,'Command'), +(2,3,21651,'Opening'), +(2,3,21652,'Closing'), +(2,3,22027,'Remove Insignia'), +(2,3,22810,'Opening - No Text'), +(2,3,24949,'Defensive State 2(DND)'), +(2,3,34082,'Advantaged State(DND)'), +(2,4,81,'Dodge'), +(2,4,203,'Unarmed'), +(2,4,204,'Defense'), +(2,4,522,'SPELLDEFENSE(DND)'), +(2,4,669,'Language Orcish'), +(2,4,1180,'Daggers'), +(2,4,1752,'Sinister Strike'), +(2,4,2098,'Eviscerate'), +(2,4,2382,'Generic'), +(2,4,2479,'Honorless Target'), +(2,4,2567,'Thrown'), +(2,4,2764,'Throw'), +(2,4,3050,'Detect'), +(2,4,3365,'Opening'), +(2,4,6233,'Closing'), +(2,4,6246,'Closing'), +(2,4,6247,'Opening'), +(2,4,6477,'Opening'), +(2,4,6478,'Opening'), +(2,4,6603,'Attack'), +(2,4,7266,'Duel'), +(2,4,7267,'Grovel'), +(2,4,7355,'Stuck'), +(2,4,8386,'Attacking'), +(2,4,9077,'Leather'), +(2,4,9078,'Cloth'), +(2,4,9125,'Generic'), +(2,4,16092,'Defensive State(DND)'), +(2,4,20572,'Blood Fury'), +(2,4,20573,'Hardiness'), +(2,4,20574,'Axe Specialization'), +(2,4,21184,'Rogue Passive(DND)'), +(2,4,21563,'Command'), +(2,4,21651,'Opening'), +(2,4,21652,'Closing'), +(2,4,22027,'Remove Insignia'), +(2,4,22810,'Opening - No Text'), +(2,6,81,'Dodge'), +(2,6,196,'One-Handed Axes'), +(2,6,197,'Two-Handed Axes'), +(2,6,200,'Polearms'), +(2,6,201,'One-Handed Swords'), +(2,6,202,'Two-Handed Swords'), +(2,6,203,'Unarmed'), +(2,6,204,'Defense'), +(2,6,522,'SPELLDEFENSE (DND)'), +(2,6,669,'Language Orcish'), +(2,6,674,'Dual Wield'), +(2,6,750,'Plate Mail'), +(2,6,1843,'Disarm'), +(2,6,2382,'Generic'), +(2,6,2479,'Honorless Target'), +(2,6,3050,'Detect'), +(2,6,3127,'Parry'), +(2,6,3275,'Linen Bandage'), +(2,6,3276,'Heavy Linen Bandage'), +(2,6,3277,'Wool Bandage'), +(2,6,3278,'Heavy Wool Bandage'), +(2,6,3365,'Opening'), +(2,6,6233,'Closing'), +(2,6,6246,'Closing'), +(2,6,6247,'Opening'), +(2,6,6477,'Opening'), +(2,6,6478,'Opening'), +(2,6,6603,'Attack'), +(2,6,7266,'Duel'), +(2,6,7267,'Grovel'), +(2,6,7355,'Stuck'), +(2,6,7928,'Silk Bandage'), +(2,6,7929,'Heavy Silk Bandage'), +(2,6,7934,'Anti-Venom'), +(2,6,8386,'Attacking'), +(2,6,8737,'Mail'), +(2,6,9077,'Leather'), +(2,6,9078,'Cloth'), +(2,6,9125,'Generic'), +(2,6,10840,'Mageweave Bandage'), +(2,6,10841,'Heavy Mageweave Bandage'), +(2,6,10846,'First Aid'), +(2,6,18629,'Runecloth Bandage'), +(2,6,18630,'Heavy Runecloth Bandage'), +(2,6,20572,'Blood Fury'), +(2,6,20573,'Hardiness'), +(2,6,20574,'Axe Specialization'), +(2,6,21651,'Opening'), +(2,6,21652,'Closing'), +(2,6,22027,'Remove Insignia'), +(2,6,22810,'Opening - No Text'), +(2,6,33391,'Journeyman Riding'), +(2,6,45462,'Plague Strike'), +(2,6,45477,'Icy Touch'), +(2,6,45902,'Blood Strike'), +(2,6,45903,'Offensive State (DND)'), +(2,6,45927,'Summon Friend'), +(2,6,47541,'Death Coil'), +(2,6,48266,'Blood Presence'), +(2,6,49410,'Forceful Deflection'), +(2,6,49576,'Death Grip'), +(2,6,52665,'Sigil'), +(2,6,54562,'Command'), +(2,6,59879,'Blood Plague'), +(2,6,59921,'Frost Fever'), +(2,6,61437,'Opening'), +(2,6,61455,'Runic Focus'), +(2,7,81,'Dodge'), +(2,7,107,'Block'), +(2,7,198,'One-Handed Maces'), +(2,7,203,'Unarmed'), +(2,7,204,'Defense'), +(2,7,227,'Staves'), +(2,7,331,'Healing Wave'), +(2,7,403,'Lightning Bolt'), +(2,7,522,'SPELLDEFENSE(DND)'), +(2,7,669,'Language Orcish'), +(2,7,2382,'Generic'), +(2,7,2479,'Honorless Target'), +(2,7,3050,'Detect'), +(2,7,3365,'Opening'), +(2,7,6233,'Closing'), +(2,7,6246,'Closing'), +(2,7,6247,'Opening'), +(2,7,6477,'Opening'), +(2,7,6478,'Opening'), +(2,7,6603,'Attack'), +(2,7,7266,'Duel'), +(2,7,7267,'Grovel'), +(2,7,7355,'Stuck'), +(2,7,8386,'Attacking'), +(2,7,9077,'Leather'), +(2,7,9078,'Cloth'), +(2,7,9116,'Shield'), +(2,7,9125,'Generic'), +(2,7,20573,'Hardiness'), +(2,7,20574,'Axe Specialization'), +(2,7,21563,'Command'), +(2,7,21651,'Opening'), +(2,7,21652,'Closing'), +(2,7,22027,'Remove Insignia'), +(2,7,22810,'Opening - No Text'), +(2,7,27763,'Totem'), +(2,7,33697,'Blood Fury'), +(2,9,81,'Dodge'), +(2,9,203,'Unarmed'), +(2,9,204,'Defense'), +(2,9,522,'SPELLDEFENSE(DND)'), +(2,9,669,'Language Orcish'), +(2,9,686,'Shadow Bolt'), +(2,9,687,'Demon Skin'), +(2,9,1180,'Daggers'), +(2,9,2382,'Generic'), +(2,9,2479,'Honorless Target'), +(2,9,3050,'Detect'), +(2,9,3365,'Opening'), +(2,9,5009,'Wands'), +(2,9,5019,'Shoot'), +(2,9,6233,'Closing'), +(2,9,6246,'Closing'), +(2,9,6247,'Opening'), +(2,9,6477,'Opening'), +(2,9,6478,'Opening'), +(2,9,6603,'Attack'), +(2,9,7266,'Duel'), +(2,9,7267,'Grovel'), +(2,9,7355,'Stuck'), +(2,9,8386,'Attacking'), +(2,9,9078,'Cloth'), +(2,9,9125,'Generic'), +(2,9,20573,'Hardiness'), +(2,9,20574,'Axe Specialization'), +(2,9,20575,'Command'), +(2,9,21651,'Opening'), +(2,9,21652,'Closing'), +(2,9,22027,'Remove Insignia'), +(2,9,22810,'Opening - No Text'), +(2,9,33702,'Blood Fury'), +(3,1,78,'Heroic Strike'), +(3,1,81,'Dodge'), +(3,1,107,'Block'), +(3,1,196,'One-Handed Axes'), +(3,1,197,'Two-Handed Axes'), +(3,1,198,'One-Handed Maces'), +(3,1,203,'Unarmed'), +(3,1,204,'Defense'), +(3,1,522,'SPELLDEFENSE(DND)'), +(3,1,668,'Language Common'), +(3,1,672,'Language Dwarven'), +(3,1,2382,'Generic'), +(3,1,2457,'Battle Stance'), +(3,1,2479,'Honorless Target'), +(3,1,2481,'Find Treasure'), +(3,1,3050,'Detect'), +(3,1,3365,'Opening'), +(3,1,5301,'Defensive State(DND)'), +(3,1,6233,'Closing'), +(3,1,6246,'Closing'), +(3,1,6247,'Opening'), +(3,1,6477,'Opening'), +(3,1,6478,'Opening'), +(3,1,6603,'Attack'), +(3,1,7266,'Duel'), +(3,1,7267,'Grovel'), +(3,1,7355,'Stuck'), +(3,1,8386,'Attacking'), +(3,1,8737,'Mail'), +(3,1,9077,'Leather'), +(3,1,9078,'Cloth'), +(3,1,9116,'Shield'), +(3,1,9125,'Generic'), +(3,1,20594,'Stoneform'), +(3,1,20595,'Gun Specialization'), +(3,1,20596,'Frost Resistance'), +(3,1,21651,'Opening'), +(3,1,21652,'Closing'), +(3,1,22027,'Remove Insignia'), +(3,1,22810,'Opening - No Text'), +(3,1,32215,'Victorious State'), +(3,2,81,'Dodge'), +(3,2,107,'Block'), +(3,2,198,'One-Handed Maces'), +(3,2,199,'Two-Handed Maces'), +(3,2,203,'Unarmed'), +(3,2,204,'Defense'), +(3,2,522,'SPELLDEFENSE(DND)'), +(3,2,635,'Holy Light'), +(3,2,668,'Language Common'), +(3,2,672,'Language Dwarven'), +(3,2,2382,'Generic'), +(3,2,2479,'Honorless Target'), +(3,2,2481,'Find Treasure'), +(3,2,3050,'Detect'), +(3,2,3365,'Opening'), +(3,2,6233,'Closing'), +(3,2,6246,'Closing'), +(3,2,6247,'Opening'), +(3,2,6477,'Opening'), +(3,2,6478,'Opening'), +(3,2,6603,'Attack'), +(3,2,7266,'Duel'), +(3,2,7267,'Grovel'), +(3,2,7355,'Stuck'), +(3,2,8386,'Attacking'), +(3,2,8737,'Mail'), +(3,2,9077,'Leather'), +(3,2,9078,'Cloth'), +(3,2,9116,'Shield'), +(3,2,9125,'Generic'), +(3,2,21084,'Seal of Righteousness'), +(3,2,20594,'Stoneform'), +(3,2,20595,'Gun Specialization'), +(3,2,20596,'Frost Resistance'), +(3,2,21651,'Opening'), +(3,2,21652,'Closing'), +(3,2,22027,'Remove Insignia'), +(3,2,22810,'Opening - No Text'), +(3,2,27762,'Libram'), +(3,3,75,'Auto Shot'), +(3,3,81,'Dodge'), +(3,3,196,'One-Handed Axes'), +(3,3,203,'Unarmed'), +(3,3,204,'Defense'), +(3,3,266,'Guns'), +(3,3,522,'SPELLDEFENSE(DND)'), +(3,3,668,'Language Common'), +(3,3,672,'Language Dwarven'), +(3,3,2382,'Generic'), +(3,3,2479,'Honorless Target'), +(3,3,2481,'Find Treasure'), +(3,3,2973,'Raptor Strike'), +(3,3,3050,'Detect'), +(3,3,3365,'Opening'), +(3,3,6233,'Closing'), +(3,3,6246,'Closing'), +(3,3,6247,'Opening'), +(3,3,6477,'Opening'), +(3,3,6478,'Opening'), +(3,3,6603,'Attack'), +(3,3,7266,'Duel'), +(3,3,7267,'Grovel'), +(3,3,7355,'Stuck'), +(3,3,8386,'Attacking'), +(3,3,9077,'Leather'), +(3,3,9078,'Cloth'), +(3,3,9125,'Generic'), +(3,3,13358,'Defensive State(DND)'), +(3,3,20594,'Stoneform'), +(3,3,20595,'Gun Specialization'), +(3,3,20596,'Frost Resistance'), +(3,3,21651,'Opening'), +(3,3,21652,'Closing'), +(3,3,22027,'Remove Insignia'), +(3,3,22810,'Opening - No Text'), +(3,3,24949,'Defensive State 2(DND)'), +(3,3,34082,'Advantaged State(DND)'), +(3,4,81,'Dodge'), +(3,4,203,'Unarmed'), +(3,4,204,'Defense'), +(3,4,522,'SPELLDEFENSE(DND)'), +(3,4,668,'Language Common'), +(3,4,672,'Language Dwarven'), +(3,4,1180,'Daggers'), +(3,4,1752,'Sinister Strike'), +(3,4,2098,'Eviscerate'), +(3,4,2382,'Generic'), +(3,4,2479,'Honorless Target'), +(3,4,2481,'Find Treasure'), +(3,4,2567,'Thrown'), +(3,4,2764,'Throw'), +(3,4,3050,'Detect'), +(3,4,3365,'Opening'), +(3,4,6233,'Closing'), +(3,4,6246,'Closing'), +(3,4,6247,'Opening'), +(3,4,6477,'Opening'), +(3,4,6478,'Opening'), +(3,4,6603,'Attack'), +(3,4,7266,'Duel'), +(3,4,7267,'Grovel'), +(3,4,7355,'Stuck'), +(3,4,8386,'Attacking'), +(3,4,9077,'Leather'), +(3,4,9078,'Cloth'), +(3,4,9125,'Generic'), +(3,4,16092,'Defensive State(DND)'), +(3,4,20594,'Stoneform'), +(3,4,20595,'Gun Specialization'), +(3,4,20596,'Frost Resistance'), +(3,4,21184,'Rogue Passive(DND)'), +(3,4,21651,'Opening'), +(3,4,21652,'Closing'), +(3,4,22027,'Remove Insignia'), +(3,4,22810,'Opening - No Text'), +(3,5,81,'Dodge'), +(3,5,198,'One-Handed Maces'), +(3,5,203,'Unarmed'), +(3,5,204,'Defense'), +(3,5,522,'SPELLDEFENSE(DND)'), +(3,5,585,'Smite'), +(3,5,668,'Language Common'), +(3,5,672,'Language Dwarven'), +(3,5,2050,'Lesser Heal'), +(3,5,2382,'Generic'), +(3,5,2479,'Honorless Target'), +(3,5,2481,'Find Treasure'), +(3,5,3050,'Detect'), +(3,5,3365,'Opening'), +(3,5,5009,'Wands'), +(3,5,5019,'Shoot'), +(3,5,6233,'Closing'), +(3,5,6246,'Closing'), +(3,5,6247,'Opening'), +(3,5,6477,'Opening'), +(3,5,6478,'Opening'), +(3,5,6603,'Attack'), +(3,5,7266,'Duel'), +(3,5,7267,'Grovel'), +(3,5,7355,'Stuck'), +(3,5,8386,'Attacking'), +(3,5,9078,'Cloth'), +(3,5,9125,'Generic'), +(3,5,20594,'Stoneform'), +(3,5,20595,'Gun Specialization'), +(3,5,20596,'Frost Resistance'), +(3,5,21651,'Opening'), +(3,5,21652,'Closing'), +(3,5,22027,'Remove Insignia'), +(3,5,22810,'Opening - No Text'), +(3,6,81,'Dodge'), +(3,6,196,'One-Handed Axes'), +(3,6,197,'Two-Handed Axes'), +(3,6,200,'Polearms'), +(3,6,201,'One-Handed Swords'), +(3,6,202,'Two-Handed Swords'), +(3,6,203,'Unarmed'), +(3,6,204,'Defense'), +(3,6,522,'SPELLDEFENSE (DND)'), +(3,6,668,'Language Common'), +(3,6,672,'Language Dwarven'), +(3,6,674,'Dual Wield'), +(3,6,750,'Plate Mail'), +(3,6,1843,'Disarm'), +(3,6,2382,'Generic'), +(3,6,2479,'Honorless Target'), +(3,6,2481,'Find Treasure'), +(3,6,3050,'Detect'), +(3,6,3127,'Parry'), +(3,6,3275,'Linen Bandage'), +(3,6,3276,'Heavy Linen Bandage'), +(3,6,3277,'Wool Bandage'), +(3,6,3278,'Heavy Wool Bandage'), +(3,6,3365,'Opening'), +(3,6,6233,'Closing'), +(3,6,6246,'Closing'), +(3,6,6247,'Opening'), +(3,6,6477,'Opening'), +(3,6,6478,'Opening'), +(3,6,6603,'Attack'), +(3,6,7266,'Duel'), +(3,6,7267,'Grovel'), +(3,6,7355,'Stuck'), +(3,6,7928,'Silk Bandage'), +(3,6,7929,'Heavy Silk Bandage'), +(3,6,7934,'Anti-Venom'), +(3,6,8386,'Attacking'), +(3,6,8737,'Mail'), +(3,6,9077,'Leather'), +(3,6,9078,'Cloth'), +(3,6,9125,'Generic'), +(3,6,10840,'Mageweave Bandage'), +(3,6,10841,'Heavy Mageweave Bandage'), +(3,6,10846,'First Aid'), +(3,6,18629,'Runecloth Bandage'), +(3,6,18630,'Heavy Runecloth Bandage'), +(3,6,20594,'Stoneform'), +(3,6,20595,'Gun Specialization'), +(3,6,20596,'Frost Resistance'), +(3,6,21651,'Opening'), +(3,6,21652,'Closing'), +(3,6,22027,'Remove Insignia'), +(3,6,22810,'Opening - No Text'), +(3,6,33391,'Journeyman Riding'), +(3,6,45462,'Plague Strike'), +(3,6,45477,'Icy Touch'), +(3,6,45902,'Blood Strike'), +(3,6,45903,'Offensive State (DND)'), +(3,6,45927,'Summon Friend'), +(3,6,47541,'Death Coil'), +(3,6,48266,'Blood Presence'), +(3,6,49410,'Forceful Deflection'), +(3,6,49576,'Death Grip'), +(3,6,52665,'Sigil'), +(3,6,59224,'Mace Specialization'), +(3,6,59879,'Blood Plague'), +(3,6,59921,'Frost Fever'), +(3,6,61437,'Opening'), +(3,6,61455,'Runic Focus'), +(4,1,78,'Heroic Strike'), +(4,1,81,'Dodge'), +(4,1,107,'Block'), +(4,1,198,'One-Handed Maces'), +(4,1,201,'One-Handed Swords'), +(4,1,203,'Unarmed'), +(4,1,204,'Defense'), +(4,1,522,'SPELLDEFENSE(DND)'), +(4,1,668,'Language Common'), +(4,1,671,'Language Darnassian'), +(4,1,1180,'Daggers'), +(4,1,2382,'Generic'), +(4,1,2457,'Battle Stance'), +(4,1,2479,'Honorless Target'), +(4,1,3050,'Detect'), +(4,1,3365,'Opening'), +(4,1,5301,'Defensive State(DND)'), +(4,1,6233,'Closing'), +(4,1,6246,'Closing'), +(4,1,6247,'Opening'), +(4,1,6477,'Opening'), +(4,1,6478,'Opening'), +(4,1,6603,'Attack'), +(4,1,7266,'Duel'), +(4,1,7267,'Grovel'), +(4,1,7355,'Stuck'), +(4,1,8386,'Attacking'), +(4,1,8737,'Mail'), +(4,1,9077,'Leather'), +(4,1,9078,'Cloth'), +(4,1,9116,'Shield'), +(4,1,9125,'Generic'), +(4,1,20580,'Shadowmeld'), +(4,1,20582,'Quickness'), +(4,1,20583,'Nature Resistance'), +(4,1,20585,'Wisp Spirit'), +(4,1,21009,'Shadowmeld Passive'), +(4,1,21651,'Opening'), +(4,1,21652,'Closing'), +(4,1,22027,'Remove Insignia'), +(4,1,22810,'Opening - No Text'), +(4,1,32215,'Victorious State'), +(4,3,75,'Auto Shot'), +(4,3,81,'Dodge'), +(4,3,203,'Unarmed'), +(4,3,204,'Defense'), +(4,3,264,'Bows'), +(4,3,522,'SPELLDEFENSE(DND)'), +(4,3,668,'Language Common'), +(4,3,671,'Language Darnassian'), +(4,3,1180,'Daggers'), +(4,3,2382,'Generic'), +(4,3,2479,'Honorless Target'), +(4,3,2973,'Raptor Strike'), +(4,3,3050,'Detect'), +(4,3,3365,'Opening'), +(4,3,6233,'Closing'), +(4,3,6246,'Closing'), +(4,3,6247,'Opening'), +(4,3,6477,'Opening'), +(4,3,6478,'Opening'), +(4,3,6603,'Attack'), +(4,3,7266,'Duel'), +(4,3,7267,'Grovel'), +(4,3,7355,'Stuck'), +(4,3,8386,'Attacking'), +(4,3,9077,'Leather'), +(4,3,9078,'Cloth'), +(4,3,9125,'Generic'), +(4,3,13358,'Defensive State(DND)'), +(4,3,20580,'Shadowmeld'), +(4,3,20582,'Quickness'), +(4,3,20583,'Nature Resistance'), +(4,3,20585,'Wisp Spirit'), +(4,3,21009,'Shadowmeld Passive'), +(4,3,21651,'Opening'), +(4,3,21652,'Closing'), +(4,3,22027,'Remove Insignia'), +(4,3,22810,'Opening - No Text'), +(4,3,24949,'Defensive State 2(DND)'), +(4,3,34082,'Advantaged State(DND)'), +(4,4,81,'Dodge'), +(4,4,203,'Unarmed'), +(4,4,204,'Defense'), +(4,4,522,'SPELLDEFENSE(DND)'), +(4,4,668,'Language Common'), +(4,4,671,'Language Darnassian'), +(4,4,1180,'Daggers'), +(4,4,1752,'Sinister Strike'), +(4,4,2098,'Eviscerate'), +(4,4,2382,'Generic'), +(4,4,2479,'Honorless Target'), +(4,4,2567,'Thrown'), +(4,4,2764,'Throw'), +(4,4,3050,'Detect'), +(4,4,3365,'Opening'), +(4,4,6233,'Closing'), +(4,4,6246,'Closing'), +(4,4,6247,'Opening'), +(4,4,6477,'Opening'), +(4,4,6478,'Opening'), +(4,4,6603,'Attack'), +(4,4,7266,'Duel'), +(4,4,7267,'Grovel'), +(4,4,7355,'Stuck'), +(4,4,8386,'Attacking'), +(4,4,9077,'Leather'), +(4,4,9078,'Cloth'), +(4,4,9125,'Generic'), +(4,4,16092,'Defensive State(DND)'), +(4,4,20580,'Shadowmeld'), +(4,4,20582,'Quickness'), +(4,4,20583,'Nature Resistance'), +(4,4,20585,'Wisp Spirit'), +(4,4,21009,'Shadowmeld Passive'), +(4,4,21184,'Rogue Passive(DND)'), +(4,4,21651,'Opening'), +(4,4,21652,'Closing'), +(4,4,22027,'Remove Insignia'), +(4,4,22810,'Opening - No Text'), +(4,5,81,'Dodge'), +(4,5,198,'One-Handed Maces'), +(4,5,203,'Unarmed'), +(4,5,204,'Defense'), +(4,5,522,'SPELLDEFENSE(DND)'), +(4,5,585,'Smite'), +(4,5,668,'Language Common'), +(4,5,671,'Language Darnassian'), +(4,5,2050,'Lesser Heal'), +(4,5,2382,'Generic'), +(4,5,2479,'Honorless Target'), +(4,5,3050,'Detect'), +(4,5,3365,'Opening'), +(4,5,5009,'Wands'), +(4,5,5019,'Shoot'), +(4,5,6233,'Closing'), +(4,5,6246,'Closing'), +(4,5,6247,'Opening'), +(4,5,6477,'Opening'), +(4,5,6478,'Opening'), +(4,5,6603,'Attack'), +(4,5,7266,'Duel'), +(4,5,7267,'Grovel'), +(4,5,7355,'Stuck'), +(4,5,8386,'Attacking'), +(4,5,9078,'Cloth'), +(4,5,9125,'Generic'), +(4,5,20580,'Shadowmeld'), +(4,5,20582,'Quickness'), +(4,5,20583,'Nature Resistance'), +(4,5,20585,'Wisp Spirit'), +(4,5,21009,'Shadowmeld Passive'), +(4,5,21651,'Opening'), +(4,5,21652,'Closing'), +(4,5,22027,'Remove Insignia'), +(4,5,22810,'Opening - No Text'), +(4,6,81,'Dodge'), +(4,6,196,'One-Handed Axes'), +(4,6,197,'Two-Handed Axes'), +(4,6,200,'Polearms'), +(4,6,201,'One-Handed Swords'), +(4,6,202,'Two-Handed Swords'), +(4,6,203,'Unarmed'), +(4,6,204,'Defense'), +(4,6,522,'SPELLDEFENSE (DND)'), +(4,6,668,'Language Common'), +(4,6,671,'Language Darnassian'), +(4,6,674,'Dual Wield'), +(4,6,750,'Plate Mail'), +(4,6,1843,'Disarm'), +(4,6,2382,'Generic'), +(4,6,2479,'Honorless Target'), +(4,6,3050,'Detect'), +(4,6,3127,'Parry'), +(4,6,3275,'Linen Bandage'), +(4,6,3276,'Heavy Linen Bandage'), +(4,6,3277,'Wool Bandage'), +(4,6,3278,'Heavy Wool Bandage'), +(4,6,3365,'Opening'), +(4,6,6233,'Closing'), +(4,6,6246,'Closing'), +(4,6,6247,'Opening'), +(4,6,6477,'Opening'), +(4,6,6478,'Opening'), +(4,6,6603,'Attack'), +(4,6,7266,'Duel'), +(4,6,7267,'Grovel'), +(4,6,7355,'Stuck'), +(4,6,7928,'Silk Bandage'), +(4,6,7929,'Heavy Silk Bandage'), +(4,6,7934,'Anti-Venom'), +(4,6,8386,'Attacking'), +(4,6,8737,'Mail'), +(4,6,9077,'Leather'), +(4,6,9078,'Cloth'), +(4,6,9125,'Generic'), +(4,6,10840,'Mageweave Bandage'), +(4,6,10841,'Heavy Mageweave Bandage'), +(4,6,10846,'First Aid'), +(4,6,18629,'Runecloth Bandage'), +(4,6,18630,'Heavy Runecloth Bandage'), +(4,6,20582,'Quickness'), +(4,6,20583,'Nature Resistance'), +(4,6,20585,'Wisp Spirit'), +(4,6,21651,'Opening'), +(4,6,21652,'Closing'), +(4,6,22027,'Remove Insignia'), +(4,6,22810,'Opening - No Text'), +(4,6,33391,'Journeyman Riding'), +(4,6,45462,'Plague Strike'), +(4,6,45477,'Icy Touch'), +(4,6,45902,'Blood Strike'), +(4,6,45903,'Offensive State (DND)'), +(4,6,45927,'Summon Friend'), +(4,6,47541,'Death Coil'), +(4,6,48266,'Blood Presence'), +(4,6,49410,'Forceful Deflection'), +(4,6,49576,'Death Grip'), +(4,6,52665,'Sigil'), +(4,6,58984,'Shadowmeld'), +(4,6,59879,'Blood Plague'), +(4,6,59921,'Frost Fever'), +(4,6,61437,'Opening'), +(4,6,61455,'Runic Focus'), +(4,11,81,'Dodge'), +(4,11,203,'Unarmed'), +(4,11,204,'Defense'), +(4,11,227,'Staves'), +(4,11,522,'SPELLDEFENSE(DND)'), +(4,11,668,'Language Common'), +(4,11,671,'Language Darnassian'), +(4,11,1180,'Daggers'), +(4,11,2382,'Generic'), +(4,11,2479,'Honorless Target'), +(4,11,3050,'Detect'), +(4,11,3365,'Opening'), +(4,11,5176,'Wrath'), +(4,11,5185,'Healing Touch'), +(4,11,6233,'Closing'), +(4,11,6246,'Closing'), +(4,11,6247,'Opening'), +(4,11,6477,'Opening'), +(4,11,6478,'Opening'), +(4,11,6603,'Attack'), +(4,11,7266,'Duel'), +(4,11,7267,'Grovel'), +(4,11,7355,'Stuck'), +(4,11,8386,'Attacking'), +(4,11,9077,'Leather'), +(4,11,9078,'Cloth'), +(4,11,9125,'Generic'), +(4,11,20580,'Shadowmeld'), +(4,11,20582,'Quickness'), +(4,11,20583,'Nature Resistance'), +(4,11,20585,'Wisp Spirit'), +(4,11,21009,'Shadowmeld Passive'), +(4,11,21651,'Opening'), +(4,11,21652,'Closing'), +(4,11,22027,'Remove Insignia'), +(4,11,22810,'Opening - No Text'), +(4,11,27764,'Fetish'), +(5,1,78,'Heroic Strike'), +(5,1,81,'Dodge'), +(5,1,107,'Block'), +(5,1,201,'One-Handed Swords'), +(5,1,202,'Two-Handed Swords'), +(5,1,203,'Unarmed'), +(5,1,204,'Defense'), +(5,1,522,'SPELLDEFENSE(DND)'), +(5,1,669,'Language Orcish'), +(5,1,1180,'Daggers'), +(5,1,2382,'Generic'), +(5,1,2457,'Battle Stance'), +(5,1,2479,'Honorless Target'), +(5,1,3050,'Detect'), +(5,1,3365,'Opening'), +(5,1,5227,'Underwater Breathing'), +(5,1,5301,'Defensive State(DND)'), +(5,1,6233,'Closing'), +(5,1,6246,'Closing'), +(5,1,6247,'Opening'), +(5,1,6477,'Opening'), +(5,1,6478,'Opening'), +(5,1,6603,'Attack'), +(5,1,7266,'Duel'), +(5,1,7267,'Grovel'), +(5,1,7355,'Stuck'), +(5,1,7744,'Will of the Forsaken'), +(5,1,8386,'Attacking'), +(5,1,8737,'Mail'), +(5,1,9077,'Leather'), +(5,1,9078,'Cloth'), +(5,1,9116,'Shield'), +(5,1,9125,'Generic'), +(5,1,17737,'Language Gutterspeak'), +(5,1,20577,'Cannibalize'), +(5,1,20579,'Shadow Resistance'), +(5,1,21651,'Opening'), +(5,1,21652,'Closing'), +(5,1,22027,'Remove Insignia'), +(5,1,22810,'Opening - No Text'), +(5,1,32215,'Victorious State'), +(5,4,81,'Dodge'), +(5,4,203,'Unarmed'), +(5,4,204,'Defense'), +(5,4,522,'SPELLDEFENSE(DND)'), +(5,4,669,'Language Orcish'), +(5,4,1180,'Daggers'), +(5,4,1752,'Sinister Strike'), +(5,4,2098,'Eviscerate'), +(5,4,2382,'Generic'), +(5,4,2479,'Honorless Target'), +(5,4,2567,'Thrown'), +(5,4,2764,'Throw'), +(5,4,3050,'Detect'), +(5,4,3365,'Opening'), +(5,4,5227,'Underwater Breathing'), +(5,4,6233,'Closing'), +(5,4,6246,'Closing'), +(5,4,6247,'Opening'), +(5,4,6477,'Opening'), +(5,4,6478,'Opening'), +(5,4,6603,'Attack'), +(5,4,7266,'Duel'), +(5,4,7267,'Grovel'), +(5,4,7355,'Stuck'), +(5,4,7744,'Will of the Forsaken'), +(5,4,8386,'Attacking'), +(5,4,9077,'Leather'), +(5,4,9078,'Cloth'), +(5,4,9125,'Generic'), +(5,4,16092,'Defensive State(DND)'), +(5,4,17737,'Language Gutterspeak'), +(5,4,20577,'Cannibalize'), +(5,4,20579,'Shadow Resistance'), +(5,4,21184,'Rogue Passive(DND)'), +(5,4,21651,'Opening'), +(5,4,21652,'Closing'), +(5,4,22027,'Remove Insignia'), +(5,4,22810,'Opening - No Text'), +(5,5,81,'Dodge'), +(5,5,198,'One-Handed Maces'), +(5,5,203,'Unarmed'), +(5,5,204,'Defense'), +(5,5,522,'SPELLDEFENSE(DND)'), +(5,5,585,'Smite'), +(5,5,669,'Language Orcish'), +(5,5,2050,'Lesser Heal'), +(5,5,2382,'Generic'), +(5,5,2479,'Honorless Target'), +(5,5,3050,'Detect'), +(5,5,3365,'Opening'), +(5,5,5009,'Wands'), +(5,5,5019,'Shoot'), +(5,5,5227,'Underwater Breathing'), +(5,5,6233,'Closing'), +(5,5,6246,'Closing'), +(5,5,6247,'Opening'), +(5,5,6477,'Opening'), +(5,5,6478,'Opening'), +(5,5,6603,'Attack'), +(5,5,7266,'Duel'), +(5,5,7267,'Grovel'), +(5,5,7355,'Stuck'), +(5,5,7744,'Will of the Forsaken'), +(5,5,8386,'Attacking'), +(5,5,9078,'Cloth'), +(5,5,9125,'Generic'), +(5,5,17737,'Language Gutterspeak'), +(5,5,20577,'Cannibalize'), +(5,5,20579,'Shadow Resistance'), +(5,5,21651,'Opening'), +(5,5,21652,'Closing'), +(5,5,22027,'Remove Insignia'), +(5,5,22810,'Opening - No Text'), +(5,6,81,'Dodge'), +(5,6,196,'One-Handed Axes'), +(5,6,197,'Two-Handed Axes'), +(5,6,200,'Polearms'), +(5,6,201,'One-Handed Swords'), +(5,6,202,'Two-Handed Swords'), +(5,6,203,'Unarmed'), +(5,6,204,'Defense'), +(5,6,522,'SPELLDEFENSE (DND)'), +(5,6,669,'Language Orcish'), +(5,6,674,'Dual Wield'), +(5,6,750,'Plate Mail'), +(5,6,1843,'Disarm'), +(5,6,2382,'Generic'), +(5,6,2479,'Honorless Target'), +(5,6,3050,'Detect'), +(5,6,3127,'Parry'), +(5,6,3275,'Linen Bandage'), +(5,6,3276,'Heavy Linen Bandage'), +(5,6,3277,'Wool Bandage'), +(5,6,3278,'Heavy Wool Bandage'), +(5,6,3365,'Opening'), +(5,6,5227,'Underwater Breathing'), +(5,6,6233,'Closing'), +(5,6,6246,'Closing'), +(5,6,6247,'Opening'), +(5,6,6477,'Opening'), +(5,6,6478,'Opening'), +(5,6,6603,'Attack'), +(5,6,7266,'Duel'), +(5,6,7267,'Grovel'), +(5,6,7355,'Stuck'), +(5,6,7744,'Will of the Forsaken'), +(5,6,7928,'Silk Bandage'), +(5,6,7929,'Heavy Silk Bandage'), +(5,6,7934,'Anti-Venom'), +(5,6,8386,'Attacking'), +(5,6,8737,'Mail'), +(5,6,9077,'Leather'), +(5,6,9078,'Cloth'), +(5,6,9125,'Generic'), +(5,6,10840,'Mageweave Bandage'), +(5,6,10841,'Heavy Mageweave Bandage'), +(5,6,10846,'First Aid'), +(5,6,17737,'Language Gutterspeak'), +(5,6,18629,'Runecloth Bandage'), +(5,6,18630,'Heavy Runecloth Bandage'), +(5,6,20577,'Cannibalize'), +(5,6,20579,'Shadow Resistance'), +(5,6,21651,'Opening'), +(5,6,21652,'Closing'), +(5,6,22027,'Remove Insignia'), +(5,6,22810,'Opening - No Text'), +(5,6,33391,'Journeyman Riding'), +(5,6,45462,'Plague Strike'), +(5,6,45477,'Icy Touch'), +(5,6,45902,'Blood Strike'), +(5,6,45903,'Offensive State (DND)'), +(5,6,45927,'Summon Friend'), +(5,6,47541,'Death Coil'), +(5,6,48266,'Blood Presence'), +(5,6,49410,'Forceful Deflection'), +(5,6,49576,'Death Grip'), +(5,6,52665,'Sigil'), +(5,6,59879,'Blood Plague'), +(5,6,59921,'Frost Fever'), +(5,6,61437,'Opening'), +(5,6,61455,'Runic Focus'), +(5,8,81,'Dodge'), +(5,8,133,'Fireball'), +(5,8,168,'Frost Armor'), +(5,8,203,'Unarmed'), +(5,8,204,'Defense'), +(5,8,227,'Staves'), +(5,8,522,'SPELLDEFENSE(DND)'), +(5,8,669,'Language Orcish'), +(5,8,2382,'Generic'), +(5,8,2479,'Honorless Target'), +(5,8,3050,'Detect'), +(5,8,3365,'Opening'), +(5,8,5009,'Wands'), +(5,8,5019,'Shoot'), +(5,8,5227,'Underwater Breathing'), +(5,8,6233,'Closing'), +(5,8,6246,'Closing'), +(5,8,6247,'Opening'), +(5,8,6477,'Opening'), +(5,8,6478,'Opening'), +(5,8,6603,'Attack'), +(5,8,7266,'Duel'), +(5,8,7267,'Grovel'), +(5,8,7355,'Stuck'), +(5,8,7744,'Will of the Forsaken'), +(5,8,8386,'Attacking'), +(5,8,9078,'Cloth'), +(5,8,9125,'Generic'), +(5,8,17737,'Language Gutterspeak'), +(5,8,20577,'Cannibalize'), +(5,8,20579,'Shadow Resistance'), +(5,8,21651,'Opening'), +(5,8,21652,'Closing'), +(5,8,22027,'Remove Insignia'), +(5,8,22810,'Opening - No Text'), +(5,9,81,'Dodge'), +(5,9,203,'Unarmed'), +(5,9,204,'Defense'), +(5,9,522,'SPELLDEFENSE(DND)'), +(5,9,669,'Language Orcish'), +(5,9,686,'Shadow Bolt'), +(5,9,687,'Demon Skin'), +(5,9,1180,'Daggers'), +(5,9,2382,'Generic'), +(5,9,2479,'Honorless Target'), +(5,9,3050,'Detect'), +(5,9,3365,'Opening'), +(5,9,5009,'Wands'), +(5,9,5019,'Shoot'), +(5,9,5227,'Underwater Breathing'), +(5,9,6233,'Closing'), +(5,9,6246,'Closing'), +(5,9,6247,'Opening'), +(5,9,6477,'Opening'), +(5,9,6478,'Opening'), +(5,9,6603,'Attack'), +(5,9,7266,'Duel'), +(5,9,7267,'Grovel'), +(5,9,7355,'Stuck'), +(5,9,7744,'Will of the Forsaken'), +(5,9,8386,'Attacking'), +(5,9,9078,'Cloth'), +(5,9,9125,'Generic'), +(5,9,17737,'Language Gutterspeak'), +(5,9,20577,'Cannibalize'), +(5,9,20579,'Shadow Resistance'), +(5,9,21651,'Opening'), +(5,9,21652,'Closing'), +(5,9,22027,'Remove Insignia'), +(5,9,22810,'Opening - No Text'), +(6,1,78,'Heroic Strike'), +(6,1,81,'Dodge'), +(6,1,107,'Block'), +(6,1,196,'One-Handed Axes'), +(6,1,198,'One-Handed Maces'), +(6,1,199,'Two-Handed Maces'), +(6,1,203,'Unarmed'), +(6,1,204,'Defense'), +(6,1,522,'SPELLDEFENSE(DND)'), +(6,1,669,'Language Orcish'), +(6,1,670,'Language Taurahe'), +(6,1,2382,'Generic'), +(6,1,2457,'Battle Stance'), +(6,1,2479,'Honorless Target'), +(6,1,3050,'Detect'), +(6,1,3365,'Opening'), +(6,1,5301,'Defensive State(DND)'), +(6,1,6233,'Closing'), +(6,1,6246,'Closing'), +(6,1,6247,'Opening'), +(6,1,6477,'Opening'), +(6,1,6478,'Opening'), +(6,1,6603,'Attack'), +(6,1,7266,'Duel'), +(6,1,7267,'Grovel'), +(6,1,7355,'Stuck'), +(6,1,8386,'Attacking'), +(6,1,8737,'Mail'), +(6,1,9077,'Leather'), +(6,1,9078,'Cloth'), +(6,1,9116,'Shield'), +(6,1,9125,'Generic'), +(6,1,20549,'War Stomp'), +(6,1,20550,'Endurance'), +(6,1,20551,'Nature Resistance'), +(6,1,20552,'Cultivation'), +(6,1,21651,'Opening'), +(6,1,21652,'Closing'), +(6,1,22027,'Remove Insignia'), +(6,1,22810,'Opening - No Text'), +(6,1,32215,'Victorious State'), +(6,3,75,'Auto Shot'), +(6,3,81,'Dodge'), +(6,3,196,'One-Handed Axes'), +(6,3,203,'Unarmed'), +(6,3,204,'Defense'), +(6,3,266,'Guns'), +(6,3,522,'SPELLDEFENSE(DND)'), +(6,3,669,'Language Orcish'), +(6,3,670,'Language Taurahe'), +(6,3,2382,'Generic'), +(6,3,2479,'Honorless Target'), +(6,3,2973,'Raptor Strike'), +(6,3,3050,'Detect'), +(6,3,3365,'Opening'), +(6,3,6233,'Closing'), +(6,3,6246,'Closing'), +(6,3,6247,'Opening'), +(6,3,6477,'Opening'), +(6,3,6478,'Opening'), +(6,3,6603,'Attack'), +(6,3,7266,'Duel'), +(6,3,7267,'Grovel'), +(6,3,7355,'Stuck'), +(6,3,8386,'Attacking'), +(6,3,9077,'Leather'), +(6,3,9078,'Cloth'), +(6,3,9125,'Generic'), +(6,3,13358,'Defensive State(DND)'), +(6,3,20549,'War Stomp'), +(6,3,20550,'Endurance'), +(6,3,20551,'Nature Resistance'), +(6,3,20552,'Cultivation'), +(6,3,21651,'Opening'), +(6,3,21652,'Closing'), +(6,3,22027,'Remove Insignia'), +(6,3,22810,'Opening - No Text'), +(6,3,24949,'Defensive State 2(DND)'), +(6,3,34082,'Advantaged State(DND)'), +(6,6,81,'Dodge'), +(6,6,196,'One-Handed Axes'), +(6,6,197,'Two-Handed Axes'), +(6,6,200,'Polearms'), +(6,6,201,'One-Handed Swords'), +(6,6,202,'Two-Handed Swords'), +(6,6,203,'Unarmed'), +(6,6,204,'Defense'), +(6,6,522,'SPELLDEFENSE (DND)'), +(6,6,669,'Language Orcish'), +(6,6,670,'Language Taurahe'), +(6,6,674,'Dual Wield'), +(6,6,750,'Plate Mail'), +(6,6,1843,'Disarm'), +(6,6,2382,'Generic'), +(6,6,2479,'Honorless Target'), +(6,6,3050,'Detect'), +(6,6,3127,'Parry'), +(6,6,3275,'Linen Bandage'), +(6,6,3276,'Heavy Linen Bandage'), +(6,6,3277,'Wool Bandage'), +(6,6,3278,'Heavy Wool Bandage'), +(6,6,3365,'Opening'), +(6,6,6233,'Closing'), +(6,6,6246,'Closing'), +(6,6,6247,'Opening'), +(6,6,6477,'Opening'), +(6,6,6478,'Opening'), +(6,6,6603,'Attack'), +(6,6,7266,'Duel'), +(6,6,7267,'Grovel'), +(6,6,7355,'Stuck'), +(6,6,7928,'Silk Bandage'), +(6,6,7929,'Heavy Silk Bandage'), +(6,6,7934,'Anti-Venom'), +(6,6,8386,'Attacking'), +(6,6,8737,'Mail'), +(6,6,9077,'Leather'), +(6,6,9078,'Cloth'), +(6,6,9125,'Generic'), +(6,6,10840,'Mageweave Bandage'), +(6,6,10841,'Heavy Mageweave Bandage'), +(6,6,10846,'First Aid'), +(6,6,18629,'Runecloth Bandage'), +(6,6,18630,'Heavy Runecloth Bandage'), +(6,6,20549,'War Stomp'), +(6,6,20550,'Endurance'), +(6,6,20551,'Nature Resistance'), +(6,6,20552,'Cultivation'), +(6,6,21651,'Opening'), +(6,6,21652,'Closing'), +(6,6,22027,'Remove Insignia'), +(6,6,22810,'Opening - No Text'), +(6,6,33391,'Journeyman Riding'), +(6,6,45462,'Plague Strike'), +(6,6,45477,'Icy Touch'), +(6,6,45902,'Blood Strike'), +(6,6,45903,'Offensive State (DND)'), +(6,6,45927,'Summon Friend'), +(6,6,47541,'Death Coil'), +(6,6,48266,'Blood Presence'), +(6,6,49410,'Forceful Deflection'), +(6,6,49576,'Death Grip'), +(6,6,52665,'Sigil'), +(6,6,59879,'Blood Plague'), +(6,6,59921,'Frost Fever'), +(6,6,61437,'Opening'), +(6,6,61455,'Runic Focus'), +(6,7,81,'Dodge'), +(6,7,107,'Block'), +(6,7,198,'One-Handed Maces'), +(6,7,203,'Unarmed'), +(6,7,204,'Defense'), +(6,7,227,'Staves'), +(6,7,331,'Healing Wave'), +(6,7,403,'Lightning Bolt'), +(6,7,522,'SPELLDEFENSE(DND)'), +(6,7,669,'Language Orcish'), +(6,7,670,'Language Taurahe'), +(6,7,2382,'Generic'), +(6,7,2479,'Honorless Target'), +(6,7,3050,'Detect'), +(6,7,3365,'Opening'), +(6,7,6233,'Closing'), +(6,7,6246,'Closing'), +(6,7,6247,'Opening'), +(6,7,6477,'Opening'), +(6,7,6478,'Opening'), +(6,7,6603,'Attack'), +(6,7,7266,'Duel'), +(6,7,7267,'Grovel'), +(6,7,7355,'Stuck'), +(6,7,8386,'Attacking'), +(6,7,9077,'Leather'), +(6,7,9078,'Cloth'), +(6,7,9116,'Shield'), +(6,7,9125,'Generic'), +(6,7,20549,'War Stomp'), +(6,7,20550,'Endurance'), +(6,7,20551,'Nature Resistance'), +(6,7,20552,'Cultivation'), +(6,7,21651,'Opening'), +(6,7,21652,'Closing'), +(6,7,22027,'Remove Insignia'), +(6,7,22810,'Opening - No Text'), +(6,7,27763,'Totem'), +(6,11,81,'Dodge'), +(6,11,198,'One-Handed Maces'), +(6,11,203,'Unarmed'), +(6,11,204,'Defense'), +(6,11,227,'Staves'), +(6,11,522,'SPELLDEFENSE(DND)'), +(6,11,669,'Language Orcish'), +(6,11,670,'Language Taurahe'), +(6,11,2382,'Generic'), +(6,11,2479,'Honorless Target'), +(6,11,3050,'Detect'), +(6,11,3365,'Opening'), +(6,11,5176,'Wrath'), +(6,11,5185,'Healing Touch'), +(6,11,6233,'Closing'), +(6,11,6246,'Closing'), +(6,11,6247,'Opening'), +(6,11,6477,'Opening'), +(6,11,6478,'Opening'), +(6,11,6603,'Attack'), +(6,11,7266,'Duel'), +(6,11,7267,'Grovel'), +(6,11,7355,'Stuck'), +(6,11,8386,'Attacking'), +(6,11,9077,'Leather'), +(6,11,9078,'Cloth'), +(6,11,9125,'Generic'), +(6,11,20549,'War Stomp'), +(6,11,20550,'Endurance'), +(6,11,20551,'Nature Resistance'), +(6,11,20552,'Cultivation'), +(6,11,21651,'Opening'), +(6,11,21652,'Closing'), +(6,11,22027,'Remove Insignia'), +(6,11,22810,'Opening - No Text'), +(6,11,27764,'Fetish'), +(7,1,78,'Heroic Strike'), +(7,1,81,'Dodge'), +(7,1,107,'Block'), +(7,1,198,'One-Handed Maces'), +(7,1,201,'One-Handed Swords'), +(7,1,203,'Unarmed'), +(7,1,204,'Defense'), +(7,1,522,'SPELLDEFENSE(DND)'), +(7,1,668,'Language Common'), +(7,1,1180,'Daggers'), +(7,1,2382,'Generic'), +(7,1,2457,'Battle Stance'), +(7,1,2479,'Honorless Target'), +(7,1,3050,'Detect'), +(7,1,3365,'Opening'), +(7,1,5301,'Defensive State(DND)'), +(7,1,6233,'Closing'), +(7,1,6246,'Closing'), +(7,1,6247,'Opening'), +(7,1,6477,'Opening'), +(7,1,6478,'Opening'), +(7,1,6603,'Attack'), +(7,1,7266,'Duel'), +(7,1,7267,'Grovel'), +(7,1,7340,'Language Gnomish'), +(7,1,7355,'Stuck'), +(7,1,8386,'Attacking'), +(7,1,8737,'Mail'), +(7,1,9077,'Leather'), +(7,1,9078,'Cloth'), +(7,1,9116,'Shield'), +(7,1,9125,'Generic'), +(7,1,20589,'Escape Artist'), +(7,1,20591,'Expansive Mind'), +(7,1,20592,'Arcane Resistance'), +(7,1,20593,'Engineering Specialization'), +(7,1,21651,'Opening'), +(7,1,21652,'Closing'), +(7,1,22027,'Remove Insignia'), +(7,1,22810,'Opening - No Text'), +(7,1,32215,'Victorious State'), +(7,4,81,'Dodge'), +(7,4,203,'Unarmed'), +(7,4,204,'Defense'), +(7,4,522,'SPELLDEFENSE(DND)'), +(7,4,668,'Language Common'), +(7,4,1180,'Daggers'), +(7,4,1752,'Sinister Strike'), +(7,4,2098,'Eviscerate'), +(7,4,2382,'Generic'), +(7,4,2479,'Honorless Target'), +(7,4,2567,'Thrown'), +(7,4,2764,'Throw'), +(7,4,3050,'Detect'), +(7,4,3365,'Opening'), +(7,4,6233,'Closing'), +(7,4,6246,'Closing'), +(7,4,6247,'Opening'), +(7,4,6477,'Opening'), +(7,4,6478,'Opening'), +(7,4,6603,'Attack'), +(7,4,7266,'Duel'), +(7,4,7267,'Grovel'), +(7,4,7340,'Language Gnomish'), +(7,4,7355,'Stuck'), +(7,4,8386,'Attacking'), +(7,4,9077,'Leather'), +(7,4,9078,'Cloth'), +(7,4,9125,'Generic'), +(7,4,16092,'Defensive State(DND)'), +(7,4,20589,'Escape Artist'), +(7,4,20591,'Expansive Mind'), +(7,4,20592,'Arcane Resistance'), +(7,4,20593,'Engineering Specialization'), +(7,4,21184,'Rogue Passive(DND)'), +(7,4,21651,'Opening'), +(7,4,21652,'Closing'), +(7,4,22027,'Remove Insignia'), +(7,4,22810,'Opening - No Text'), +(7,6,81,'Dodge'), +(7,6,196,'One-Handed Axes'), +(7,6,197,'Two-Handed Axes'), +(7,6,200,'Polearms'), +(7,6,201,'One-Handed Swords'), +(7,6,202,'Two-Handed Swords'), +(7,6,203,'Unarmed'), +(7,6,204,'Defense'), +(7,6,522,'SPELLDEFENSE (DND)'), +(7,6,668,'Language Common'), +(7,6,674,'Dual Wield'), +(7,6,750,'Plate Mail'), +(7,6,1843,'Disarm'), +(7,6,2382,'Generic'), +(7,6,2479,'Honorless Target'), +(7,6,3050,'Detect'), +(7,6,3127,'Parry'), +(7,6,3275,'Linen Bandage'), +(7,6,3276,'Heavy Linen Bandage'), +(7,6,3277,'Wool Bandage'), +(7,6,3278,'Heavy Wool Bandage'), +(7,6,3365,'Opening'), +(7,6,6233,'Closing'), +(7,6,6246,'Closing'), +(7,6,6247,'Opening'), +(7,6,6477,'Opening'), +(7,6,6478,'Opening'), +(7,6,6603,'Attack'), +(7,6,7266,'Duel'), +(7,6,7267,'Grovel'), +(7,6,7340,'Language Gnomish'), +(7,6,7355,'Stuck'), +(7,6,7928,'Silk Bandage'), +(7,6,7929,'Heavy Silk Bandage'), +(7,6,7934,'Anti-Venom'), +(7,6,8386,'Attacking'), +(7,6,8737,'Mail'), +(7,6,9077,'Leather'), +(7,6,9078,'Cloth'), +(7,6,9125,'Generic'), +(7,6,10840,'Mageweave Bandage'), +(7,6,10841,'Heavy Mageweave Bandage'), +(7,6,10846,'First Aid'), +(7,6,18629,'Runecloth Bandage'), +(7,6,18630,'Heavy Runecloth Bandage'), +(7,6,20589,'Escape Artist'), +(7,6,20591,'Expansive Mind'), +(7,6,20592,'Arcane Resistance'), +(7,6,20593,'Engineering Specialization'), +(7,6,21651,'Opening'), +(7,6,21652,'Closing'), +(7,6,22027,'Remove Insignia'), +(7,6,22810,'Opening - No Text'), +(7,6,33391,'Journeyman Riding'), +(7,6,45462,'Plague Strike'), +(7,6,45477,'Icy Touch'), +(7,6,45902,'Blood Strike'), +(7,6,45903,'Offensive State (DND)'), +(7,6,45927,'Summon Friend'), +(7,6,47541,'Death Coil'), +(7,6,48266,'Blood Presence'), +(7,6,49410,'Forceful Deflection'), +(7,6,49576,'Death Grip'), +(7,6,52665,'Sigil'), +(7,6,59879,'Blood Plague'), +(7,6,59921,'Frost Fever'), +(7,6,61437,'Opening'), +(7,6,61455,'Runic Focus'), +(7,8,81,'Dodge'), +(7,8,133,'Fireball'), +(7,8,168,'Frost Armor'), +(7,8,203,'Unarmed'), +(7,8,204,'Defense'), +(7,8,227,'Staves'), +(7,8,522,'SPELLDEFENSE(DND)'), +(7,8,668,'Language Common'), +(7,8,2382,'Generic'), +(7,8,2479,'Honorless Target'), +(7,8,3050,'Detect'), +(7,8,3365,'Opening'), +(7,8,5009,'Wands'), +(7,8,5019,'Shoot'), +(7,8,6233,'Closing'), +(7,8,6246,'Closing'), +(7,8,6247,'Opening'), +(7,8,6477,'Opening'), +(7,8,6478,'Opening'), +(7,8,6603,'Attack'), +(7,8,7266,'Duel'), +(7,8,7267,'Grovel'), +(7,8,7340,'Language Gnomish'), +(7,8,7355,'Stuck'), +(7,8,8386,'Attacking'), +(7,8,9078,'Cloth'), +(7,8,9125,'Generic'), +(7,8,20589,'Escape Artist'), +(7,8,20591,'Expansive Mind'), +(7,8,20592,'Arcane Resistance'), +(7,8,20593,'Engineering Specialization'), +(7,8,21651,'Opening'), +(7,8,21652,'Closing'), +(7,8,22027,'Remove Insignia'), +(7,8,22810,'Opening - No Text'), +(7,9,81,'Dodge'), +(7,9,203,'Unarmed'), +(7,9,204,'Defense'), +(7,9,522,'SPELLDEFENSE(DND)'), +(7,9,668,'Language Common'), +(7,9,686,'Shadow Bolt'), +(7,9,687,'Demon Skin'), +(7,9,1180,'Daggers'), +(7,9,2382,'Generic'), +(7,9,2479,'Honorless Target'), +(7,9,3050,'Detect'), +(7,9,3365,'Opening'), +(7,9,5009,'Wands'), +(7,9,5019,'Shoot'), +(7,9,6233,'Closing'), +(7,9,6246,'Closing'), +(7,9,6247,'Opening'), +(7,9,6477,'Opening'), +(7,9,6478,'Opening'), +(7,9,6603,'Attack'), +(7,9,7266,'Duel'), +(7,9,7267,'Grovel'), +(7,9,7340,'Language Gnomish'), +(7,9,7355,'Stuck'), +(7,9,8386,'Attacking'), +(7,9,9078,'Cloth'), +(7,9,9125,'Generic'), +(7,9,20589,'Escape Artist'), +(7,9,20591,'Expansive Mind'), +(7,9,20592,'Arcane Resistance'), +(7,9,20593,'Engineering Specialization'), +(7,9,21651,'Opening'), +(7,9,21652,'Closing'), +(7,9,22027,'Remove Insignia'), +(7,9,22810,'Opening - No Text'), +(8,1,78,'Heroic Strike'), +(8,1,81,'Dodge'), +(8,1,107,'Block'), +(8,1,196,'One-Handed Axes'), +(8,1,203,'Unarmed'), +(8,1,204,'Defense'), +(8,1,522,'SPELLDEFENSE(DND)'), +(8,1,669,'Language Orcish'), +(8,1,1180,'Daggers'), +(8,1,2382,'Generic'), +(8,1,2457,'Battle Stance'), +(8,1,2479,'Honorless Target'), +(8,1,2567,'Thrown'), +(8,1,2764,'Throw'), +(8,1,3050,'Detect'), +(8,1,3365,'Opening'), +(8,1,5301,'Defensive State(DND)'), +(8,1,6233,'Closing'), +(8,1,6246,'Closing'), +(8,1,6247,'Opening'), +(8,1,6477,'Opening'), +(8,1,6478,'Opening'), +(8,1,6603,'Attack'), +(8,1,7266,'Duel'), +(8,1,7267,'Grovel'), +(8,1,7341,'Language Troll'), +(8,1,7355,'Stuck'), +(8,1,8386,'Attacking'), +(8,1,8737,'Mail'), +(8,1,9077,'Leather'), +(8,1,9078,'Cloth'), +(8,1,9116,'Shield'), +(8,1,9125,'Generic'), +(8,1,20555,'Regeneration'), +(8,1,20557,'Beast Slaying'), +(8,1,20558,'Throwing Specialization'), +(8,1,21651,'Opening'), +(8,1,21652,'Closing'), +(8,1,22027,'Remove Insignia'), +(8,1,22810,'Opening - No Text'), +(8,1,26290,'Bow Specialization'), +(8,1,26296,'Berserking'), +(8,1,32215,'Victorious State'), +(8,3,75,'Auto Shot'), +(8,3,81,'Dodge'), +(8,3,196,'One-Handed Axes'), +(8,3,203,'Unarmed'), +(8,3,204,'Defense'), +(8,3,264,'Bows'), +(8,3,522,'SPELLDEFENSE(DND)'), +(8,3,669,'Language Orcish'), +(8,3,2382,'Generic'), +(8,3,2479,'Honorless Target'), +(8,3,2973,'Raptor Strike'), +(8,3,3050,'Detect'), +(8,3,3365,'Opening'), +(8,3,6233,'Closing'), +(8,3,6246,'Closing'), +(8,3,6247,'Opening'), +(8,3,6477,'Opening'), +(8,3,6478,'Opening'), +(8,3,6603,'Attack'), +(8,3,7266,'Duel'), +(8,3,7267,'Grovel'), +(8,3,7341,'Language Troll'), +(8,3,7355,'Stuck'), +(8,3,8386,'Attacking'), +(8,3,9077,'Leather'), +(8,3,9078,'Cloth'), +(8,3,9125,'Generic'), +(8,3,13358,'Defensive State(DND)'), +(8,3,20554,'Berserking'), +(8,3,20555,'Regeneration'), +(8,3,20557,'Beast Slaying'), +(8,3,20558,'Throwing Specialization'), +(8,3,21651,'Opening'), +(8,3,21652,'Closing'), +(8,3,22027,'Remove Insignia'), +(8,3,22810,'Opening - No Text'), +(8,3,24949,'Defensive State 2(DND)'), +(8,3,26290,'Bow Specialization'), +(8,3,34082,'Advantaged State(DND)'), +(8,4,81,'Dodge'), +(8,4,203,'Unarmed'), +(8,4,204,'Defense'), +(8,4,522,'SPELLDEFENSE(DND)'), +(8,4,669,'Language Orcish'), +(8,4,1180,'Daggers'), +(8,4,1752,'Sinister Strike'), +(8,4,2098,'Eviscerate'), +(8,4,2382,'Generic'), +(8,4,2479,'Honorless Target'), +(8,4,2567,'Thrown'), +(8,4,2764,'Throw'), +(8,4,3050,'Detect'), +(8,4,3365,'Opening'), +(8,4,6233,'Closing'), +(8,4,6246,'Closing'), +(8,4,6247,'Opening'), +(8,4,6477,'Opening'), +(8,4,6478,'Opening'), +(8,4,6603,'Attack'), +(8,4,7266,'Duel'), +(8,4,7267,'Grovel'), +(8,4,7341,'Language Troll'), +(8,4,7355,'Stuck'), +(8,4,8386,'Attacking'), +(8,4,9077,'Leather'), +(8,4,9078,'Cloth'), +(8,4,9125,'Generic'), +(8,4,16092,'Defensive State(DND)'), +(8,4,20555,'Regeneration'), +(8,4,20557,'Beast Slaying'), +(8,4,20558,'Throwing Specialization'), +(8,4,21184,'Rogue Passive(DND)'), +(8,4,21651,'Opening'), +(8,4,21652,'Closing'), +(8,4,22027,'Remove Insignia'), +(8,4,22810,'Opening - No Text'), +(8,4,26290,'Bow Specialization'), +(8,4,26297,'Berserking'), +(8,5,81,'Dodge'), +(8,5,198,'One-Handed Maces'), +(8,5,203,'Unarmed'), +(8,5,204,'Defense'), +(8,5,522,'SPELLDEFENSE(DND)'), +(8,5,585,'Smite'), +(8,5,669,'Language Orcish'), +(8,5,2050,'Lesser Heal'), +(8,5,2382,'Generic'), +(8,5,2479,'Honorless Target'), +(8,5,3050,'Detect'), +(8,5,3365,'Opening'), +(8,5,5009,'Wands'), +(8,5,5019,'Shoot'), +(8,5,6233,'Closing'), +(8,5,6246,'Closing'), +(8,5,6247,'Opening'), +(8,5,6477,'Opening'), +(8,5,6478,'Opening'), +(8,5,6603,'Attack'), +(8,5,7266,'Duel'), +(8,5,7267,'Grovel'), +(8,5,7341,'Language Troll'), +(8,5,7355,'Stuck'), +(8,5,8386,'Attacking'), +(8,5,9078,'Cloth'), +(8,5,9125,'Generic'), +(8,5,20554,'Berserking'), +(8,5,20555,'Regeneration'), +(8,5,20557,'Beast Slaying'), +(8,5,20558,'Throwing Specialization'), +(8,5,21651,'Opening'), +(8,5,21652,'Closing'), +(8,5,22027,'Remove Insignia'), +(8,5,22810,'Opening - No Text'), +(8,5,26290,'Bow Specialization'), +(8,6,81,'Dodge'), +(8,6,196,'One-Handed Axes'), +(8,6,197,'Two-Handed Axes'), +(8,6,200,'Polearms'), +(8,6,201,'One-Handed Swords'), +(8,6,202,'Two-Handed Swords'), +(8,6,203,'Unarmed'), +(8,6,204,'Defense'), +(8,6,522,'SPELLDEFENSE (DND)'), +(8,6,669,'Language Orcish'), +(8,6,674,'Dual Wield'), +(8,6,750,'Plate Mail'), +(8,6,1843,'Disarm'), +(8,6,2382,'Generic'), +(8,6,2479,'Honorless Target'), +(8,6,3050,'Detect'), +(8,6,3127,'Parry'), +(8,6,3275,'Linen Bandage'), +(8,6,3276,'Heavy Linen Bandage'), +(8,6,3277,'Wool Bandage'), +(8,6,3278,'Heavy Wool Bandage'), +(8,6,3365,'Opening'), +(8,6,6233,'Closing'), +(8,6,6246,'Closing'), +(8,6,6247,'Opening'), +(8,6,6477,'Opening'), +(8,6,6478,'Opening'), +(8,6,6603,'Attack'), +(8,6,7266,'Duel'), +(8,6,7267,'Grovel'), +(8,6,7341,'Language Troll'), +(8,6,7355,'Stuck'), +(8,6,7928,'Silk Bandage'), +(8,6,7929,'Heavy Silk Bandage'), +(8,6,7934,'Anti-Venom'), +(8,6,8386,'Attacking'), +(8,6,8737,'Mail'), +(8,6,9077,'Leather'), +(8,6,9078,'Cloth'), +(8,6,9125,'Generic'), +(8,6,10840,'Mageweave Bandage'), +(8,6,10841,'Heavy Mageweave Bandage'), +(8,6,10846,'First Aid'), +(8,6,18629,'Runecloth Bandage'), +(8,6,18630,'Heavy Runecloth Bandage'), +(8,6,20555,'Regeneration'), +(8,6,20557,'Beast Slaying'), +(8,6,20558,'Throwing Specialization'), +(8,6,21651,'Opening'), +(8,6,21652,'Closing'), +(8,6,22027,'Remove Insignia'), +(8,6,22810,'Opening - No Text'), +(8,6,26290,'Bow Specialization'), +(8,6,33391,'Journeyman Riding'), +(8,6,45462,'Plague Strike'), +(8,6,45477,'Icy Touch'), +(8,6,45902,'Blood Strike'), +(8,6,45903,'Offensive State (DND)'), +(8,6,45927,'Summon Friend'), +(8,6,47541,'Death Coil'), +(8,6,48266,'Blood Presence'), +(8,6,49410,'Forceful Deflection'), +(8,6,49576,'Death Grip'), +(8,6,50621,'Berserking'), +(8,6,52665,'Sigil'), +(8,6,58943,'Da Voodoo Shuffle'), +(8,6,59879,'Blood Plague'), +(8,6,59921,'Frost Fever'), +(8,6,61437,'Opening'), +(8,6,61455,'Runic Focus'), +(8,7,81,'Dodge'), +(8,7,107,'Block'), +(8,7,198,'One-Handed Maces'), +(8,7,203,'Unarmed'), +(8,7,204,'Defense'), +(8,7,227,'Staves'), +(8,7,331,'Healing Wave'), +(8,7,403,'Lightning Bolt'), +(8,7,522,'SPELLDEFENSE(DND)'), +(8,7,669,'Language Orcish'), +(8,7,2382,'Generic'), +(8,7,2479,'Honorless Target'), +(8,7,3050,'Detect'), +(8,7,3365,'Opening'), +(8,7,6233,'Closing'), +(8,7,6246,'Closing'), +(8,7,6247,'Opening'), +(8,7,6477,'Opening'), +(8,7,6478,'Opening'), +(8,7,6603,'Attack'), +(8,7,7266,'Duel'), +(8,7,7267,'Grovel'), +(8,7,7341,'Language Troll'), +(8,7,7355,'Stuck'), +(8,7,8386,'Attacking'), +(8,7,9077,'Leather'), +(8,7,9078,'Cloth'), +(8,7,9116,'Shield'), +(8,7,9125,'Generic'), +(8,7,20554,'Berserking'), +(8,7,20555,'Regeneration'), +(8,7,20557,'Beast Slaying'), +(8,7,20558,'Throwing Specialization'), +(8,7,21651,'Opening'), +(8,7,21652,'Closing'), +(8,7,22027,'Remove Insignia'), +(8,7,22810,'Opening - No Text'), +(8,7,26290,'Bow Specialization'), +(8,7,27763,'Totem'), +(8,8,81,'Dodge'), +(8,8,133,'Fireball'), +(8,8,168,'Frost Armor'), +(8,8,203,'Unarmed'), +(8,8,204,'Defense'), +(8,8,227,'Staves'), +(8,8,522,'SPELLDEFENSE(DND)'), +(8,8,669,'Language Orcish'), +(8,8,2382,'Generic'), +(8,8,2479,'Honorless Target'), +(8,8,3050,'Detect'), +(8,8,3365,'Opening'), +(8,8,5009,'Wands'), +(8,8,5019,'Shoot'), +(8,8,6233,'Closing'), +(8,8,6246,'Closing'), +(8,8,6247,'Opening'), +(8,8,6477,'Opening'), +(8,8,6478,'Opening'), +(8,8,6603,'Attack'), +(8,8,7266,'Duel'), +(8,8,7267,'Grovel'), +(8,8,7341,'Language Troll'), +(8,8,7355,'Stuck'), +(8,8,8386,'Attacking'), +(8,8,9078,'Cloth'), +(8,8,9125,'Generic'), +(8,8,20554,'Berserking'), +(8,8,20555,'Regeneration'), +(8,8,20557,'Beast Slaying'), +(8,8,20558,'Throwing Specialization'), +(8,8,21651,'Opening'), +(8,8,21652,'Closing'), +(8,8,22027,'Remove Insignia'), +(8,8,22810,'Opening - No Text'), +(8,8,26290,'Bow Specialization'), +(10,2,81,'Dodge'), +(10,2,107,'Block'), +(10,2,201,'One-Handed Swords'), +(10,2,202,'Two-Handed Swords'), +(10,2,203,'Unarmed'), +(10,2,204,'Defense'), +(10,2,522,'SPELLDEFENSE(DND)'), +(10,2,635,'Holy Light'), +(10,2,669,'Language Orcish'), +(10,2,813,'Language Thalassian'), +(10,2,822,'Magic Resistance'), +(10,2,2382,'Generic'), +(10,2,2479,'Honorless Target'), +(10,2,3050,'Detect'), +(10,2,3365,'Opening'), +(10,2,6233,'Closing'), +(10,2,6246,'Closing'), +(10,2,6247,'Opening'), +(10,2,6477,'Opening'), +(10,2,6478,'Opening'), +(10,2,6603,'Attack'), +(10,2,7266,'Duel'), +(10,2,7267,'Grovel'), +(10,2,7355,'Stuck'), +(10,2,8386,'Attacking'), +(10,2,8737,'Mail'), +(10,2,9077,'Leather'), +(10,2,9078,'Cloth'), +(10,2,9116,'Shield'), +(10,2,9125,'Generic'), +(10,2,21084,'Seal of Righteousness'), +(10,2,21651,'Opening'), +(10,2,21652,'Closing'), +(10,2,22027,'Remove Insignia'), +(10,2,22810,'Opening - No Text'), +(10,2,27762,'Libram'), +(10,2,28730,'Arcane Torrent'), +(10,2,28734,'Mana Tap'), +(10,2,28877,'Arcane Affinity'), +(10,3,75,'Auto Shot'), +(10,3,81,'Dodge'), +(10,3,203,'Unarmed'), +(10,3,204,'Defense'), +(10,3,264,'Bows'), +(10,3,522,'SPELLDEFENSE(DND)'), +(10,3,669,'Language Orcish'), +(10,3,813,'Language Thalassian'), +(10,3,822,'Magic Resistance'), +(10,3,1180,'Daggers'), +(10,3,2382,'Generic'), +(10,3,2479,'Honorless Target'), +(10,3,2973,'Raptor Strike'), +(10,3,3050,'Detect'), +(10,3,3365,'Opening'), +(10,3,6233,'Closing'), +(10,3,6246,'Closing'), +(10,3,6247,'Opening'), +(10,3,6477,'Opening'), +(10,3,6478,'Opening'), +(10,3,6603,'Attack'), +(10,3,7266,'Duel'), +(10,3,7267,'Grovel'), +(10,3,7355,'Stuck'), +(10,3,8386,'Attacking'), +(10,3,9077,'Leather'), +(10,3,9078,'Cloth'), +(10,3,9125,'Generic'), +(10,3,13358,'Defensive State(DND)'), +(10,3,21651,'Opening'), +(10,3,21652,'Closing'), +(10,3,22027,'Remove Insignia'), +(10,3,22810,'Opening - No Text'), +(10,3,24949,'Defensive State 2(DND)'), +(10,3,28730,'Arcane Torrent'), +(10,3,28734,'Mana Tap'), +(10,3,28877,'Arcane Affinity'), +(10,3,34082,'Advantaged State(DND)'), +(10,4,81,'Dodge'), +(10,4,203,'Unarmed'), +(10,4,204,'Defense'), +(10,4,522,'SPELLDEFENSE(DND)'), +(10,4,669,'Language Orcish'), +(10,4,813,'Language Thalassian'), +(10,4,822,'Magic Resistance'), +(10,4,1180,'Daggers'), +(10,4,1752,'Sinister Strike'), +(10,4,2098,'Eviscerate'), +(10,4,2382,'Generic'), +(10,4,2479,'Honorless Target'), +(10,4,2567,'Thrown'), +(10,4,2764,'Throw'), +(10,4,3050,'Detect'), +(10,4,3365,'Opening'), +(10,4,6233,'Closing'), +(10,4,6246,'Closing'), +(10,4,6247,'Opening'), +(10,4,6477,'Opening'), +(10,4,6478,'Opening'), +(10,4,6603,'Attack'), +(10,4,7266,'Duel'), +(10,4,7267,'Grovel'), +(10,4,7355,'Stuck'), +(10,4,8386,'Attacking'), +(10,4,9077,'Leather'), +(10,4,9078,'Cloth'), +(10,4,9125,'Generic'), +(10,4,16092,'Defensive State(DND)'), +(10,4,21184,'Rogue Passive(DND)'), +(10,4,21651,'Opening'), +(10,4,21652,'Closing'), +(10,4,22027,'Remove Insignia'), +(10,4,22810,'Opening - No Text'), +(10,4,25046,'Arcane Torrent'), +(10,4,28734,'Mana Tap'), +(10,4,28877,'Arcane Affinity'), +(10,5,81,'Dodge'), +(10,5,198,'One-Handed Maces'), +(10,5,203,'Unarmed'), +(10,5,204,'Defense'), +(10,5,522,'SPELLDEFENSE(DND)'), +(10,5,585,'Smite'), +(10,5,669,'Language Orcish'), +(10,5,813,'Language Thalassian'), +(10,5,822,'Magic Resistance'), +(10,5,2050,'Lesser Heal'), +(10,5,2382,'Generic'), +(10,5,2479,'Honorless Target'), +(10,5,3050,'Detect'), +(10,5,3365,'Opening'), +(10,5,5009,'Wands'), +(10,5,5019,'Shoot'), +(10,5,6233,'Closing'), +(10,5,6246,'Closing'), +(10,5,6247,'Opening'), +(10,5,6477,'Opening'), +(10,5,6478,'Opening'), +(10,5,6603,'Attack'), +(10,5,7266,'Duel'), +(10,5,7267,'Grovel'), +(10,5,7355,'Stuck'), +(10,5,8386,'Attacking'), +(10,5,9078,'Cloth'), +(10,5,9125,'Generic'), +(10,5,21651,'Opening'), +(10,5,21652,'Closing'), +(10,5,22027,'Remove Insignia'), +(10,5,22810,'Opening - No Text'), +(10,5,28730,'Arcane Torrent'), +(10,5,28734,'Mana Tap'), +(10,5,28877,'Arcane Affinity'), +(10,6,81,'Dodge'), +(10,6,196,'One-Handed Axes'), +(10,6,197,'Two-Handed Axes'), +(10,6,200,'Polearms'), +(10,6,201,'One-Handed Swords'), +(10,6,202,'Two-Handed Swords'), +(10,6,203,'Unarmed'), +(10,6,204,'Defense'), +(10,6,522,'SPELLDEFENSE (DND)'), +(10,6,669,'Language Orcish'), +(10,6,674,'Dual Wield'), +(10,6,750,'Plate Mail'), +(10,6,813,'Language Thalassian'), +(10,6,822,'Magic Resistance'), +(10,6,1843,'Disarm'), +(10,6,2382,'Generic'), +(10,6,2479,'Honorless Target'), +(10,6,3050,'Detect'), +(10,6,3127,'Parry'), +(10,6,3275,'Linen Bandage'), +(10,6,3276,'Heavy Linen Bandage'), +(10,6,3277,'Wool Bandage'), +(10,6,3278,'Heavy Wool Bandage'), +(10,6,3365,'Opening'), +(10,6,6233,'Closing'), +(10,6,6246,'Closing'), +(10,6,6247,'Opening'), +(10,6,6477,'Opening'), +(10,6,6478,'Opening'), +(10,6,6603,'Attack'), +(10,6,7266,'Duel'), +(10,6,7267,'Grovel'), +(10,6,7355,'Stuck'), +(10,6,7928,'Silk Bandage'), +(10,6,7929,'Heavy Silk Bandage'), +(10,6,7934,'Anti-Venom'), +(10,6,8386,'Attacking'), +(10,6,8737,'Mail'), +(10,6,9077,'Leather'), +(10,6,9078,'Cloth'), +(10,6,9125,'Generic'), +(10,6,10840,'Mageweave Bandage'), +(10,6,10841,'Heavy Mageweave Bandage'), +(10,6,10846,'First Aid'), +(10,6,18629,'Runecloth Bandage'), +(10,6,18630,'Heavy Runecloth Bandage'), +(10,6,21651,'Opening'), +(10,6,21652,'Closing'), +(10,6,22027,'Remove Insignia'), +(10,6,22810,'Opening - No Text'), +(10,6,28877,'Arcane Affinity'), +(10,6,33391,'Journeyman Riding'), +(10,6,45462,'Plague Strike'), +(10,6,45477,'Icy Touch'), +(10,6,45902,'Blood Strike'), +(10,6,45903,'Offensive State (DND)'), +(10,6,45927,'Summon Friend'), +(10,6,47541,'Death Coil'), +(10,6,48266,'Blood Presence'), +(10,6,49410,'Forceful Deflection'), +(10,6,49576,'Death Grip'), +(10,6,50613,'Arcane Torrent'), +(10,6,52665,'Sigil'), +(10,6,59879,'Blood Plague'), +(10,6,59921,'Frost Fever'), +(10,6,61437,'Opening'), +(10,6,61455,'Runic Focus'), +(10,8,81,'Dodge'), +(10,8,133,'Fireball'), +(10,8,168,'Frost Armor'), +(10,8,203,'Unarmed'), +(10,8,204,'Defense'), +(10,8,227,'Staves'), +(10,8,522,'SPELLDEFENSE(DND)'), +(10,8,669,'Language Orcish'), +(10,8,813,'Language Thalassian'), +(10,8,822,'Magic Resistance'), +(10,8,2382,'Generic'), +(10,8,2479,'Honorless Target'), +(10,8,3050,'Detect'), +(10,8,3365,'Opening'), +(10,8,5009,'Wands'), +(10,8,5019,'Shoot'), +(10,8,6233,'Closing'), +(10,8,6246,'Closing'), +(10,8,6247,'Opening'), +(10,8,6477,'Opening'), +(10,8,6478,'Opening'), +(10,8,6603,'Attack'), +(10,8,7266,'Duel'), +(10,8,7267,'Grovel'), +(10,8,7355,'Stuck'), +(10,8,8386,'Attacking'), +(10,8,9078,'Cloth'), +(10,8,9125,'Generic'), +(10,8,21651,'Opening'), +(10,8,21652,'Closing'), +(10,8,22027,'Remove Insignia'), +(10,8,22810,'Opening - No Text'), +(10,8,28730,'Arcane Torrent'), +(10,8,28734,'Mana Tap'), +(10,8,28877,'Arcane Affinity'), +(10,9,81,'Dodge'), +(10,9,203,'Unarmed'), +(10,9,204,'Defense'), +(10,9,522,'SPELLDEFENSE(DND)'), +(10,9,669,'Language Orcish'), +(10,9,686,'Shadow Bolt'), +(10,9,687,'Demon Skin'), +(10,9,813,'Language Thalassian'), +(10,9,822,'Magic Resistance'), +(10,9,1180,'Daggers'), +(10,9,2382,'Generic'), +(10,9,2479,'Honorless Target'), +(10,9,3050,'Detect'), +(10,9,3365,'Opening'), +(10,9,5009,'Wands'), +(10,9,5019,'Shoot'), +(10,9,6233,'Closing'), +(10,9,6246,'Closing'), +(10,9,6247,'Opening'), +(10,9,6477,'Opening'), +(10,9,6478,'Opening'), +(10,9,6603,'Attack'), +(10,9,7266,'Duel'), +(10,9,7267,'Grovel'), +(10,9,7355,'Stuck'), +(10,9,8386,'Attacking'), +(10,9,9078,'Cloth'), +(10,9,9125,'Generic'), +(10,9,21651,'Opening'), +(10,9,21652,'Closing'), +(10,9,22027,'Remove Insignia'), +(10,9,22810,'Opening - No Text'), +(10,9,28730,'Arcane Torrent'), +(10,9,28734,'Mana Tap'), +(10,9,28877,'Arcane Affinity'), +(11,1,78,'Heroic Strike'), +(11,1,81,'Dodge'), +(11,1,107,'Block'), +(11,1,198,'One-Handed Maces'), +(11,1,201,'One-Handed Swords'), +(11,1,202,'Two-Handed Swords'), +(11,1,203,'Unarmed'), +(11,1,204,'Defense'), +(11,1,522,'SPELLDEFENSE(DND)'), +(11,1,668,'Language Common'), +(11,1,2382,'Generic'), +(11,1,2457,'Battle Stance'), +(11,1,2479,'Honorless Target'), +(11,1,3050,'Detect'), +(11,1,3365,'Opening'), +(11,1,5301,'Defensive State(DND)'), +(11,1,6233,'Closing'), +(11,1,6246,'Closing'), +(11,1,6247,'Opening'), +(11,1,6477,'Opening'), +(11,1,6478,'Opening'), +(11,1,6562,'Heroic Presence'), +(11,1,6603,'Attack'), +(11,1,7266,'Duel'), +(11,1,7267,'Grovel'), +(11,1,7355,'Stuck'), +(11,1,8386,'Attacking'), +(11,1,8737,'Mail'), +(11,1,9077,'Leather'), +(11,1,9078,'Cloth'), +(11,1,9116,'Shield'), +(11,1,9125,'Generic'), +(11,1,20579,'Shadow Resistance'), +(11,1,21651,'Opening'), +(11,1,21652,'Closing'), +(11,1,22027,'Remove Insignia'), +(11,1,22810,'Opening - No Text'), +(11,1,28875,'Gemcutting'), +(11,1,28880,'Gift of the Naaru'), +(11,1,29932,'Language Draenei'), +(11,1,32215,'Victorious State'), +(11,2,81,'Dodge'), +(11,2,107,'Block'), +(11,2,198,'One-Handed Maces'), +(11,2,199,'Two-Handed Maces'), +(11,2,203,'Unarmed'), +(11,2,204,'Defense'), +(11,2,522,'SPELLDEFENSE(DND)'), +(11,2,635,'Holy Light'), +(11,2,668,'Language Common'), +(11,2,2382,'Generic'), +(11,2,2479,'Honorless Target'), +(11,2,3050,'Detect'), +(11,2,3365,'Opening'), +(11,2,6233,'Closing'), +(11,2,6246,'Closing'), +(11,2,6247,'Opening'), +(11,2,6477,'Opening'), +(11,2,6478,'Opening'), +(11,2,6562,'Heroic Presence'), +(11,2,6603,'Attack'), +(11,2,7266,'Duel'), +(11,2,7267,'Grovel'), +(11,2,7355,'Stuck'), +(11,2,8386,'Attacking'), +(11,2,8737,'Mail'), +(11,2,9077,'Leather'), +(11,2,9078,'Cloth'), +(11,2,9116,'Shield'), +(11,2,9125,'Generic'), +(11,2,21084,'Seal of Righteousness'), +(11,2,20579,'Shadow Resistance'), +(11,2,21651,'Opening'), +(11,2,21652,'Closing'), +(11,2,22027,'Remove Insignia'), +(11,2,22810,'Opening - No Text'), +(11,2,27762,'Libram'), +(11,2,28875,'Gemcutting'), +(11,2,59542,'Gift of the Naaru'), +(11,2,29932,'Language Draenei'), +(11,3,75,'Auto Shot'), +(11,3,81,'Dodge'), +(11,3,201,'One-Handed Swords'), +(11,3,203,'Unarmed'), +(11,3,204,'Defense'), +(11,3,522,'SPELLDEFENSE(DND)'), +(11,3,668,'Language Common'), +(11,3,2382,'Generic'), +(11,3,2479,'Honorless Target'), +(11,3,2973,'Raptor Strike'), +(11,3,3050,'Detect'), +(11,3,3365,'Opening'), +(11,3,5011,'Crossbows'), +(11,3,6233,'Closing'), +(11,3,6246,'Closing'), +(11,3,6247,'Opening'), +(11,3,6477,'Opening'), +(11,3,6478,'Opening'), +(11,3,6562,'Heroic Presence'), +(11,3,6603,'Attack'), +(11,3,7266,'Duel'), +(11,3,7267,'Grovel'), +(11,3,7355,'Stuck'), +(11,3,8386,'Attacking'), +(11,3,9077,'Leather'), +(11,3,9078,'Cloth'), +(11,3,9125,'Generic'), +(11,3,13358,'Defensive State(DND)'), +(11,3,20579,'Shadow Resistance'), +(11,3,21651,'Opening'), +(11,3,21652,'Closing'), +(11,3,22027,'Remove Insignia'), +(11,3,22810,'Opening - No Text'), +(11,3,24949,'Defensive State 2(DND)'), +(11,3,28875,'Gemcutting'), +(11,3,59543,'Gift of the Naaru'), +(11,3,29932,'Language Draenei'), +(11,3,34082,'Advantaged State(DND)'), +(11,5,81,'Dodge'), +(11,5,198,'One-Handed Maces'), +(11,5,203,'Unarmed'), +(11,5,204,'Defense'), +(11,5,522,'SPELLDEFENSE(DND)'), +(11,5,585,'Smite'), +(11,5,668,'Language Common'), +(11,5,2050,'Lesser Heal'), +(11,5,2382,'Generic'), +(11,5,2479,'Honorless Target'), +(11,5,3050,'Detect'), +(11,5,3365,'Opening'), +(11,5,5009,'Wands'), +(11,5,5019,'Shoot'), +(11,5,6233,'Closing'), +(11,5,6246,'Closing'), +(11,5,6247,'Opening'), +(11,5,6477,'Opening'), +(11,5,6478,'Opening'), +(11,5,6603,'Attack'), +(11,5,7266,'Duel'), +(11,5,7267,'Grovel'), +(11,5,7355,'Stuck'), +(11,5,8386,'Attacking'), +(11,5,9078,'Cloth'), +(11,5,9125,'Generic'), +(11,5,20579,'Shadow Resistance'), +(11,5,21651,'Opening'), +(11,5,21652,'Closing'), +(11,5,22027,'Remove Insignia'), +(11,5,22810,'Opening - No Text'), +(11,5,28875,'Gemcutting'), +(11,5,28878,'Inspiring Presence'), +(11,5,59544,'Gift of the Naaru'), +(11,5,29932,'Language Draenei'), +(11,6,81,'Dodge'), +(11,6,196,'One-Handed Axes'), +(11,6,197,'Two-Handed Axes'), +(11,6,200,'Polearms'), +(11,6,201,'One-Handed Swords'), +(11,6,202,'Two-Handed Swords'), +(11,6,203,'Unarmed'), +(11,6,204,'Defense'), +(11,6,522,'SPELLDEFENSE (DND)'), +(11,6,668,'Language Common'), +(11,6,674,'Dual Wield'), +(11,6,750,'Plate Mail'), +(11,6,1843,'Disarm'), +(11,6,2382,'Generic'), +(11,6,2479,'Honorless Target'), +(11,6,3050,'Detect'), +(11,6,3127,'Parry'), +(11,6,3275,'Linen Bandage'), +(11,6,3276,'Heavy Linen Bandage'), +(11,6,3277,'Wool Bandage'), +(11,6,3278,'Heavy Wool Bandage'), +(11,6,3365,'Opening'), +(11,6,6233,'Closing'), +(11,6,6246,'Closing'), +(11,6,6247,'Opening'), +(11,6,6477,'Opening'), +(11,6,6478,'Opening'), +(11,6,6562,'Heroic Presence'), +(11,6,6603,'Attack'), +(11,6,7266,'Duel'), +(11,6,7267,'Grovel'), +(11,6,7355,'Stuck'), +(11,6,7928,'Silk Bandage'), +(11,6,7929,'Heavy Silk Bandage'), +(11,6,7934,'Anti-Venom'), +(11,6,8386,'Attacking'), +(11,6,8737,'Mail'), +(11,6,9077,'Leather'), +(11,6,9078,'Cloth'), +(11,6,9125,'Generic'), +(11,6,10840,'Mageweave Bandage'), +(11,6,10841,'Heavy Mageweave Bandage'), +(11,6,10846,'First Aid'), +(11,6,18629,'Runecloth Bandage'), +(11,6,18630,'Heavy Runecloth Bandage'), +(11,6,21651,'Opening'), +(11,6,21652,'Closing'), +(11,6,22027,'Remove Insignia'), +(11,6,22810,'Opening - No Text'), +(11,6,28875,'Gemcutting'), +(11,6,29932,'Language Draenei'), +(11,6,33391,'Journeyman Riding'), +(11,6,45462,'Plague Strike'), +(11,6,45477,'Icy Touch'), +(11,6,45902,'Blood Strike'), +(11,6,45903,'Offensive State (DND)'), +(11,6,45927,'Summon Friend'), +(11,6,47541,'Death Coil'), +(11,6,48266,'Blood Presence'), +(11,6,49410,'Forceful Deflection'), +(11,6,49576,'Death Grip'), +(11,6,52665,'Sigil'), +(11,6,59539,'Shadow Resistance'), +(11,6,59545,'Gift of the Naaru'), +(11,6,59879,'Blood Plague'), +(11,6,59921,'Frost Fever'), +(11,6,61437,'Opening'), +(11,6,61455,'Runic Focus'), +(11,7,81,'Dodge'), +(11,7,107,'Block'), +(11,7,198,'One-Handed Maces'), +(11,7,203,'Unarmed'), +(11,7,204,'Defense'), +(11,7,227,'Staves'), +(11,7,331,'Healing Wave'), +(11,7,403,'Lightning Bolt'), +(11,7,522,'SPELLDEFENSE(DND)'), +(11,7,668,'Language Common'), +(11,7,2382,'Generic'), +(11,7,2479,'Honorless Target'), +(11,7,3050,'Detect'), +(11,7,3365,'Opening'), +(11,7,6233,'Closing'), +(11,7,6246,'Closing'), +(11,7,6247,'Opening'), +(11,7,6477,'Opening'), +(11,7,6478,'Opening'), +(11,7,6603,'Attack'), +(11,7,7266,'Duel'), +(11,7,7267,'Grovel'), +(11,7,7355,'Stuck'), +(11,7,8386,'Attacking'), +(11,7,9077,'Leather'), +(11,7,9078,'Cloth'), +(11,7,9116,'Shield'), +(11,7,9125,'Generic'), +(11,7,20579,'Shadow Resistance'), +(11,7,21651,'Opening'), +(11,7,21652,'Closing'), +(11,7,22027,'Remove Insignia'), +(11,7,22810,'Opening - No Text'), +(11,7,27763,'Totem'), +(11,7,28875,'Gemcutting'), +(11,7,28878,'Inspiring Presence'), +(11,7,59547,'Gift of the Naaru'), +(11,7,29932,'Language Draenei'), +(11,8,81,'Dodge'), +(11,8,133,'Fireball'), +(11,8,168,'Frost Armor'), +(11,8,203,'Unarmed'), +(11,8,204,'Defense'), +(11,8,227,'Staves'), +(11,8,522,'SPELLDEFENSE(DND)'), +(11,8,668,'Language Common'), +(11,8,2382,'Generic'), +(11,8,2479,'Honorless Target'), +(11,8,3050,'Detect'), +(11,8,3365,'Opening'), +(11,8,5009,'Wands'), +(11,8,5019,'Shoot'), +(11,8,6233,'Closing'), +(11,8,6246,'Closing'), +(11,8,6247,'Opening'), +(11,8,6477,'Opening'), +(11,8,6478,'Opening'), +(11,8,6603,'Attack'), +(11,8,7266,'Duel'), +(11,8,7267,'Grovel'), +(11,8,7355,'Stuck'), +(11,8,8386,'Attacking'), +(11,8,9078,'Cloth'), +(11,8,9125,'Generic'), +(11,8,20579,'Shadow Resistance'), +(11,8,21651,'Opening'), +(11,8,21652,'Closing'), +(11,8,22027,'Remove Insignia'), +(11,8,22810,'Opening - No Text'), +(11,8,28875,'Gemcutting'), +(11,8,28878,'Inspiring Presence'), +(11,8,59548,'Gift of the Naaru'), +(11,8,29932,'Language Draenei'); /*!40000 ALTER TABLE `playercreateinfo_spell` ENABLE KEYS */; UNLOCK TABLES; @@ -15973,6 +15923,7 @@ DROP TABLE IF EXISTS `spell_learn_spell`; CREATE TABLE `spell_learn_spell` ( `entry` smallint(5) unsigned NOT NULL default '0', `SpellID` smallint(5) unsigned NOT NULL default '0', + `Active` tinyint(3) unsigned NOT NULL default '1', PRIMARY KEY (`entry`,`SpellID`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Item System'; @@ -15983,19 +15934,38 @@ CREATE TABLE `spell_learn_spell` ( LOCK TABLES `spell_learn_spell` WRITE; /*!40000 ALTER TABLE `spell_learn_spell` DISABLE KEYS */; INSERT INTO `spell_learn_spell` VALUES -(5784,33388), -(13819,33388), -(17002,24867), -(23161,33391), -(23214,33391), -(24866,24864), -(33872,47179), -(33873,47180), -(33943,34090), -(34767,33391), -(34769,33388), -(53428,53341), -(53428,53343); +(71,7376,0), +(768,3025,0), +(783,5419,0), +(1066,5421,0), +(2457,21156,0), +(2458,7381,0), +(5487,1178,0), +(5487,21178,0), +(5784,33388,1), +(9634,9635,0), +(9634,21178,0), +(13819,33388,1), +(17002,24867,0), +(23161,33391,1), +(23214,33391,1), +(24858,24905,0), +(24866,24864,0), +(33872,47179,0), +(33873,47180,0), +(33891,5420,0), +(33891,34123,0), +(33943,33948,0), +(33943,34090,1), +(33943,34764,0), +(34767,33391,1), +(34769,33388,1), +(40123,40121,0), +(40123,40122,0), +(53428,53341,1), +(53428,53343,1); + + /*!40000 ALTER TABLE `spell_learn_spell` ENABLE KEYS */; UNLOCK TABLES; diff --git a/sql/updates/7067_01_mangos_playercreateinfo_spell.sql b/sql/updates/7067_01_mangos_playercreateinfo_spell.sql new file mode 100644 index 000000000..b26adb333 --- /dev/null +++ b/sql/updates/7067_01_mangos_playercreateinfo_spell.sql @@ -0,0 +1,6 @@ +ALTER TABLE db_version CHANGE COLUMN required_7063_01_mangos_spell_proc_event required_7067_01_mangos_playercreateinfo_spell bit; + +ALTER TABLE playercreateinfo_spell + DROP COLUMN Active; + +DELETE FROM playercreateinfo_spell WHERE Spell IN (1178,3025,5419,5420,5421,7376,7381,9635,21156,21178,24905,33948,34123,40121); diff --git a/sql/updates/7067_02_mangos_spell_learn_spell.sql b/sql/updates/7067_02_mangos_spell_learn_spell.sql new file mode 100644 index 000000000..9c16468af --- /dev/null +++ b/sql/updates/7067_02_mangos_spell_learn_spell.sql @@ -0,0 +1,33 @@ +ALTER TABLE db_version CHANGE COLUMN required_7067_01_mangos_playercreateinfo_spell required_7067_02_mangos_spell_learn_spell bit; + +ALTER TABLE spell_learn_spell + ADD COLUMN Active tinyint(3) unsigned NOT NULL default '1' AFTER SpellID; + +DELETE FROM spell_learn_spell WHERE Entry IN ( + 71,768,783,1066,2458,2457,5487,5487,9634,9634,17002,24858,24866, + 33872,33873,33891,33891,33943,33943,33943,40123,40123 +); + +INSERT INTO spell_learn_spell VALUES +(71,7376,0), +(768,3025,0), +(783,5419,0), +(1066,5421,0), +(2457,21156,0), +(2458,7381,0), +(5487,1178,0), +(5487,21178,0), +(9634,9635,0), +(9634,21178,0), +(17002,24867,0), +(24858,24905,0), +(24866,24864,0), +(33872,47179,0), +(33873,47180,0), +(33891,5420,0), +(33891,34123,0), +(33943,33948,0), +(33943,34090,1), +(33943,34764,0), +(40123,40121,0), +(40123,40122,0); diff --git a/sql/updates/7067_03_characters_character_spell.sql b/sql/updates/7067_03_characters_character_spell.sql new file mode 100644 index 000000000..7dd212210 --- /dev/null +++ b/sql/updates/7067_03_characters_character_spell.sql @@ -0,0 +1,3 @@ +ALTER TABLE character_db_version CHANGE COLUMN required_7059_02_characters_pet_spell required_7067_03_characters_character_spell bit; + +DELETE FROM `character_spell` WHERE `spell` IN (7376,3025,5419,5421,21156,7381,1178,21178,9635,21178,24905,5420,34123,33948,34090,34764,40121,40122); diff --git a/sql/updates/Makefile.am b/sql/updates/Makefile.am index 696dc7718..241690e04 100644 --- a/sql/updates/Makefile.am +++ b/sql/updates/Makefile.am @@ -129,6 +129,9 @@ pkgdata_DATA = \ 7060_01_mangos_spell_proc_event.sql \ 7061_01_mangos_spell_proc_event.sql \ 7063_01_mangos_spell_proc_event.sql \ + 7067_01_mangos_playercreateinfo_spell.sql \ + 7067_02_mangos_spell_learn_spell.sql \ + 7067_03_characters_character_spell.sql \ README ## Additional files to include when running 'make dist' @@ -238,4 +241,7 @@ EXTRA_DIST = \ 7060_01_mangos_spell_proc_event.sql \ 7061_01_mangos_spell_proc_event.sql \ 7063_01_mangos_spell_proc_event.sql \ + 7067_01_mangos_playercreateinfo_spell.sql \ + 7067_02_mangos_spell_learn_spell.sql \ + 7067_03_characters_character_spell.sql \ README diff --git a/src/game/ObjectMgr.cpp b/src/game/ObjectMgr.cpp index 6613128b7..4566bf2a6 100644 --- a/src/game/ObjectMgr.cpp +++ b/src/game/ObjectMgr.cpp @@ -2225,8 +2225,8 @@ void ObjectMgr::LoadPlayerInfo() // Load playercreate spells { - // 0 1 2 3 - QueryResult *result = WorldDatabase.Query("SELECT race, class, Spell, Active FROM playercreateinfo_spell"); + // 0 1 2 + QueryResult *result = WorldDatabase.Query("SELECT race, class, Spell FROM playercreateinfo_spell"); uint32 count = 0; @@ -2261,7 +2261,7 @@ void ObjectMgr::LoadPlayerInfo() } PlayerInfo* pInfo = &playerInfo[current_race][current_class]; - pInfo->spell.push_back(CreateSpellPair(fields[2].GetUInt16(), fields[3].GetUInt8())); + pInfo->spell.push_back(fields[2].GetUInt32()); bar.step(); ++count; diff --git a/src/game/Player.cpp b/src/game/Player.cpp index 094208d30..fe3c33332 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -2822,8 +2822,8 @@ bool Player::addSpell(uint32 spell_id, bool active, bool learning, bool loading, { if(!itr->second.autoLearned) { - if(loading) // at spells loading, no output, but allow save - addSpell(itr->second.spell,true,true,loading); + if(loading || !itr->second.active) // at spells loading, no output, but allow save + addSpell(itr->second.spell,itr->second.active,true,loading); else // at normal learning learnSpell(itr->second.spell); } @@ -17908,18 +17908,14 @@ void Player::learnDefaultSpells(bool loading) { // learn default race/class spells PlayerInfo const *info = objmgr.GetPlayerInfo(getRace(),getClass()); - std::list::const_iterator spell_itr; - for (spell_itr = info->spell.begin(); spell_itr!=info->spell.end(); ++spell_itr) + for (PlayerCreateInfoSpells::const_iterator itr = info->spell.begin(); itr!=info->spell.end(); ++itr) { - uint16 tspell = spell_itr->first; - if (tspell) - { - sLog.outDebug("PLAYER: Adding initial spell, id = %u",tspell); - if(loading || !spell_itr->second) // not care about passive spells or loading case - addSpell(tspell,spell_itr->second); - else // but send in normal spell in game learn case - learnSpell(tspell); - } + uint32 tspell = *itr; + sLog.outDebug("PLAYER (Class: %u Race: %u): Adding initial spell, id = %u",uint32(getClass()),uint32(getRace()), tspell); + if(loading) // will send in INITIAL_SPELLS in list anyway + addSpell(tspell,true); + else // but send in normal spell in game learn case + learnSpell(tspell); } } diff --git a/src/game/Player.h b/src/game/Player.h index 1ed97d833..9ef54d2d8 100644 --- a/src/game/Player.h +++ b/src/game/Player.h @@ -140,8 +140,6 @@ enum ActionButtonType typedef std::map ActionButtonList; -typedef std::pair CreateSpellPair; - struct PlayerCreateInfoItem { PlayerCreateInfoItem(uint32 id, uint32 amount) : item_id(id), item_amount(amount) {} @@ -173,6 +171,8 @@ struct PlayerLevelInfo uint8 stats[MAX_STATS]; }; +typedef std::list PlayerCreateInfoSpells; + struct PlayerInfo { // existence checked by displayId != 0 // existence checked by displayId != 0 @@ -188,7 +188,7 @@ struct PlayerInfo uint16 displayId_m; uint16 displayId_f; PlayerCreateInfoItems item; - std::list spell; + PlayerCreateInfoSpells spell; std::list action[4]; PlayerLevelInfo* levelInfo; //[level-1] 0..MaxPlayerLevel-1 diff --git a/src/game/SpellMgr.cpp b/src/game/SpellMgr.cpp index 06fe60522..c358f7ff4 100644 --- a/src/game/SpellMgr.cpp +++ b/src/game/SpellMgr.cpp @@ -1690,7 +1690,8 @@ void SpellMgr::LoadSpellLearnSpells() { mSpellLearnSpells.clear(); // need for reload case - QueryResult *result = WorldDatabase.Query("SELECT entry, SpellID FROM spell_learn_spell"); + // 0 1 2 + QueryResult *result = WorldDatabase.Query("SELECT entry, SpellID, Active FROM spell_learn_spell"); if(!result) { barGoLink bar( 1 ); @@ -1714,6 +1715,7 @@ void SpellMgr::LoadSpellLearnSpells() SpellLearnSpellNode node; node.spell = fields[1].GetUInt32(); + node.active = fields[2].GetBool(); node.autoLearned= false; if(!sSpellStore.LookupEntry(spell_id)) @@ -1750,6 +1752,7 @@ void SpellMgr::LoadSpellLearnSpells() { SpellLearnSpellNode dbc_node; dbc_node.spell = entry->EffectTriggerSpell[i]; + dbc_node.active = true; // all dbc based learned spells is active (show in spell book or hide by client itself) // ignore learning not existed spells (broken/outdated/or generic learnig spell 483 if(!sSpellStore.LookupEntry(dbc_node.spell)) diff --git a/src/game/SpellMgr.h b/src/game/SpellMgr.h index d92a2cf41..8189cd7cb 100644 --- a/src/game/SpellMgr.h +++ b/src/game/SpellMgr.h @@ -693,6 +693,7 @@ typedef std::map SpellLearnSkillMap; struct SpellLearnSpellNode { uint32 spell; + bool active; // show in spellbook or not bool autoLearned; }; diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index a1e4566a2..3f4a1d1c8 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 "7066" + #define REVISION_NR "7067" #endif // __REVISION_NR_H__ From dd2a59f56d240b31572b520a0cf979eaa37c2e33 Mon Sep 17 00:00:00 2001 From: DiSlord Date: Sun, 11 Jan 2009 21:14:52 +0300 Subject: [PATCH 134/145] [7068] Use area aura duration for apply aura on unit in area Allow remove SPELL_ATTR_EX_UNAFFECTED_BY_SCHOOL_IMMUNE spells by 31224 Signed-off-by: DiSlord --- src/game/SpellAuras.cpp | 1 + src/game/SpellEffects.cpp | 6 ++---- src/shared/revision_nr.h | 2 +- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp index 28b636d5f..4ed1b6f67 100644 --- a/src/game/SpellAuras.cpp +++ b/src/game/SpellAuras.cpp @@ -768,6 +768,7 @@ void AreaAura::Update(uint32 diff) if(actualSpellInfo != GetSpellProto()) actualBasePoints = actualSpellInfo->EffectBasePoints[m_effIndex]; AreaAura *aur = new AreaAura(actualSpellInfo, m_effIndex, &actualBasePoints, (*tIter), caster, NULL); + aur->SetAuraDuration(GetAuraDuration()); (*tIter)->AddAura(aur); } } diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp index 79c5d6250..8671be397 100644 --- a/src/game/SpellEffects.cpp +++ b/src/game/SpellEffects.cpp @@ -1886,11 +1886,9 @@ void Spell::EffectTriggerSpell(uint32 i) { // remove all harmful spells on you... if( // ignore positive and passive auras - !iter->second->IsPositive() && !iter->second->IsPassive() && + !iter->second->IsPositive() && !iter->second->IsPassive() && // ignore physical auras - (GetSpellSchoolMask(iter->second->GetSpellProto()) & SPELL_SCHOOL_MASK_NORMAL)==0 && - // ignore immunity persistent spells - !( iter->second->GetSpellProto()->AttributesEx & 0x10000 ) ) + (GetSpellSchoolMask(iter->second->GetSpellProto()) & SPELL_SCHOOL_MASK_NORMAL)==0 ) { m_caster->RemoveAurasDueToSpell(iter->second->GetSpellProto()->Id); iter = Auras.begin(); diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 3f4a1d1c8..06c2662ce 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 "7067" + #define REVISION_NR "7068" #endif // __REVISION_NR_H__ From 22db1a3d39efc0f39fc8b03e2340604d7c682935 Mon Sep 17 00:00:00 2001 From: arrai Date: Sun, 11 Jan 2009 20:54:02 +0100 Subject: [PATCH 135/145] [7069] Implemented dismantling, engineer version of skinning --- src/game/Creature.h | 2 ++ src/game/SharedDefines.h | 7 ++++--- src/shared/revision_nr.h | 2 +- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/game/Creature.h b/src/game/Creature.h index 02aaae6bc..8bb1f868d 100644 --- a/src/game/Creature.h +++ b/src/game/Creature.h @@ -212,6 +212,8 @@ struct CreatureInfo return SKILL_HERBALISM; else if(type_flags & CREATURE_TYPEFLAGS_MININGLOOT) return SKILL_MINING; + else if(type_flags & CREATURE_TYPEFLAGS_ENGINEERLOOT) + return SKILL_ENGINERING; else return SKILL_SKINNING; // normal case } diff --git a/src/game/SharedDefines.h b/src/game/SharedDefines.h index 1fdf67964..faabc0e83 100644 --- a/src/game/SharedDefines.h +++ b/src/game/SharedDefines.h @@ -1568,9 +1568,10 @@ enum CreatureFamily enum CreatureTypeFlags { - CREATURE_TYPEFLAGS_TAMEABLE = 0x0001, - CREATURE_TYPEFLAGS_HERBLOOT = 0x0100, - CREATURE_TYPEFLAGS_MININGLOOT = 0x0200 + CREATURE_TYPEFLAGS_TAMEABLE = 0x0001, + CREATURE_TYPEFLAGS_HERBLOOT = 0x0100, + CREATURE_TYPEFLAGS_MININGLOOT = 0x0200, + CREATURE_TYPEFLAGS_ENGINEERLOOT = 0x8000 }; enum CreatureEliteType diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 06c2662ce..4dc0b85dc 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 "7068" + #define REVISION_NR "7069" #endif // __REVISION_NR_H__ From 8b8782909995f25cc99ff7118f52f22e6dbe0ab2 Mon Sep 17 00:00:00 2001 From: VladimirMangos Date: Mon, 12 Jan 2009 01:00:34 +0300 Subject: [PATCH 136/145] [7070] Use IsInWorld() check instead explcit loading args in spell learning code. Learn default spells at loading also. At player loading known spells (full list) send to client at adding player to map, so !IsInWorld() is most correct way check when spell learn packets not need send and wait seniding full spell list. --- src/game/Player.cpp | 44 +++++++++++++++++++++------------------- src/game/Player.h | 4 ++-- src/shared/revision_nr.h | 2 +- 3 files changed, 26 insertions(+), 24 deletions(-) diff --git a/src/game/Player.cpp b/src/game/Player.cpp index fe3c33332..42b7ab1c8 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -653,7 +653,7 @@ bool Player::Create( uint32 guidlow, const std::string& name, uint8 race, uint8 } // original spells - learnDefaultSpells(true); + learnDefaultSpells(); // original action bar std::list::const_iterator action_itr[4]; @@ -2528,13 +2528,13 @@ void Player::AddNewMailDeliverTime(time_t deliver_time) } } -bool Player::addSpell(uint32 spell_id, bool active, bool learning, bool loading, bool disabled) +bool Player::addSpell(uint32 spell_id, bool active, bool learning, bool disabled) { SpellEntry const *spellInfo = sSpellStore.LookupEntry(spell_id); if (!spellInfo) { // do character spell book cleanup (all characters) - if(loading && !learning) // spell load case + if(!IsInWorld() && !learning) // spell load case { sLog.outError("Player::addSpell: Non-existed in SpellStore spell #%u request, deleting for all characters in `character_spell`.",spell_id); CharacterDatabase.PExecute("DELETE FROM character_spell WHERE spell = '%u'",spell_id); @@ -2548,7 +2548,7 @@ bool Player::addSpell(uint32 spell_id, bool active, bool learning, bool loading, if(!SpellMgr::IsSpellValid(spellInfo,this,false)) { // do character spell book cleanup (all characters) - if(loading && !learning) // spell load case + if(!IsInWorld() && !learning) // spell load case { sLog.outError("Player::addSpell: Broken spell #%u learning not allowed, deleting for all characters in `character_spell`.",spell_id); CharacterDatabase.PExecute("DELETE FROM character_spell WHERE spell = '%u'",spell_id); @@ -2572,8 +2572,8 @@ bool Player::addSpell(uint32 spell_id, bool active, bool learning, bool loading, { itr->second->active = active; - // loading && !learning == explicitly load from DB and then exist in it already and set correctly - if(loading && !learning) + // !IsInWorld() && !learning == explicitly load from DB and then exist in it already and set correctly + if(!IsInWorld() && !learning) itr->second->state = PLAYERSPELL_UNCHANGED; else if(itr->second->state != PLAYERSPELL_NEW) itr->second->state = PLAYERSPELL_CHANGED; @@ -2612,7 +2612,7 @@ bool Player::addSpell(uint32 spell_id, bool active, bool learning, bool loading, default: // known not saved yet spell (new or modified) { // can be in case spell loading but learned at some previous spell loading - if(loading && !learning) + if(!IsInWorld() && !learning) itr->second->state = PLAYERSPELL_UNCHANGED; return false; @@ -2645,8 +2645,8 @@ bool Player::addSpell(uint32 spell_id, bool active, bool learning, bool loading, // non talent spell: learn low ranks (recursive call) else if(uint32 prev_spell = spellmgr.GetPrevSpellInChain(spell_id)) { - if(loading) // at spells loading, no output, but allow save - addSpell(prev_spell,active,true,loading,disabled); + if(!IsInWorld()) // at spells loading, no output, but allow save + addSpell(prev_spell,active,true,disabled); else // at normal learning learnSpell(prev_spell); } @@ -2671,7 +2671,7 @@ bool Player::addSpell(uint32 spell_id, bool active, bool learning, bool loading, { if(spellmgr.IsHighRankOfSpell(spell_id,itr->first)) { - if(!loading) // not send spell (re-/over-)learn packets at loading + if(IsInWorld()) // not send spell (re-/over-)learn packets at loading { WorldPacket data(SMSG_SUPERCEDED_SPELL, (4)); data << uint16(itr->first); @@ -2686,7 +2686,7 @@ bool Player::addSpell(uint32 spell_id, bool active, bool learning, bool loading, } else if(spellmgr.IsHighRankOfSpell(itr->first,spell_id)) { - if(!loading) // not send spell (re-/over-)learn packets at loading + if(IsInWorld()) // not send spell (re-/over-)learn packets at loading { WorldPacket data(SMSG_SUPERCEDED_SPELL, (4)); data << uint16(spell_id); @@ -2822,14 +2822,14 @@ bool Player::addSpell(uint32 spell_id, bool active, bool learning, bool loading, { if(!itr->second.autoLearned) { - if(loading || !itr->second.active) // at spells loading, no output, but allow save - addSpell(itr->second.spell,itr->second.active,true,loading); + if(!IsInWorld() || !itr->second.active) // at spells loading, no output, but allow save + addSpell(itr->second.spell,itr->second.active,true,false); else // at normal learning learnSpell(itr->second.spell); } } - if(!loading) + if(IsInWorld()) { GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_LEARN_SPELL); GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_LEARN_SKILLLINE_SPELLS); @@ -2846,7 +2846,7 @@ void Player::learnSpell(uint32 spell_id) bool disabled = (itr != m_spells.end()) ? itr->second->disabled : false; bool active = disabled ? itr->second->active : true; - bool learning = addSpell(spell_id,active); + bool learning = addSpell(spell_id,active,true,false); // learn all disabled higher ranks (recursive) SpellChainMapNext const& nextMap = spellmgr.GetSpellChainNext(); @@ -2857,8 +2857,8 @@ void Player::learnSpell(uint32 spell_id) learnSpell(i->second); } - // prevent duplicated entires in spell book - if(!learning) + // prevent duplicated entires in spell book, also not send if not in world (loading) + if(!learning || !IsInWorld ()) return; WorldPacket data(SMSG_LEARNED_SPELL, 4); @@ -14157,6 +14157,8 @@ bool Player::LoadFromDB( uint32 guid, SqlQueryHolder *holder ) // after spell load InitTalentForLevel(); learnSkillRewardedSpells(); + learnDefaultSpells(); + // after spell load, learn rewarded spell if need also _LoadQuestStatus(holder->GetResult(PLAYER_LOGIN_QUERY_LOADQUESTSTATUS)); @@ -14932,7 +14934,7 @@ void Player::_LoadSpells(QueryResult *result) { Field *fields = result->Fetch(); - addSpell(fields[0].GetUInt16(), fields[1].GetBool(), false, true, fields[2].GetBool()); + addSpell(fields[0].GetUInt16(), fields[1].GetBool(), false, fields[2].GetBool()); } while( result->NextRow() ); @@ -17904,7 +17906,7 @@ void Player::resetSpells() learnQuestRewardedSpells(); } -void Player::learnDefaultSpells(bool loading) +void Player::learnDefaultSpells() { // learn default race/class spells PlayerInfo const *info = objmgr.GetPlayerInfo(getRace(),getClass()); @@ -17912,8 +17914,8 @@ void Player::learnDefaultSpells(bool loading) { uint32 tspell = *itr; sLog.outDebug("PLAYER (Class: %u Race: %u): Adding initial spell, id = %u",uint32(getClass()),uint32(getRace()), tspell); - if(loading) // will send in INITIAL_SPELLS in list anyway - addSpell(tspell,true); + if(!IsInWorld()) // will send in INITIAL_SPELLS in list anyway at map add + addSpell(tspell,true,true,false); else // but send in normal spell in game learn case learnSpell(tspell); } diff --git a/src/game/Player.h b/src/game/Player.h index 9ef54d2d8..659f70bb8 100644 --- a/src/game/Player.h +++ b/src/game/Player.h @@ -1467,11 +1467,11 @@ class MANGOS_DLL_SPEC Player : public Unit void SendProficiency(uint8 pr1, uint32 pr2); void SendInitialSpells(); - bool addSpell(uint32 spell_id, bool active, bool learning = true, bool loading = false, bool disabled = false); + bool addSpell(uint32 spell_id, bool active, bool learning, bool disabled); void learnSpell(uint32 spell_id); void removeSpell(uint32 spell_id, bool disabled = false); void resetSpells(); - void learnDefaultSpells(bool loading = false); + void learnDefaultSpells(); void learnQuestRewardedSpells(); void learnQuestRewardedSpells(Quest const* quest); diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 4dc0b85dc..982fa31e7 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 "7069" + #define REVISION_NR "7070" #endif // __REVISION_NR_H__ From 76f7a25f2d342a6d0c6d0af949f1d40683c8c3d2 Mon Sep 17 00:00:00 2001 From: VladimirMangos Date: Mon, 12 Jan 2009 01:46:50 +0300 Subject: [PATCH 137/145] [7071] Fixed recent problem with pacified aura for druids with flight forms. Cleanups code. --- src/game/Player.cpp | 36 ++++++++++++++++++++---------------- src/game/SpellAuras.cpp | 1 + src/shared/revision_nr.h | 2 +- 3 files changed, 22 insertions(+), 17 deletions(-) diff --git a/src/game/Player.cpp b/src/game/Player.cpp index 42b7ab1c8..2b13be292 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -2723,23 +2723,27 @@ bool Player::addSpell(uint32 spell_id, bool active, bool learning, bool disabled // also cast passive spells (including all talents without SPELL_EFFECT_LEARN_SPELL) with additional checks else if (IsPassiveSpell(spell_id)) { - // if spell doesn't require a stance or the player is in the required stance - if( ( !spellInfo->Stances && - spell_id != 5420 && spell_id != 5419 && spell_id != 7376 && - spell_id != 7381 && spell_id != 21156 && spell_id != 21009 && - spell_id != 21178 && spell_id != 33948 && spell_id != 40121 ) || - m_form != 0 && (spellInfo->Stances & (1<<(m_form-1))) || - (spell_id == 5420 && m_form == FORM_TREE) || - (spell_id == 5419 && m_form == FORM_TRAVEL) || - (spell_id == 7376 && m_form == FORM_DEFENSIVESTANCE) || - (spell_id == 7381 && m_form == FORM_BERSERKERSTANCE) || - (spell_id == 21156 && m_form == FORM_BATTLESTANCE)|| - (spell_id == 21178 && (m_form == FORM_BEAR || m_form == FORM_DIREBEAR) ) || - (spell_id == 33948 && m_form == FORM_FLIGHT) || - (spell_id == 40121 && m_form == FORM_FLIGHT_EPIC) ) + bool need_cast = false; + + switch(spell_id) + { + // some spells not have stance data expacted cast at form change or present + case 5420: need_cast = (m_form == FORM_TREE); break; + case 5419: need_cast = (m_form == FORM_TRAVEL); break; + case 7376: need_cast = (m_form == FORM_DEFENSIVESTANCE); break; + case 7381: need_cast = (m_form == FORM_BERSERKERSTANCE); break; + case 21156: need_cast = (m_form == FORM_BATTLESTANCE); break; + case 21178: need_cast = (m_form == FORM_BEAR || m_form == FORM_DIREBEAR); break; + case 33948: need_cast = (m_form == FORM_FLIGHT); break; + case 34764: need_cast = (m_form == FORM_FLIGHT); break; + case 40121: need_cast = (m_form == FORM_FLIGHT_EPIC); break; + case 40122: need_cast = (m_form == FORM_FLIGHT_EPIC); break; + // another spells have proper stance data + default: need_cast = !spellInfo->Stances && m_form != 0 && (spellInfo->Stances & (1<<(m_form-1))); break; + } //Check CasterAuraStates - if (!spellInfo->CasterAuraState || HasAuraState(AuraState(spellInfo->CasterAuraState))) - CastSpell(this, spell_id, true); + if (need_cast && (!spellInfo->CasterAuraState || HasAuraState(AuraState(spellInfo->CasterAuraState)))) + CastSpell(this, spell_id, true); } else if( IsSpellHaveEffect(spellInfo,SPELL_EFFECT_SKILL_STEP) ) { diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp index 4ed1b6f67..f74439b49 100644 --- a/src/game/SpellAuras.cpp +++ b/src/game/SpellAuras.cpp @@ -5296,6 +5296,7 @@ void Aura::HandleShapeshiftBoosts(bool apply) break; case FORM_FLIGHT: spellId = 33948; + spellId2 = 34764; break; case FORM_FLIGHT_EPIC: spellId = 40122; diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 982fa31e7..be06bdeeb 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 "7070" + #define REVISION_NR "7071" #endif // __REVISION_NR_H__ From 16dc210e249f61492140e66c627bd64d83819131 Mon Sep 17 00:00:00 2001 From: VladimirMangos Date: Mon, 12 Jan 2009 02:02:28 +0300 Subject: [PATCH 138/145] [7072] Fixed typo in prev commit. :/ --- src/game/Player.cpp | 2 +- src/shared/revision_nr.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/game/Player.cpp b/src/game/Player.cpp index 2b13be292..5893d43ed 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -2739,7 +2739,7 @@ bool Player::addSpell(uint32 spell_id, bool active, bool learning, bool disabled case 40121: need_cast = (m_form == FORM_FLIGHT_EPIC); break; case 40122: need_cast = (m_form == FORM_FLIGHT_EPIC); break; // another spells have proper stance data - default: need_cast = !spellInfo->Stances && m_form != 0 && (spellInfo->Stances & (1<<(m_form-1))); break; + default: need_cast = !spellInfo->Stances || m_form != 0 && (spellInfo->Stances & (1<<(m_form-1))); break; } //Check CasterAuraStates if (need_cast && (!spellInfo->CasterAuraState || HasAuraState(AuraState(spellInfo->CasterAuraState)))) diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index be06bdeeb..db52acd82 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 "7071" + #define REVISION_NR "7072" #endif // __REVISION_NR_H__ From 6d17820af2dd9539cc92266b164707046f6e90b6 Mon Sep 17 00:00:00 2001 From: DiSlord Date: Mon, 12 Jan 2009 21:18:55 +0300 Subject: [PATCH 139/145] Fix detect m_attackType for wands Signed-off-by: DiSlord --- src/game/Spell.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp index 07f490780..7bc7f0fba 100644 --- a/src/game/Spell.cpp +++ b/src/game/Spell.cpp @@ -288,7 +288,7 @@ Spell::Spell( Unit* Caster, SpellEntry const *info, bool triggered, uint64 origi break; default: // Wands - if (m_spellInfo->AttributesEx3 & SPELL_ATTR_EX3_REQ_WAND) + if (m_spellInfo->AttributesEx2 & SPELL_ATTR_EX2_AUTOREPEAT_FLAG) m_attackType = RANGED_ATTACK; else m_attackType = BASE_ATTACK; From ae1f60c27f47dc80f70af43ce997012307c6c969 Mon Sep 17 00:00:00 2001 From: DiSlord Date: Mon, 12 Jan 2009 21:21:00 +0300 Subject: [PATCH 140/145] Use CastSpell(x,y,z ... for EffectTriggerMissileSpell Signed-off-by: DiSlord --- src/game/SpellEffects.cpp | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp index 8671be397..ce04e764d 100644 --- a/src/game/SpellEffects.cpp +++ b/src/game/SpellEffects.cpp @@ -1983,12 +1983,7 @@ void Spell::EffectTriggerMissileSpell(uint32 effect_idx) if (m_CastItem) DEBUG_LOG("WORLD: cast Item spellId - %i", spellInfo->Id); - Spell *spell = new Spell(m_caster, spellInfo, true, m_originalCasterGUID ); - - SpellCastTargets targets; - targets.setDestination(m_targets.m_destX,m_targets.m_destY,m_targets.m_destZ); - spell->m_CastItem = m_CastItem; - spell->prepare(&targets, NULL); + m_caster->CastSpell(m_targets.m_destX, m_targets.m_destY, m_targets.m_destZ, spellInfo, true, m_CastItem, 0, m_originalCasterGUID); } void Spell::EffectTeleportUnits(uint32 i) From bdac9e6e8f73de8001a20617c05fa0bc178262b0 Mon Sep 17 00:00:00 2001 From: DiSlord Date: Mon, 12 Jan 2009 21:22:08 +0300 Subject: [PATCH 141/145] [7073] Better detect hunter aspect/tracker spells (also fix it) Signed-off-by: DiSlord --- src/game/SpellAuras.h | 3 +-- src/game/SpellMgr.cpp | 21 +++++++-------------- src/shared/revision_nr.h | 2 +- 3 files changed, 9 insertions(+), 17 deletions(-) diff --git a/src/game/SpellAuras.h b/src/game/SpellAuras.h index b3c7c395d..66ca5bc77 100644 --- a/src/game/SpellAuras.h +++ b/src/game/SpellAuras.h @@ -300,8 +300,6 @@ class MANGOS_DLL_SPEC Aura void _AddAura(); void _RemoveAura(); - void TriggerSpell(); - bool IsUpdated() { return m_updated; } void SetUpdated(bool val) { m_updated = val; } void SetRemoveMode(AuraRemoveMode mode) { m_removeMode = mode; } @@ -315,6 +313,7 @@ class MANGOS_DLL_SPEC Aura void setDiminishGroup(DiminishingGroup group) { m_AuraDRGroup = group; } DiminishingGroup getDiminishGroup() const { return m_AuraDRGroup; } + void TriggerSpell(); void PeriodicTick(); void PeriodicDummyTick(); diff --git a/src/game/SpellMgr.cpp b/src/game/SpellMgr.cpp index c358f7ff4..0a136f4fd 100644 --- a/src/game/SpellMgr.cpp +++ b/src/game/SpellMgr.cpp @@ -169,6 +169,13 @@ SpellSpecific GetSpellSpecific(uint32 spellId) if (spellInfo->Dispel == DISPEL_POISON) return SPELL_STING; + // only hunter aspects have this (but not all aspects in hunter family) + if( spellInfo->SpellFamilyFlags & 0x0044000000380000LL || spellInfo->SpellFamilyFlags2 & 0x00003010) + return SPELL_ASPECT; + + if( spellInfo->SpellFamilyFlags2 & 0x00000002 ) + return SPELL_TRACKER; + break; } case SPELLFAMILY_PALADIN: @@ -213,20 +220,6 @@ SpellSpecific GetSpellSpecific(uint32 spellId) return SPELL_WARLOCK_ARMOR; } - // only hunter aspects have this (but not all aspects in hunter family) - if( spellInfo->activeIconID == 122 && (GetSpellSchoolMask(spellInfo) & SPELL_SCHOOL_MASK_NATURE) && - (spellInfo->Attributes & 0x50000) != 0 && (spellInfo->Attributes & 0x9000010) == 0) - { - return SPELL_ASPECT; - } - - for(int i = 0; i < 3; i++) - if( spellInfo->Effect[i] == SPELL_EFFECT_APPLY_AURA && ( - spellInfo->EffectApplyAuraName[i] == SPELL_AURA_TRACK_CREATURES || - spellInfo->EffectApplyAuraName[i] == SPELL_AURA_TRACK_RESOURCES || - spellInfo->EffectApplyAuraName[i] == SPELL_AURA_TRACK_STEALTHED ) ) - return SPELL_TRACKER; - // elixirs can have different families, but potion most ofc. if(SpellSpecific sp = spellmgr.GetSpellElixirSpecific(spellInfo->Id)) return sp; diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index db52acd82..39084ca21 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 "7072" + #define REVISION_NR "7073" #endif // __REVISION_NR_H__ From f1b8c677fca5d29c7cc05a202511e24c1fd741a9 Mon Sep 17 00:00:00 2001 From: Seize Date: Tue, 13 Jan 2009 00:42:48 +0300 Subject: [PATCH 142/145] [7074] Update playercreateinfo_spell for old classes. Signed-off-by: Neo2003 --- sql/mangos.sql | 411 ++- .../7074_01_mangos_playercreateinfo_spell.sql | 2797 +++++++++++++++++ sql/updates/Makefile.am | 2 + src/shared/revision_nr.h | 2 +- 4 files changed, 3082 insertions(+), 130 deletions(-) create mode 100644 sql/updates/7074_01_mangos_playercreateinfo_spell.sql diff --git a/sql/mangos.sql b/sql/mangos.sql index e9154169e..563891e84 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_7067_02_mangos_spell_learn_spell` bit(1) default NULL + `required_7074_01_mangos_playercreateinfo_spell` bit(1) default NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Used DB version notes'; -- @@ -9808,14 +9808,15 @@ INSERT INTO `playercreateinfo_spell` VALUES (1,1,201,'One-Handed Swords'), (1,1,203,'Unarmed'), (1,1,204,'Defense'), -(1,1,522,'SPELLDEFENSE(DND)'), +(1,1,522,'SPELLDEFENSE (DND)'), (1,1,668,'Language Common'), +(1,1,1843,'Disarm'), (1,1,2382,'Generic'), (1,1,2457,'Battle Stance'), (1,1,2479,'Honorless Target'), (1,1,3050,'Detect'), (1,1,3365,'Opening'), -(1,1,5301,'Defensive State(DND)'), +(1,1,5301,'Defensive State (DND)'), (1,1,6233,'Closing'), (1,1,6246,'Closing'), (1,1,6247,'Opening'), @@ -9834,22 +9835,26 @@ INSERT INTO `playercreateinfo_spell` VALUES (1,1,20597,'Sword Specialization'), (1,1,20598,'The Human Spirit'), (1,1,20599,'Diplomacy'), -(1,1,20600,'Perception'), (1,1,20864,'Mace Specialization'), (1,1,21651,'Opening'), (1,1,21652,'Closing'), (1,1,22027,'Remove Insignia'), (1,1,22810,'Opening - No Text'), (1,1,32215,'Victorious State'), +(1,1,45927,'Summon Friend'), +(1,1,58985,'Perception'), +(1,1,59752,'Every Man for Himself'), +(1,1,61437,'Opening'), (1,2,81,'Dodge'), (1,2,107,'Block'), (1,2,198,'One-Handed Maces'), (1,2,199,'Two-Handed Maces'), (1,2,203,'Unarmed'), (1,2,204,'Defense'), -(1,2,522,'SPELLDEFENSE(DND)'), +(1,2,522,'SPELLDEFENSE (DND)'), (1,2,635,'Holy Light'), (1,2,668,'Language Common'), +(1,2,1843,'Disarm'), (1,2,2382,'Generic'), (1,2,2479,'Honorless Target'), (1,2,3050,'Detect'), @@ -9869,24 +9874,28 @@ INSERT INTO `playercreateinfo_spell` VALUES (1,2,9078,'Cloth'), (1,2,9116,'Shield'), (1,2,9125,'Generic'), -(1,2,21084,'Seal of Righteousness'), +(1,2,20154,'Seal of Righteousness'), (1,2,20597,'Sword Specialization'), (1,2,20598,'The Human Spirit'), (1,2,20599,'Diplomacy'), -(1,2,20600,'Perception'), (1,2,20864,'Mace Specialization'), (1,2,21651,'Opening'), (1,2,21652,'Closing'), (1,2,22027,'Remove Insignia'), (1,2,22810,'Opening - No Text'), (1,2,27762,'Libram'), +(1,2,45927,'Summon Friend'), +(1,2,58985,'Perception'), +(1,2,59752,'Every Man for Himself'), +(1,2,61437,'Opening'), (1,4,81,'Dodge'), (1,4,203,'Unarmed'), (1,4,204,'Defense'), -(1,4,522,'SPELLDEFENSE(DND)'), +(1,4,522,'SPELLDEFENSE (DND)'), (1,4,668,'Language Common'), (1,4,1180,'Daggers'), (1,4,1752,'Sinister Strike'), +(1,4,1843,'Disarm'), (1,4,2098,'Eviscerate'), (1,4,2382,'Generic'), (1,4,2479,'Honorless Target'), @@ -9907,24 +9916,28 @@ INSERT INTO `playercreateinfo_spell` VALUES (1,4,9077,'Leather'), (1,4,9078,'Cloth'), (1,4,9125,'Generic'), -(1,4,16092,'Defensive State(DND)'), +(1,4,16092,'Defensive State (DND)'), (1,4,20597,'Sword Specialization'), (1,4,20598,'The Human Spirit'), (1,4,20599,'Diplomacy'), -(1,4,20600,'Perception'), (1,4,20864,'Mace Specialization'), -(1,4,21184,'Rogue Passive(DND)'), +(1,4,21184,'Rogue Passive (DND)'), (1,4,21651,'Opening'), (1,4,21652,'Closing'), (1,4,22027,'Remove Insignia'), (1,4,22810,'Opening - No Text'), +(1,4,45927,'Summon Friend'), +(1,4,58985,'Perception'), +(1,4,59752,'Every Man for Himself'), +(1,4,61437,'Opening'), (1,5,81,'Dodge'), (1,5,198,'One-Handed Maces'), (1,5,203,'Unarmed'), (1,5,204,'Defense'), -(1,5,522,'SPELLDEFENSE(DND)'), +(1,5,522,'SPELLDEFENSE (DND)'), (1,5,585,'Smite'), (1,5,668,'Language Common'), +(1,5,1843,'Disarm'), (1,5,2050,'Lesser Heal'), (1,5,2382,'Generic'), (1,5,2479,'Honorless Target'), @@ -9947,12 +9960,15 @@ INSERT INTO `playercreateinfo_spell` VALUES (1,5,20597,'Sword Specialization'), (1,5,20598,'The Human Spirit'), (1,5,20599,'Diplomacy'), -(1,5,20600,'Perception'), (1,5,20864,'Mace Specialization'), (1,5,21651,'Opening'), (1,5,21652,'Closing'), (1,5,22027,'Remove Insignia'), (1,5,22810,'Opening - No Text'), +(1,5,45927,'Summon Friend'), +(1,5,58985,'Perception'), +(1,5,59752,'Every Man for Himself'), +(1,5,61437,'Opening'), (1,6,81,'Dodge'), (1,6,196,'One-Handed Axes'), (1,6,197,'Two-Handed Axes'), @@ -10028,8 +10044,9 @@ INSERT INTO `playercreateinfo_spell` VALUES (1,8,203,'Unarmed'), (1,8,204,'Defense'), (1,8,227,'Staves'), -(1,8,522,'SPELLDEFENSE(DND)'), +(1,8,522,'SPELLDEFENSE (DND)'), (1,8,668,'Language Common'), +(1,8,1843,'Disarm'), (1,8,2382,'Generic'), (1,8,2479,'Honorless Target'), (1,8,3050,'Detect'), @@ -10051,20 +10068,24 @@ INSERT INTO `playercreateinfo_spell` VALUES (1,8,20597,'Sword Specialization'), (1,8,20598,'The Human Spirit'), (1,8,20599,'Diplomacy'), -(1,8,20600,'Perception'), (1,8,20864,'Mace Specialization'), (1,8,21651,'Opening'), (1,8,21652,'Closing'), (1,8,22027,'Remove Insignia'), (1,8,22810,'Opening - No Text'), +(1,8,45927,'Summon Friend'), +(1,8,58985,'Perception'), +(1,8,59752,'Every Man for Himself'), +(1,8,61437,'Opening'), (1,9,81,'Dodge'), (1,9,203,'Unarmed'), (1,9,204,'Defense'), -(1,9,522,'SPELLDEFENSE(DND)'), +(1,9,522,'SPELLDEFENSE (DND)'), (1,9,668,'Language Common'), (1,9,686,'Shadow Bolt'), (1,9,687,'Demon Skin'), (1,9,1180,'Daggers'), +(1,9,1843,'Disarm'), (1,9,2382,'Generic'), (1,9,2479,'Honorless Target'), (1,9,3050,'Detect'), @@ -10086,12 +10107,16 @@ INSERT INTO `playercreateinfo_spell` VALUES (1,9,20597,'Sword Specialization'), (1,9,20598,'The Human Spirit'), (1,9,20599,'Diplomacy'), -(1,9,20600,'Perception'), (1,9,20864,'Mace Specialization'), (1,9,21651,'Opening'), (1,9,21652,'Closing'), (1,9,22027,'Remove Insignia'), (1,9,22810,'Opening - No Text'), +(1,9,45927,'Summon Friend'), +(1,9,58284,'Chaos Bolt Passive'), +(1,9,58985,'Perception'), +(1,9,59752,'Every Man for Himself'), +(1,9,61437,'Opening'), (2,1,78,'Heroic Strike'), (2,1,81,'Dodge'), (2,1,107,'Block'), @@ -10100,14 +10125,15 @@ INSERT INTO `playercreateinfo_spell` VALUES (2,1,201,'One-Handed Swords'), (2,1,203,'Unarmed'), (2,1,204,'Defense'), -(2,1,522,'SPELLDEFENSE(DND)'), +(2,1,522,'SPELLDEFENSE (DND)'), (2,1,669,'Language Orcish'), +(2,1,1843,'Disarm'), (2,1,2382,'Generic'), (2,1,2457,'Battle Stance'), (2,1,2479,'Honorless Target'), (2,1,3050,'Detect'), (2,1,3365,'Opening'), -(2,1,5301,'Defensive State(DND)'), +(2,1,5301,'Defensive State (DND)'), (2,1,6233,'Closing'), (2,1,6246,'Closing'), (2,1,6247,'Opening'), @@ -10132,14 +10158,17 @@ INSERT INTO `playercreateinfo_spell` VALUES (2,1,22027,'Remove Insignia'), (2,1,22810,'Opening - No Text'), (2,1,32215,'Victorious State'), +(2,1,45927,'Summon Friend'), +(2,1,61437,'Opening'), (2,3,75,'Auto Shot'), (2,3,81,'Dodge'), (2,3,196,'One-Handed Axes'), (2,3,203,'Unarmed'), (2,3,204,'Defense'), (2,3,264,'Bows'), -(2,3,522,'SPELLDEFENSE(DND)'), +(2,3,522,'SPELLDEFENSE (DND)'), (2,3,669,'Language Orcish'), +(2,3,1843,'Disarm'), (2,3,2382,'Generic'), (2,3,2479,'Honorless Target'), (2,3,2973,'Raptor Strike'), @@ -10158,7 +10187,7 @@ INSERT INTO `playercreateinfo_spell` VALUES (2,3,9077,'Leather'), (2,3,9078,'Cloth'), (2,3,9125,'Generic'), -(2,3,13358,'Defensive State(DND)'), +(2,3,13358,'Defensive State (DND)'), (2,3,20572,'Blood Fury'), (2,3,20573,'Hardiness'), (2,3,20574,'Axe Specialization'), @@ -10167,15 +10196,18 @@ INSERT INTO `playercreateinfo_spell` VALUES (2,3,21652,'Closing'), (2,3,22027,'Remove Insignia'), (2,3,22810,'Opening - No Text'), -(2,3,24949,'Defensive State 2(DND)'), -(2,3,34082,'Advantaged State(DND)'), +(2,3,24949,'Defensive State 2 (DND)'), +(2,3,34082,'Advantaged State (DND)'), +(2,3,45927,'Summon Friend'), +(2,3,61437,'Opening'), (2,4,81,'Dodge'), (2,4,203,'Unarmed'), (2,4,204,'Defense'), -(2,4,522,'SPELLDEFENSE(DND)'), +(2,4,522,'SPELLDEFENSE (DND)'), (2,4,669,'Language Orcish'), (2,4,1180,'Daggers'), (2,4,1752,'Sinister Strike'), +(2,4,1843,'Disarm'), (2,4,2098,'Eviscerate'), (2,4,2382,'Generic'), (2,4,2479,'Honorless Target'), @@ -10196,16 +10228,18 @@ INSERT INTO `playercreateinfo_spell` VALUES (2,4,9077,'Leather'), (2,4,9078,'Cloth'), (2,4,9125,'Generic'), -(2,4,16092,'Defensive State(DND)'), +(2,4,16092,'Defensive State (DND)'), (2,4,20572,'Blood Fury'), (2,4,20573,'Hardiness'), (2,4,20574,'Axe Specialization'), -(2,4,21184,'Rogue Passive(DND)'), +(2,4,21184,'Rogue Passive (DND)'), (2,4,21563,'Command'), (2,4,21651,'Opening'), (2,4,21652,'Closing'), (2,4,22027,'Remove Insignia'), (2,4,22810,'Opening - No Text'), +(2,4,45927,'Summon Friend'), +(2,4,61437,'Opening'), (2,6,81,'Dodge'), (2,6,196,'One-Handed Axes'), (2,6,197,'Two-Handed Axes'), @@ -10281,8 +10315,9 @@ INSERT INTO `playercreateinfo_spell` VALUES (2,7,227,'Staves'), (2,7,331,'Healing Wave'), (2,7,403,'Lightning Bolt'), -(2,7,522,'SPELLDEFENSE(DND)'), +(2,7,522,'SPELLDEFENSE (DND)'), (2,7,669,'Language Orcish'), +(2,7,1843,'Disarm'), (2,7,2382,'Generic'), (2,7,2479,'Honorless Target'), (2,7,3050,'Detect'), @@ -10310,14 +10345,17 @@ INSERT INTO `playercreateinfo_spell` VALUES (2,7,22810,'Opening - No Text'), (2,7,27763,'Totem'), (2,7,33697,'Blood Fury'), +(2,7,45927,'Summon Friend'), +(2,7,61437,'Opening'), (2,9,81,'Dodge'), (2,9,203,'Unarmed'), (2,9,204,'Defense'), -(2,9,522,'SPELLDEFENSE(DND)'), +(2,9,522,'SPELLDEFENSE (DND)'), (2,9,669,'Language Orcish'), (2,9,686,'Shadow Bolt'), (2,9,687,'Demon Skin'), (2,9,1180,'Daggers'), +(2,9,1843,'Disarm'), (2,9,2382,'Generic'), (2,9,2479,'Honorless Target'), (2,9,3050,'Detect'), @@ -10344,6 +10382,9 @@ INSERT INTO `playercreateinfo_spell` VALUES (2,9,22027,'Remove Insignia'), (2,9,22810,'Opening - No Text'), (2,9,33702,'Blood Fury'), +(2,9,45927,'Summon Friend'), +(2,9,58284,'Chaos Bolt Passive'), +(2,9,61437,'Opening'), (3,1,78,'Heroic Strike'), (3,1,81,'Dodge'), (3,1,107,'Block'), @@ -10352,16 +10393,17 @@ INSERT INTO `playercreateinfo_spell` VALUES (3,1,198,'One-Handed Maces'), (3,1,203,'Unarmed'), (3,1,204,'Defense'), -(3,1,522,'SPELLDEFENSE(DND)'), +(3,1,522,'SPELLDEFENSE (DND)'), (3,1,668,'Language Common'), (3,1,672,'Language Dwarven'), +(3,1,1843,'Disarm'), (3,1,2382,'Generic'), (3,1,2457,'Battle Stance'), (3,1,2479,'Honorless Target'), (3,1,2481,'Find Treasure'), (3,1,3050,'Detect'), (3,1,3365,'Opening'), -(3,1,5301,'Defensive State(DND)'), +(3,1,5301,'Defensive State (DND)'), (3,1,6233,'Closing'), (3,1,6246,'Closing'), (3,1,6247,'Opening'), @@ -10385,16 +10427,20 @@ INSERT INTO `playercreateinfo_spell` VALUES (3,1,22027,'Remove Insignia'), (3,1,22810,'Opening - No Text'), (3,1,32215,'Victorious State'), +(3,1,45927,'Summon Friend'), +(3,1,59224,'Mace Specialization'), +(3,1,61437,'Opening'), (3,2,81,'Dodge'), (3,2,107,'Block'), (3,2,198,'One-Handed Maces'), (3,2,199,'Two-Handed Maces'), (3,2,203,'Unarmed'), (3,2,204,'Defense'), -(3,2,522,'SPELLDEFENSE(DND)'), +(3,2,522,'SPELLDEFENSE (DND)'), (3,2,635,'Holy Light'), (3,2,668,'Language Common'), (3,2,672,'Language Dwarven'), +(3,2,1843,'Disarm'), (3,2,2382,'Generic'), (3,2,2479,'Honorless Target'), (3,2,2481,'Find Treasure'), @@ -10415,7 +10461,7 @@ INSERT INTO `playercreateinfo_spell` VALUES (3,2,9078,'Cloth'), (3,2,9116,'Shield'), (3,2,9125,'Generic'), -(3,2,21084,'Seal of Righteousness'), +(3,2,20154,'Seal of Righteousness'), (3,2,20594,'Stoneform'), (3,2,20595,'Gun Specialization'), (3,2,20596,'Frost Resistance'), @@ -10424,15 +10470,19 @@ INSERT INTO `playercreateinfo_spell` VALUES (3,2,22027,'Remove Insignia'), (3,2,22810,'Opening - No Text'), (3,2,27762,'Libram'), +(3,2,45927,'Summon Friend'), +(3,2,59224,'Mace Specialization'), +(3,2,61437,'Opening'), (3,3,75,'Auto Shot'), (3,3,81,'Dodge'), (3,3,196,'One-Handed Axes'), (3,3,203,'Unarmed'), (3,3,204,'Defense'), (3,3,266,'Guns'), -(3,3,522,'SPELLDEFENSE(DND)'), +(3,3,522,'SPELLDEFENSE (DND)'), (3,3,668,'Language Common'), (3,3,672,'Language Dwarven'), +(3,3,1843,'Disarm'), (3,3,2382,'Generic'), (3,3,2479,'Honorless Target'), (3,3,2481,'Find Treasure'), @@ -10452,7 +10502,7 @@ INSERT INTO `playercreateinfo_spell` VALUES (3,3,9077,'Leather'), (3,3,9078,'Cloth'), (3,3,9125,'Generic'), -(3,3,13358,'Defensive State(DND)'), +(3,3,13358,'Defensive State (DND)'), (3,3,20594,'Stoneform'), (3,3,20595,'Gun Specialization'), (3,3,20596,'Frost Resistance'), @@ -10460,16 +10510,20 @@ INSERT INTO `playercreateinfo_spell` VALUES (3,3,21652,'Closing'), (3,3,22027,'Remove Insignia'), (3,3,22810,'Opening - No Text'), -(3,3,24949,'Defensive State 2(DND)'), -(3,3,34082,'Advantaged State(DND)'), +(3,3,24949,'Defensive State 2 (DND)'), +(3,3,34082,'Advantaged State (DND)'), +(3,3,45927,'Summon Friend'), +(3,3,59224,'Mace Specialization'), +(3,3,61437,'Opening'), (3,4,81,'Dodge'), (3,4,203,'Unarmed'), (3,4,204,'Defense'), -(3,4,522,'SPELLDEFENSE(DND)'), +(3,4,522,'SPELLDEFENSE (DND)'), (3,4,668,'Language Common'), (3,4,672,'Language Dwarven'), (3,4,1180,'Daggers'), (3,4,1752,'Sinister Strike'), +(3,4,1843,'Disarm'), (3,4,2098,'Eviscerate'), (3,4,2382,'Generic'), (3,4,2479,'Honorless Target'), @@ -10491,23 +10545,27 @@ INSERT INTO `playercreateinfo_spell` VALUES (3,4,9077,'Leather'), (3,4,9078,'Cloth'), (3,4,9125,'Generic'), -(3,4,16092,'Defensive State(DND)'), +(3,4,16092,'Defensive State (DND)'), (3,4,20594,'Stoneform'), (3,4,20595,'Gun Specialization'), (3,4,20596,'Frost Resistance'), -(3,4,21184,'Rogue Passive(DND)'), +(3,4,21184,'Rogue Passive (DND)'), (3,4,21651,'Opening'), (3,4,21652,'Closing'), (3,4,22027,'Remove Insignia'), (3,4,22810,'Opening - No Text'), +(3,4,45927,'Summon Friend'), +(3,4,59224,'Mace Specialization'), +(3,4,61437,'Opening'), (3,5,81,'Dodge'), (3,5,198,'One-Handed Maces'), (3,5,203,'Unarmed'), (3,5,204,'Defense'), -(3,5,522,'SPELLDEFENSE(DND)'), +(3,5,522,'SPELLDEFENSE (DND)'), (3,5,585,'Smite'), (3,5,668,'Language Common'), (3,5,672,'Language Dwarven'), +(3,5,1843,'Disarm'), (3,5,2050,'Lesser Heal'), (3,5,2382,'Generic'), (3,5,2479,'Honorless Target'), @@ -10535,6 +10593,9 @@ INSERT INTO `playercreateinfo_spell` VALUES (3,5,21652,'Closing'), (3,5,22027,'Remove Insignia'), (3,5,22810,'Opening - No Text'), +(3,5,45927,'Summon Friend'), +(3,5,59224,'Mace Specialization'), +(3,5,61437,'Opening'), (3,6,81,'Dodge'), (3,6,196,'One-Handed Axes'), (3,6,197,'Two-Handed Axes'), @@ -10611,16 +10672,17 @@ INSERT INTO `playercreateinfo_spell` VALUES (4,1,201,'One-Handed Swords'), (4,1,203,'Unarmed'), (4,1,204,'Defense'), -(4,1,522,'SPELLDEFENSE(DND)'), +(4,1,522,'SPELLDEFENSE (DND)'), (4,1,668,'Language Common'), (4,1,671,'Language Darnassian'), (4,1,1180,'Daggers'), +(4,1,1843,'Disarm'), (4,1,2382,'Generic'), (4,1,2457,'Battle Stance'), (4,1,2479,'Honorless Target'), (4,1,3050,'Detect'), (4,1,3365,'Opening'), -(4,1,5301,'Defensive State(DND)'), +(4,1,5301,'Defensive State (DND)'), (4,1,6233,'Closing'), (4,1,6246,'Closing'), (4,1,6247,'Opening'), @@ -10636,25 +10698,27 @@ INSERT INTO `playercreateinfo_spell` VALUES (4,1,9078,'Cloth'), (4,1,9116,'Shield'), (4,1,9125,'Generic'), -(4,1,20580,'Shadowmeld'), (4,1,20582,'Quickness'), (4,1,20583,'Nature Resistance'), (4,1,20585,'Wisp Spirit'), -(4,1,21009,'Shadowmeld Passive'), (4,1,21651,'Opening'), (4,1,21652,'Closing'), (4,1,22027,'Remove Insignia'), (4,1,22810,'Opening - No Text'), (4,1,32215,'Victorious State'), +(4,1,45927,'Summon Friend'), +(4,1,58984,'Shadowmelt'), +(4,1,61437,'Opening'), (4,3,75,'Auto Shot'), (4,3,81,'Dodge'), (4,3,203,'Unarmed'), (4,3,204,'Defense'), (4,3,264,'Bows'), -(4,3,522,'SPELLDEFENSE(DND)'), +(4,3,522,'SPELLDEFENSE (DND)'), (4,3,668,'Language Common'), (4,3,671,'Language Darnassian'), (4,3,1180,'Daggers'), +(4,3,1843,'Disarm'), (4,3,2382,'Generic'), (4,3,2479,'Honorless Target'), (4,3,2973,'Raptor Strike'), @@ -10673,26 +10737,28 @@ INSERT INTO `playercreateinfo_spell` VALUES (4,3,9077,'Leather'), (4,3,9078,'Cloth'), (4,3,9125,'Generic'), -(4,3,13358,'Defensive State(DND)'), -(4,3,20580,'Shadowmeld'), +(4,3,13358,'Defensive State (DND)'), (4,3,20582,'Quickness'), (4,3,20583,'Nature Resistance'), (4,3,20585,'Wisp Spirit'), -(4,3,21009,'Shadowmeld Passive'), (4,3,21651,'Opening'), (4,3,21652,'Closing'), (4,3,22027,'Remove Insignia'), (4,3,22810,'Opening - No Text'), -(4,3,24949,'Defensive State 2(DND)'), -(4,3,34082,'Advantaged State(DND)'), +(4,3,24949,'Defensive State 2 (DND)'), +(4,3,34082,'Advantaged State (DND)'), +(4,3,45927,'Summon Friend'), +(4,3,58984,'Shadowmelt'), +(4,3,61437,'Opening'), (4,4,81,'Dodge'), (4,4,203,'Unarmed'), (4,4,204,'Defense'), -(4,4,522,'SPELLDEFENSE(DND)'), +(4,4,522,'SPELLDEFENSE (DND)'), (4,4,668,'Language Common'), (4,4,671,'Language Darnassian'), (4,4,1180,'Daggers'), (4,4,1752,'Sinister Strike'), +(4,4,1843,'Disarm'), (4,4,2098,'Eviscerate'), (4,4,2382,'Generic'), (4,4,2479,'Honorless Target'), @@ -10713,25 +10779,27 @@ INSERT INTO `playercreateinfo_spell` VALUES (4,4,9077,'Leather'), (4,4,9078,'Cloth'), (4,4,9125,'Generic'), -(4,4,16092,'Defensive State(DND)'), -(4,4,20580,'Shadowmeld'), +(4,4,16092,'Defensive State (DND)'), (4,4,20582,'Quickness'), (4,4,20583,'Nature Resistance'), (4,4,20585,'Wisp Spirit'), -(4,4,21009,'Shadowmeld Passive'), -(4,4,21184,'Rogue Passive(DND)'), +(4,4,21184,'Rogue Passive (DND)'), (4,4,21651,'Opening'), (4,4,21652,'Closing'), (4,4,22027,'Remove Insignia'), (4,4,22810,'Opening - No Text'), +(4,4,45927,'Summon Friend'), +(4,4,58984,'Shadowmelt'), +(4,4,61437,'Opening'), (4,5,81,'Dodge'), (4,5,198,'One-Handed Maces'), (4,5,203,'Unarmed'), (4,5,204,'Defense'), -(4,5,522,'SPELLDEFENSE(DND)'), +(4,5,522,'SPELLDEFENSE (DND)'), (4,5,585,'Smite'), (4,5,668,'Language Common'), (4,5,671,'Language Darnassian'), +(4,5,1843,'Disarm'), (4,5,2050,'Lesser Heal'), (4,5,2382,'Generic'), (4,5,2479,'Honorless Target'), @@ -10751,15 +10819,16 @@ INSERT INTO `playercreateinfo_spell` VALUES (4,5,8386,'Attacking'), (4,5,9078,'Cloth'), (4,5,9125,'Generic'), -(4,5,20580,'Shadowmeld'), (4,5,20582,'Quickness'), (4,5,20583,'Nature Resistance'), (4,5,20585,'Wisp Spirit'), -(4,5,21009,'Shadowmeld Passive'), (4,5,21651,'Opening'), (4,5,21652,'Closing'), (4,5,22027,'Remove Insignia'), (4,5,22810,'Opening - No Text'), +(4,5,45927,'Summon Friend'), +(4,5,58984,'Shadowmelt'), +(4,5,61437,'Opening'), (4,6,81,'Dodge'), (4,6,196,'One-Handed Axes'), (4,6,197,'Two-Handed Axes'), @@ -10832,10 +10901,11 @@ INSERT INTO `playercreateinfo_spell` VALUES (4,11,203,'Unarmed'), (4,11,204,'Defense'), (4,11,227,'Staves'), -(4,11,522,'SPELLDEFENSE(DND)'), +(4,11,522,'SPELLDEFENSE (DND)'), (4,11,668,'Language Common'), (4,11,671,'Language Darnassian'), (4,11,1180,'Daggers'), +(4,11,1843,'Disarm'), (4,11,2382,'Generic'), (4,11,2479,'Honorless Target'), (4,11,3050,'Detect'), @@ -10855,16 +10925,17 @@ INSERT INTO `playercreateinfo_spell` VALUES (4,11,9077,'Leather'), (4,11,9078,'Cloth'), (4,11,9125,'Generic'), -(4,11,20580,'Shadowmeld'), (4,11,20582,'Quickness'), (4,11,20583,'Nature Resistance'), (4,11,20585,'Wisp Spirit'), -(4,11,21009,'Shadowmeld Passive'), (4,11,21651,'Opening'), (4,11,21652,'Closing'), (4,11,22027,'Remove Insignia'), (4,11,22810,'Opening - No Text'), (4,11,27764,'Fetish'), +(4,11,45927,'Summon Friend'), +(4,11,58984,'Shadowmelt'), +(4,11,61437,'Opening'), (5,1,78,'Heroic Strike'), (5,1,81,'Dodge'), (5,1,107,'Block'), @@ -10872,16 +10943,17 @@ INSERT INTO `playercreateinfo_spell` VALUES (5,1,202,'Two-Handed Swords'), (5,1,203,'Unarmed'), (5,1,204,'Defense'), -(5,1,522,'SPELLDEFENSE(DND)'), +(5,1,522,'SPELLDEFENSE (DND)'), (5,1,669,'Language Orcish'), (5,1,1180,'Daggers'), +(5,1,1843,'Disarm'), (5,1,2382,'Generic'), (5,1,2457,'Battle Stance'), (5,1,2479,'Honorless Target'), (5,1,3050,'Detect'), (5,1,3365,'Opening'), (5,1,5227,'Underwater Breathing'), -(5,1,5301,'Defensive State(DND)'), +(5,1,5301,'Defensive State (DND)'), (5,1,6233,'Closing'), (5,1,6246,'Closing'), (5,1,6247,'Opening'), @@ -10906,13 +10978,16 @@ INSERT INTO `playercreateinfo_spell` VALUES (5,1,22027,'Remove Insignia'), (5,1,22810,'Opening - No Text'), (5,1,32215,'Victorious State'), +(5,1,45927,'Summon Friend'), +(5,1,61437,'Opening'), (5,4,81,'Dodge'), (5,4,203,'Unarmed'), (5,4,204,'Defense'), -(5,4,522,'SPELLDEFENSE(DND)'), +(5,4,522,'SPELLDEFENSE (DND)'), (5,4,669,'Language Orcish'), (5,4,1180,'Daggers'), (5,4,1752,'Sinister Strike'), +(5,4,1843,'Disarm'), (5,4,2098,'Eviscerate'), (5,4,2382,'Generic'), (5,4,2479,'Honorless Target'), @@ -10935,22 +11010,25 @@ INSERT INTO `playercreateinfo_spell` VALUES (5,4,9077,'Leather'), (5,4,9078,'Cloth'), (5,4,9125,'Generic'), -(5,4,16092,'Defensive State(DND)'), +(5,4,16092,'Defensive State (DND)'), (5,4,17737,'Language Gutterspeak'), (5,4,20577,'Cannibalize'), (5,4,20579,'Shadow Resistance'), -(5,4,21184,'Rogue Passive(DND)'), +(5,4,21184,'Rogue Passive (DND)'), (5,4,21651,'Opening'), (5,4,21652,'Closing'), (5,4,22027,'Remove Insignia'), (5,4,22810,'Opening - No Text'), +(5,4,45927,'Summon Friend'), +(5,4,61437,'Opening'), (5,5,81,'Dodge'), (5,5,198,'One-Handed Maces'), (5,5,203,'Unarmed'), (5,5,204,'Defense'), -(5,5,522,'SPELLDEFENSE(DND)'), +(5,5,522,'SPELLDEFENSE (DND)'), (5,5,585,'Smite'), (5,5,669,'Language Orcish'), +(5,5,1843,'Disarm'), (5,5,2050,'Lesser Heal'), (5,5,2382,'Generic'), (5,5,2479,'Honorless Target'), @@ -10979,6 +11057,8 @@ INSERT INTO `playercreateinfo_spell` VALUES (5,5,21652,'Closing'), (5,5,22027,'Remove Insignia'), (5,5,22810,'Opening - No Text'), +(5,5,45927,'Summon Friend'), +(5,5,61437,'Opening'), (5,6,81,'Dodge'), (5,6,196,'One-Handed Axes'), (5,6,197,'Two-Handed Axes'), @@ -11053,8 +11133,9 @@ INSERT INTO `playercreateinfo_spell` VALUES (5,8,203,'Unarmed'), (5,8,204,'Defense'), (5,8,227,'Staves'), -(5,8,522,'SPELLDEFENSE(DND)'), +(5,8,522,'SPELLDEFENSE (DND)'), (5,8,669,'Language Orcish'), +(5,8,1843,'Disarm'), (5,8,2382,'Generic'), (5,8,2479,'Honorless Target'), (5,8,3050,'Detect'), @@ -11082,14 +11163,17 @@ INSERT INTO `playercreateinfo_spell` VALUES (5,8,21652,'Closing'), (5,8,22027,'Remove Insignia'), (5,8,22810,'Opening - No Text'), +(5,8,45927,'Summon Friend'), +(5,8,61437,'Opening'), (5,9,81,'Dodge'), (5,9,203,'Unarmed'), (5,9,204,'Defense'), -(5,9,522,'SPELLDEFENSE(DND)'), +(5,9,522,'SPELLDEFENSE (DND)'), (5,9,669,'Language Orcish'), (5,9,686,'Shadow Bolt'), (5,9,687,'Demon Skin'), (5,9,1180,'Daggers'), +(5,9,1843,'Disarm'), (5,9,2382,'Generic'), (5,9,2479,'Honorless Target'), (5,9,3050,'Detect'), @@ -11117,6 +11201,9 @@ INSERT INTO `playercreateinfo_spell` VALUES (5,9,21652,'Closing'), (5,9,22027,'Remove Insignia'), (5,9,22810,'Opening - No Text'), +(5,9,45927,'Summon Friend'), +(5,9,58284,'Chaos Bolt Passive'), +(5,9,61437,'Opening'), (6,1,78,'Heroic Strike'), (6,1,81,'Dodge'), (6,1,107,'Block'), @@ -11125,15 +11212,16 @@ INSERT INTO `playercreateinfo_spell` VALUES (6,1,199,'Two-Handed Maces'), (6,1,203,'Unarmed'), (6,1,204,'Defense'), -(6,1,522,'SPELLDEFENSE(DND)'), +(6,1,522,'SPELLDEFENSE (DND)'), (6,1,669,'Language Orcish'), (6,1,670,'Language Taurahe'), +(6,1,1843,'Disarm'), (6,1,2382,'Generic'), (6,1,2457,'Battle Stance'), (6,1,2479,'Honorless Target'), (6,1,3050,'Detect'), (6,1,3365,'Opening'), -(6,1,5301,'Defensive State(DND)'), +(6,1,5301,'Defensive State (DND)'), (6,1,6233,'Closing'), (6,1,6246,'Closing'), (6,1,6247,'Opening'), @@ -11158,15 +11246,18 @@ INSERT INTO `playercreateinfo_spell` VALUES (6,1,22027,'Remove Insignia'), (6,1,22810,'Opening - No Text'), (6,1,32215,'Victorious State'), +(6,1,45927,'Summon Friend'), +(6,1,61437,'Opening'), (6,3,75,'Auto Shot'), (6,3,81,'Dodge'), (6,3,196,'One-Handed Axes'), (6,3,203,'Unarmed'), (6,3,204,'Defense'), (6,3,266,'Guns'), -(6,3,522,'SPELLDEFENSE(DND)'), +(6,3,522,'SPELLDEFENSE (DND)'), (6,3,669,'Language Orcish'), (6,3,670,'Language Taurahe'), +(6,3,1843,'Disarm'), (6,3,2382,'Generic'), (6,3,2479,'Honorless Target'), (6,3,2973,'Raptor Strike'), @@ -11185,7 +11276,7 @@ INSERT INTO `playercreateinfo_spell` VALUES (6,3,9077,'Leather'), (6,3,9078,'Cloth'), (6,3,9125,'Generic'), -(6,3,13358,'Defensive State(DND)'), +(6,3,13358,'Defensive State (DND)'), (6,3,20549,'War Stomp'), (6,3,20550,'Endurance'), (6,3,20551,'Nature Resistance'), @@ -11194,8 +11285,10 @@ INSERT INTO `playercreateinfo_spell` VALUES (6,3,21652,'Closing'), (6,3,22027,'Remove Insignia'), (6,3,22810,'Opening - No Text'), -(6,3,24949,'Defensive State 2(DND)'), -(6,3,34082,'Advantaged State(DND)'), +(6,3,24949,'Defensive State 2 (DND)'), +(6,3,34082,'Advantaged State (DND)'), +(6,3,45927,'Summon Friend'), +(6,3,61437,'Opening'), (6,6,81,'Dodge'), (6,6,196,'One-Handed Axes'), (6,6,197,'Two-Handed Axes'), @@ -11272,9 +11365,10 @@ INSERT INTO `playercreateinfo_spell` VALUES (6,7,227,'Staves'), (6,7,331,'Healing Wave'), (6,7,403,'Lightning Bolt'), -(6,7,522,'SPELLDEFENSE(DND)'), +(6,7,522,'SPELLDEFENSE (DND)'), (6,7,669,'Language Orcish'), (6,7,670,'Language Taurahe'), +(6,7,1843,'Disarm'), (6,7,2382,'Generic'), (6,7,2479,'Honorless Target'), (6,7,3050,'Detect'), @@ -11302,14 +11396,17 @@ INSERT INTO `playercreateinfo_spell` VALUES (6,7,22027,'Remove Insignia'), (6,7,22810,'Opening - No Text'), (6,7,27763,'Totem'), +(6,7,45927,'Summon Friend'), +(6,7,61437,'Opening'), (6,11,81,'Dodge'), (6,11,198,'One-Handed Maces'), (6,11,203,'Unarmed'), (6,11,204,'Defense'), (6,11,227,'Staves'), -(6,11,522,'SPELLDEFENSE(DND)'), +(6,11,522,'SPELLDEFENSE (DND)'), (6,11,669,'Language Orcish'), (6,11,670,'Language Taurahe'), +(6,11,1843,'Disarm'), (6,11,2382,'Generic'), (6,11,2479,'Honorless Target'), (6,11,3050,'Detect'), @@ -11338,6 +11435,8 @@ INSERT INTO `playercreateinfo_spell` VALUES (6,11,22027,'Remove Insignia'), (6,11,22810,'Opening - No Text'), (6,11,27764,'Fetish'), +(6,11,45927,'Summon Friend'), +(6,11,61437,'Opening'), (7,1,78,'Heroic Strike'), (7,1,81,'Dodge'), (7,1,107,'Block'), @@ -11345,15 +11444,16 @@ INSERT INTO `playercreateinfo_spell` VALUES (7,1,201,'One-Handed Swords'), (7,1,203,'Unarmed'), (7,1,204,'Defense'), -(7,1,522,'SPELLDEFENSE(DND)'), +(7,1,522,'SPELLDEFENSE (DND)'), (7,1,668,'Language Common'), (7,1,1180,'Daggers'), +(7,1,1843,'Disarm'), (7,1,2382,'Generic'), (7,1,2457,'Battle Stance'), (7,1,2479,'Honorless Target'), (7,1,3050,'Detect'), (7,1,3365,'Opening'), -(7,1,5301,'Defensive State(DND)'), +(7,1,5301,'Defensive State (DND)'), (7,1,6233,'Closing'), (7,1,6246,'Closing'), (7,1,6247,'Opening'), @@ -11379,13 +11479,16 @@ INSERT INTO `playercreateinfo_spell` VALUES (7,1,22027,'Remove Insignia'), (7,1,22810,'Opening - No Text'), (7,1,32215,'Victorious State'), +(7,1,45927,'Summon Friend'), +(7,1,61437,'Opening'), (7,4,81,'Dodge'), (7,4,203,'Unarmed'), (7,4,204,'Defense'), -(7,4,522,'SPELLDEFENSE(DND)'), +(7,4,522,'SPELLDEFENSE (DND)'), (7,4,668,'Language Common'), (7,4,1180,'Daggers'), (7,4,1752,'Sinister Strike'), +(7,4,1843,'Disarm'), (7,4,2098,'Eviscerate'), (7,4,2382,'Generic'), (7,4,2479,'Honorless Target'), @@ -11407,16 +11510,18 @@ INSERT INTO `playercreateinfo_spell` VALUES (7,4,9077,'Leather'), (7,4,9078,'Cloth'), (7,4,9125,'Generic'), -(7,4,16092,'Defensive State(DND)'), +(7,4,16092,'Defensive State (DND)'), (7,4,20589,'Escape Artist'), (7,4,20591,'Expansive Mind'), (7,4,20592,'Arcane Resistance'), (7,4,20593,'Engineering Specialization'), -(7,4,21184,'Rogue Passive(DND)'), +(7,4,21184,'Rogue Passive (DND)'), (7,4,21651,'Opening'), (7,4,21652,'Closing'), (7,4,22027,'Remove Insignia'), (7,4,22810,'Opening - No Text'), +(7,4,45927,'Summon Friend'), +(7,4,61437,'Opening'), (7,6,81,'Dodge'), (7,6,196,'One-Handed Axes'), (7,6,197,'Two-Handed Axes'), @@ -11491,8 +11596,9 @@ INSERT INTO `playercreateinfo_spell` VALUES (7,8,203,'Unarmed'), (7,8,204,'Defense'), (7,8,227,'Staves'), -(7,8,522,'SPELLDEFENSE(DND)'), +(7,8,522,'SPELLDEFENSE (DND)'), (7,8,668,'Language Common'), +(7,8,1843,'Disarm'), (7,8,2382,'Generic'), (7,8,2479,'Honorless Target'), (7,8,3050,'Detect'), @@ -11520,14 +11626,17 @@ INSERT INTO `playercreateinfo_spell` VALUES (7,8,21652,'Closing'), (7,8,22027,'Remove Insignia'), (7,8,22810,'Opening - No Text'), +(7,8,45927,'Summon Friend'), +(7,8,61437,'Opening'), (7,9,81,'Dodge'), (7,9,203,'Unarmed'), (7,9,204,'Defense'), -(7,9,522,'SPELLDEFENSE(DND)'), +(7,9,522,'SPELLDEFENSE (DND)'), (7,9,668,'Language Common'), (7,9,686,'Shadow Bolt'), (7,9,687,'Demon Skin'), (7,9,1180,'Daggers'), +(7,9,1843,'Disarm'), (7,9,2382,'Generic'), (7,9,2479,'Honorless Target'), (7,9,3050,'Detect'), @@ -11555,15 +11664,18 @@ INSERT INTO `playercreateinfo_spell` VALUES (7,9,21652,'Closing'), (7,9,22027,'Remove Insignia'), (7,9,22810,'Opening - No Text'), +(7,9,45927,'Summon Friend'), +(7,9,61437,'Opening'), (8,1,78,'Heroic Strike'), (8,1,81,'Dodge'), (8,1,107,'Block'), (8,1,196,'One-Handed Axes'), (8,1,203,'Unarmed'), (8,1,204,'Defense'), -(8,1,522,'SPELLDEFENSE(DND)'), +(8,1,522,'SPELLDEFENSE (DND)'), (8,1,669,'Language Orcish'), (8,1,1180,'Daggers'), +(8,1,1843,'Disarm'), (8,1,2382,'Generic'), (8,1,2457,'Battle Stance'), (8,1,2479,'Honorless Target'), @@ -11571,7 +11683,7 @@ INSERT INTO `playercreateinfo_spell` VALUES (8,1,2764,'Throw'), (8,1,3050,'Detect'), (8,1,3365,'Opening'), -(8,1,5301,'Defensive State(DND)'), +(8,1,5301,'Defensive State (DND)'), (8,1,6233,'Closing'), (8,1,6246,'Closing'), (8,1,6247,'Opening'), @@ -11598,14 +11710,18 @@ INSERT INTO `playercreateinfo_spell` VALUES (8,1,26290,'Bow Specialization'), (8,1,26296,'Berserking'), (8,1,32215,'Victorious State'), +(8,1,45927,'Summon Friend'), +(8,1,58943,'Da Voodoo Shuffle'), +(8,1,61437,'Opening'), (8,3,75,'Auto Shot'), (8,3,81,'Dodge'), (8,3,196,'One-Handed Axes'), (8,3,203,'Unarmed'), (8,3,204,'Defense'), (8,3,264,'Bows'), -(8,3,522,'SPELLDEFENSE(DND)'), +(8,3,522,'SPELLDEFENSE (DND)'), (8,3,669,'Language Orcish'), +(8,3,1843,'Disarm'), (8,3,2382,'Generic'), (8,3,2479,'Honorless Target'), (8,3,2973,'Raptor Strike'), @@ -11625,7 +11741,7 @@ INSERT INTO `playercreateinfo_spell` VALUES (8,3,9077,'Leather'), (8,3,9078,'Cloth'), (8,3,9125,'Generic'), -(8,3,13358,'Defensive State(DND)'), +(8,3,13358,'Defensive State (DND)'), (8,3,20554,'Berserking'), (8,3,20555,'Regeneration'), (8,3,20557,'Beast Slaying'), @@ -11634,16 +11750,20 @@ INSERT INTO `playercreateinfo_spell` VALUES (8,3,21652,'Closing'), (8,3,22027,'Remove Insignia'), (8,3,22810,'Opening - No Text'), -(8,3,24949,'Defensive State 2(DND)'), +(8,3,24949,'Defensive State 2 (DND)'), (8,3,26290,'Bow Specialization'), -(8,3,34082,'Advantaged State(DND)'), +(8,3,34082,'Advantaged State (DND)'), +(8,3,45927,'Summon Friend'), +(8,3,58943,'Da Voodoo Shuffle'), +(8,3,61437,'Opening'), (8,4,81,'Dodge'), (8,4,203,'Unarmed'), (8,4,204,'Defense'), -(8,4,522,'SPELLDEFENSE(DND)'), +(8,4,522,'SPELLDEFENSE (DND)'), (8,4,669,'Language Orcish'), (8,4,1180,'Daggers'), (8,4,1752,'Sinister Strike'), +(8,4,1843,'Disarm'), (8,4,2098,'Eviscerate'), (8,4,2382,'Generic'), (8,4,2479,'Honorless Target'), @@ -11665,24 +11785,28 @@ INSERT INTO `playercreateinfo_spell` VALUES (8,4,9077,'Leather'), (8,4,9078,'Cloth'), (8,4,9125,'Generic'), -(8,4,16092,'Defensive State(DND)'), +(8,4,16092,'Defensive State (DND)'), (8,4,20555,'Regeneration'), (8,4,20557,'Beast Slaying'), (8,4,20558,'Throwing Specialization'), -(8,4,21184,'Rogue Passive(DND)'), +(8,4,21184,'Rogue Passive (DND)'), (8,4,21651,'Opening'), (8,4,21652,'Closing'), (8,4,22027,'Remove Insignia'), (8,4,22810,'Opening - No Text'), (8,4,26290,'Bow Specialization'), (8,4,26297,'Berserking'), +(8,4,45927,'Summon Friend'), +(8,4,58943,'Da Voodoo Shuffle'), +(8,4,61437,'Opening'), (8,5,81,'Dodge'), (8,5,198,'One-Handed Maces'), (8,5,203,'Unarmed'), (8,5,204,'Defense'), -(8,5,522,'SPELLDEFENSE(DND)'), +(8,5,522,'SPELLDEFENSE (DND)'), (8,5,585,'Smite'), (8,5,669,'Language Orcish'), +(8,5,1843,'Disarm'), (8,5,2050,'Lesser Heal'), (8,5,2382,'Generic'), (8,5,2479,'Honorless Target'), @@ -11712,6 +11836,9 @@ INSERT INTO `playercreateinfo_spell` VALUES (8,5,22027,'Remove Insignia'), (8,5,22810,'Opening - No Text'), (8,5,26290,'Bow Specialization'), +(8,5,45927,'Summon Friend'), +(8,5,58943,'Da Voodoo Shuffle'), +(8,5,61437,'Opening'), (8,6,81,'Dodge'), (8,6,196,'One-Handed Axes'), (8,6,197,'Two-Handed Axes'), @@ -11790,8 +11917,9 @@ INSERT INTO `playercreateinfo_spell` VALUES (8,7,227,'Staves'), (8,7,331,'Healing Wave'), (8,7,403,'Lightning Bolt'), -(8,7,522,'SPELLDEFENSE(DND)'), +(8,7,522,'SPELLDEFENSE (DND)'), (8,7,669,'Language Orcish'), +(8,7,1843,'Disarm'), (8,7,2382,'Generic'), (8,7,2479,'Honorless Target'), (8,7,3050,'Detect'), @@ -11821,14 +11949,18 @@ INSERT INTO `playercreateinfo_spell` VALUES (8,7,22810,'Opening - No Text'), (8,7,26290,'Bow Specialization'), (8,7,27763,'Totem'), +(8,7,45927,'Summon Friend'), +(8,7,58943,'Da Voodoo Shuffle'), +(8,7,61437,'Opening'), (8,8,81,'Dodge'), (8,8,133,'Fireball'), (8,8,168,'Frost Armor'), (8,8,203,'Unarmed'), (8,8,204,'Defense'), (8,8,227,'Staves'), -(8,8,522,'SPELLDEFENSE(DND)'), +(8,8,522,'SPELLDEFENSE (DND)'), (8,8,669,'Language Orcish'), +(8,8,1843,'Disarm'), (8,8,2382,'Generic'), (8,8,2479,'Honorless Target'), (8,8,3050,'Detect'), @@ -11857,13 +11989,16 @@ INSERT INTO `playercreateinfo_spell` VALUES (8,8,22027,'Remove Insignia'), (8,8,22810,'Opening - No Text'), (8,8,26290,'Bow Specialization'), +(8,8,45927,'Summon Friend'), +(8,8,58943,'Da Voodoo Shuffle'), +(8,8,61437,'Opening'), (10,2,81,'Dodge'), (10,2,107,'Block'), (10,2,201,'One-Handed Swords'), (10,2,202,'Two-Handed Swords'), (10,2,203,'Unarmed'), (10,2,204,'Defense'), -(10,2,522,'SPELLDEFENSE(DND)'), +(10,2,522,'SPELLDEFENSE (DND)'), (10,2,635,'Holy Light'), (10,2,669,'Language Orcish'), (10,2,813,'Language Thalassian'), @@ -11901,7 +12036,7 @@ INSERT INTO `playercreateinfo_spell` VALUES (10,3,203,'Unarmed'), (10,3,204,'Defense'), (10,3,264,'Bows'), -(10,3,522,'SPELLDEFENSE(DND)'), +(10,3,522,'SPELLDEFENSE (DND)'), (10,3,669,'Language Orcish'), (10,3,813,'Language Thalassian'), (10,3,822,'Magic Resistance'), @@ -11924,20 +12059,20 @@ INSERT INTO `playercreateinfo_spell` VALUES (10,3,9077,'Leather'), (10,3,9078,'Cloth'), (10,3,9125,'Generic'), -(10,3,13358,'Defensive State(DND)'), +(10,3,13358,'Defensive State (DND)'), (10,3,21651,'Opening'), (10,3,21652,'Closing'), (10,3,22027,'Remove Insignia'), (10,3,22810,'Opening - No Text'), -(10,3,24949,'Defensive State 2(DND)'), +(10,3,24949,'Defensive State 2 (DND)'), (10,3,28730,'Arcane Torrent'), (10,3,28734,'Mana Tap'), (10,3,28877,'Arcane Affinity'), -(10,3,34082,'Advantaged State(DND)'), +(10,3,34082,'Advantaged State (DND)'), (10,4,81,'Dodge'), (10,4,203,'Unarmed'), (10,4,204,'Defense'), -(10,4,522,'SPELLDEFENSE(DND)'), +(10,4,522,'SPELLDEFENSE (DND)'), (10,4,669,'Language Orcish'), (10,4,813,'Language Thalassian'), (10,4,822,'Magic Resistance'), @@ -11963,8 +12098,8 @@ INSERT INTO `playercreateinfo_spell` VALUES (10,4,9077,'Leather'), (10,4,9078,'Cloth'), (10,4,9125,'Generic'), -(10,4,16092,'Defensive State(DND)'), -(10,4,21184,'Rogue Passive(DND)'), +(10,4,16092,'Defensive State (DND)'), +(10,4,21184,'Rogue Passive (DND)'), (10,4,21651,'Opening'), (10,4,21652,'Closing'), (10,4,22027,'Remove Insignia'), @@ -11976,7 +12111,7 @@ INSERT INTO `playercreateinfo_spell` VALUES (10,5,198,'One-Handed Maces'), (10,5,203,'Unarmed'), (10,5,204,'Defense'), -(10,5,522,'SPELLDEFENSE(DND)'), +(10,5,522,'SPELLDEFENSE (DND)'), (10,5,585,'Smite'), (10,5,669,'Language Orcish'), (10,5,813,'Language Thalassian'), @@ -12080,7 +12215,7 @@ INSERT INTO `playercreateinfo_spell` VALUES (10,8,203,'Unarmed'), (10,8,204,'Defense'), (10,8,227,'Staves'), -(10,8,522,'SPELLDEFENSE(DND)'), +(10,8,522,'SPELLDEFENSE (DND)'), (10,8,669,'Language Orcish'), (10,8,813,'Language Thalassian'), (10,8,822,'Magic Resistance'), @@ -12112,7 +12247,7 @@ INSERT INTO `playercreateinfo_spell` VALUES (10,9,81,'Dodge'), (10,9,203,'Unarmed'), (10,9,204,'Defense'), -(10,9,522,'SPELLDEFENSE(DND)'), +(10,9,522,'SPELLDEFENSE (DND)'), (10,9,669,'Language Orcish'), (10,9,686,'Shadow Bolt'), (10,9,687,'Demon Skin'), @@ -12152,14 +12287,15 @@ INSERT INTO `playercreateinfo_spell` VALUES (11,1,202,'Two-Handed Swords'), (11,1,203,'Unarmed'), (11,1,204,'Defense'), -(11,1,522,'SPELLDEFENSE(DND)'), +(11,1,522,'SPELLDEFENSE (DND)'), (11,1,668,'Language Common'), +(11,1,1843,'Disarm'), (11,1,2382,'Generic'), (11,1,2457,'Battle Stance'), (11,1,2479,'Honorless Target'), (11,1,3050,'Detect'), (11,1,3365,'Opening'), -(11,1,5301,'Defensive State(DND)'), +(11,1,5301,'Defensive State (DND)'), (11,1,6233,'Closing'), (11,1,6246,'Closing'), (11,1,6247,'Opening'), @@ -12176,7 +12312,6 @@ INSERT INTO `playercreateinfo_spell` VALUES (11,1,9078,'Cloth'), (11,1,9116,'Shield'), (11,1,9125,'Generic'), -(11,1,20579,'Shadow Resistance'), (11,1,21651,'Opening'), (11,1,21652,'Closing'), (11,1,22027,'Remove Insignia'), @@ -12185,15 +12320,19 @@ INSERT INTO `playercreateinfo_spell` VALUES (11,1,28880,'Gift of the Naaru'), (11,1,29932,'Language Draenei'), (11,1,32215,'Victorious State'), +(11,1,45927,'Summon Friend'), +(11,1,59221,'Shadow Resistance'), +(11,1,61437,'Opening'), (11,2,81,'Dodge'), (11,2,107,'Block'), (11,2,198,'One-Handed Maces'), (11,2,199,'Two-Handed Maces'), (11,2,203,'Unarmed'), (11,2,204,'Defense'), -(11,2,522,'SPELLDEFENSE(DND)'), +(11,2,522,'SPELLDEFENSE (DND)'), (11,2,635,'Holy Light'), (11,2,668,'Language Common'), +(11,2,1843,'Disarm'), (11,2,2382,'Generic'), (11,2,2479,'Honorless Target'), (11,2,3050,'Detect'), @@ -12215,22 +12354,25 @@ INSERT INTO `playercreateinfo_spell` VALUES (11,2,9116,'Shield'), (11,2,9125,'Generic'), (11,2,21084,'Seal of Righteousness'), -(11,2,20579,'Shadow Resistance'), (11,2,21651,'Opening'), (11,2,21652,'Closing'), (11,2,22027,'Remove Insignia'), (11,2,22810,'Opening - No Text'), (11,2,27762,'Libram'), (11,2,28875,'Gemcutting'), -(11,2,59542,'Gift of the Naaru'), (11,2,29932,'Language Draenei'), +(11,2,45927,'Summon Friend'), +(11,2,59221,'Shadow Resistance'), +(11,2,59542,'Gift of the Naaru'), +(11,2,61437,'Opening'), (11,3,75,'Auto Shot'), (11,3,81,'Dodge'), (11,3,201,'One-Handed Swords'), (11,3,203,'Unarmed'), (11,3,204,'Defense'), -(11,3,522,'SPELLDEFENSE(DND)'), +(11,3,522,'SPELLDEFENSE (DND)'), (11,3,668,'Language Common'), +(11,3,1843,'Disarm'), (11,3,2382,'Generic'), (11,3,2479,'Honorless Target'), (11,3,2973,'Raptor Strike'), @@ -12251,24 +12393,27 @@ INSERT INTO `playercreateinfo_spell` VALUES (11,3,9077,'Leather'), (11,3,9078,'Cloth'), (11,3,9125,'Generic'), -(11,3,13358,'Defensive State(DND)'), -(11,3,20579,'Shadow Resistance'), +(11,3,13358,'Defensive State (DND)'), (11,3,21651,'Opening'), (11,3,21652,'Closing'), (11,3,22027,'Remove Insignia'), (11,3,22810,'Opening - No Text'), -(11,3,24949,'Defensive State 2(DND)'), +(11,3,24949,'Defensive State 2 (DND)'), (11,3,28875,'Gemcutting'), -(11,3,59543,'Gift of the Naaru'), (11,3,29932,'Language Draenei'), -(11,3,34082,'Advantaged State(DND)'), +(11,3,34082,'Advantaged State (DND)'), +(11,3,45927,'Summon Friend'), +(11,3,59221,'Shadow Resistance'), +(11,3,59543,'Gift of the Naaru'), +(11,3,61437,'Opening'), (11,5,81,'Dodge'), (11,5,198,'One-Handed Maces'), (11,5,203,'Unarmed'), (11,5,204,'Defense'), -(11,5,522,'SPELLDEFENSE(DND)'), +(11,5,522,'SPELLDEFENSE (DND)'), (11,5,585,'Smite'), (11,5,668,'Language Common'), +(11,5,1843,'Disarm'), (11,5,2050,'Lesser Heal'), (11,5,2382,'Generic'), (11,5,2479,'Honorless Target'), @@ -12288,15 +12433,17 @@ INSERT INTO `playercreateinfo_spell` VALUES (11,5,8386,'Attacking'), (11,5,9078,'Cloth'), (11,5,9125,'Generic'), -(11,5,20579,'Shadow Resistance'), (11,5,21651,'Opening'), (11,5,21652,'Closing'), (11,5,22027,'Remove Insignia'), (11,5,22810,'Opening - No Text'), (11,5,28875,'Gemcutting'), (11,5,28878,'Inspiring Presence'), -(11,5,59544,'Gift of the Naaru'), (11,5,29932,'Language Draenei'), +(11,5,45927,'Summon Friend'), +(11,5,59221,'Shadow Resistance'), +(11,5,59544,'Gift of the Naaru'), +(11,5,61437,'Opening'), (11,6,81,'Dodge'), (11,6,196,'One-Handed Axes'), (11,6,197,'Two-Handed Axes'), @@ -12359,6 +12506,7 @@ INSERT INTO `playercreateinfo_spell` VALUES (11,6,49410,'Forceful Deflection'), (11,6,49576,'Death Grip'), (11,6,52665,'Sigil'), +(11,6,59221,'Shadow Resistance'), (11,6,59539,'Shadow Resistance'), (11,6,59545,'Gift of the Naaru'), (11,6,59879,'Blood Plague'), @@ -12373,8 +12521,9 @@ INSERT INTO `playercreateinfo_spell` VALUES (11,7,227,'Staves'), (11,7,331,'Healing Wave'), (11,7,403,'Lightning Bolt'), -(11,7,522,'SPELLDEFENSE(DND)'), +(11,7,522,'SPELLDEFENSE (DND)'), (11,7,668,'Language Common'), +(11,7,1843,'Disarm'), (11,7,2382,'Generic'), (11,7,2479,'Honorless Target'), (11,7,3050,'Detect'), @@ -12393,7 +12542,6 @@ INSERT INTO `playercreateinfo_spell` VALUES (11,7,9078,'Cloth'), (11,7,9116,'Shield'), (11,7,9125,'Generic'), -(11,7,20579,'Shadow Resistance'), (11,7,21651,'Opening'), (11,7,21652,'Closing'), (11,7,22027,'Remove Insignia'), @@ -12401,16 +12549,20 @@ INSERT INTO `playercreateinfo_spell` VALUES (11,7,27763,'Totem'), (11,7,28875,'Gemcutting'), (11,7,28878,'Inspiring Presence'), -(11,7,59547,'Gift of the Naaru'), (11,7,29932,'Language Draenei'), +(11,7,45927,'Summon Friend'), +(11,7,59221,'Shadow Resistance'), +(11,7,59547,'Gift of the Naaru'), +(11,7,61437,'Opening'), (11,8,81,'Dodge'), (11,8,133,'Fireball'), (11,8,168,'Frost Armor'), (11,8,203,'Unarmed'), (11,8,204,'Defense'), (11,8,227,'Staves'), -(11,8,522,'SPELLDEFENSE(DND)'), +(11,8,522,'SPELLDEFENSE (DND)'), (11,8,668,'Language Common'), +(11,8,1843,'Disarm'), (11,8,2382,'Generic'), (11,8,2479,'Honorless Target'), (11,8,3050,'Detect'), @@ -12429,15 +12581,17 @@ INSERT INTO `playercreateinfo_spell` VALUES (11,8,8386,'Attacking'), (11,8,9078,'Cloth'), (11,8,9125,'Generic'), -(11,8,20579,'Shadow Resistance'), (11,8,21651,'Opening'), (11,8,21652,'Closing'), (11,8,22027,'Remove Insignia'), (11,8,22810,'Opening - No Text'), (11,8,28875,'Gemcutting'), (11,8,28878,'Inspiring Presence'), +(11,8,29932,'Language Draenei'), +(11,8,45927,'Summon Friend'), +(11,8,59221,'Shadow Resistance'), (11,8,59548,'Gift of the Naaru'), -(11,8,29932,'Language Draenei'); +(11,8,61437,'Opening'); /*!40000 ALTER TABLE `playercreateinfo_spell` ENABLE KEYS */; UNLOCK TABLES; @@ -15966,7 +16120,6 @@ INSERT INTO `spell_learn_spell` VALUES (53428,53343,1); - /*!40000 ALTER TABLE `spell_learn_spell` ENABLE KEYS */; UNLOCK TABLES; diff --git a/sql/updates/7074_01_mangos_playercreateinfo_spell.sql b/sql/updates/7074_01_mangos_playercreateinfo_spell.sql new file mode 100644 index 000000000..7bf0b6775 --- /dev/null +++ b/sql/updates/7074_01_mangos_playercreateinfo_spell.sql @@ -0,0 +1,2797 @@ +ALTER TABLE db_version CHANGE COLUMN required_7067_02_mangos_spell_learn_spell required_7074_01_mangos_playercreateinfo_spell bit; + +DELETE FROM `playercreateinfo_spell`; + +INSERT INTO `playercreateinfo_spell` VALUES +(1,1,78,'Heroic Strike'), +(1,1,81,'Dodge'), +(1,1,107,'Block'), +(1,1,196,'One-Handed Axes'), +(1,1,198,'One-Handed Maces'), +(1,1,201,'One-Handed Swords'), +(1,1,203,'Unarmed'), +(1,1,204,'Defense'), +(1,1,522,'SPELLDEFENSE (DND)'), +(1,1,668,'Language Common'), +(1,1,1843,'Disarm'), +(1,1,2382,'Generic'), +(1,1,2457,'Battle Stance'), +(1,1,2479,'Honorless Target'), +(1,1,3050,'Detect'), +(1,1,3365,'Opening'), +(1,1,5301,'Defensive State (DND)'), +(1,1,6233,'Closing'), +(1,1,6246,'Closing'), +(1,1,6247,'Opening'), +(1,1,6477,'Opening'), +(1,1,6478,'Opening'), +(1,1,6603,'Attack'), +(1,1,7266,'Duel'), +(1,1,7267,'Grovel'), +(1,1,7355,'Stuck'), +(1,1,8386,'Attacking'), +(1,1,8737,'Mail'), +(1,1,9077,'Leather'), +(1,1,9078,'Cloth'), +(1,1,9116,'Shield'), +(1,1,9125,'Generic'), +(1,1,20597,'Sword Specialization'), +(1,1,20598,'The Human Spirit'), +(1,1,20599,'Diplomacy'), +(1,1,20864,'Mace Specialization'), +(1,1,21651,'Opening'), +(1,1,21652,'Closing'), +(1,1,22027,'Remove Insignia'), +(1,1,22810,'Opening - No Text'), +(1,1,32215,'Victorious State'), +(1,1,45927,'Summon Friend'), +(1,1,58985,'Perception'), +(1,1,59752,'Every Man for Himself'), +(1,1,61437,'Opening'), +(1,2,81,'Dodge'), +(1,2,107,'Block'), +(1,2,198,'One-Handed Maces'), +(1,2,199,'Two-Handed Maces'), +(1,2,203,'Unarmed'), +(1,2,204,'Defense'), +(1,2,522,'SPELLDEFENSE (DND)'), +(1,2,635,'Holy Light'), +(1,2,668,'Language Common'), +(1,2,1843,'Disarm'), +(1,2,2382,'Generic'), +(1,2,2479,'Honorless Target'), +(1,2,3050,'Detect'), +(1,2,3365,'Opening'), +(1,2,6233,'Closing'), +(1,2,6246,'Closing'), +(1,2,6247,'Opening'), +(1,2,6477,'Opening'), +(1,2,6478,'Opening'), +(1,2,6603,'Attack'), +(1,2,7266,'Duel'), +(1,2,7267,'Grovel'), +(1,2,7355,'Stuck'), +(1,2,8386,'Attacking'), +(1,2,8737,'Mail'), +(1,2,9077,'Leather'), +(1,2,9078,'Cloth'), +(1,2,9116,'Shield'), +(1,2,9125,'Generic'), +(1,2,20154,'Seal of Righteousness'), +(1,2,20597,'Sword Specialization'), +(1,2,20598,'The Human Spirit'), +(1,2,20599,'Diplomacy'), +(1,2,20864,'Mace Specialization'), +(1,2,21651,'Opening'), +(1,2,21652,'Closing'), +(1,2,22027,'Remove Insignia'), +(1,2,22810,'Opening - No Text'), +(1,2,27762,'Libram'), +(1,2,45927,'Summon Friend'), +(1,2,58985,'Perception'), +(1,2,59752,'Every Man for Himself'), +(1,2,61437,'Opening'), +(1,4,81,'Dodge'), +(1,4,203,'Unarmed'), +(1,4,204,'Defense'), +(1,4,522,'SPELLDEFENSE (DND)'), +(1,4,668,'Language Common'), +(1,4,1180,'Daggers'), +(1,4,1752,'Sinister Strike'), +(1,4,1843,'Disarm'), +(1,4,2098,'Eviscerate'), +(1,4,2382,'Generic'), +(1,4,2479,'Honorless Target'), +(1,4,2567,'Thrown'), +(1,4,2764,'Throw'), +(1,4,3050,'Detect'), +(1,4,3365,'Opening'), +(1,4,6233,'Closing'), +(1,4,6246,'Closing'), +(1,4,6247,'Opening'), +(1,4,6477,'Opening'), +(1,4,6478,'Opening'), +(1,4,6603,'Attack'), +(1,4,7266,'Duel'), +(1,4,7267,'Grovel'), +(1,4,7355,'Stuck'), +(1,4,8386,'Attacking'), +(1,4,9077,'Leather'), +(1,4,9078,'Cloth'), +(1,4,9125,'Generic'), +(1,4,16092,'Defensive State (DND)'), +(1,4,20597,'Sword Specialization'), +(1,4,20598,'The Human Spirit'), +(1,4,20599,'Diplomacy'), +(1,4,20864,'Mace Specialization'), +(1,4,21184,'Rogue Passive (DND)'), +(1,4,21651,'Opening'), +(1,4,21652,'Closing'), +(1,4,22027,'Remove Insignia'), +(1,4,22810,'Opening - No Text'), +(1,4,45927,'Summon Friend'), +(1,4,58985,'Perception'), +(1,4,59752,'Every Man for Himself'), +(1,4,61437,'Opening'), +(1,5,81,'Dodge'), +(1,5,198,'One-Handed Maces'), +(1,5,203,'Unarmed'), +(1,5,204,'Defense'), +(1,5,522,'SPELLDEFENSE (DND)'), +(1,5,585,'Smite'), +(1,5,668,'Language Common'), +(1,5,1843,'Disarm'), +(1,5,2050,'Lesser Heal'), +(1,5,2382,'Generic'), +(1,5,2479,'Honorless Target'), +(1,5,3050,'Detect'), +(1,5,3365,'Opening'), +(1,5,5009,'Wands'), +(1,5,5019,'Shoot'), +(1,5,6233,'Closing'), +(1,5,6246,'Closing'), +(1,5,6247,'Opening'), +(1,5,6477,'Opening'), +(1,5,6478,'Opening'), +(1,5,6603,'Attack'), +(1,5,7266,'Duel'), +(1,5,7267,'Grovel'), +(1,5,7355,'Stuck'), +(1,5,8386,'Attacking'), +(1,5,9078,'Cloth'), +(1,5,9125,'Generic'), +(1,5,20597,'Sword Specialization'), +(1,5,20598,'The Human Spirit'), +(1,5,20599,'Diplomacy'), +(1,5,20864,'Mace Specialization'), +(1,5,21651,'Opening'), +(1,5,21652,'Closing'), +(1,5,22027,'Remove Insignia'), +(1,5,22810,'Opening - No Text'), +(1,5,45927,'Summon Friend'), +(1,5,58985,'Perception'), +(1,5,59752,'Every Man for Himself'), +(1,5,61437,'Opening'), +(1,6,81,'Dodge'), +(1,6,196,'One-Handed Axes'), +(1,6,197,'Two-Handed Axes'), +(1,6,200,'Polearms'), +(1,6,201,'One-Handed Swords'), +(1,6,202,'Two-Handed Swords'), +(1,6,203,'Unarmed'), +(1,6,204,'Defense'), +(1,6,522,'SPELLDEFENSE (DND)'), +(1,6,668,'Language Common'), +(1,6,674,'Dual Wield'), +(1,6,750,'Plate Mail'), +(1,6,1843,'Disarm'), +(1,6,2382,'Generic'), +(1,6,2479,'Honorless Target'), +(1,6,3050,'Detect'), +(1,6,3127,'Parry'), +(1,6,3275,'Linen Bandage'), +(1,6,3276,'Heavy Linen Bandage'), +(1,6,3277,'Wool Bandage'), +(1,6,3278,'Heavy Wool Bandage'), +(1,6,3365,'Opening'), +(1,6,6233,'Closing'), +(1,6,6246,'Closing'), +(1,6,6247,'Opening'), +(1,6,6477,'Opening'), +(1,6,6478,'Opening'), +(1,6,6603,'Attack'), +(1,6,7266,'Duel'), +(1,6,7267,'Grovel'), +(1,6,7355,'Stuck'), +(1,6,7928,'Silk Bandage'), +(1,6,7929,'Heavy Silk Bandage'), +(1,6,7934,'Anti-Venom'), +(1,6,8386,'Attacking'), +(1,6,8737,'Mail'), +(1,6,9077,'Leather'), +(1,6,9078,'Cloth'), +(1,6,9125,'Generic'), +(1,6,10840,'Mageweave Bandage'), +(1,6,10841,'Heavy Mageweave Bandage'), +(1,6,10846,'First Aid'), +(1,6,18629,'Runecloth Bandage'), +(1,6,18630,'Heavy Runecloth Bandage'), +(1,6,20597,'Sword Specialization'), +(1,6,20598,'The Human Spirit'), +(1,6,20599,'Diplomacy'), +(1,6,20864,'Mace Specialization'), +(1,6,21651,'Opening'), +(1,6,21652,'Closing'), +(1,6,22027,'Remove Insignia'), +(1,6,22810,'Opening - No Text'), +(1,6,33391,'Journeyman Riding'), +(1,6,45462,'Plague Strike'), +(1,6,45477,'Icy Touch'), +(1,6,45902,'Blood Strike'), +(1,6,45903,'Offensive State (DND)'), +(1,6,45927,'Summon Friend'), +(1,6,47541,'Death Coil'), +(1,6,48266,'Blood Presence'), +(1,6,49410,'Forceful Deflection'), +(1,6,49576,'Death Grip'), +(1,6,52665,'Sigil'), +(1,6,58985,'Perception'), +(1,6,59752,'Every Man for Himself'), +(1,6,59879,'Blood Plague'), +(1,6,59921,'Frost Fever'), +(1,6,61437,'Opening'), +(1,6,61455,'Runic Focus'), +(1,8,81,'Dodge'), +(1,8,133,'Fireball'), +(1,8,168,'Frost Armor'), +(1,8,203,'Unarmed'), +(1,8,204,'Defense'), +(1,8,227,'Staves'), +(1,8,522,'SPELLDEFENSE (DND)'), +(1,8,668,'Language Common'), +(1,8,1843,'Disarm'), +(1,8,2382,'Generic'), +(1,8,2479,'Honorless Target'), +(1,8,3050,'Detect'), +(1,8,3365,'Opening'), +(1,8,5009,'Wands'), +(1,8,5019,'Shoot'), +(1,8,6233,'Closing'), +(1,8,6246,'Closing'), +(1,8,6247,'Opening'), +(1,8,6477,'Opening'), +(1,8,6478,'Opening'), +(1,8,6603,'Attack'), +(1,8,7266,'Duel'), +(1,8,7267,'Grovel'), +(1,8,7355,'Stuck'), +(1,8,8386,'Attacking'), +(1,8,9078,'Cloth'), +(1,8,9125,'Generic'), +(1,8,20597,'Sword Specialization'), +(1,8,20598,'The Human Spirit'), +(1,8,20599,'Diplomacy'), +(1,8,20864,'Mace Specialization'), +(1,8,21651,'Opening'), +(1,8,21652,'Closing'), +(1,8,22027,'Remove Insignia'), +(1,8,22810,'Opening - No Text'), +(1,8,45927,'Summon Friend'), +(1,8,58985,'Perception'), +(1,8,59752,'Every Man for Himself'), +(1,8,61437,'Opening'), +(1,9,81,'Dodge'), +(1,9,203,'Unarmed'), +(1,9,204,'Defense'), +(1,9,522,'SPELLDEFENSE (DND)'), +(1,9,668,'Language Common'), +(1,9,686,'Shadow Bolt'), +(1,9,687,'Demon Skin'), +(1,9,1180,'Daggers'), +(1,9,1843,'Disarm'), +(1,9,2382,'Generic'), +(1,9,2479,'Honorless Target'), +(1,9,3050,'Detect'), +(1,9,3365,'Opening'), +(1,9,5009,'Wands'), +(1,9,5019,'Shoot'), +(1,9,6233,'Closing'), +(1,9,6246,'Closing'), +(1,9,6247,'Opening'), +(1,9,6477,'Opening'), +(1,9,6478,'Opening'), +(1,9,6603,'Attack'), +(1,9,7266,'Duel'), +(1,9,7267,'Grovel'), +(1,9,7355,'Stuck'), +(1,9,8386,'Attacking'), +(1,9,9078,'Cloth'), +(1,9,9125,'Generic'), +(1,9,20597,'Sword Specialization'), +(1,9,20598,'The Human Spirit'), +(1,9,20599,'Diplomacy'), +(1,9,20864,'Mace Specialization'), +(1,9,21651,'Opening'), +(1,9,21652,'Closing'), +(1,9,22027,'Remove Insignia'), +(1,9,22810,'Opening - No Text'), +(1,9,45927,'Summon Friend'), +(1,9,58284,'Chaos Bolt Passive'), +(1,9,58985,'Perception'), +(1,9,59752,'Every Man for Himself'), +(1,9,61437,'Opening'), +(2,1,78,'Heroic Strike'), +(2,1,81,'Dodge'), +(2,1,107,'Block'), +(2,1,196,'One-Handed Axes'), +(2,1,197,'Two-Handed Axes'), +(2,1,201,'One-Handed Swords'), +(2,1,203,'Unarmed'), +(2,1,204,'Defense'), +(2,1,522,'SPELLDEFENSE (DND)'), +(2,1,669,'Language Orcish'), +(2,1,1843,'Disarm'), +(2,1,2382,'Generic'), +(2,1,2457,'Battle Stance'), +(2,1,2479,'Honorless Target'), +(2,1,3050,'Detect'), +(2,1,3365,'Opening'), +(2,1,5301,'Defensive State (DND)'), +(2,1,6233,'Closing'), +(2,1,6246,'Closing'), +(2,1,6247,'Opening'), +(2,1,6477,'Opening'), +(2,1,6478,'Opening'), +(2,1,6603,'Attack'), +(2,1,7266,'Duel'), +(2,1,7267,'Grovel'), +(2,1,7355,'Stuck'), +(2,1,8386,'Attacking'), +(2,1,8737,'Mail'), +(2,1,9077,'Leather'), +(2,1,9078,'Cloth'), +(2,1,9116,'Shield'), +(2,1,9125,'Generic'), +(2,1,20572,'Blood Fury'), +(2,1,20573,'Hardiness'), +(2,1,20574,'Axe Specialization'), +(2,1,21563,'Command'), +(2,1,21651,'Opening'), +(2,1,21652,'Closing'), +(2,1,22027,'Remove Insignia'), +(2,1,22810,'Opening - No Text'), +(2,1,32215,'Victorious State'), +(2,1,45927,'Summon Friend'), +(2,1,61437,'Opening'), +(2,3,75,'Auto Shot'), +(2,3,81,'Dodge'), +(2,3,196,'One-Handed Axes'), +(2,3,203,'Unarmed'), +(2,3,204,'Defense'), +(2,3,264,'Bows'), +(2,3,522,'SPELLDEFENSE (DND)'), +(2,3,669,'Language Orcish'), +(2,3,1843,'Disarm'), +(2,3,2382,'Generic'), +(2,3,2479,'Honorless Target'), +(2,3,2973,'Raptor Strike'), +(2,3,3050,'Detect'), +(2,3,3365,'Opening'), +(2,3,6233,'Closing'), +(2,3,6246,'Closing'), +(2,3,6247,'Opening'), +(2,3,6477,'Opening'), +(2,3,6478,'Opening'), +(2,3,6603,'Attack'), +(2,3,7266,'Duel'), +(2,3,7267,'Grovel'), +(2,3,7355,'Stuck'), +(2,3,8386,'Attacking'), +(2,3,9077,'Leather'), +(2,3,9078,'Cloth'), +(2,3,9125,'Generic'), +(2,3,13358,'Defensive State (DND)'), +(2,3,20572,'Blood Fury'), +(2,3,20573,'Hardiness'), +(2,3,20574,'Axe Specialization'), +(2,3,20576,'Command'), +(2,3,21651,'Opening'), +(2,3,21652,'Closing'), +(2,3,22027,'Remove Insignia'), +(2,3,22810,'Opening - No Text'), +(2,3,24949,'Defensive State 2 (DND)'), +(2,3,34082,'Advantaged State (DND)'), +(2,3,45927,'Summon Friend'), +(2,3,61437,'Opening'), +(2,4,81,'Dodge'), +(2,4,203,'Unarmed'), +(2,4,204,'Defense'), +(2,4,522,'SPELLDEFENSE (DND)'), +(2,4,669,'Language Orcish'), +(2,4,1180,'Daggers'), +(2,4,1752,'Sinister Strike'), +(2,4,1843,'Disarm'), +(2,4,2098,'Eviscerate'), +(2,4,2382,'Generic'), +(2,4,2479,'Honorless Target'), +(2,4,2567,'Thrown'), +(2,4,2764,'Throw'), +(2,4,3050,'Detect'), +(2,4,3365,'Opening'), +(2,4,6233,'Closing'), +(2,4,6246,'Closing'), +(2,4,6247,'Opening'), +(2,4,6477,'Opening'), +(2,4,6478,'Opening'), +(2,4,6603,'Attack'), +(2,4,7266,'Duel'), +(2,4,7267,'Grovel'), +(2,4,7355,'Stuck'), +(2,4,8386,'Attacking'), +(2,4,9077,'Leather'), +(2,4,9078,'Cloth'), +(2,4,9125,'Generic'), +(2,4,16092,'Defensive State (DND)'), +(2,4,20572,'Blood Fury'), +(2,4,20573,'Hardiness'), +(2,4,20574,'Axe Specialization'), +(2,4,21184,'Rogue Passive (DND)'), +(2,4,21563,'Command'), +(2,4,21651,'Opening'), +(2,4,21652,'Closing'), +(2,4,22027,'Remove Insignia'), +(2,4,22810,'Opening - No Text'), +(2,4,45927,'Summon Friend'), +(2,4,61437,'Opening'), +(2,6,81,'Dodge'), +(2,6,196,'One-Handed Axes'), +(2,6,197,'Two-Handed Axes'), +(2,6,200,'Polearms'), +(2,6,201,'One-Handed Swords'), +(2,6,202,'Two-Handed Swords'), +(2,6,203,'Unarmed'), +(2,6,204,'Defense'), +(2,6,522,'SPELLDEFENSE (DND)'), +(2,6,669,'Language Orcish'), +(2,6,674,'Dual Wield'), +(2,6,750,'Plate Mail'), +(2,6,1843,'Disarm'), +(2,6,2382,'Generic'), +(2,6,2479,'Honorless Target'), +(2,6,3050,'Detect'), +(2,6,3127,'Parry'), +(2,6,3275,'Linen Bandage'), +(2,6,3276,'Heavy Linen Bandage'), +(2,6,3277,'Wool Bandage'), +(2,6,3278,'Heavy Wool Bandage'), +(2,6,3365,'Opening'), +(2,6,6233,'Closing'), +(2,6,6246,'Closing'), +(2,6,6247,'Opening'), +(2,6,6477,'Opening'), +(2,6,6478,'Opening'), +(2,6,6603,'Attack'), +(2,6,7266,'Duel'), +(2,6,7267,'Grovel'), +(2,6,7355,'Stuck'), +(2,6,7928,'Silk Bandage'), +(2,6,7929,'Heavy Silk Bandage'), +(2,6,7934,'Anti-Venom'), +(2,6,8386,'Attacking'), +(2,6,8737,'Mail'), +(2,6,9077,'Leather'), +(2,6,9078,'Cloth'), +(2,6,9125,'Generic'), +(2,6,10840,'Mageweave Bandage'), +(2,6,10841,'Heavy Mageweave Bandage'), +(2,6,10846,'First Aid'), +(2,6,18629,'Runecloth Bandage'), +(2,6,18630,'Heavy Runecloth Bandage'), +(2,6,20572,'Blood Fury'), +(2,6,20573,'Hardiness'), +(2,6,20574,'Axe Specialization'), +(2,6,21651,'Opening'), +(2,6,21652,'Closing'), +(2,6,22027,'Remove Insignia'), +(2,6,22810,'Opening - No Text'), +(2,6,33391,'Journeyman Riding'), +(2,6,45462,'Plague Strike'), +(2,6,45477,'Icy Touch'), +(2,6,45902,'Blood Strike'), +(2,6,45903,'Offensive State (DND)'), +(2,6,45927,'Summon Friend'), +(2,6,47541,'Death Coil'), +(2,6,48266,'Blood Presence'), +(2,6,49410,'Forceful Deflection'), +(2,6,49576,'Death Grip'), +(2,6,52665,'Sigil'), +(2,6,54562,'Command'), +(2,6,59879,'Blood Plague'), +(2,6,59921,'Frost Fever'), +(2,6,61437,'Opening'), +(2,6,61455,'Runic Focus'), +(2,7,81,'Dodge'), +(2,7,107,'Block'), +(2,7,198,'One-Handed Maces'), +(2,7,203,'Unarmed'), +(2,7,204,'Defense'), +(2,7,227,'Staves'), +(2,7,331,'Healing Wave'), +(2,7,403,'Lightning Bolt'), +(2,7,522,'SPELLDEFENSE (DND)'), +(2,7,669,'Language Orcish'), +(2,7,1843,'Disarm'), +(2,7,2382,'Generic'), +(2,7,2479,'Honorless Target'), +(2,7,3050,'Detect'), +(2,7,3365,'Opening'), +(2,7,6233,'Closing'), +(2,7,6246,'Closing'), +(2,7,6247,'Opening'), +(2,7,6477,'Opening'), +(2,7,6478,'Opening'), +(2,7,6603,'Attack'), +(2,7,7266,'Duel'), +(2,7,7267,'Grovel'), +(2,7,7355,'Stuck'), +(2,7,8386,'Attacking'), +(2,7,9077,'Leather'), +(2,7,9078,'Cloth'), +(2,7,9116,'Shield'), +(2,7,9125,'Generic'), +(2,7,20573,'Hardiness'), +(2,7,20574,'Axe Specialization'), +(2,7,21563,'Command'), +(2,7,21651,'Opening'), +(2,7,21652,'Closing'), +(2,7,22027,'Remove Insignia'), +(2,7,22810,'Opening - No Text'), +(2,7,27763,'Totem'), +(2,7,33697,'Blood Fury'), +(2,7,45927,'Summon Friend'), +(2,7,61437,'Opening'), +(2,9,81,'Dodge'), +(2,9,203,'Unarmed'), +(2,9,204,'Defense'), +(2,9,522,'SPELLDEFENSE (DND)'), +(2,9,669,'Language Orcish'), +(2,9,686,'Shadow Bolt'), +(2,9,687,'Demon Skin'), +(2,9,1180,'Daggers'), +(2,9,1843,'Disarm'), +(2,9,2382,'Generic'), +(2,9,2479,'Honorless Target'), +(2,9,3050,'Detect'), +(2,9,3365,'Opening'), +(2,9,5009,'Wands'), +(2,9,5019,'Shoot'), +(2,9,6233,'Closing'), +(2,9,6246,'Closing'), +(2,9,6247,'Opening'), +(2,9,6477,'Opening'), +(2,9,6478,'Opening'), +(2,9,6603,'Attack'), +(2,9,7266,'Duel'), +(2,9,7267,'Grovel'), +(2,9,7355,'Stuck'), +(2,9,8386,'Attacking'), +(2,9,9078,'Cloth'), +(2,9,9125,'Generic'), +(2,9,20573,'Hardiness'), +(2,9,20574,'Axe Specialization'), +(2,9,20575,'Command'), +(2,9,21651,'Opening'), +(2,9,21652,'Closing'), +(2,9,22027,'Remove Insignia'), +(2,9,22810,'Opening - No Text'), +(2,9,33702,'Blood Fury'), +(2,9,45927,'Summon Friend'), +(2,9,58284,'Chaos Bolt Passive'), +(2,9,61437,'Opening'), +(3,1,78,'Heroic Strike'), +(3,1,81,'Dodge'), +(3,1,107,'Block'), +(3,1,196,'One-Handed Axes'), +(3,1,197,'Two-Handed Axes'), +(3,1,198,'One-Handed Maces'), +(3,1,203,'Unarmed'), +(3,1,204,'Defense'), +(3,1,522,'SPELLDEFENSE (DND)'), +(3,1,668,'Language Common'), +(3,1,672,'Language Dwarven'), +(3,1,1843,'Disarm'), +(3,1,2382,'Generic'), +(3,1,2457,'Battle Stance'), +(3,1,2479,'Honorless Target'), +(3,1,2481,'Find Treasure'), +(3,1,3050,'Detect'), +(3,1,3365,'Opening'), +(3,1,5301,'Defensive State (DND)'), +(3,1,6233,'Closing'), +(3,1,6246,'Closing'), +(3,1,6247,'Opening'), +(3,1,6477,'Opening'), +(3,1,6478,'Opening'), +(3,1,6603,'Attack'), +(3,1,7266,'Duel'), +(3,1,7267,'Grovel'), +(3,1,7355,'Stuck'), +(3,1,8386,'Attacking'), +(3,1,8737,'Mail'), +(3,1,9077,'Leather'), +(3,1,9078,'Cloth'), +(3,1,9116,'Shield'), +(3,1,9125,'Generic'), +(3,1,20594,'Stoneform'), +(3,1,20595,'Gun Specialization'), +(3,1,20596,'Frost Resistance'), +(3,1,21651,'Opening'), +(3,1,21652,'Closing'), +(3,1,22027,'Remove Insignia'), +(3,1,22810,'Opening - No Text'), +(3,1,32215,'Victorious State'), +(3,1,45927,'Summon Friend'), +(3,1,59224,'Mace Specialization'), +(3,1,61437,'Opening'), +(3,2,81,'Dodge'), +(3,2,107,'Block'), +(3,2,198,'One-Handed Maces'), +(3,2,199,'Two-Handed Maces'), +(3,2,203,'Unarmed'), +(3,2,204,'Defense'), +(3,2,522,'SPELLDEFENSE (DND)'), +(3,2,635,'Holy Light'), +(3,2,668,'Language Common'), +(3,2,672,'Language Dwarven'), +(3,2,1843,'Disarm'), +(3,2,2382,'Generic'), +(3,2,2479,'Honorless Target'), +(3,2,2481,'Find Treasure'), +(3,2,3050,'Detect'), +(3,2,3365,'Opening'), +(3,2,6233,'Closing'), +(3,2,6246,'Closing'), +(3,2,6247,'Opening'), +(3,2,6477,'Opening'), +(3,2,6478,'Opening'), +(3,2,6603,'Attack'), +(3,2,7266,'Duel'), +(3,2,7267,'Grovel'), +(3,2,7355,'Stuck'), +(3,2,8386,'Attacking'), +(3,2,8737,'Mail'), +(3,2,9077,'Leather'), +(3,2,9078,'Cloth'), +(3,2,9116,'Shield'), +(3,2,9125,'Generic'), +(3,2,20154,'Seal of Righteousness'), +(3,2,20594,'Stoneform'), +(3,2,20595,'Gun Specialization'), +(3,2,20596,'Frost Resistance'), +(3,2,21651,'Opening'), +(3,2,21652,'Closing'), +(3,2,22027,'Remove Insignia'), +(3,2,22810,'Opening - No Text'), +(3,2,27762,'Libram'), +(3,2,45927,'Summon Friend'), +(3,2,59224,'Mace Specialization'), +(3,2,61437,'Opening'), +(3,3,75,'Auto Shot'), +(3,3,81,'Dodge'), +(3,3,196,'One-Handed Axes'), +(3,3,203,'Unarmed'), +(3,3,204,'Defense'), +(3,3,266,'Guns'), +(3,3,522,'SPELLDEFENSE (DND)'), +(3,3,668,'Language Common'), +(3,3,672,'Language Dwarven'), +(3,3,1843,'Disarm'), +(3,3,2382,'Generic'), +(3,3,2479,'Honorless Target'), +(3,3,2481,'Find Treasure'), +(3,3,2973,'Raptor Strike'), +(3,3,3050,'Detect'), +(3,3,3365,'Opening'), +(3,3,6233,'Closing'), +(3,3,6246,'Closing'), +(3,3,6247,'Opening'), +(3,3,6477,'Opening'), +(3,3,6478,'Opening'), +(3,3,6603,'Attack'), +(3,3,7266,'Duel'), +(3,3,7267,'Grovel'), +(3,3,7355,'Stuck'), +(3,3,8386,'Attacking'), +(3,3,9077,'Leather'), +(3,3,9078,'Cloth'), +(3,3,9125,'Generic'), +(3,3,13358,'Defensive State (DND)'), +(3,3,20594,'Stoneform'), +(3,3,20595,'Gun Specialization'), +(3,3,20596,'Frost Resistance'), +(3,3,21651,'Opening'), +(3,3,21652,'Closing'), +(3,3,22027,'Remove Insignia'), +(3,3,22810,'Opening - No Text'), +(3,3,24949,'Defensive State 2 (DND)'), +(3,3,34082,'Advantaged State (DND)'), +(3,3,45927,'Summon Friend'), +(3,3,59224,'Mace Specialization'), +(3,3,61437,'Opening'), +(3,4,81,'Dodge'), +(3,4,203,'Unarmed'), +(3,4,204,'Defense'), +(3,4,522,'SPELLDEFENSE (DND)'), +(3,4,668,'Language Common'), +(3,4,672,'Language Dwarven'), +(3,4,1180,'Daggers'), +(3,4,1752,'Sinister Strike'), +(3,4,1843,'Disarm'), +(3,4,2098,'Eviscerate'), +(3,4,2382,'Generic'), +(3,4,2479,'Honorless Target'), +(3,4,2481,'Find Treasure'), +(3,4,2567,'Thrown'), +(3,4,2764,'Throw'), +(3,4,3050,'Detect'), +(3,4,3365,'Opening'), +(3,4,6233,'Closing'), +(3,4,6246,'Closing'), +(3,4,6247,'Opening'), +(3,4,6477,'Opening'), +(3,4,6478,'Opening'), +(3,4,6603,'Attack'), +(3,4,7266,'Duel'), +(3,4,7267,'Grovel'), +(3,4,7355,'Stuck'), +(3,4,8386,'Attacking'), +(3,4,9077,'Leather'), +(3,4,9078,'Cloth'), +(3,4,9125,'Generic'), +(3,4,16092,'Defensive State (DND)'), +(3,4,20594,'Stoneform'), +(3,4,20595,'Gun Specialization'), +(3,4,20596,'Frost Resistance'), +(3,4,21184,'Rogue Passive (DND)'), +(3,4,21651,'Opening'), +(3,4,21652,'Closing'), +(3,4,22027,'Remove Insignia'), +(3,4,22810,'Opening - No Text'), +(3,4,45927,'Summon Friend'), +(3,4,59224,'Mace Specialization'), +(3,4,61437,'Opening'), +(3,5,81,'Dodge'), +(3,5,198,'One-Handed Maces'), +(3,5,203,'Unarmed'), +(3,5,204,'Defense'), +(3,5,522,'SPELLDEFENSE (DND)'), +(3,5,585,'Smite'), +(3,5,668,'Language Common'), +(3,5,672,'Language Dwarven'), +(3,5,1843,'Disarm'), +(3,5,2050,'Lesser Heal'), +(3,5,2382,'Generic'), +(3,5,2479,'Honorless Target'), +(3,5,2481,'Find Treasure'), +(3,5,3050,'Detect'), +(3,5,3365,'Opening'), +(3,5,5009,'Wands'), +(3,5,5019,'Shoot'), +(3,5,6233,'Closing'), +(3,5,6246,'Closing'), +(3,5,6247,'Opening'), +(3,5,6477,'Opening'), +(3,5,6478,'Opening'), +(3,5,6603,'Attack'), +(3,5,7266,'Duel'), +(3,5,7267,'Grovel'), +(3,5,7355,'Stuck'), +(3,5,8386,'Attacking'), +(3,5,9078,'Cloth'), +(3,5,9125,'Generic'), +(3,5,20594,'Stoneform'), +(3,5,20595,'Gun Specialization'), +(3,5,20596,'Frost Resistance'), +(3,5,21651,'Opening'), +(3,5,21652,'Closing'), +(3,5,22027,'Remove Insignia'), +(3,5,22810,'Opening - No Text'), +(3,5,45927,'Summon Friend'), +(3,5,59224,'Mace Specialization'), +(3,5,61437,'Opening'), +(3,6,81,'Dodge'), +(3,6,196,'One-Handed Axes'), +(3,6,197,'Two-Handed Axes'), +(3,6,200,'Polearms'), +(3,6,201,'One-Handed Swords'), +(3,6,202,'Two-Handed Swords'), +(3,6,203,'Unarmed'), +(3,6,204,'Defense'), +(3,6,522,'SPELLDEFENSE (DND)'), +(3,6,668,'Language Common'), +(3,6,672,'Language Dwarven'), +(3,6,674,'Dual Wield'), +(3,6,750,'Plate Mail'), +(3,6,1843,'Disarm'), +(3,6,2382,'Generic'), +(3,6,2479,'Honorless Target'), +(3,6,2481,'Find Treasure'), +(3,6,3050,'Detect'), +(3,6,3127,'Parry'), +(3,6,3275,'Linen Bandage'), +(3,6,3276,'Heavy Linen Bandage'), +(3,6,3277,'Wool Bandage'), +(3,6,3278,'Heavy Wool Bandage'), +(3,6,3365,'Opening'), +(3,6,6233,'Closing'), +(3,6,6246,'Closing'), +(3,6,6247,'Opening'), +(3,6,6477,'Opening'), +(3,6,6478,'Opening'), +(3,6,6603,'Attack'), +(3,6,7266,'Duel'), +(3,6,7267,'Grovel'), +(3,6,7355,'Stuck'), +(3,6,7928,'Silk Bandage'), +(3,6,7929,'Heavy Silk Bandage'), +(3,6,7934,'Anti-Venom'), +(3,6,8386,'Attacking'), +(3,6,8737,'Mail'), +(3,6,9077,'Leather'), +(3,6,9078,'Cloth'), +(3,6,9125,'Generic'), +(3,6,10840,'Mageweave Bandage'), +(3,6,10841,'Heavy Mageweave Bandage'), +(3,6,10846,'First Aid'), +(3,6,18629,'Runecloth Bandage'), +(3,6,18630,'Heavy Runecloth Bandage'), +(3,6,20594,'Stoneform'), +(3,6,20595,'Gun Specialization'), +(3,6,20596,'Frost Resistance'), +(3,6,21651,'Opening'), +(3,6,21652,'Closing'), +(3,6,22027,'Remove Insignia'), +(3,6,22810,'Opening - No Text'), +(3,6,33391,'Journeyman Riding'), +(3,6,45462,'Plague Strike'), +(3,6,45477,'Icy Touch'), +(3,6,45902,'Blood Strike'), +(3,6,45903,'Offensive State (DND)'), +(3,6,45927,'Summon Friend'), +(3,6,47541,'Death Coil'), +(3,6,48266,'Blood Presence'), +(3,6,49410,'Forceful Deflection'), +(3,6,49576,'Death Grip'), +(3,6,52665,'Sigil'), +(3,6,59224,'Mace Specialization'), +(3,6,59879,'Blood Plague'), +(3,6,59921,'Frost Fever'), +(3,6,61437,'Opening'), +(3,6,61455,'Runic Focus'), +(4,1,78,'Heroic Strike'), +(4,1,81,'Dodge'), +(4,1,107,'Block'), +(4,1,198,'One-Handed Maces'), +(4,1,201,'One-Handed Swords'), +(4,1,203,'Unarmed'), +(4,1,204,'Defense'), +(4,1,522,'SPELLDEFENSE (DND)'), +(4,1,668,'Language Common'), +(4,1,671,'Language Darnassian'), +(4,1,1180,'Daggers'), +(4,1,1843,'Disarm'), +(4,1,2382,'Generic'), +(4,1,2457,'Battle Stance'), +(4,1,2479,'Honorless Target'), +(4,1,3050,'Detect'), +(4,1,3365,'Opening'), +(4,1,5301,'Defensive State (DND)'), +(4,1,6233,'Closing'), +(4,1,6246,'Closing'), +(4,1,6247,'Opening'), +(4,1,6477,'Opening'), +(4,1,6478,'Opening'), +(4,1,6603,'Attack'), +(4,1,7266,'Duel'), +(4,1,7267,'Grovel'), +(4,1,7355,'Stuck'), +(4,1,8386,'Attacking'), +(4,1,8737,'Mail'), +(4,1,9077,'Leather'), +(4,1,9078,'Cloth'), +(4,1,9116,'Shield'), +(4,1,9125,'Generic'), +(4,1,20582,'Quickness'), +(4,1,20583,'Nature Resistance'), +(4,1,20585,'Wisp Spirit'), +(4,1,21651,'Opening'), +(4,1,21652,'Closing'), +(4,1,22027,'Remove Insignia'), +(4,1,22810,'Opening - No Text'), +(4,1,32215,'Victorious State'), +(4,1,45927,'Summon Friend'), +(4,1,58984,'Shadowmelt'), +(4,1,61437,'Opening'), +(4,3,75,'Auto Shot'), +(4,3,81,'Dodge'), +(4,3,203,'Unarmed'), +(4,3,204,'Defense'), +(4,3,264,'Bows'), +(4,3,522,'SPELLDEFENSE (DND)'), +(4,3,668,'Language Common'), +(4,3,671,'Language Darnassian'), +(4,3,1180,'Daggers'), +(4,3,1843,'Disarm'), +(4,3,2382,'Generic'), +(4,3,2479,'Honorless Target'), +(4,3,2973,'Raptor Strike'), +(4,3,3050,'Detect'), +(4,3,3365,'Opening'), +(4,3,6233,'Closing'), +(4,3,6246,'Closing'), +(4,3,6247,'Opening'), +(4,3,6477,'Opening'), +(4,3,6478,'Opening'), +(4,3,6603,'Attack'), +(4,3,7266,'Duel'), +(4,3,7267,'Grovel'), +(4,3,7355,'Stuck'), +(4,3,8386,'Attacking'), +(4,3,9077,'Leather'), +(4,3,9078,'Cloth'), +(4,3,9125,'Generic'), +(4,3,13358,'Defensive State (DND)'), +(4,3,20582,'Quickness'), +(4,3,20583,'Nature Resistance'), +(4,3,20585,'Wisp Spirit'), +(4,3,21651,'Opening'), +(4,3,21652,'Closing'), +(4,3,22027,'Remove Insignia'), +(4,3,22810,'Opening - No Text'), +(4,3,24949,'Defensive State 2 (DND)'), +(4,3,34082,'Advantaged State (DND)'), +(4,3,45927,'Summon Friend'), +(4,3,58984,'Shadowmelt'), +(4,3,61437,'Opening'), +(4,4,81,'Dodge'), +(4,4,203,'Unarmed'), +(4,4,204,'Defense'), +(4,4,522,'SPELLDEFENSE (DND)'), +(4,4,668,'Language Common'), +(4,4,671,'Language Darnassian'), +(4,4,1180,'Daggers'), +(4,4,1752,'Sinister Strike'), +(4,4,1843,'Disarm'), +(4,4,2098,'Eviscerate'), +(4,4,2382,'Generic'), +(4,4,2479,'Honorless Target'), +(4,4,2567,'Thrown'), +(4,4,2764,'Throw'), +(4,4,3050,'Detect'), +(4,4,3365,'Opening'), +(4,4,6233,'Closing'), +(4,4,6246,'Closing'), +(4,4,6247,'Opening'), +(4,4,6477,'Opening'), +(4,4,6478,'Opening'), +(4,4,6603,'Attack'), +(4,4,7266,'Duel'), +(4,4,7267,'Grovel'), +(4,4,7355,'Stuck'), +(4,4,8386,'Attacking'), +(4,4,9077,'Leather'), +(4,4,9078,'Cloth'), +(4,4,9125,'Generic'), +(4,4,16092,'Defensive State (DND)'), +(4,4,20582,'Quickness'), +(4,4,20583,'Nature Resistance'), +(4,4,20585,'Wisp Spirit'), +(4,4,21184,'Rogue Passive (DND)'), +(4,4,21651,'Opening'), +(4,4,21652,'Closing'), +(4,4,22027,'Remove Insignia'), +(4,4,22810,'Opening - No Text'), +(4,4,45927,'Summon Friend'), +(4,4,58984,'Shadowmelt'), +(4,4,61437,'Opening'), +(4,5,81,'Dodge'), +(4,5,198,'One-Handed Maces'), +(4,5,203,'Unarmed'), +(4,5,204,'Defense'), +(4,5,522,'SPELLDEFENSE (DND)'), +(4,5,585,'Smite'), +(4,5,668,'Language Common'), +(4,5,671,'Language Darnassian'), +(4,5,1843,'Disarm'), +(4,5,2050,'Lesser Heal'), +(4,5,2382,'Generic'), +(4,5,2479,'Honorless Target'), +(4,5,3050,'Detect'), +(4,5,3365,'Opening'), +(4,5,5009,'Wands'), +(4,5,5019,'Shoot'), +(4,5,6233,'Closing'), +(4,5,6246,'Closing'), +(4,5,6247,'Opening'), +(4,5,6477,'Opening'), +(4,5,6478,'Opening'), +(4,5,6603,'Attack'), +(4,5,7266,'Duel'), +(4,5,7267,'Grovel'), +(4,5,7355,'Stuck'), +(4,5,8386,'Attacking'), +(4,5,9078,'Cloth'), +(4,5,9125,'Generic'), +(4,5,20582,'Quickness'), +(4,5,20583,'Nature Resistance'), +(4,5,20585,'Wisp Spirit'), +(4,5,21651,'Opening'), +(4,5,21652,'Closing'), +(4,5,22027,'Remove Insignia'), +(4,5,22810,'Opening - No Text'), +(4,5,45927,'Summon Friend'), +(4,5,58984,'Shadowmelt'), +(4,5,61437,'Opening'), +(4,6,81,'Dodge'), +(4,6,196,'One-Handed Axes'), +(4,6,197,'Two-Handed Axes'), +(4,6,200,'Polearms'), +(4,6,201,'One-Handed Swords'), +(4,6,202,'Two-Handed Swords'), +(4,6,203,'Unarmed'), +(4,6,204,'Defense'), +(4,6,522,'SPELLDEFENSE (DND)'), +(4,6,668,'Language Common'), +(4,6,671,'Language Darnassian'), +(4,6,674,'Dual Wield'), +(4,6,750,'Plate Mail'), +(4,6,1843,'Disarm'), +(4,6,2382,'Generic'), +(4,6,2479,'Honorless Target'), +(4,6,3050,'Detect'), +(4,6,3127,'Parry'), +(4,6,3275,'Linen Bandage'), +(4,6,3276,'Heavy Linen Bandage'), +(4,6,3277,'Wool Bandage'), +(4,6,3278,'Heavy Wool Bandage'), +(4,6,3365,'Opening'), +(4,6,6233,'Closing'), +(4,6,6246,'Closing'), +(4,6,6247,'Opening'), +(4,6,6477,'Opening'), +(4,6,6478,'Opening'), +(4,6,6603,'Attack'), +(4,6,7266,'Duel'), +(4,6,7267,'Grovel'), +(4,6,7355,'Stuck'), +(4,6,7928,'Silk Bandage'), +(4,6,7929,'Heavy Silk Bandage'), +(4,6,7934,'Anti-Venom'), +(4,6,8386,'Attacking'), +(4,6,8737,'Mail'), +(4,6,9077,'Leather'), +(4,6,9078,'Cloth'), +(4,6,9125,'Generic'), +(4,6,10840,'Mageweave Bandage'), +(4,6,10841,'Heavy Mageweave Bandage'), +(4,6,10846,'First Aid'), +(4,6,18629,'Runecloth Bandage'), +(4,6,18630,'Heavy Runecloth Bandage'), +(4,6,20582,'Quickness'), +(4,6,20583,'Nature Resistance'), +(4,6,20585,'Wisp Spirit'), +(4,6,21651,'Opening'), +(4,6,21652,'Closing'), +(4,6,22027,'Remove Insignia'), +(4,6,22810,'Opening - No Text'), +(4,6,33391,'Journeyman Riding'), +(4,6,45462,'Plague Strike'), +(4,6,45477,'Icy Touch'), +(4,6,45902,'Blood Strike'), +(4,6,45903,'Offensive State (DND)'), +(4,6,45927,'Summon Friend'), +(4,6,47541,'Death Coil'), +(4,6,48266,'Blood Presence'), +(4,6,49410,'Forceful Deflection'), +(4,6,49576,'Death Grip'), +(4,6,52665,'Sigil'), +(4,6,58984,'Shadowmeld'), +(4,6,59879,'Blood Plague'), +(4,6,59921,'Frost Fever'), +(4,6,61437,'Opening'), +(4,6,61455,'Runic Focus'), +(4,11,81,'Dodge'), +(4,11,203,'Unarmed'), +(4,11,204,'Defense'), +(4,11,227,'Staves'), +(4,11,522,'SPELLDEFENSE (DND)'), +(4,11,668,'Language Common'), +(4,11,671,'Language Darnassian'), +(4,11,1180,'Daggers'), +(4,11,1843,'Disarm'), +(4,11,2382,'Generic'), +(4,11,2479,'Honorless Target'), +(4,11,3050,'Detect'), +(4,11,3365,'Opening'), +(4,11,5176,'Wrath'), +(4,11,5185,'Healing Touch'), +(4,11,6233,'Closing'), +(4,11,6246,'Closing'), +(4,11,6247,'Opening'), +(4,11,6477,'Opening'), +(4,11,6478,'Opening'), +(4,11,6603,'Attack'), +(4,11,7266,'Duel'), +(4,11,7267,'Grovel'), +(4,11,7355,'Stuck'), +(4,11,8386,'Attacking'), +(4,11,9077,'Leather'), +(4,11,9078,'Cloth'), +(4,11,9125,'Generic'), +(4,11,20582,'Quickness'), +(4,11,20583,'Nature Resistance'), +(4,11,20585,'Wisp Spirit'), +(4,11,21651,'Opening'), +(4,11,21652,'Closing'), +(4,11,22027,'Remove Insignia'), +(4,11,22810,'Opening - No Text'), +(4,11,27764,'Fetish'), +(4,11,45927,'Summon Friend'), +(4,11,58984,'Shadowmelt'), +(4,11,61437,'Opening'), +(5,1,78,'Heroic Strike'), +(5,1,81,'Dodge'), +(5,1,107,'Block'), +(5,1,201,'One-Handed Swords'), +(5,1,202,'Two-Handed Swords'), +(5,1,203,'Unarmed'), +(5,1,204,'Defense'), +(5,1,522,'SPELLDEFENSE (DND)'), +(5,1,669,'Language Orcish'), +(5,1,1180,'Daggers'), +(5,1,1843,'Disarm'), +(5,1,2382,'Generic'), +(5,1,2457,'Battle Stance'), +(5,1,2479,'Honorless Target'), +(5,1,3050,'Detect'), +(5,1,3365,'Opening'), +(5,1,5227,'Underwater Breathing'), +(5,1,5301,'Defensive State (DND)'), +(5,1,6233,'Closing'), +(5,1,6246,'Closing'), +(5,1,6247,'Opening'), +(5,1,6477,'Opening'), +(5,1,6478,'Opening'), +(5,1,6603,'Attack'), +(5,1,7266,'Duel'), +(5,1,7267,'Grovel'), +(5,1,7355,'Stuck'), +(5,1,7744,'Will of the Forsaken'), +(5,1,8386,'Attacking'), +(5,1,8737,'Mail'), +(5,1,9077,'Leather'), +(5,1,9078,'Cloth'), +(5,1,9116,'Shield'), +(5,1,9125,'Generic'), +(5,1,17737,'Language Gutterspeak'), +(5,1,20577,'Cannibalize'), +(5,1,20579,'Shadow Resistance'), +(5,1,21651,'Opening'), +(5,1,21652,'Closing'), +(5,1,22027,'Remove Insignia'), +(5,1,22810,'Opening - No Text'), +(5,1,32215,'Victorious State'), +(5,1,45927,'Summon Friend'), +(5,1,61437,'Opening'), +(5,4,81,'Dodge'), +(5,4,203,'Unarmed'), +(5,4,204,'Defense'), +(5,4,522,'SPELLDEFENSE (DND)'), +(5,4,669,'Language Orcish'), +(5,4,1180,'Daggers'), +(5,4,1752,'Sinister Strike'), +(5,4,1843,'Disarm'), +(5,4,2098,'Eviscerate'), +(5,4,2382,'Generic'), +(5,4,2479,'Honorless Target'), +(5,4,2567,'Thrown'), +(5,4,2764,'Throw'), +(5,4,3050,'Detect'), +(5,4,3365,'Opening'), +(5,4,5227,'Underwater Breathing'), +(5,4,6233,'Closing'), +(5,4,6246,'Closing'), +(5,4,6247,'Opening'), +(5,4,6477,'Opening'), +(5,4,6478,'Opening'), +(5,4,6603,'Attack'), +(5,4,7266,'Duel'), +(5,4,7267,'Grovel'), +(5,4,7355,'Stuck'), +(5,4,7744,'Will of the Forsaken'), +(5,4,8386,'Attacking'), +(5,4,9077,'Leather'), +(5,4,9078,'Cloth'), +(5,4,9125,'Generic'), +(5,4,16092,'Defensive State (DND)'), +(5,4,17737,'Language Gutterspeak'), +(5,4,20577,'Cannibalize'), +(5,4,20579,'Shadow Resistance'), +(5,4,21184,'Rogue Passive (DND)'), +(5,4,21651,'Opening'), +(5,4,21652,'Closing'), +(5,4,22027,'Remove Insignia'), +(5,4,22810,'Opening - No Text'), +(5,4,45927,'Summon Friend'), +(5,4,61437,'Opening'), +(5,5,81,'Dodge'), +(5,5,198,'One-Handed Maces'), +(5,5,203,'Unarmed'), +(5,5,204,'Defense'), +(5,5,522,'SPELLDEFENSE (DND)'), +(5,5,585,'Smite'), +(5,5,669,'Language Orcish'), +(5,5,1843,'Disarm'), +(5,5,2050,'Lesser Heal'), +(5,5,2382,'Generic'), +(5,5,2479,'Honorless Target'), +(5,5,3050,'Detect'), +(5,5,3365,'Opening'), +(5,5,5009,'Wands'), +(5,5,5019,'Shoot'), +(5,5,5227,'Underwater Breathing'), +(5,5,6233,'Closing'), +(5,5,6246,'Closing'), +(5,5,6247,'Opening'), +(5,5,6477,'Opening'), +(5,5,6478,'Opening'), +(5,5,6603,'Attack'), +(5,5,7266,'Duel'), +(5,5,7267,'Grovel'), +(5,5,7355,'Stuck'), +(5,5,7744,'Will of the Forsaken'), +(5,5,8386,'Attacking'), +(5,5,9078,'Cloth'), +(5,5,9125,'Generic'), +(5,5,17737,'Language Gutterspeak'), +(5,5,20577,'Cannibalize'), +(5,5,20579,'Shadow Resistance'), +(5,5,21651,'Opening'), +(5,5,21652,'Closing'), +(5,5,22027,'Remove Insignia'), +(5,5,22810,'Opening - No Text'), +(5,5,45927,'Summon Friend'), +(5,5,61437,'Opening'), +(5,6,81,'Dodge'), +(5,6,196,'One-Handed Axes'), +(5,6,197,'Two-Handed Axes'), +(5,6,200,'Polearms'), +(5,6,201,'One-Handed Swords'), +(5,6,202,'Two-Handed Swords'), +(5,6,203,'Unarmed'), +(5,6,204,'Defense'), +(5,6,522,'SPELLDEFENSE (DND)'), +(5,6,669,'Language Orcish'), +(5,6,674,'Dual Wield'), +(5,6,750,'Plate Mail'), +(5,6,1843,'Disarm'), +(5,6,2382,'Generic'), +(5,6,2479,'Honorless Target'), +(5,6,3050,'Detect'), +(5,6,3127,'Parry'), +(5,6,3275,'Linen Bandage'), +(5,6,3276,'Heavy Linen Bandage'), +(5,6,3277,'Wool Bandage'), +(5,6,3278,'Heavy Wool Bandage'), +(5,6,3365,'Opening'), +(5,6,5227,'Underwater Breathing'), +(5,6,6233,'Closing'), +(5,6,6246,'Closing'), +(5,6,6247,'Opening'), +(5,6,6477,'Opening'), +(5,6,6478,'Opening'), +(5,6,6603,'Attack'), +(5,6,7266,'Duel'), +(5,6,7267,'Grovel'), +(5,6,7355,'Stuck'), +(5,6,7744,'Will of the Forsaken'), +(5,6,7928,'Silk Bandage'), +(5,6,7929,'Heavy Silk Bandage'), +(5,6,7934,'Anti-Venom'), +(5,6,8386,'Attacking'), +(5,6,8737,'Mail'), +(5,6,9077,'Leather'), +(5,6,9078,'Cloth'), +(5,6,9125,'Generic'), +(5,6,10840,'Mageweave Bandage'), +(5,6,10841,'Heavy Mageweave Bandage'), +(5,6,10846,'First Aid'), +(5,6,17737,'Language Gutterspeak'), +(5,6,18629,'Runecloth Bandage'), +(5,6,18630,'Heavy Runecloth Bandage'), +(5,6,20577,'Cannibalize'), +(5,6,20579,'Shadow Resistance'), +(5,6,21651,'Opening'), +(5,6,21652,'Closing'), +(5,6,22027,'Remove Insignia'), +(5,6,22810,'Opening - No Text'), +(5,6,33391,'Journeyman Riding'), +(5,6,45462,'Plague Strike'), +(5,6,45477,'Icy Touch'), +(5,6,45902,'Blood Strike'), +(5,6,45903,'Offensive State (DND)'), +(5,6,45927,'Summon Friend'), +(5,6,47541,'Death Coil'), +(5,6,48266,'Blood Presence'), +(5,6,49410,'Forceful Deflection'), +(5,6,49576,'Death Grip'), +(5,6,52665,'Sigil'), +(5,6,59879,'Blood Plague'), +(5,6,59921,'Frost Fever'), +(5,6,61437,'Opening'), +(5,6,61455,'Runic Focus'), +(5,8,81,'Dodge'), +(5,8,133,'Fireball'), +(5,8,168,'Frost Armor'), +(5,8,203,'Unarmed'), +(5,8,204,'Defense'), +(5,8,227,'Staves'), +(5,8,522,'SPELLDEFENSE (DND)'), +(5,8,669,'Language Orcish'), +(5,8,1843,'Disarm'), +(5,8,2382,'Generic'), +(5,8,2479,'Honorless Target'), +(5,8,3050,'Detect'), +(5,8,3365,'Opening'), +(5,8,5009,'Wands'), +(5,8,5019,'Shoot'), +(5,8,5227,'Underwater Breathing'), +(5,8,6233,'Closing'), +(5,8,6246,'Closing'), +(5,8,6247,'Opening'), +(5,8,6477,'Opening'), +(5,8,6478,'Opening'), +(5,8,6603,'Attack'), +(5,8,7266,'Duel'), +(5,8,7267,'Grovel'), +(5,8,7355,'Stuck'), +(5,8,7744,'Will of the Forsaken'), +(5,8,8386,'Attacking'), +(5,8,9078,'Cloth'), +(5,8,9125,'Generic'), +(5,8,17737,'Language Gutterspeak'), +(5,8,20577,'Cannibalize'), +(5,8,20579,'Shadow Resistance'), +(5,8,21651,'Opening'), +(5,8,21652,'Closing'), +(5,8,22027,'Remove Insignia'), +(5,8,22810,'Opening - No Text'), +(5,8,45927,'Summon Friend'), +(5,8,61437,'Opening'), +(5,9,81,'Dodge'), +(5,9,203,'Unarmed'), +(5,9,204,'Defense'), +(5,9,522,'SPELLDEFENSE (DND)'), +(5,9,669,'Language Orcish'), +(5,9,686,'Shadow Bolt'), +(5,9,687,'Demon Skin'), +(5,9,1180,'Daggers'), +(5,9,1843,'Disarm'), +(5,9,2382,'Generic'), +(5,9,2479,'Honorless Target'), +(5,9,3050,'Detect'), +(5,9,3365,'Opening'), +(5,9,5009,'Wands'), +(5,9,5019,'Shoot'), +(5,9,5227,'Underwater Breathing'), +(5,9,6233,'Closing'), +(5,9,6246,'Closing'), +(5,9,6247,'Opening'), +(5,9,6477,'Opening'), +(5,9,6478,'Opening'), +(5,9,6603,'Attack'), +(5,9,7266,'Duel'), +(5,9,7267,'Grovel'), +(5,9,7355,'Stuck'), +(5,9,7744,'Will of the Forsaken'), +(5,9,8386,'Attacking'), +(5,9,9078,'Cloth'), +(5,9,9125,'Generic'), +(5,9,17737,'Language Gutterspeak'), +(5,9,20577,'Cannibalize'), +(5,9,20579,'Shadow Resistance'), +(5,9,21651,'Opening'), +(5,9,21652,'Closing'), +(5,9,22027,'Remove Insignia'), +(5,9,22810,'Opening - No Text'), +(5,9,45927,'Summon Friend'), +(5,9,58284,'Chaos Bolt Passive'), +(5,9,61437,'Opening'), +(6,1,78,'Heroic Strike'), +(6,1,81,'Dodge'), +(6,1,107,'Block'), +(6,1,196,'One-Handed Axes'), +(6,1,198,'One-Handed Maces'), +(6,1,199,'Two-Handed Maces'), +(6,1,203,'Unarmed'), +(6,1,204,'Defense'), +(6,1,522,'SPELLDEFENSE (DND)'), +(6,1,669,'Language Orcish'), +(6,1,670,'Language Taurahe'), +(6,1,1843,'Disarm'), +(6,1,2382,'Generic'), +(6,1,2457,'Battle Stance'), +(6,1,2479,'Honorless Target'), +(6,1,3050,'Detect'), +(6,1,3365,'Opening'), +(6,1,5301,'Defensive State (DND)'), +(6,1,6233,'Closing'), +(6,1,6246,'Closing'), +(6,1,6247,'Opening'), +(6,1,6477,'Opening'), +(6,1,6478,'Opening'), +(6,1,6603,'Attack'), +(6,1,7266,'Duel'), +(6,1,7267,'Grovel'), +(6,1,7355,'Stuck'), +(6,1,8386,'Attacking'), +(6,1,8737,'Mail'), +(6,1,9077,'Leather'), +(6,1,9078,'Cloth'), +(6,1,9116,'Shield'), +(6,1,9125,'Generic'), +(6,1,20549,'War Stomp'), +(6,1,20550,'Endurance'), +(6,1,20551,'Nature Resistance'), +(6,1,20552,'Cultivation'), +(6,1,21651,'Opening'), +(6,1,21652,'Closing'), +(6,1,22027,'Remove Insignia'), +(6,1,22810,'Opening - No Text'), +(6,1,32215,'Victorious State'), +(6,1,45927,'Summon Friend'), +(6,1,61437,'Opening'), +(6,3,75,'Auto Shot'), +(6,3,81,'Dodge'), +(6,3,196,'One-Handed Axes'), +(6,3,203,'Unarmed'), +(6,3,204,'Defense'), +(6,3,266,'Guns'), +(6,3,522,'SPELLDEFENSE (DND)'), +(6,3,669,'Language Orcish'), +(6,3,670,'Language Taurahe'), +(6,3,1843,'Disarm'), +(6,3,2382,'Generic'), +(6,3,2479,'Honorless Target'), +(6,3,2973,'Raptor Strike'), +(6,3,3050,'Detect'), +(6,3,3365,'Opening'), +(6,3,6233,'Closing'), +(6,3,6246,'Closing'), +(6,3,6247,'Opening'), +(6,3,6477,'Opening'), +(6,3,6478,'Opening'), +(6,3,6603,'Attack'), +(6,3,7266,'Duel'), +(6,3,7267,'Grovel'), +(6,3,7355,'Stuck'), +(6,3,8386,'Attacking'), +(6,3,9077,'Leather'), +(6,3,9078,'Cloth'), +(6,3,9125,'Generic'), +(6,3,13358,'Defensive State (DND)'), +(6,3,20549,'War Stomp'), +(6,3,20550,'Endurance'), +(6,3,20551,'Nature Resistance'), +(6,3,20552,'Cultivation'), +(6,3,21651,'Opening'), +(6,3,21652,'Closing'), +(6,3,22027,'Remove Insignia'), +(6,3,22810,'Opening - No Text'), +(6,3,24949,'Defensive State 2 (DND)'), +(6,3,34082,'Advantaged State (DND)'), +(6,3,45927,'Summon Friend'), +(6,3,61437,'Opening'), +(6,6,81,'Dodge'), +(6,6,196,'One-Handed Axes'), +(6,6,197,'Two-Handed Axes'), +(6,6,200,'Polearms'), +(6,6,201,'One-Handed Swords'), +(6,6,202,'Two-Handed Swords'), +(6,6,203,'Unarmed'), +(6,6,204,'Defense'), +(6,6,522,'SPELLDEFENSE (DND)'), +(6,6,669,'Language Orcish'), +(6,6,670,'Language Taurahe'), +(6,6,674,'Dual Wield'), +(6,6,750,'Plate Mail'), +(6,6,1843,'Disarm'), +(6,6,2382,'Generic'), +(6,6,2479,'Honorless Target'), +(6,6,3050,'Detect'), +(6,6,3127,'Parry'), +(6,6,3275,'Linen Bandage'), +(6,6,3276,'Heavy Linen Bandage'), +(6,6,3277,'Wool Bandage'), +(6,6,3278,'Heavy Wool Bandage'), +(6,6,3365,'Opening'), +(6,6,6233,'Closing'), +(6,6,6246,'Closing'), +(6,6,6247,'Opening'), +(6,6,6477,'Opening'), +(6,6,6478,'Opening'), +(6,6,6603,'Attack'), +(6,6,7266,'Duel'), +(6,6,7267,'Grovel'), +(6,6,7355,'Stuck'), +(6,6,7928,'Silk Bandage'), +(6,6,7929,'Heavy Silk Bandage'), +(6,6,7934,'Anti-Venom'), +(6,6,8386,'Attacking'), +(6,6,8737,'Mail'), +(6,6,9077,'Leather'), +(6,6,9078,'Cloth'), +(6,6,9125,'Generic'), +(6,6,10840,'Mageweave Bandage'), +(6,6,10841,'Heavy Mageweave Bandage'), +(6,6,10846,'First Aid'), +(6,6,18629,'Runecloth Bandage'), +(6,6,18630,'Heavy Runecloth Bandage'), +(6,6,20549,'War Stomp'), +(6,6,20550,'Endurance'), +(6,6,20551,'Nature Resistance'), +(6,6,20552,'Cultivation'), +(6,6,21651,'Opening'), +(6,6,21652,'Closing'), +(6,6,22027,'Remove Insignia'), +(6,6,22810,'Opening - No Text'), +(6,6,33391,'Journeyman Riding'), +(6,6,45462,'Plague Strike'), +(6,6,45477,'Icy Touch'), +(6,6,45902,'Blood Strike'), +(6,6,45903,'Offensive State (DND)'), +(6,6,45927,'Summon Friend'), +(6,6,47541,'Death Coil'), +(6,6,48266,'Blood Presence'), +(6,6,49410,'Forceful Deflection'), +(6,6,49576,'Death Grip'), +(6,6,52665,'Sigil'), +(6,6,59879,'Blood Plague'), +(6,6,59921,'Frost Fever'), +(6,6,61437,'Opening'), +(6,6,61455,'Runic Focus'), +(6,7,81,'Dodge'), +(6,7,107,'Block'), +(6,7,198,'One-Handed Maces'), +(6,7,203,'Unarmed'), +(6,7,204,'Defense'), +(6,7,227,'Staves'), +(6,7,331,'Healing Wave'), +(6,7,403,'Lightning Bolt'), +(6,7,522,'SPELLDEFENSE (DND)'), +(6,7,669,'Language Orcish'), +(6,7,670,'Language Taurahe'), +(6,7,1843,'Disarm'), +(6,7,2382,'Generic'), +(6,7,2479,'Honorless Target'), +(6,7,3050,'Detect'), +(6,7,3365,'Opening'), +(6,7,6233,'Closing'), +(6,7,6246,'Closing'), +(6,7,6247,'Opening'), +(6,7,6477,'Opening'), +(6,7,6478,'Opening'), +(6,7,6603,'Attack'), +(6,7,7266,'Duel'), +(6,7,7267,'Grovel'), +(6,7,7355,'Stuck'), +(6,7,8386,'Attacking'), +(6,7,9077,'Leather'), +(6,7,9078,'Cloth'), +(6,7,9116,'Shield'), +(6,7,9125,'Generic'), +(6,7,20549,'War Stomp'), +(6,7,20550,'Endurance'), +(6,7,20551,'Nature Resistance'), +(6,7,20552,'Cultivation'), +(6,7,21651,'Opening'), +(6,7,21652,'Closing'), +(6,7,22027,'Remove Insignia'), +(6,7,22810,'Opening - No Text'), +(6,7,27763,'Totem'), +(6,7,45927,'Summon Friend'), +(6,7,61437,'Opening'), +(6,11,81,'Dodge'), +(6,11,198,'One-Handed Maces'), +(6,11,203,'Unarmed'), +(6,11,204,'Defense'), +(6,11,227,'Staves'), +(6,11,522,'SPELLDEFENSE (DND)'), +(6,11,669,'Language Orcish'), +(6,11,670,'Language Taurahe'), +(6,11,1843,'Disarm'), +(6,11,2382,'Generic'), +(6,11,2479,'Honorless Target'), +(6,11,3050,'Detect'), +(6,11,3365,'Opening'), +(6,11,5176,'Wrath'), +(6,11,5185,'Healing Touch'), +(6,11,6233,'Closing'), +(6,11,6246,'Closing'), +(6,11,6247,'Opening'), +(6,11,6477,'Opening'), +(6,11,6478,'Opening'), +(6,11,6603,'Attack'), +(6,11,7266,'Duel'), +(6,11,7267,'Grovel'), +(6,11,7355,'Stuck'), +(6,11,8386,'Attacking'), +(6,11,9077,'Leather'), +(6,11,9078,'Cloth'), +(6,11,9125,'Generic'), +(6,11,20549,'War Stomp'), +(6,11,20550,'Endurance'), +(6,11,20551,'Nature Resistance'), +(6,11,20552,'Cultivation'), +(6,11,21651,'Opening'), +(6,11,21652,'Closing'), +(6,11,22027,'Remove Insignia'), +(6,11,22810,'Opening - No Text'), +(6,11,27764,'Fetish'), +(6,11,45927,'Summon Friend'), +(6,11,61437,'Opening'), +(7,1,78,'Heroic Strike'), +(7,1,81,'Dodge'), +(7,1,107,'Block'), +(7,1,198,'One-Handed Maces'), +(7,1,201,'One-Handed Swords'), +(7,1,203,'Unarmed'), +(7,1,204,'Defense'), +(7,1,522,'SPELLDEFENSE (DND)'), +(7,1,668,'Language Common'), +(7,1,1180,'Daggers'), +(7,1,1843,'Disarm'), +(7,1,2382,'Generic'), +(7,1,2457,'Battle Stance'), +(7,1,2479,'Honorless Target'), +(7,1,3050,'Detect'), +(7,1,3365,'Opening'), +(7,1,5301,'Defensive State (DND)'), +(7,1,6233,'Closing'), +(7,1,6246,'Closing'), +(7,1,6247,'Opening'), +(7,1,6477,'Opening'), +(7,1,6478,'Opening'), +(7,1,6603,'Attack'), +(7,1,7266,'Duel'), +(7,1,7267,'Grovel'), +(7,1,7340,'Language Gnomish'), +(7,1,7355,'Stuck'), +(7,1,8386,'Attacking'), +(7,1,8737,'Mail'), +(7,1,9077,'Leather'), +(7,1,9078,'Cloth'), +(7,1,9116,'Shield'), +(7,1,9125,'Generic'), +(7,1,20589,'Escape Artist'), +(7,1,20591,'Expansive Mind'), +(7,1,20592,'Arcane Resistance'), +(7,1,20593,'Engineering Specialization'), +(7,1,21651,'Opening'), +(7,1,21652,'Closing'), +(7,1,22027,'Remove Insignia'), +(7,1,22810,'Opening - No Text'), +(7,1,32215,'Victorious State'), +(7,1,45927,'Summon Friend'), +(7,1,61437,'Opening'), +(7,4,81,'Dodge'), +(7,4,203,'Unarmed'), +(7,4,204,'Defense'), +(7,4,522,'SPELLDEFENSE (DND)'), +(7,4,668,'Language Common'), +(7,4,1180,'Daggers'), +(7,4,1752,'Sinister Strike'), +(7,4,1843,'Disarm'), +(7,4,2098,'Eviscerate'), +(7,4,2382,'Generic'), +(7,4,2479,'Honorless Target'), +(7,4,2567,'Thrown'), +(7,4,2764,'Throw'), +(7,4,3050,'Detect'), +(7,4,3365,'Opening'), +(7,4,6233,'Closing'), +(7,4,6246,'Closing'), +(7,4,6247,'Opening'), +(7,4,6477,'Opening'), +(7,4,6478,'Opening'), +(7,4,6603,'Attack'), +(7,4,7266,'Duel'), +(7,4,7267,'Grovel'), +(7,4,7340,'Language Gnomish'), +(7,4,7355,'Stuck'), +(7,4,8386,'Attacking'), +(7,4,9077,'Leather'), +(7,4,9078,'Cloth'), +(7,4,9125,'Generic'), +(7,4,16092,'Defensive State (DND)'), +(7,4,20589,'Escape Artist'), +(7,4,20591,'Expansive Mind'), +(7,4,20592,'Arcane Resistance'), +(7,4,20593,'Engineering Specialization'), +(7,4,21184,'Rogue Passive (DND)'), +(7,4,21651,'Opening'), +(7,4,21652,'Closing'), +(7,4,22027,'Remove Insignia'), +(7,4,22810,'Opening - No Text'), +(7,4,45927,'Summon Friend'), +(7,4,61437,'Opening'), +(7,6,81,'Dodge'), +(7,6,196,'One-Handed Axes'), +(7,6,197,'Two-Handed Axes'), +(7,6,200,'Polearms'), +(7,6,201,'One-Handed Swords'), +(7,6,202,'Two-Handed Swords'), +(7,6,203,'Unarmed'), +(7,6,204,'Defense'), +(7,6,522,'SPELLDEFENSE (DND)'), +(7,6,668,'Language Common'), +(7,6,674,'Dual Wield'), +(7,6,750,'Plate Mail'), +(7,6,1843,'Disarm'), +(7,6,2382,'Generic'), +(7,6,2479,'Honorless Target'), +(7,6,3050,'Detect'), +(7,6,3127,'Parry'), +(7,6,3275,'Linen Bandage'), +(7,6,3276,'Heavy Linen Bandage'), +(7,6,3277,'Wool Bandage'), +(7,6,3278,'Heavy Wool Bandage'), +(7,6,3365,'Opening'), +(7,6,6233,'Closing'), +(7,6,6246,'Closing'), +(7,6,6247,'Opening'), +(7,6,6477,'Opening'), +(7,6,6478,'Opening'), +(7,6,6603,'Attack'), +(7,6,7266,'Duel'), +(7,6,7267,'Grovel'), +(7,6,7340,'Language Gnomish'), +(7,6,7355,'Stuck'), +(7,6,7928,'Silk Bandage'), +(7,6,7929,'Heavy Silk Bandage'), +(7,6,7934,'Anti-Venom'), +(7,6,8386,'Attacking'), +(7,6,8737,'Mail'), +(7,6,9077,'Leather'), +(7,6,9078,'Cloth'), +(7,6,9125,'Generic'), +(7,6,10840,'Mageweave Bandage'), +(7,6,10841,'Heavy Mageweave Bandage'), +(7,6,10846,'First Aid'), +(7,6,18629,'Runecloth Bandage'), +(7,6,18630,'Heavy Runecloth Bandage'), +(7,6,20589,'Escape Artist'), +(7,6,20591,'Expansive Mind'), +(7,6,20592,'Arcane Resistance'), +(7,6,20593,'Engineering Specialization'), +(7,6,21651,'Opening'), +(7,6,21652,'Closing'), +(7,6,22027,'Remove Insignia'), +(7,6,22810,'Opening - No Text'), +(7,6,33391,'Journeyman Riding'), +(7,6,45462,'Plague Strike'), +(7,6,45477,'Icy Touch'), +(7,6,45902,'Blood Strike'), +(7,6,45903,'Offensive State (DND)'), +(7,6,45927,'Summon Friend'), +(7,6,47541,'Death Coil'), +(7,6,48266,'Blood Presence'), +(7,6,49410,'Forceful Deflection'), +(7,6,49576,'Death Grip'), +(7,6,52665,'Sigil'), +(7,6,59879,'Blood Plague'), +(7,6,59921,'Frost Fever'), +(7,6,61437,'Opening'), +(7,6,61455,'Runic Focus'), +(7,8,81,'Dodge'), +(7,8,133,'Fireball'), +(7,8,168,'Frost Armor'), +(7,8,203,'Unarmed'), +(7,8,204,'Defense'), +(7,8,227,'Staves'), +(7,8,522,'SPELLDEFENSE (DND)'), +(7,8,668,'Language Common'), +(7,8,1843,'Disarm'), +(7,8,2382,'Generic'), +(7,8,2479,'Honorless Target'), +(7,8,3050,'Detect'), +(7,8,3365,'Opening'), +(7,8,5009,'Wands'), +(7,8,5019,'Shoot'), +(7,8,6233,'Closing'), +(7,8,6246,'Closing'), +(7,8,6247,'Opening'), +(7,8,6477,'Opening'), +(7,8,6478,'Opening'), +(7,8,6603,'Attack'), +(7,8,7266,'Duel'), +(7,8,7267,'Grovel'), +(7,8,7340,'Language Gnomish'), +(7,8,7355,'Stuck'), +(7,8,8386,'Attacking'), +(7,8,9078,'Cloth'), +(7,8,9125,'Generic'), +(7,8,20589,'Escape Artist'), +(7,8,20591,'Expansive Mind'), +(7,8,20592,'Arcane Resistance'), +(7,8,20593,'Engineering Specialization'), +(7,8,21651,'Opening'), +(7,8,21652,'Closing'), +(7,8,22027,'Remove Insignia'), +(7,8,22810,'Opening - No Text'), +(7,8,45927,'Summon Friend'), +(7,8,61437,'Opening'), +(7,9,81,'Dodge'), +(7,9,203,'Unarmed'), +(7,9,204,'Defense'), +(7,9,522,'SPELLDEFENSE (DND)'), +(7,9,668,'Language Common'), +(7,9,686,'Shadow Bolt'), +(7,9,687,'Demon Skin'), +(7,9,1180,'Daggers'), +(7,9,1843,'Disarm'), +(7,9,2382,'Generic'), +(7,9,2479,'Honorless Target'), +(7,9,3050,'Detect'), +(7,9,3365,'Opening'), +(7,9,5009,'Wands'), +(7,9,5019,'Shoot'), +(7,9,6233,'Closing'), +(7,9,6246,'Closing'), +(7,9,6247,'Opening'), +(7,9,6477,'Opening'), +(7,9,6478,'Opening'), +(7,9,6603,'Attack'), +(7,9,7266,'Duel'), +(7,9,7267,'Grovel'), +(7,9,7340,'Language Gnomish'), +(7,9,7355,'Stuck'), +(7,9,8386,'Attacking'), +(7,9,9078,'Cloth'), +(7,9,9125,'Generic'), +(7,9,20589,'Escape Artist'), +(7,9,20591,'Expansive Mind'), +(7,9,20592,'Arcane Resistance'), +(7,9,20593,'Engineering Specialization'), +(7,9,21651,'Opening'), +(7,9,21652,'Closing'), +(7,9,22027,'Remove Insignia'), +(7,9,22810,'Opening - No Text'), +(7,9,45927,'Summon Friend'), +(7,9,61437,'Opening'), +(8,1,78,'Heroic Strike'), +(8,1,81,'Dodge'), +(8,1,107,'Block'), +(8,1,196,'One-Handed Axes'), +(8,1,203,'Unarmed'), +(8,1,204,'Defense'), +(8,1,522,'SPELLDEFENSE (DND)'), +(8,1,669,'Language Orcish'), +(8,1,1180,'Daggers'), +(8,1,1843,'Disarm'), +(8,1,2382,'Generic'), +(8,1,2457,'Battle Stance'), +(8,1,2479,'Honorless Target'), +(8,1,2567,'Thrown'), +(8,1,2764,'Throw'), +(8,1,3050,'Detect'), +(8,1,3365,'Opening'), +(8,1,5301,'Defensive State (DND)'), +(8,1,6233,'Closing'), +(8,1,6246,'Closing'), +(8,1,6247,'Opening'), +(8,1,6477,'Opening'), +(8,1,6478,'Opening'), +(8,1,6603,'Attack'), +(8,1,7266,'Duel'), +(8,1,7267,'Grovel'), +(8,1,7341,'Language Troll'), +(8,1,7355,'Stuck'), +(8,1,8386,'Attacking'), +(8,1,8737,'Mail'), +(8,1,9077,'Leather'), +(8,1,9078,'Cloth'), +(8,1,9116,'Shield'), +(8,1,9125,'Generic'), +(8,1,20555,'Regeneration'), +(8,1,20557,'Beast Slaying'), +(8,1,20558,'Throwing Specialization'), +(8,1,21651,'Opening'), +(8,1,21652,'Closing'), +(8,1,22027,'Remove Insignia'), +(8,1,22810,'Opening - No Text'), +(8,1,26290,'Bow Specialization'), +(8,1,26296,'Berserking'), +(8,1,32215,'Victorious State'), +(8,1,45927,'Summon Friend'), +(8,1,58943,'Da Voodoo Shuffle'), +(8,1,61437,'Opening'), +(8,3,75,'Auto Shot'), +(8,3,81,'Dodge'), +(8,3,196,'One-Handed Axes'), +(8,3,203,'Unarmed'), +(8,3,204,'Defense'), +(8,3,264,'Bows'), +(8,3,522,'SPELLDEFENSE (DND)'), +(8,3,669,'Language Orcish'), +(8,3,1843,'Disarm'), +(8,3,2382,'Generic'), +(8,3,2479,'Honorless Target'), +(8,3,2973,'Raptor Strike'), +(8,3,3050,'Detect'), +(8,3,3365,'Opening'), +(8,3,6233,'Closing'), +(8,3,6246,'Closing'), +(8,3,6247,'Opening'), +(8,3,6477,'Opening'), +(8,3,6478,'Opening'), +(8,3,6603,'Attack'), +(8,3,7266,'Duel'), +(8,3,7267,'Grovel'), +(8,3,7341,'Language Troll'), +(8,3,7355,'Stuck'), +(8,3,8386,'Attacking'), +(8,3,9077,'Leather'), +(8,3,9078,'Cloth'), +(8,3,9125,'Generic'), +(8,3,13358,'Defensive State (DND)'), +(8,3,20554,'Berserking'), +(8,3,20555,'Regeneration'), +(8,3,20557,'Beast Slaying'), +(8,3,20558,'Throwing Specialization'), +(8,3,21651,'Opening'), +(8,3,21652,'Closing'), +(8,3,22027,'Remove Insignia'), +(8,3,22810,'Opening - No Text'), +(8,3,24949,'Defensive State 2 (DND)'), +(8,3,26290,'Bow Specialization'), +(8,3,34082,'Advantaged State (DND)'), +(8,3,45927,'Summon Friend'), +(8,3,58943,'Da Voodoo Shuffle'), +(8,3,61437,'Opening'), +(8,4,81,'Dodge'), +(8,4,203,'Unarmed'), +(8,4,204,'Defense'), +(8,4,522,'SPELLDEFENSE (DND)'), +(8,4,669,'Language Orcish'), +(8,4,1180,'Daggers'), +(8,4,1752,'Sinister Strike'), +(8,4,1843,'Disarm'), +(8,4,2098,'Eviscerate'), +(8,4,2382,'Generic'), +(8,4,2479,'Honorless Target'), +(8,4,2567,'Thrown'), +(8,4,2764,'Throw'), +(8,4,3050,'Detect'), +(8,4,3365,'Opening'), +(8,4,6233,'Closing'), +(8,4,6246,'Closing'), +(8,4,6247,'Opening'), +(8,4,6477,'Opening'), +(8,4,6478,'Opening'), +(8,4,6603,'Attack'), +(8,4,7266,'Duel'), +(8,4,7267,'Grovel'), +(8,4,7341,'Language Troll'), +(8,4,7355,'Stuck'), +(8,4,8386,'Attacking'), +(8,4,9077,'Leather'), +(8,4,9078,'Cloth'), +(8,4,9125,'Generic'), +(8,4,16092,'Defensive State (DND)'), +(8,4,20555,'Regeneration'), +(8,4,20557,'Beast Slaying'), +(8,4,20558,'Throwing Specialization'), +(8,4,21184,'Rogue Passive (DND)'), +(8,4,21651,'Opening'), +(8,4,21652,'Closing'), +(8,4,22027,'Remove Insignia'), +(8,4,22810,'Opening - No Text'), +(8,4,26290,'Bow Specialization'), +(8,4,26297,'Berserking'), +(8,4,45927,'Summon Friend'), +(8,4,58943,'Da Voodoo Shuffle'), +(8,4,61437,'Opening'), +(8,5,81,'Dodge'), +(8,5,198,'One-Handed Maces'), +(8,5,203,'Unarmed'), +(8,5,204,'Defense'), +(8,5,522,'SPELLDEFENSE (DND)'), +(8,5,585,'Smite'), +(8,5,669,'Language Orcish'), +(8,5,1843,'Disarm'), +(8,5,2050,'Lesser Heal'), +(8,5,2382,'Generic'), +(8,5,2479,'Honorless Target'), +(8,5,3050,'Detect'), +(8,5,3365,'Opening'), +(8,5,5009,'Wands'), +(8,5,5019,'Shoot'), +(8,5,6233,'Closing'), +(8,5,6246,'Closing'), +(8,5,6247,'Opening'), +(8,5,6477,'Opening'), +(8,5,6478,'Opening'), +(8,5,6603,'Attack'), +(8,5,7266,'Duel'), +(8,5,7267,'Grovel'), +(8,5,7341,'Language Troll'), +(8,5,7355,'Stuck'), +(8,5,8386,'Attacking'), +(8,5,9078,'Cloth'), +(8,5,9125,'Generic'), +(8,5,20554,'Berserking'), +(8,5,20555,'Regeneration'), +(8,5,20557,'Beast Slaying'), +(8,5,20558,'Throwing Specialization'), +(8,5,21651,'Opening'), +(8,5,21652,'Closing'), +(8,5,22027,'Remove Insignia'), +(8,5,22810,'Opening - No Text'), +(8,5,26290,'Bow Specialization'), +(8,5,45927,'Summon Friend'), +(8,5,58943,'Da Voodoo Shuffle'), +(8,5,61437,'Opening'), +(8,6,81,'Dodge'), +(8,6,196,'One-Handed Axes'), +(8,6,197,'Two-Handed Axes'), +(8,6,200,'Polearms'), +(8,6,201,'One-Handed Swords'), +(8,6,202,'Two-Handed Swords'), +(8,6,203,'Unarmed'), +(8,6,204,'Defense'), +(8,6,522,'SPELLDEFENSE (DND)'), +(8,6,669,'Language Orcish'), +(8,6,674,'Dual Wield'), +(8,6,750,'Plate Mail'), +(8,6,1843,'Disarm'), +(8,6,2382,'Generic'), +(8,6,2479,'Honorless Target'), +(8,6,3050,'Detect'), +(8,6,3127,'Parry'), +(8,6,3275,'Linen Bandage'), +(8,6,3276,'Heavy Linen Bandage'), +(8,6,3277,'Wool Bandage'), +(8,6,3278,'Heavy Wool Bandage'), +(8,6,3365,'Opening'), +(8,6,6233,'Closing'), +(8,6,6246,'Closing'), +(8,6,6247,'Opening'), +(8,6,6477,'Opening'), +(8,6,6478,'Opening'), +(8,6,6603,'Attack'), +(8,6,7266,'Duel'), +(8,6,7267,'Grovel'), +(8,6,7341,'Language Troll'), +(8,6,7355,'Stuck'), +(8,6,7928,'Silk Bandage'), +(8,6,7929,'Heavy Silk Bandage'), +(8,6,7934,'Anti-Venom'), +(8,6,8386,'Attacking'), +(8,6,8737,'Mail'), +(8,6,9077,'Leather'), +(8,6,9078,'Cloth'), +(8,6,9125,'Generic'), +(8,6,10840,'Mageweave Bandage'), +(8,6,10841,'Heavy Mageweave Bandage'), +(8,6,10846,'First Aid'), +(8,6,18629,'Runecloth Bandage'), +(8,6,18630,'Heavy Runecloth Bandage'), +(8,6,20555,'Regeneration'), +(8,6,20557,'Beast Slaying'), +(8,6,20558,'Throwing Specialization'), +(8,6,21651,'Opening'), +(8,6,21652,'Closing'), +(8,6,22027,'Remove Insignia'), +(8,6,22810,'Opening - No Text'), +(8,6,26290,'Bow Specialization'), +(8,6,33391,'Journeyman Riding'), +(8,6,45462,'Plague Strike'), +(8,6,45477,'Icy Touch'), +(8,6,45902,'Blood Strike'), +(8,6,45903,'Offensive State (DND)'), +(8,6,45927,'Summon Friend'), +(8,6,47541,'Death Coil'), +(8,6,48266,'Blood Presence'), +(8,6,49410,'Forceful Deflection'), +(8,6,49576,'Death Grip'), +(8,6,50621,'Berserking'), +(8,6,52665,'Sigil'), +(8,6,58943,'Da Voodoo Shuffle'), +(8,6,59879,'Blood Plague'), +(8,6,59921,'Frost Fever'), +(8,6,61437,'Opening'), +(8,6,61455,'Runic Focus'), +(8,7,81,'Dodge'), +(8,7,107,'Block'), +(8,7,198,'One-Handed Maces'), +(8,7,203,'Unarmed'), +(8,7,204,'Defense'), +(8,7,227,'Staves'), +(8,7,331,'Healing Wave'), +(8,7,403,'Lightning Bolt'), +(8,7,522,'SPELLDEFENSE (DND)'), +(8,7,669,'Language Orcish'), +(8,7,1843,'Disarm'), +(8,7,2382,'Generic'), +(8,7,2479,'Honorless Target'), +(8,7,3050,'Detect'), +(8,7,3365,'Opening'), +(8,7,6233,'Closing'), +(8,7,6246,'Closing'), +(8,7,6247,'Opening'), +(8,7,6477,'Opening'), +(8,7,6478,'Opening'), +(8,7,6603,'Attack'), +(8,7,7266,'Duel'), +(8,7,7267,'Grovel'), +(8,7,7341,'Language Troll'), +(8,7,7355,'Stuck'), +(8,7,8386,'Attacking'), +(8,7,9077,'Leather'), +(8,7,9078,'Cloth'), +(8,7,9116,'Shield'), +(8,7,9125,'Generic'), +(8,7,20554,'Berserking'), +(8,7,20555,'Regeneration'), +(8,7,20557,'Beast Slaying'), +(8,7,20558,'Throwing Specialization'), +(8,7,21651,'Opening'), +(8,7,21652,'Closing'), +(8,7,22027,'Remove Insignia'), +(8,7,22810,'Opening - No Text'), +(8,7,26290,'Bow Specialization'), +(8,7,27763,'Totem'), +(8,7,45927,'Summon Friend'), +(8,7,58943,'Da Voodoo Shuffle'), +(8,7,61437,'Opening'), +(8,8,81,'Dodge'), +(8,8,133,'Fireball'), +(8,8,168,'Frost Armor'), +(8,8,203,'Unarmed'), +(8,8,204,'Defense'), +(8,8,227,'Staves'), +(8,8,522,'SPELLDEFENSE (DND)'), +(8,8,669,'Language Orcish'), +(8,8,1843,'Disarm'), +(8,8,2382,'Generic'), +(8,8,2479,'Honorless Target'), +(8,8,3050,'Detect'), +(8,8,3365,'Opening'), +(8,8,5009,'Wands'), +(8,8,5019,'Shoot'), +(8,8,6233,'Closing'), +(8,8,6246,'Closing'), +(8,8,6247,'Opening'), +(8,8,6477,'Opening'), +(8,8,6478,'Opening'), +(8,8,6603,'Attack'), +(8,8,7266,'Duel'), +(8,8,7267,'Grovel'), +(8,8,7341,'Language Troll'), +(8,8,7355,'Stuck'), +(8,8,8386,'Attacking'), +(8,8,9078,'Cloth'), +(8,8,9125,'Generic'), +(8,8,20554,'Berserking'), +(8,8,20555,'Regeneration'), +(8,8,20557,'Beast Slaying'), +(8,8,20558,'Throwing Specialization'), +(8,8,21651,'Opening'), +(8,8,21652,'Closing'), +(8,8,22027,'Remove Insignia'), +(8,8,22810,'Opening - No Text'), +(8,8,26290,'Bow Specialization'), +(8,8,45927,'Summon Friend'), +(8,8,58943,'Da Voodoo Shuffle'), +(8,8,61437,'Opening'), +(10,2,81,'Dodge'), +(10,2,107,'Block'), +(10,2,201,'One-Handed Swords'), +(10,2,202,'Two-Handed Swords'), +(10,2,203,'Unarmed'), +(10,2,204,'Defense'), +(10,2,522,'SPELLDEFENSE (DND)'), +(10,2,635,'Holy Light'), +(10,2,669,'Language Orcish'), +(10,2,813,'Language Thalassian'), +(10,2,822,'Magic Resistance'), +(10,2,2382,'Generic'), +(10,2,2479,'Honorless Target'), +(10,2,3050,'Detect'), +(10,2,3365,'Opening'), +(10,2,6233,'Closing'), +(10,2,6246,'Closing'), +(10,2,6247,'Opening'), +(10,2,6477,'Opening'), +(10,2,6478,'Opening'), +(10,2,6603,'Attack'), +(10,2,7266,'Duel'), +(10,2,7267,'Grovel'), +(10,2,7355,'Stuck'), +(10,2,8386,'Attacking'), +(10,2,8737,'Mail'), +(10,2,9077,'Leather'), +(10,2,9078,'Cloth'), +(10,2,9116,'Shield'), +(10,2,9125,'Generic'), +(10,2,21084,'Seal of Righteousness'), +(10,2,21651,'Opening'), +(10,2,21652,'Closing'), +(10,2,22027,'Remove Insignia'), +(10,2,22810,'Opening - No Text'), +(10,2,27762,'Libram'), +(10,2,28730,'Arcane Torrent'), +(10,2,28734,'Mana Tap'), +(10,2,28877,'Arcane Affinity'), +(10,3,75,'Auto Shot'), +(10,3,81,'Dodge'), +(10,3,203,'Unarmed'), +(10,3,204,'Defense'), +(10,3,264,'Bows'), +(10,3,522,'SPELLDEFENSE (DND)'), +(10,3,669,'Language Orcish'), +(10,3,813,'Language Thalassian'), +(10,3,822,'Magic Resistance'), +(10,3,1180,'Daggers'), +(10,3,2382,'Generic'), +(10,3,2479,'Honorless Target'), +(10,3,2973,'Raptor Strike'), +(10,3,3050,'Detect'), +(10,3,3365,'Opening'), +(10,3,6233,'Closing'), +(10,3,6246,'Closing'), +(10,3,6247,'Opening'), +(10,3,6477,'Opening'), +(10,3,6478,'Opening'), +(10,3,6603,'Attack'), +(10,3,7266,'Duel'), +(10,3,7267,'Grovel'), +(10,3,7355,'Stuck'), +(10,3,8386,'Attacking'), +(10,3,9077,'Leather'), +(10,3,9078,'Cloth'), +(10,3,9125,'Generic'), +(10,3,13358,'Defensive State (DND)'), +(10,3,21651,'Opening'), +(10,3,21652,'Closing'), +(10,3,22027,'Remove Insignia'), +(10,3,22810,'Opening - No Text'), +(10,3,24949,'Defensive State 2 (DND)'), +(10,3,28730,'Arcane Torrent'), +(10,3,28734,'Mana Tap'), +(10,3,28877,'Arcane Affinity'), +(10,3,34082,'Advantaged State (DND)'), +(10,4,81,'Dodge'), +(10,4,203,'Unarmed'), +(10,4,204,'Defense'), +(10,4,522,'SPELLDEFENSE (DND)'), +(10,4,669,'Language Orcish'), +(10,4,813,'Language Thalassian'), +(10,4,822,'Magic Resistance'), +(10,4,1180,'Daggers'), +(10,4,1752,'Sinister Strike'), +(10,4,2098,'Eviscerate'), +(10,4,2382,'Generic'), +(10,4,2479,'Honorless Target'), +(10,4,2567,'Thrown'), +(10,4,2764,'Throw'), +(10,4,3050,'Detect'), +(10,4,3365,'Opening'), +(10,4,6233,'Closing'), +(10,4,6246,'Closing'), +(10,4,6247,'Opening'), +(10,4,6477,'Opening'), +(10,4,6478,'Opening'), +(10,4,6603,'Attack'), +(10,4,7266,'Duel'), +(10,4,7267,'Grovel'), +(10,4,7355,'Stuck'), +(10,4,8386,'Attacking'), +(10,4,9077,'Leather'), +(10,4,9078,'Cloth'), +(10,4,9125,'Generic'), +(10,4,16092,'Defensive State (DND)'), +(10,4,21184,'Rogue Passive (DND)'), +(10,4,21651,'Opening'), +(10,4,21652,'Closing'), +(10,4,22027,'Remove Insignia'), +(10,4,22810,'Opening - No Text'), +(10,4,25046,'Arcane Torrent'), +(10,4,28734,'Mana Tap'), +(10,4,28877,'Arcane Affinity'), +(10,5,81,'Dodge'), +(10,5,198,'One-Handed Maces'), +(10,5,203,'Unarmed'), +(10,5,204,'Defense'), +(10,5,522,'SPELLDEFENSE (DND)'), +(10,5,585,'Smite'), +(10,5,669,'Language Orcish'), +(10,5,813,'Language Thalassian'), +(10,5,822,'Magic Resistance'), +(10,5,2050,'Lesser Heal'), +(10,5,2382,'Generic'), +(10,5,2479,'Honorless Target'), +(10,5,3050,'Detect'), +(10,5,3365,'Opening'), +(10,5,5009,'Wands'), +(10,5,5019,'Shoot'), +(10,5,6233,'Closing'), +(10,5,6246,'Closing'), +(10,5,6247,'Opening'), +(10,5,6477,'Opening'), +(10,5,6478,'Opening'), +(10,5,6603,'Attack'), +(10,5,7266,'Duel'), +(10,5,7267,'Grovel'), +(10,5,7355,'Stuck'), +(10,5,8386,'Attacking'), +(10,5,9078,'Cloth'), +(10,5,9125,'Generic'), +(10,5,21651,'Opening'), +(10,5,21652,'Closing'), +(10,5,22027,'Remove Insignia'), +(10,5,22810,'Opening - No Text'), +(10,5,28730,'Arcane Torrent'), +(10,5,28734,'Mana Tap'), +(10,5,28877,'Arcane Affinity'), +(10,6,81,'Dodge'), +(10,6,196,'One-Handed Axes'), +(10,6,197,'Two-Handed Axes'), +(10,6,200,'Polearms'), +(10,6,201,'One-Handed Swords'), +(10,6,202,'Two-Handed Swords'), +(10,6,203,'Unarmed'), +(10,6,204,'Defense'), +(10,6,522,'SPELLDEFENSE (DND)'), +(10,6,669,'Language Orcish'), +(10,6,674,'Dual Wield'), +(10,6,750,'Plate Mail'), +(10,6,813,'Language Thalassian'), +(10,6,822,'Magic Resistance'), +(10,6,1843,'Disarm'), +(10,6,2382,'Generic'), +(10,6,2479,'Honorless Target'), +(10,6,3050,'Detect'), +(10,6,3127,'Parry'), +(10,6,3275,'Linen Bandage'), +(10,6,3276,'Heavy Linen Bandage'), +(10,6,3277,'Wool Bandage'), +(10,6,3278,'Heavy Wool Bandage'), +(10,6,3365,'Opening'), +(10,6,6233,'Closing'), +(10,6,6246,'Closing'), +(10,6,6247,'Opening'), +(10,6,6477,'Opening'), +(10,6,6478,'Opening'), +(10,6,6603,'Attack'), +(10,6,7266,'Duel'), +(10,6,7267,'Grovel'), +(10,6,7355,'Stuck'), +(10,6,7928,'Silk Bandage'), +(10,6,7929,'Heavy Silk Bandage'), +(10,6,7934,'Anti-Venom'), +(10,6,8386,'Attacking'), +(10,6,8737,'Mail'), +(10,6,9077,'Leather'), +(10,6,9078,'Cloth'), +(10,6,9125,'Generic'), +(10,6,10840,'Mageweave Bandage'), +(10,6,10841,'Heavy Mageweave Bandage'), +(10,6,10846,'First Aid'), +(10,6,18629,'Runecloth Bandage'), +(10,6,18630,'Heavy Runecloth Bandage'), +(10,6,21651,'Opening'), +(10,6,21652,'Closing'), +(10,6,22027,'Remove Insignia'), +(10,6,22810,'Opening - No Text'), +(10,6,28877,'Arcane Affinity'), +(10,6,33391,'Journeyman Riding'), +(10,6,45462,'Plague Strike'), +(10,6,45477,'Icy Touch'), +(10,6,45902,'Blood Strike'), +(10,6,45903,'Offensive State (DND)'), +(10,6,45927,'Summon Friend'), +(10,6,47541,'Death Coil'), +(10,6,48266,'Blood Presence'), +(10,6,49410,'Forceful Deflection'), +(10,6,49576,'Death Grip'), +(10,6,50613,'Arcane Torrent'), +(10,6,52665,'Sigil'), +(10,6,59879,'Blood Plague'), +(10,6,59921,'Frost Fever'), +(10,6,61437,'Opening'), +(10,6,61455,'Runic Focus'), +(10,8,81,'Dodge'), +(10,8,133,'Fireball'), +(10,8,168,'Frost Armor'), +(10,8,203,'Unarmed'), +(10,8,204,'Defense'), +(10,8,227,'Staves'), +(10,8,522,'SPELLDEFENSE (DND)'), +(10,8,669,'Language Orcish'), +(10,8,813,'Language Thalassian'), +(10,8,822,'Magic Resistance'), +(10,8,2382,'Generic'), +(10,8,2479,'Honorless Target'), +(10,8,3050,'Detect'), +(10,8,3365,'Opening'), +(10,8,5009,'Wands'), +(10,8,5019,'Shoot'), +(10,8,6233,'Closing'), +(10,8,6246,'Closing'), +(10,8,6247,'Opening'), +(10,8,6477,'Opening'), +(10,8,6478,'Opening'), +(10,8,6603,'Attack'), +(10,8,7266,'Duel'), +(10,8,7267,'Grovel'), +(10,8,7355,'Stuck'), +(10,8,8386,'Attacking'), +(10,8,9078,'Cloth'), +(10,8,9125,'Generic'), +(10,8,21651,'Opening'), +(10,8,21652,'Closing'), +(10,8,22027,'Remove Insignia'), +(10,8,22810,'Opening - No Text'), +(10,8,28730,'Arcane Torrent'), +(10,8,28734,'Mana Tap'), +(10,8,28877,'Arcane Affinity'), +(10,9,81,'Dodge'), +(10,9,203,'Unarmed'), +(10,9,204,'Defense'), +(10,9,522,'SPELLDEFENSE (DND)'), +(10,9,669,'Language Orcish'), +(10,9,686,'Shadow Bolt'), +(10,9,687,'Demon Skin'), +(10,9,813,'Language Thalassian'), +(10,9,822,'Magic Resistance'), +(10,9,1180,'Daggers'), +(10,9,2382,'Generic'), +(10,9,2479,'Honorless Target'), +(10,9,3050,'Detect'), +(10,9,3365,'Opening'), +(10,9,5009,'Wands'), +(10,9,5019,'Shoot'), +(10,9,6233,'Closing'), +(10,9,6246,'Closing'), +(10,9,6247,'Opening'), +(10,9,6477,'Opening'), +(10,9,6478,'Opening'), +(10,9,6603,'Attack'), +(10,9,7266,'Duel'), +(10,9,7267,'Grovel'), +(10,9,7355,'Stuck'), +(10,9,8386,'Attacking'), +(10,9,9078,'Cloth'), +(10,9,9125,'Generic'), +(10,9,21651,'Opening'), +(10,9,21652,'Closing'), +(10,9,22027,'Remove Insignia'), +(10,9,22810,'Opening - No Text'), +(10,9,28730,'Arcane Torrent'), +(10,9,28734,'Mana Tap'), +(10,9,28877,'Arcane Affinity'), +(11,1,78,'Heroic Strike'), +(11,1,81,'Dodge'), +(11,1,107,'Block'), +(11,1,198,'One-Handed Maces'), +(11,1,201,'One-Handed Swords'), +(11,1,202,'Two-Handed Swords'), +(11,1,203,'Unarmed'), +(11,1,204,'Defense'), +(11,1,522,'SPELLDEFENSE (DND)'), +(11,1,668,'Language Common'), +(11,1,1843,'Disarm'), +(11,1,2382,'Generic'), +(11,1,2457,'Battle Stance'), +(11,1,2479,'Honorless Target'), +(11,1,3050,'Detect'), +(11,1,3365,'Opening'), +(11,1,5301,'Defensive State (DND)'), +(11,1,6233,'Closing'), +(11,1,6246,'Closing'), +(11,1,6247,'Opening'), +(11,1,6477,'Opening'), +(11,1,6478,'Opening'), +(11,1,6562,'Heroic Presence'), +(11,1,6603,'Attack'), +(11,1,7266,'Duel'), +(11,1,7267,'Grovel'), +(11,1,7355,'Stuck'), +(11,1,8386,'Attacking'), +(11,1,8737,'Mail'), +(11,1,9077,'Leather'), +(11,1,9078,'Cloth'), +(11,1,9116,'Shield'), +(11,1,9125,'Generic'), +(11,1,21651,'Opening'), +(11,1,21652,'Closing'), +(11,1,22027,'Remove Insignia'), +(11,1,22810,'Opening - No Text'), +(11,1,28875,'Gemcutting'), +(11,1,28880,'Gift of the Naaru'), +(11,1,29932,'Language Draenei'), +(11,1,32215,'Victorious State'), +(11,1,45927,'Summon Friend'), +(11,1,59221,'Shadow Resistance'), +(11,1,61437,'Opening'), +(11,2,81,'Dodge'), +(11,2,107,'Block'), +(11,2,198,'One-Handed Maces'), +(11,2,199,'Two-Handed Maces'), +(11,2,203,'Unarmed'), +(11,2,204,'Defense'), +(11,2,522,'SPELLDEFENSE (DND)'), +(11,2,635,'Holy Light'), +(11,2,668,'Language Common'), +(11,2,1843,'Disarm'), +(11,2,2382,'Generic'), +(11,2,2479,'Honorless Target'), +(11,2,3050,'Detect'), +(11,2,3365,'Opening'), +(11,2,6233,'Closing'), +(11,2,6246,'Closing'), +(11,2,6247,'Opening'), +(11,2,6477,'Opening'), +(11,2,6478,'Opening'), +(11,2,6562,'Heroic Presence'), +(11,2,6603,'Attack'), +(11,2,7266,'Duel'), +(11,2,7267,'Grovel'), +(11,2,7355,'Stuck'), +(11,2,8386,'Attacking'), +(11,2,8737,'Mail'), +(11,2,9077,'Leather'), +(11,2,9078,'Cloth'), +(11,2,9116,'Shield'), +(11,2,9125,'Generic'), +(11,2,21084,'Seal of Righteousness'), +(11,2,21651,'Opening'), +(11,2,21652,'Closing'), +(11,2,22027,'Remove Insignia'), +(11,2,22810,'Opening - No Text'), +(11,2,27762,'Libram'), +(11,2,28875,'Gemcutting'), +(11,2,29932,'Language Draenei'), +(11,2,45927,'Summon Friend'), +(11,2,59221,'Shadow Resistance'), +(11,2,59542,'Gift of the Naaru'), +(11,2,61437,'Opening'), +(11,3,75,'Auto Shot'), +(11,3,81,'Dodge'), +(11,3,201,'One-Handed Swords'), +(11,3,203,'Unarmed'), +(11,3,204,'Defense'), +(11,3,522,'SPELLDEFENSE (DND)'), +(11,3,668,'Language Common'), +(11,3,1843,'Disarm'), +(11,3,2382,'Generic'), +(11,3,2479,'Honorless Target'), +(11,3,2973,'Raptor Strike'), +(11,3,3050,'Detect'), +(11,3,3365,'Opening'), +(11,3,5011,'Crossbows'), +(11,3,6233,'Closing'), +(11,3,6246,'Closing'), +(11,3,6247,'Opening'), +(11,3,6477,'Opening'), +(11,3,6478,'Opening'), +(11,3,6562,'Heroic Presence'), +(11,3,6603,'Attack'), +(11,3,7266,'Duel'), +(11,3,7267,'Grovel'), +(11,3,7355,'Stuck'), +(11,3,8386,'Attacking'), +(11,3,9077,'Leather'), +(11,3,9078,'Cloth'), +(11,3,9125,'Generic'), +(11,3,13358,'Defensive State (DND)'), +(11,3,21651,'Opening'), +(11,3,21652,'Closing'), +(11,3,22027,'Remove Insignia'), +(11,3,22810,'Opening - No Text'), +(11,3,24949,'Defensive State 2 (DND)'), +(11,3,28875,'Gemcutting'), +(11,3,29932,'Language Draenei'), +(11,3,34082,'Advantaged State (DND)'), +(11,3,45927,'Summon Friend'), +(11,3,59221,'Shadow Resistance'), +(11,3,59543,'Gift of the Naaru'), +(11,3,61437,'Opening'), +(11,5,81,'Dodge'), +(11,5,198,'One-Handed Maces'), +(11,5,203,'Unarmed'), +(11,5,204,'Defense'), +(11,5,522,'SPELLDEFENSE (DND)'), +(11,5,585,'Smite'), +(11,5,668,'Language Common'), +(11,5,1843,'Disarm'), +(11,5,2050,'Lesser Heal'), +(11,5,2382,'Generic'), +(11,5,2479,'Honorless Target'), +(11,5,3050,'Detect'), +(11,5,3365,'Opening'), +(11,5,5009,'Wands'), +(11,5,5019,'Shoot'), +(11,5,6233,'Closing'), +(11,5,6246,'Closing'), +(11,5,6247,'Opening'), +(11,5,6477,'Opening'), +(11,5,6478,'Opening'), +(11,5,6603,'Attack'), +(11,5,7266,'Duel'), +(11,5,7267,'Grovel'), +(11,5,7355,'Stuck'), +(11,5,8386,'Attacking'), +(11,5,9078,'Cloth'), +(11,5,9125,'Generic'), +(11,5,21651,'Opening'), +(11,5,21652,'Closing'), +(11,5,22027,'Remove Insignia'), +(11,5,22810,'Opening - No Text'), +(11,5,28875,'Gemcutting'), +(11,5,28878,'Inspiring Presence'), +(11,5,29932,'Language Draenei'), +(11,5,45927,'Summon Friend'), +(11,5,59221,'Shadow Resistance'), +(11,5,59544,'Gift of the Naaru'), +(11,5,61437,'Opening'), +(11,6,81,'Dodge'), +(11,6,196,'One-Handed Axes'), +(11,6,197,'Two-Handed Axes'), +(11,6,200,'Polearms'), +(11,6,201,'One-Handed Swords'), +(11,6,202,'Two-Handed Swords'), +(11,6,203,'Unarmed'), +(11,6,204,'Defense'), +(11,6,522,'SPELLDEFENSE (DND)'), +(11,6,668,'Language Common'), +(11,6,674,'Dual Wield'), +(11,6,750,'Plate Mail'), +(11,6,1843,'Disarm'), +(11,6,2382,'Generic'), +(11,6,2479,'Honorless Target'), +(11,6,3050,'Detect'), +(11,6,3127,'Parry'), +(11,6,3275,'Linen Bandage'), +(11,6,3276,'Heavy Linen Bandage'), +(11,6,3277,'Wool Bandage'), +(11,6,3278,'Heavy Wool Bandage'), +(11,6,3365,'Opening'), +(11,6,6233,'Closing'), +(11,6,6246,'Closing'), +(11,6,6247,'Opening'), +(11,6,6477,'Opening'), +(11,6,6478,'Opening'), +(11,6,6562,'Heroic Presence'), +(11,6,6603,'Attack'), +(11,6,7266,'Duel'), +(11,6,7267,'Grovel'), +(11,6,7355,'Stuck'), +(11,6,7928,'Silk Bandage'), +(11,6,7929,'Heavy Silk Bandage'), +(11,6,7934,'Anti-Venom'), +(11,6,8386,'Attacking'), +(11,6,8737,'Mail'), +(11,6,9077,'Leather'), +(11,6,9078,'Cloth'), +(11,6,9125,'Generic'), +(11,6,10840,'Mageweave Bandage'), +(11,6,10841,'Heavy Mageweave Bandage'), +(11,6,10846,'First Aid'), +(11,6,18629,'Runecloth Bandage'), +(11,6,18630,'Heavy Runecloth Bandage'), +(11,6,21651,'Opening'), +(11,6,21652,'Closing'), +(11,6,22027,'Remove Insignia'), +(11,6,22810,'Opening - No Text'), +(11,6,28875,'Gemcutting'), +(11,6,29932,'Language Draenei'), +(11,6,33391,'Journeyman Riding'), +(11,6,45462,'Plague Strike'), +(11,6,45477,'Icy Touch'), +(11,6,45902,'Blood Strike'), +(11,6,45903,'Offensive State (DND)'), +(11,6,45927,'Summon Friend'), +(11,6,47541,'Death Coil'), +(11,6,48266,'Blood Presence'), +(11,6,49410,'Forceful Deflection'), +(11,6,49576,'Death Grip'), +(11,6,52665,'Sigil'), +(11,6,59221,'Shadow Resistance'), +(11,6,59539,'Shadow Resistance'), +(11,6,59545,'Gift of the Naaru'), +(11,6,59879,'Blood Plague'), +(11,6,59921,'Frost Fever'), +(11,6,61437,'Opening'), +(11,6,61455,'Runic Focus'), +(11,7,81,'Dodge'), +(11,7,107,'Block'), +(11,7,198,'One-Handed Maces'), +(11,7,203,'Unarmed'), +(11,7,204,'Defense'), +(11,7,227,'Staves'), +(11,7,331,'Healing Wave'), +(11,7,403,'Lightning Bolt'), +(11,7,522,'SPELLDEFENSE (DND)'), +(11,7,668,'Language Common'), +(11,7,1843,'Disarm'), +(11,7,2382,'Generic'), +(11,7,2479,'Honorless Target'), +(11,7,3050,'Detect'), +(11,7,3365,'Opening'), +(11,7,6233,'Closing'), +(11,7,6246,'Closing'), +(11,7,6247,'Opening'), +(11,7,6477,'Opening'), +(11,7,6478,'Opening'), +(11,7,6603,'Attack'), +(11,7,7266,'Duel'), +(11,7,7267,'Grovel'), +(11,7,7355,'Stuck'), +(11,7,8386,'Attacking'), +(11,7,9077,'Leather'), +(11,7,9078,'Cloth'), +(11,7,9116,'Shield'), +(11,7,9125,'Generic'), +(11,7,21651,'Opening'), +(11,7,21652,'Closing'), +(11,7,22027,'Remove Insignia'), +(11,7,22810,'Opening - No Text'), +(11,7,27763,'Totem'), +(11,7,28875,'Gemcutting'), +(11,7,28878,'Inspiring Presence'), +(11,7,29932,'Language Draenei'), +(11,7,45927,'Summon Friend'), +(11,7,59221,'Shadow Resistance'), +(11,7,59547,'Gift of the Naaru'), +(11,7,61437,'Opening'), +(11,8,81,'Dodge'), +(11,8,133,'Fireball'), +(11,8,168,'Frost Armor'), +(11,8,203,'Unarmed'), +(11,8,204,'Defense'), +(11,8,227,'Staves'), +(11,8,522,'SPELLDEFENSE (DND)'), +(11,8,668,'Language Common'), +(11,8,1843,'Disarm'), +(11,8,2382,'Generic'), +(11,8,2479,'Honorless Target'), +(11,8,3050,'Detect'), +(11,8,3365,'Opening'), +(11,8,5009,'Wands'), +(11,8,5019,'Shoot'), +(11,8,6233,'Closing'), +(11,8,6246,'Closing'), +(11,8,6247,'Opening'), +(11,8,6477,'Opening'), +(11,8,6478,'Opening'), +(11,8,6603,'Attack'), +(11,8,7266,'Duel'), +(11,8,7267,'Grovel'), +(11,8,7355,'Stuck'), +(11,8,8386,'Attacking'), +(11,8,9078,'Cloth'), +(11,8,9125,'Generic'), +(11,8,21651,'Opening'), +(11,8,21652,'Closing'), +(11,8,22027,'Remove Insignia'), +(11,8,22810,'Opening - No Text'), +(11,8,28875,'Gemcutting'), +(11,8,28878,'Inspiring Presence'), +(11,8,29932,'Language Draenei'), +(11,8,45927,'Summon Friend'), +(11,8,59221,'Shadow Resistance'), +(11,8,59548,'Gift of the Naaru'), +(11,8,61437,'Opening'); diff --git a/sql/updates/Makefile.am b/sql/updates/Makefile.am index 241690e04..254d9b3a4 100644 --- a/sql/updates/Makefile.am +++ b/sql/updates/Makefile.am @@ -132,6 +132,7 @@ pkgdata_DATA = \ 7067_01_mangos_playercreateinfo_spell.sql \ 7067_02_mangos_spell_learn_spell.sql \ 7067_03_characters_character_spell.sql \ + 7074_01_mangos_playercreateinfo_spell.sql \ README ## Additional files to include when running 'make dist' @@ -244,4 +245,5 @@ EXTRA_DIST = \ 7067_01_mangos_playercreateinfo_spell.sql \ 7067_02_mangos_spell_learn_spell.sql \ 7067_03_characters_character_spell.sql \ + 7074_01_mangos_playercreateinfo_spell.sql \ README diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 39084ca21..015112eab 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 "7073" + #define REVISION_NR "7074" #endif // __REVISION_NR_H__ From aff0fa1489f6964eaea4780f4eb982bdc74264c3 Mon Sep 17 00:00:00 2001 From: VladimirMangos Date: Tue, 13 Jan 2009 00:48:59 +0300 Subject: [PATCH 143/145] [7075] Remove outdated original spells from character_spell. Update spell_learn_spell for one from original spells. --- sql/characters.sql | 2 +- sql/mangos.sql | 5 +++-- sql/updates/7075_01_characters_character_spell.sql | 13 +++++++++++++ sql/updates/7075_02_mangos_spell_learn_spell.sql | 6 ++++++ sql/updates/Makefile.am | 4 ++++ src/shared/revision_nr.h | 2 +- 6 files changed, 28 insertions(+), 4 deletions(-) create mode 100644 sql/updates/7075_01_characters_character_spell.sql create mode 100644 sql/updates/7075_02_mangos_spell_learn_spell.sql diff --git a/sql/characters.sql b/sql/characters.sql index 30b624107..701a2cee8 100644 --- a/sql/characters.sql +++ b/sql/characters.sql @@ -21,7 +21,7 @@ DROP TABLE IF EXISTS `character_db_version`; CREATE TABLE `character_db_version` ( - `required_7067_03_characters_character_spell` bit(1) default NULL + `required_7075_01_characters_character_spell` bit(1) default NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Last applied sql update to DB'; -- diff --git a/sql/mangos.sql b/sql/mangos.sql index 563891e84..1854d1492 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_7074_01_mangos_playercreateinfo_spell` bit(1) default NULL + `required_7075_02_mangos_spell_learn_spell` bit(1) default NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Used DB version notes'; -- @@ -16117,7 +16117,8 @@ INSERT INTO `spell_learn_spell` VALUES (40123,40121,0), (40123,40122,0), (53428,53341,1), -(53428,53343,1); +(53428,53343,1), +(58984,21009,1); /*!40000 ALTER TABLE `spell_learn_spell` ENABLE KEYS */; diff --git a/sql/updates/7075_01_characters_character_spell.sql b/sql/updates/7075_01_characters_character_spell.sql new file mode 100644 index 000000000..4e6ef7ea9 --- /dev/null +++ b/sql/updates/7075_01_characters_character_spell.sql @@ -0,0 +1,13 @@ +ALTER TABLE character_db_version CHANGE COLUMN required_7067_03_characters_character_spell required_7075_01_characters_character_spell bit; + +DELETE FROM character_spell WHERE `spell` IN ( + 20580, /*old Shadowmeld*/ + 20600, /*Perception*/ + 21009, /*old Shadowmeld Passive and new Elusiveness (learned as racial passive)*/ + 21184 /*old Seal of Righteousness*/ +); + + +/*old Shadow Resistance, leaned as racial passive of race 5 */ +DELETE FROM character_spell USING character_spell INNER JOIN characters ON character_spell.guid = characters.guid +WHERE character_spell.spell = 20579 AND characters.race <> 5; diff --git a/sql/updates/7075_02_mangos_spell_learn_spell.sql b/sql/updates/7075_02_mangos_spell_learn_spell.sql new file mode 100644 index 000000000..4aec0314a --- /dev/null +++ b/sql/updates/7075_02_mangos_spell_learn_spell.sql @@ -0,0 +1,6 @@ +ALTER TABLE db_version CHANGE COLUMN required_7074_01_mangos_playercreateinfo_spell required_7075_02_mangos_spell_learn_spell bit; + +DELETE FROM spell_learn_spell WHERE Entry = 58984; + +INSERT INTO spell_learn_spell VALUES +(58984,21009,1); diff --git a/sql/updates/Makefile.am b/sql/updates/Makefile.am index 254d9b3a4..33bc07947 100644 --- a/sql/updates/Makefile.am +++ b/sql/updates/Makefile.am @@ -133,6 +133,8 @@ pkgdata_DATA = \ 7067_02_mangos_spell_learn_spell.sql \ 7067_03_characters_character_spell.sql \ 7074_01_mangos_playercreateinfo_spell.sql \ + 7075_01_characters_character_spell.sql \ + 7075_02_mangos_spell_learn_spell.sql \ README ## Additional files to include when running 'make dist' @@ -246,4 +248,6 @@ EXTRA_DIST = \ 7067_02_mangos_spell_learn_spell.sql \ 7067_03_characters_character_spell.sql \ 7074_01_mangos_playercreateinfo_spell.sql \ + 7075_01_characters_character_spell.sql \ + 7075_02_mangos_spell_learn_spell.sql \ README diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 015112eab..73792d7c6 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 "7074" + #define REVISION_NR "7075" #endif // __REVISION_NR_H__ From ba25093ef27aa72d295995a3cb1a1e94edb47c51 Mon Sep 17 00:00:00 2001 From: DiSlord Date: Tue, 13 Jan 2009 01:15:41 +0300 Subject: [PATCH 144/145] Implement AURA_STATE_FROZEN Signed-off-by: DiSlord --- src/game/SharedDefines.h | 2 +- src/game/SpellAuras.cpp | 14 ++++++++++---- src/game/Unit.cpp | 6 +----- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/game/SharedDefines.h b/src/game/SharedDefines.h index faabc0e83..84b0899ce 100644 --- a/src/game/SharedDefines.h +++ b/src/game/SharedDefines.h @@ -686,7 +686,7 @@ enum AuraState AURA_STATE_DEFENSE = 1, // C | AURA_STATE_HEALTHLESS_20_PERCENT = 2, // CcT | AURA_STATE_BERSERKING = 3, // C T | - //AURA_STATE_UNKNOWN4 = 4, // c t| some limitation to charge spells (?) and target test spells + AURA_STATE_FROZEN = 4, // c t| frozen target AURA_STATE_JUDGEMENT = 5, // C | //AURA_STATE_UNKNOWN6 = 6, // | not used AURA_STATE_HUNTER_PARRY = 7, // C | diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp index f74439b49..79358118c 100644 --- a/src/game/SpellAuras.cpp +++ b/src/game/SpellAuras.cpp @@ -3560,13 +3560,18 @@ void Aura::HandleAuraModRoot(bool apply, bool Real) if(!Real) return; + // Frost root aura -> freeze/unfreeze target + if (GetSpellSchoolMask(m_spellProto) & SPELL_SCHOOL_MASK_FROST) + m_target->ModifyAuraState(AURA_STATE_FROZEN, apply); + uint32 apply_stat = UNIT_STAT_ROOT; if (apply) { m_target->addUnitState(UNIT_STAT_ROOT); m_target->SetUInt64Value (UNIT_FIELD_TARGET, 0); - // probably wrong - m_target->SetFlag(UNIT_FIELD_FLAGS,(apply_stat<<16)); +// probably wrong (this add skinable flag) +// TODO: find correct flag +// m_target->SetFlag(UNIT_FIELD_FLAGS,(apply_stat<<16)); //Save last orientation if( m_target->getVictim() ) @@ -3592,8 +3597,9 @@ void Aura::HandleAuraModRoot(bool apply, bool Real) return; m_target->clearUnitState(UNIT_STAT_ROOT); - // probably wrong - m_target->RemoveFlag(UNIT_FIELD_FLAGS,(apply_stat<<16)); +// probably wrong (this add skinable flag) +// TODO: find correct flag +// m_target->RemoveFlag(UNIT_FIELD_FLAGS,(apply_stat<<16)); if(!m_target->hasUnitState(UNIT_STAT_STUNNED)) // prevent allow move if have also stun effect { diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index 1ceb35bff..fcc496a55 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -9881,11 +9881,7 @@ void CharmInfo::SetPetNumber(uint32 petnumber, bool statwindow) bool Unit::isFrozen() const { - AuraList const& mRoot = GetAurasByType(SPELL_AURA_MOD_ROOT); - for(AuraList::const_iterator i = mRoot.begin(); i != mRoot.end(); ++i) - if( GetSpellSchoolMask((*i)->GetSpellProto()) & SPELL_SCHOOL_MASK_FROST) - return true; - return false; + return HasAuraState(AURA_STATE_FROZEN); } struct ProcTriggeredData From fa9daa3fb7fc1e61b8d993073e2eeab20cba8cd7 Mon Sep 17 00:00:00 2001 From: DiSlord Date: Tue, 13 Jan 2009 01:16:22 +0300 Subject: [PATCH 145/145] [7076] Implement shaman 60103 dummy Signed-off-by: DiSlord --- src/game/SpellEffects.cpp | 31 +++++++++++++++++++++++++------ src/shared/revision_nr.h | 2 +- 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp index ce04e764d..5dfdbb9d3 100644 --- a/src/game/SpellEffects.cpp +++ b/src/game/SpellEffects.cpp @@ -1666,6 +1666,8 @@ void Spell::EffectDummy(uint32 i) //Shaman Rockbiter Weapon if (m_spellInfo->SpellFamilyFlags == 0x400000) { + // TODO: use expect spell for enchant (if exist talent) + // In 3.0.3 no mods present for rockbiter uint32 spell_id = 0; switch(m_spellInfo->Id) { @@ -1673,11 +1675,6 @@ void Spell::EffectDummy(uint32 i) case 8018: spell_id = 36750; break; // Rank 2 case 8019: spell_id = 36755; break; // Rank 3 case 10399: spell_id = 36759; break; // Rank 4 - case 16314: spell_id = 36763; break; // Rank 5 - case 16315: spell_id = 36766; break; // Rank 6 - case 16316: spell_id = 36771; break; // Rank 7 - case 25479: spell_id = 36775; break; // Rank 8 - case 25485: spell_id = 36499; break; // Rank 9 default: sLog.outError("Spell::EffectDummy: Spell %u not handled in RW",m_spellInfo->Id); return; @@ -1726,7 +1723,29 @@ void Spell::EffectDummy(uint32 i) m_caster->CastCustomSpell(unitTarget,39609,&EffectBasePoints0,NULL,NULL,true,NULL,NULL,m_originalCasterGUID); return; } - + // Lava Lash + if (m_spellInfo->SpellFamilyFlags2 & 0x00000004) + { + if (m_caster->GetTypeId()!=TYPEID_PLAYER) + return; + Item *item = ((Player*)m_caster)->GetItemByPos(INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_OFFHAND); + if (item) + { + // Damage is increased if your off-hand weapon is enchanted with Flametongue. + Unit::AuraList const& auraDummy = m_caster->GetAurasByType(SPELL_AURA_DUMMY); + for(Unit::AuraList::const_iterator itr = auraDummy.begin(); itr != auraDummy.end(); ++itr) + { + if( (*itr)->GetSpellProto()->SpellFamilyName==SPELLFAMILY_SHAMAN && + (*itr)->GetSpellProto()->SpellFamilyFlags & 0x0000000000200000LL && + (*itr)->GetCastItemGUID() == item->GetGUID()) + { + m_damage += m_damage * damage / 100; + return; + } + } + } + return; + } break; } diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 73792d7c6..f80374027 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 "7075" + #define REVISION_NR "7076" #endif // __REVISION_NR_H__