masteredu
Members-
Posts
4 -
Joined
-
Last visited
Never -
Donations
0.00 GBP
masteredu's Achievements
Newbie (1/3)
0
Reputation
-
here is the patch for last revision
-
edit: here is the patch diff --git a/sql/mangos_spell_disabled.sql b/sql/mangos_spell_disabled.sql new file mode 100644 index 0000000..d4fc43c --- /dev/null +++ b/sql/mangos_spell_disabled.sql @@ -0,0 +1,6 @@ +CREATE TABLE spell_disabled ( + entry int(11) unsigned NOT NULL default '0' COMMENT 'spell entry', + ischeat_spell tinyint(3) unsigned NOT NULL default '0' COMMENT 'mark spell as cheat', + active tinyint(3) unsigned NOT NULL default '1' COMMENT 'enable check of this spell', + PRIMARY KEY (entry) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Disabled Spell System'; \\ No newline at end of file diff --git a/src/game/Chat.cpp b/src/game/Chat.cpp index c024989..891d96b 100644 --- a/src/game/Chat.cpp +++ b/src/game/Chat.cpp @@ -465,6 +465,7 @@ ChatCommand * ChatHandler::getCommandTable() { "spell_scripts", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadSpellScriptsCommand, "", NULL }, { "spell_target_position", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadSpellTargetPositionCommand, "", NULL }, { "spell_threats", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadSpellThreatsCommand, "", NULL }, + { "spell_disabled", SEC_ADMINISTRATOR, true, &ChatHandler::HandleReloadSpellDisabledCommand, "", NULL }, { NULL, 0, false, NULL, "", NULL } }; diff --git a/src/game/Chat.h b/src/game/Chat.h index 45a0293..9c3ff0a 100644 --- a/src/game/Chat.h +++ b/src/game/Chat.h @@ -386,6 +386,7 @@ class ChatHandler bool HandleReloadSpellTargetPositionCommand(const char* args); bool HandleReloadSpellThreatsCommand(const char* args); bool HandleReloadSpellPetAurasCommand(const char* args); + bool HandleReloadSpellDisabledCommand(const char* args); bool HandleResetAchievementsCommand(const char * args); bool HandleResetAllCommand(const char * args); diff --git a/src/game/Level3.cpp b/src/game/Level3.cpp index 3e3e650..af40fc2 100644 --- a/src/game/Level3.cpp +++ b/src/game/Level3.cpp @@ -163,6 +163,7 @@ bool ChatHandler::HandleReloadAllSpellCommand(const char*) HandleReloadSpellTargetPositionCommand("a"); HandleReloadSpellThreatsCommand("a"); HandleReloadSpellPetAurasCommand("a"); + HandleReloadSpellDisabledCommand("a"); return true; } @@ -822,6 +823,17 @@ bool ChatHandler::HandleReloadLocalesQuestCommand(const char* /*arg*/) 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; diff --git a/src/game/ObjectMgr.cpp b/src/game/ObjectMgr.cpp index 6791db9..8b137f0 100644 --- a/src/game/ObjectMgr.cpp +++ b/src/game/ObjectMgr.cpp @@ -7040,6 +7040,46 @@ const char *ObjectMgr::GetMangosString(int32 entry, int locale_idx) const return "<error>"; } +void ObjectMgr::LoadSpellDisabledEntrys() +{ + m_spell_disabled.clear(); // need for reload case + QueryResult *result = WorldDatabase.Query("SELECT entry, ischeat_spell FROM spell_disabled where active=1"); + + uint32 total_count = 0; + uint32 cheat_spell_count=0; + + if( !result ) + { + barGoLink bar( 1 ); + bar.step(); + + sLog.outString(); + sLog.outString( ">> Loaded %u disabled spells", total_count ); + return; + } + + barGoLink bar( result->GetRowCount() ); + + Field* fields; + do + { + bar.step(); + fields = result->Fetch(); + uint32 spellid = fields[0].GetUInt32(); + bool ischeater = fields[1].GetBool(); + m_spell_disabled[spellid] = ischeater; + ++total_count; + if(ischeater) + ++cheat_spell_count; + + } while ( result->NextRow() ); + + delete result; + + sLog.outString(); + sLog.outString( ">> Loaded %u disabled spells ( %u - is cheaters spells)", total_count, cheat_spell_count); +} + void ObjectMgr::LoadFishingBaseSkillLevel() { mFishingBaseForArea.clear(); // for reload case diff --git a/src/game/ObjectMgr.h b/src/game/ObjectMgr.h index b36394c..6091439 100644 --- a/src/game/ObjectMgr.h +++ b/src/game/ObjectMgr.h @@ -702,6 +702,20 @@ class ObjectMgr static bool CheckDeclinedNames(std::wstring mainpart, DeclinedName const& names); + void LoadSpellDisabledEntrys(); + uint8 IsSpellDisabled(uint32 spellid) + { + uint8 result=0; + SpellDisabledMap::const_iterator itr = m_spell_disabled.find(spellid); + if(itr != m_spell_disabled.end()) + { + result=1; + if(itr->second != 0) + result=2; + } + return result; + } + int GetIndexForLocale(LocaleConstant loc); LocaleConstant GetLocaleForIndex(int i); @@ -826,6 +840,9 @@ class ObjectMgr typedef std::set<std::wstring> ReservedNamesMap; ReservedNamesMap m_ReservedNames; + typedef UNORDERED_MAP<uint32, uint32> SpellDisabledMap; + SpellDisabledMap m_spell_disabled; + GraveYardMap mGraveYardMap; GameTeleMap m_GameTeleMap; diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp index 8a68ea7..3b39f19 100644 --- a/src/game/Spell.cpp +++ b/src/game/Spell.cpp @@ -2382,6 +2382,19 @@ void Spell::Prepare(SpellCastTargets const* targets, Aura* triggeredByAura) return; } + if(uint8 result = objmgr.IsSpellDisabled(m_spellInfo->Id)) + { + if(m_caster->GetTypeId() == TYPEID_PLAYER) + { + sLog.outDebug("Player %s cast a spell %u which was disabled by server administrator", m_caster->GetName(), m_spellInfo->Id); + if(result == 2) + sLog.outChar("Player %s cast a spell %u which was disabled by server administrator and marked as CheatSpell", m_caster->GetName(), m_spellInfo->Id); + } + SendCastResult(SPELL_FAILED_SPELL_UNAVAILABLE); + finish(false); + return; + } + // Fill cost data m_powerCost = CalculatePowerCost(); diff --git a/src/game/World.cpp b/src/game/World.cpp index c418d72..450de87 100644 --- a/src/game/World.cpp +++ b/src/game/World.cpp @@ -1331,6 +1331,9 @@ void World::SetInitialWorldSettings() sLog.outString( "Loading Player Corpses..." ); objmgr.LoadCorpses(); + sLog.outString( "Loading Spell disabled..." ); + objmgr.LoadSpellDisabledEntrys(); + sLog.outString( "Loading Loot Tables..." ); sLog.outString(); LoadLootTables();
-
oh sorry. now it works, thanks
-
Revision: * * 8220 * Date 24:7:2009. Time 11:23 //===================================================== *** Hardware *** Processor: Intel(R) Core(TM)2 Quad CPU Q6600 @ 2.40GHz Number Of Processors: 4 Physical Memory: 1572864 KB (Available: 706916 KB) Commit Charge Limit: 1572864 KB *** Operation System *** Microsoft Windows Server 2003 Standard Edition Service Pack 2 (Version 5.2, Build 3790) //===================================================== Exception code: C00000FD STACK_OVERFLOW Fault address: 0042F907 01:0002E907 C:\\server\\mangosd.exe Registers: EAX:0F372000 EBX:136FC0E8 ECX:0F372250 EDX:00000003 ESI:0000057D EDI:0089D060 CS:EIP:0023:0042F907 SS:ESP:002B:0F37D314 EBP:0F37D31C DS:002B ES:002B FS:0053 GS:002B Flags:00010206 Call stack: Address Frame Function SourceFile 0042F907 00000000 _chkstk+27 006B1C41 00000000 Spell::CheckItems+111 006AD372 00000000 Spell::CheckCast+1012 006A6C40 00000000 Spell::Prepare+290 004568D5 00000000 Unit::CastSpell+1B5 00456718 00000000 Unit::CastSpell+118 0046A1F3 00000000 Unit::HandleProcTriggerSpell+1EA3 004793E6 00000000 Unit::ProcDamageAndSpellFor+706 004624FF 00000000 Unit::ProcDamageAndSpell+2F 006A1B07 00000000 Spell::DoAllEffectOnTarget+2D7 006A7A76 00000000 Spell::handle_immediate+E6 006A78AD 00000000 Spell::cast+7AD 006A6D44 00000000 Spell::Prepare+394 00456B0D 00000000 Unit::CastCustomSpell+16D 00456992 00000000 Unit::CastCustomSpell+82 00465DDF 00000000 Unit::HandleDummyAuraProc+2EEF 004795A9 00000000 Unit::ProcDamageAndSpellFor+8C9 00462543 00000000 Unit::ProcDamageAndSpell+73 006A1E37 00000000 Spell::DoAllEffectOnTarget+607 006A7A76 00000000 Spell::handle_immediate+E6 006A78AD 00000000 Spell::cast+7AD 006A6D44 00000000 Spell::Prepare+394 004568D5 00000000 Unit::CastSpell+1B5 0082B85F 00000000 Spell::EffectDummy+46FF 006AC063 00000000 Spell::HandleEffects+C3 006A28D4 00000000 Spell::DoSpellHitOnUnit+5E4 006A1A04 00000000 Spell::DoAllEffectOnTarget+1D4 006A7A76 00000000 Spell::handle_immediate+E6 006A78AD 00000000 Spell::cast+7AD 006A6D44 00000000 Spell::Prepare+394 004568D5 00000000 Unit::CastSpell+1B5 00456718 00000000 Unit::CastSpell+118 0083A0BC 00000000 Spell::EffectScriptEffect+1DAC 006AC063 00000000 Spell::HandleEffects+C3 006A28D4 00000000 Spell::DoSpellHitOnUnit+5E4 006A1A04 00000000 Spell::DoAllEffectOnTarget+1D4 006A7A76 00000000 Spell::handle_immediate+E6 006A78AD 00000000 Spell::cast+7AD 006A8390 00000000 Spell::update+290 006B424D 00000000 SpellEvent::Execute+2D 008D4D7C 00000000 EventProcessor::Update+EC 0045382B 00000000 Unit::Update+3B 004C0067 00000000 Player::Update+117 0049A539 00000000 Map::Update+D9 0080BB9E 00000000 MapInstanced::Update+DE 0060CB58 00000000 MapManager::Update+128 005ED8E0 00000000 World::Update+780 0042F75E 00000000 WorldRunnable::run+8E 0089D077 00000000 ACE_Based::Thread::ThreadTask+17 00B714D4 00000000 __WSAFDIsSet+FFFFFFFFFFFCC45C 78543433 00000000 _endthreadex+44 785434C7 00000000 _endthreadex+D8 7D4DFE21 00000000 FlsSetValue+136 Call stack: Address Frame Function SourceFile 7D61C828 00000000 ZwWaitForSingleObject+15 7D4D8BF1 00000000 WaitForSingleObject+12 00B29C64 00000000 __WSAFDIsSet+FFFFFFFFFFF84BEC 00B964DA 00000000 __WSAFDIsSet+FFFFFFFFFFFF1462 00B9269F 00000000 __WSAFDIsSet+FFFFFFFFFFFED627 0060988A 00000000 WorldSocketMgr::Wait+4A 1BD771F4 00000000 0000:00000000 1BD771F4 00000000 0000:00000000 6C696146 00000000
Contact Us
To contact us
click here
You can also email us at [email protected]
Privacy Policy | Terms & Conditions
You can also email us at [email protected]
Privacy Policy | Terms & Conditions
Copyright © getMaNGOS. All rights Reserved.
This website is in no way associated with or endorsed by Blizzard Entertainment®
This website is in no way associated with or endorsed by Blizzard Entertainment®