All pastes #955311 Raw Edit

Miscellany

public text v1 · immutable
#955311 ·published 2008-03-24 15:15 UTC
rendered paste body
Index: src/game/Chat.cpp
===================================================================
--- src/game/Chat.cpp	(revision 5483)
+++ src/game/Chat.cpp	(working copy)
@@ -189,6 +189,7 @@
         { "spell_script_target",         SEC_ADMINISTRATOR, &ChatHandler::HandleReloadSpellScriptTargetCommand,       "", NULL },
         { "spell_scripts",               SEC_ADMINISTRATOR, &ChatHandler::HandleReloadSpellScriptsCommand,            "", NULL },
         { "spell_teleport",              SEC_ADMINISTRATOR, &ChatHandler::HandleReloadSpellTeleportCommand,           "", NULL },
+        { "spell_disabled",              SEC_ADMINISTRATOR, &ChatHandler::HandleReloadSpellDisabledCommand,           "", NULL },
 
         { "",                            SEC_ADMINISTRATOR, &ChatHandler::HandleReloadCommand,                        "", NULL },
         { NULL,                          0,                 NULL,                                                     "", NULL }
Index: src/game/Chat.h
===================================================================
--- src/game/Chat.h	(revision 5483)
+++ src/game/Chat.h	(working copy)
@@ -98,7 +98,7 @@
         bool HandleDismountCommand(const char* args);
         bool HandleSaveCommand(const char* args);
         bool HandleGMListCommand(const char* args);
-
+        bool HandleReloadSpellDisabledCommand(const char* args);
         bool HandleNamegoCommand(const char* args);
         bool HandleGonameCommand(const char* args);
         bool HandleGroupgoCommand(const char* args);
Index: src/game/Level3.cpp
===================================================================
--- src/game/Level3.cpp	(revision 5483)
+++ src/game/Level3.cpp	(working copy)
@@ -122,6 +122,7 @@
     HandleReloadSpellProcEventCommand("a");
     HandleReloadSpellScriptTargetCommand("a");
     HandleReloadSpellTeleportCommand("a");
+    HandleReloadSpellDisabledCommand("a");
     return true;
 }
 
@@ -446,6 +447,17 @@
     return true;
 }
 
+bool ChatHandler::HandleReloadSpellDisabledCommand(const char* /*arg*/)
+{
+    sLog.outString( "Re-Loading spell disabled table...");
+
+    objmgr.LoadSpellDisabledEntrys();
+
+    SendGlobalSysMessage("DB table `spell_disabled` reloaded.");
+
+    return true;
+}
+
 bool ChatHandler::HandleLoadScriptsCommand(const char* args)
 {
     if(!LoadScriptingModule(args)) return true;
Index: src/game/ObjectMgr.cpp
===================================================================
--- src/game/ObjectMgr.cpp	(revision 5483)
+++ src/game/ObjectMgr.cpp	(working copy)
@@ -5286,3 +5286,39 @@
     }
     return GetMangosStringDefault(entry);
 }
+
+void ObjectMgr::LoadSpellDisabledEntrys()
+{
+    m_spell_disabled.clear();                                // need for reload case
+    QueryResult *result = WorldDatabase.Query("SELECT entry FROM spell_disabled where active=1");
+
+    uint32 count = 0;
+
+    if( !result )
+    {
+        barGoLink bar( 1 );
+        bar.step();
+
+        sLog.outString();
+        sLog.outString( ">> Loaded %u disabled spells", count );
+        return;
+    }
+
+    barGoLink bar( result->GetRowCount() );
+
+    Field* fields;
+    do
+    {
+        bar.step();
+        fields = result->Fetch();
+        uint32 entry = fields[0].GetUInt32();
+        m_spell_disabled.insert(entry);
+        ++count;
+
+   } while ( result->NextRow() );
+
+    delete result;
+
+    sLog.outString();
+    sLog.outString( ">> Loaded %u disabled spells", count );
+}
Index: src/game/ObjectMgr.h
===================================================================
--- src/game/ObjectMgr.h	(revision 5483)
+++ src/game/ObjectMgr.h	(working copy)
@@ -599,6 +599,12 @@
             return m_ReservedNames.find(name) != m_ReservedNames.end();
         }
 
+		void LoadSpellDisabledEntrys();
+    	bool IsSpellDisabled(uint32 spellid) const
+        {
+            return m_spell_disabled.find(spellid) != m_spell_disabled.end();
+        }
+
         int GetIndexForLocale(LocaleConstant loc);
         LocaleConstant GetLocalForIndex(int);
         // guild bank tabs
@@ -658,6 +664,9 @@
         typedef std::set<std::string> ReservedNamesMap;
         ReservedNamesMap    m_ReservedNames;
 
+        typedef std::set<uint32> SpellDisabledMap;
+		SpellDisabledMap  m_spell_disabled;
+
         GraveYardMap        mGraveYardMap;
 
         typedef             std::vector<LocaleConstant> LocalToIndex;
Index: src/game/Spell.cpp
===================================================================
--- src/game/Spell.cpp	(revision 5483)
+++ src/game/Spell.cpp	(working copy)
@@ -1519,6 +1519,13 @@
         return;
     }
 
+	if(objmgr.IsSpellDisabled(m_spellInfo->Id))
+	{
+	    SendCastResult(SPELL_FAILED_SPELL_UNAVAILABLE);
+        finish(false);
+        return;
+	}
+
     uint8 result = CanCast(true);
     if(result != 0)
     {
Index: src/game/World.cpp
===================================================================
--- src/game/World.cpp	(revision 5483)
+++ src/game/World.cpp	(working copy)
@@ -750,7 +750,10 @@
 
     sLog.outString( "Loading Player Corpses..." );
     objmgr.LoadCorpses();
-
+    
+    sLog.outString( "Loading Spell disabled..." );
+    objmgr.LoadSpellDisabledEntrys();
+    
     sLog.outString( "Loading Loot Tables..." );
     LoadLootTables();