aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/game/Chat.cpp1
-rw-r--r--src/game/Chat.h1
-rw-r--r--src/game/Level3.cpp9
-rw-r--r--src/game/Player.cpp1
-rw-r--r--src/game/SpellMgr.cpp61
-rw-r--r--src/game/SpellMgr.h8
-rw-r--r--src/game/Unit.cpp2
-rw-r--r--src/game/Unit.h3
-rw-r--r--src/game/World.cpp6
9 files changed, 84 insertions, 8 deletions
diff --git a/src/game/Chat.cpp b/src/game/Chat.cpp
index 4dcc603afc4..98f02c1e4e6 100644
--- a/src/game/Chat.cpp
+++ b/src/game/Chat.cpp
@@ -489,6 +489,7 @@ ChatCommand * ChatHandler::getCommandTable()
{ "spell_linked_spell", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadSpellLinkedSpellCommand, "", NULL },
{ "spell_pet_auras", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadSpellPetAurasCommand, "", NULL },
{ "spell_proc_event", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadSpellProcEventCommand, "", NULL },
+ { "spell_proc_item_enchant", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadSpellProcItemEnchantCommand, "", NULL },
{ "spell_script_target", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadSpellScriptTargetCommand, "", NULL },
{ "spell_scripts", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadSpellScriptsCommand, "", NULL },
{ "spell_target_position", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadSpellTargetPositionCommand, "", NULL },
diff --git a/src/game/Chat.h b/src/game/Chat.h
index be4ad5f31c2..c6bf1032662 100644
--- a/src/game/Chat.h
+++ b/src/game/Chat.h
@@ -405,6 +405,7 @@ class ChatHandler
bool HandleReloadSpellLearnSpellCommand(const char* args);
bool HandleReloadSpellLinkedSpellCommand(const char* args);
bool HandleReloadSpellProcEventCommand(const char* args);
+ bool HandleReloadSpellProcItemEnchantCommand(const char* args);
bool HandleReloadSpellBonusesCommand(const char* args);
bool HandleReloadSpellScriptTargetCommand(const char* args);
bool HandleReloadSpellScriptsCommand(const char* args);
diff --git a/src/game/Level3.cpp b/src/game/Level3.cpp
index 5abc05260f1..e17d1fc975a 100644
--- a/src/game/Level3.cpp
+++ b/src/game/Level3.cpp
@@ -651,6 +651,7 @@ bool ChatHandler::HandleReloadAllSpellCommand(const char*)
HandleReloadSpellLinkedSpellCommand("a");
HandleReloadSpellProcEventCommand("a");
HandleReloadSpellBonusesCommand("a");
+ HandleReloadSpellProcItemEnchantCommand("a");
HandleReloadSpellScriptTargetCommand("a");
HandleReloadSpellTargetPositionCommand("a");
HandleReloadSpellThreatsCommand("a");
@@ -1047,6 +1048,14 @@ bool ChatHandler::HandleReloadSpellBonusesCommand(const char*)
return true;
}
+bool ChatHandler::HandleReloadSpellProcItemEnchantCommand(const char*)
+{
+ sLog.outString( "Re-Loading Spell Proc Item Enchant..." );
+ spellmgr.LoadSpellProcItemEnchant();
+ SendGlobalSysMessage("DB table `spell_proc_item_enchant` (item enchantment ppm) reloaded.");
+ return true;
+}
+
bool ChatHandler::HandleReloadSpellScriptTargetCommand(const char*)
{
sLog.outString( "Re-Loading SpellsScriptTarget..." );
diff --git a/src/game/Player.cpp b/src/game/Player.cpp
index 5659f14f28a..701017a45a1 100644
--- a/src/game/Player.cpp
+++ b/src/game/Player.cpp
@@ -7222,6 +7222,7 @@ void Player::CastItemCombatSpell(Unit *target, WeaponAttackType attType, uint32
// Apply spell mods
ApplySpellMod(pEnchant->spellid[s],SPELLMOD_CHANCE_OF_SUCCESS,chance);
+ //ApplySpellMod(spellInfo->Id,SPELLMOD_FREQUENCY_OF_SUCCESS,chance);
if (roll_chance_f(chance))
{
diff --git a/src/game/SpellMgr.cpp b/src/game/SpellMgr.cpp
index f3e02e6d8f3..73aebc61490 100644
--- a/src/game/SpellMgr.cpp
+++ b/src/game/SpellMgr.cpp
@@ -1217,6 +1217,65 @@ void SpellMgr::LoadSpellProcEvents()
sLog.outString( ">> Loaded %u extra spell proc event conditions", count );
}
+/*
+void SpellMgr::LoadSpellProcItemEnchant()
+{
+ mSpellProcItemEnchantMap.clear(); // need for reload case
+
+ uint32 count = 0;
+
+ // 0 1
+ QueryResult *result = WorldDatabase.Query("SELECT entry, ppmRate FROM spell_proc_item_enchant");
+ if( !result )
+ {
+
+ barGoLink bar( 1 );
+
+ bar.step();
+
+ sLog.outString();
+ sLog.outString( ">> Loaded %u proc item enchant definitions", count );
+ return;
+ }
+
+ barGoLink bar( result->GetRowCount() );
+
+ do
+ {
+ Field *fields = result->Fetch();
+
+ bar.step();
+
+ uint32 entry = fields[0].GetUInt32();
+ float ppmRate = fields[1].GetFloat();
+
+ SpellEntry const* spellInfo = sSpellStore.LookupEntry(entry);
+
+ if (!spellInfo)
+ {
+ sLog.outErrorDb("Spell %u listed in `spell_proc_item_enchant` does not exist", entry);
+ continue;
+ }
+
+ if ( GetFirstSpellInChain(entry) != entry )
+ {
+ sLog.outErrorDb("Spell %u listed in `spell_proc_item_enchant` is not first rank in chain", entry);
+ // prevent loading since it won't have an effect anyway
+ continue;
+ }
+
+ mSpellProcItemEnchantMap[entry] = ppmRate;
+
+ ++count;
+ } while( result->NextRow() );
+
+ delete result;
+
+ sLog.outString();
+ sLog.outString( ">> Loaded %u proc item enchant definitions", count );
+}
+*/
+
void SpellMgr::LoadSpellBonusess()
{
mSpellBonusMap.clear(); // need for reload case
@@ -3226,7 +3285,7 @@ bool IsDispelableBySpell(SpellEntry const * dispelSpell, uint32 spellId, bool de
return def;
}
-void SpellMgr::LoadSpellEnchantProcData()
+void SpellMgr::LoadSpellProcItemEnchant()
{
mSpellEnchantProcEventMap.clear(); // need for reload case
diff --git a/src/game/SpellMgr.h b/src/game/SpellMgr.h
index db1473bcb3b..ca83be4a560 100644
--- a/src/game/SpellMgr.h
+++ b/src/game/SpellMgr.h
@@ -526,6 +526,7 @@ typedef UNORDERED_MAP<uint32, SpellBonusEntry> SpellBonusMap;
#define ELIXIR_SHATTRATH_MASK 0x8
typedef std::map<uint32, uint8> SpellElixirMap;
+typedef std::map<uint32, float> SpellProcItemEnchantMap;
// Spell script target related declarations (accessed using SpellMgr functions)
enum SpellScriptTargetType
@@ -772,8 +773,6 @@ class SpellMgr
return NULL;
}
- bool IsSpellProcEventCanTriggeredBy( SpellProcEventEntry const * spellProcEvent, uint32 EventProcFlag, SpellEntry const * procSpell, uint32 procFlags, uint32 procExtra, bool active);
-
SpellEnchantProcEntry const* GetSpellEnchantProcEvent(uint32 enchId) const
{
SpellEnchantProcEventMap::const_iterator itr = mSpellEnchantProcEventMap.find(enchId);
@@ -782,6 +781,8 @@ class SpellMgr
return NULL;
}
+ bool IsSpellProcEventCanTriggeredBy( SpellProcEventEntry const * spellProcEvent, uint32 EventProcFlag, SpellEntry const * procSpell, uint32 procFlags, uint32 procExtra, bool active);
+
// Spell bonus data
SpellBonusEntry const* GetSpellBonusData(uint32 spellId) const
{
@@ -1056,6 +1057,7 @@ class SpellMgr
void LoadSpellScriptTarget();
void LoadSpellElixirs();
void LoadSpellProcEvents();
+ void LoadSpellProcItemEnchant();
void LoadSpellBonusess();
void LoadSpellTargetPositions();
void LoadSpellThreats();
@@ -1063,7 +1065,6 @@ class SpellMgr
void LoadSpellPetAuras();
void LoadSpellCustomAttr();
void LoadEnchantCustomAttr();
- void LoadSpellEnchantProcData();
void LoadSpellLinked();
void LoadPetLevelupSpellMap();
void LoadPetDefaultSpells();
@@ -1081,6 +1082,7 @@ class SpellMgr
SpellTargetPositionMap mSpellTargetPositions;
SpellElixirMap mSpellElixirs;
SpellProcEventMap mSpellProcEventMap;
+ SpellProcItemEnchantMap mSpellProcItemEnchantMap;
SpellBonusMap mSpellBonusMap;
SkillLineAbilityMap mSkillLineAbilityMap;
SpellPetAuraMap mSpellPetAuraMap;
diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp
index b0b3968d07c..20889177ea6 100644
--- a/src/game/Unit.cpp
+++ b/src/game/Unit.cpp
@@ -13686,7 +13686,9 @@ bool Unit::IsTriggeredAtSpellProcEvent(Unit *pVictim, Aura * aura, SpellEntry co
if(Player* modOwner = GetSpellModOwner())
{
modOwner->ApplySpellMod(spellProto->Id,SPELLMOD_CHANCE_OF_SUCCESS,chance);
+ //modOwner->ApplySpellMod(spellProto->Id,SPELLMOD_FREQUENCY_OF_SUCCESS,chance);
}
+
return roll_chance_f(chance);
}
diff --git a/src/game/Unit.h b/src/game/Unit.h
index 85f2ed154dd..f9bdba95dde 100644
--- a/src/game/Unit.h
+++ b/src/game/Unit.h
@@ -111,7 +111,7 @@ enum SpellModOp
SPELLMOD_CRIT_DAMAGE_BONUS = 15,
SPELLMOD_RESIST_MISS_CHANCE = 16,
SPELLMOD_JUMP_TARGETS = 17,
- SPELLMOD_CHANCE_OF_SUCCESS = 18,
+ SPELLMOD_CHANCE_OF_SUCCESS = 18, // Only used with SPELL_AURA_ADD_FLAT_MODIFIER and affects proc spells
SPELLMOD_ACTIVATION_TIME = 19,
SPELLMOD_EFFECT_PAST_FIRST = 20,
SPELLMOD_GLOBAL_COOLDOWN = 21, //TODO: GCD is not checked by server currently
@@ -120,6 +120,7 @@ enum SpellModOp
SPELLMOD_SPELL_BONUS_DAMAGE = 24,
// spellmod 25
SPELLMOD_PROC_PER_MINUTE = 26,
+ //SPELLMOD_FREQUENCY_OF_SUCCESS = 26, // Only used with SPELL_AURA_ADD_PCT_MODIFIER and affects used on proc spells
SPELLMOD_MULTIPLE_VALUE = 27,
SPELLMOD_RESIST_DISPEL_CHANCE = 28,
SPELLMOD_CRIT_DAMAGE_BONUS_2 = 29, //one not used spell
diff --git a/src/game/World.cpp b/src/game/World.cpp
index db59f101389..0f93322daad 100644
--- a/src/game/World.cpp
+++ b/src/game/World.cpp
@@ -1250,15 +1250,15 @@ void World::SetInitialWorldSettings()
sLog.outString( "Loading Spell Bonus Data..." );
spellmgr.LoadSpellBonusess();
+ sLog.outString( "Loading Spell Proc Item Enchant..." );
+ spellmgr.LoadSpellProcItemEnchant(); // must be after LoadSpellChains
+
sLog.outString( "Loading Aggro Spells Definitions...");
spellmgr.LoadSpellThreats();
sLog.outString( "Loading NPC Texts..." );
objmgr.LoadGossipText();
- sLog.outString( "Loading Enchant Spells Proc datas...");
- spellmgr.LoadSpellEnchantProcData();
-
sLog.outString( "Loading Item Random Enchantments Table..." );
LoadRandomEnchantmentsTable();