From 82314c364a3a6c5b1062c93df18a367db72aede8 Mon Sep 17 00:00:00 2001 From: VladimirMangos Date: Sun, 22 Aug 2010 16:49:30 +0400 Subject: [PATCH] [10400] Fixed crash in .aura command for spell without auras. --- sql/mangos.sql | 3 +- sql/updates/10400_01_mangos_mangos_string.sql | 6 +++ sql/updates/Makefile.am | 2 + src/game/Language.h | 3 +- src/game/Level3.cpp | 45 +++++++++++-------- src/shared/revision_nr.h | 2 +- src/shared/revision_sql.h | 2 +- 7 files changed, 40 insertions(+), 23 deletions(-) create mode 100644 sql/updates/10400_01_mangos_mangos_string.sql diff --git a/sql/mangos.sql b/sql/mangos.sql index 75ded4bb2..4c23b16f0 100644 --- a/sql/mangos.sql +++ b/sql/mangos.sql @@ -24,7 +24,7 @@ CREATE TABLE `db_version` ( `version` varchar(120) default NULL, `creature_ai_version` varchar(120) default NULL, `cache_id` int(10) default '0', - `required_10381_01_mangos_creature_model_race` bit(1) default NULL + `required_10400_01_mangos_mangos_string` bit(1) default NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Used DB version notes'; -- @@ -3797,6 +3797,7 @@ INSERT INTO `mangos_string` VALUES (1162,' [counter]',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL), (1163,'Achievement %u doesn\'t exist.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL), (1164,'Achievement criteria %u doesn\'t exist.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL), +(1165,'Spell %u not have auras.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL), (1200,'You try to view cinemitic %u but it doesn\'t exist.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL), (1201,'You try to view movie %u but it doesn\'t exist.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); /*!40000 ALTER TABLE `mangos_string` ENABLE KEYS */; diff --git a/sql/updates/10400_01_mangos_mangos_string.sql b/sql/updates/10400_01_mangos_mangos_string.sql new file mode 100644 index 000000000..9695228ec --- /dev/null +++ b/sql/updates/10400_01_mangos_mangos_string.sql @@ -0,0 +1,6 @@ +ALTER TABLE db_version CHANGE COLUMN required_10381_01_mangos_creature_model_race required_10400_01_mangos_mangos_string bit; + +DELETE FROM mangos_string WHERE entry IN (1165); + +INSERT INTO mangos_string VALUES +(1165,'Spell %u not have auras.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); diff --git a/sql/updates/Makefile.am b/sql/updates/Makefile.am index 0f9c2bda2..42ef8033e 100644 --- a/sql/updates/Makefile.am +++ b/sql/updates/Makefile.am @@ -83,6 +83,7 @@ pkgdata_DATA = \ 10362_01_mangos_creature_movement_template.sql \ 10365_01_mangos_creature_ai_scripts.sql \ 10381_01_mangos_creature_model_race.sql \ + 10400_01_mangos_mangos_string.sql \ README ## Additional files to include when running 'make dist' @@ -146,4 +147,5 @@ EXTRA_DIST = \ 10362_01_mangos_creature_movement_template.sql \ 10365_01_mangos_creature_ai_scripts.sql \ 10381_01_mangos_creature_model_race.sql \ + 10400_01_mangos_mangos_string.sql \ README diff --git a/src/game/Language.h b/src/game/Language.h index c0bb36f3e..32c6dc33e 100644 --- a/src/game/Language.h +++ b/src/game/Language.h @@ -884,7 +884,8 @@ enum MangosStrings LANG_COUNTER = 1162, LANG_ACHIEVEMENT_NOT_EXIST = 1163, LANG_ACHIEVEMENT_CRITERIA_NOT_EXIST = 1164, - // Room for more level 3 1165-1199 not used + LANG_SPELL_NO_HAVE_AURAS = 1165, + // Room for more level 3 1166-1199 not used // Debug commands LANG_CINEMATIC_NOT_EXIST = 1200, diff --git a/src/game/Level3.cpp b/src/game/Level3.cpp index b5701f1c2..44afcfe2d 100644 --- a/src/game/Level3.cpp +++ b/src/game/Level3.cpp @@ -3811,28 +3811,35 @@ bool ChatHandler::HandleAuraCommand(char* args) // number or [name] Shift-click form |color|Hspell:spell_id|h[name]|h|r or Htalent form uint32 spellID = ExtractSpellIdFromLink(&args); - if (SpellEntry const *spellInfo = sSpellStore.LookupEntry(spellID)) - { - SpellAuraHolder *holder = NULL; - if (IsSpellAppliesAura(spellInfo, (1 << EFFECT_INDEX_0) | (1 << EFFECT_INDEX_1) | (1 << EFFECT_INDEX_2)) || IsSpellHaveEffect(spellInfo, SPELL_EFFECT_PERSISTENT_AREA_AURA)) - holder = CreateSpellAuraHolder(spellInfo, target, m_session->GetPlayer()); + SpellEntry const *spellInfo = sSpellStore.LookupEntry(spellID); + if (!spellInfo) + return false; - for(uint32 i = 0; i < MAX_EFFECT_INDEX; ++i) - { - uint8 eff = spellInfo->Effect[i]; - if (eff>=TOTAL_SPELL_EFFECTS) - continue; - if (IsAreaAuraEffect(eff) || - eff == SPELL_EFFECT_APPLY_AURA || - eff == SPELL_EFFECT_PERSISTENT_AREA_AURA) - { - Aura *aur = CreateAura(spellInfo, SpellEffectIndex(i), NULL, holder, target); - holder->AddAura(aur, SpellEffectIndex(i)); - } - } - target->AddSpellAuraHolder(holder); + if (!IsSpellAppliesAura(spellInfo, (1 << EFFECT_INDEX_0) | (1 << EFFECT_INDEX_1) | (1 << EFFECT_INDEX_2)) && + !IsSpellHaveEffect(spellInfo, SPELL_EFFECT_PERSISTENT_AREA_AURA)) + { + PSendSysMessage(LANG_SPELL_NO_HAVE_AURAS, spellID); + SetSentErrorMessage(true); + return false; } + SpellAuraHolder *holder = CreateSpellAuraHolder(spellInfo, target, m_session->GetPlayer()); + + for(uint32 i = 0; i < MAX_EFFECT_INDEX; ++i) + { + uint8 eff = spellInfo->Effect[i]; + if (eff>=TOTAL_SPELL_EFFECTS) + continue; + if (IsAreaAuraEffect(eff) || + eff == SPELL_EFFECT_APPLY_AURA || + eff == SPELL_EFFECT_PERSISTENT_AREA_AURA) + { + Aura *aur = CreateAura(spellInfo, SpellEffectIndex(i), NULL, holder, target); + holder->AddAura(aur, SpellEffectIndex(i)); + } + } + target->AddSpellAuraHolder(holder); + return true; } diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 9808a8b2f..6384e157b 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 "10399" + #define REVISION_NR "10400" #endif // __REVISION_NR_H__ diff --git a/src/shared/revision_sql.h b/src/shared/revision_sql.h index 3ce36b987..df953b63c 100644 --- a/src/shared/revision_sql.h +++ b/src/shared/revision_sql.h @@ -1,6 +1,6 @@ #ifndef __REVISION_SQL_H__ #define __REVISION_SQL_H__ #define REVISION_DB_CHARACTERS "required_10332_02_characters_pet_aura" - #define REVISION_DB_MANGOS "required_10381_01_mangos_creature_model_race" + #define REVISION_DB_MANGOS "required_10400_01_mangos_mangos_string" #define REVISION_DB_REALMD "required_10008_01_realmd_realmd_db_version" #endif // __REVISION_SQL_H__