diff options
| author | Nay <dnpd.dd@gmail.com> | 2013-08-27 16:10:11 +0100 |
|---|---|---|
| committer | Nay <dnpd.dd@gmail.com> | 2013-08-27 16:10:11 +0100 |
| commit | 14d80d269dd7f9624983bc5a610e511f31ed33f0 (patch) | |
| tree | f4dafe85b046d91506ec345516aa8e82d4ec38f6 /src/server/game | |
| parent | b2134dbbe300f6b0ff55d551295a56a67748056f (diff) | |
| parent | cc14e18664f50983e52398ec02c9f6b2b770ef85 (diff) | |
Merge remote-tracking branch 'origin/master' into 4.3.4
Conflicts:
src/server/game/AI/EventAI/CreatureEventAI.cpp
src/server/game/Globals/ObjectMgr.cpp
Diffstat (limited to 'src/server/game')
| -rw-r--r-- | src/server/game/AI/SmartScripts/SmartScript.cpp | 1 | ||||
| -rw-r--r-- | src/server/game/Entities/Unit/StatSystem.cpp | 9 | ||||
| -rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 10 | ||||
| -rw-r--r-- | src/server/game/Globals/ObjectMgr.cpp | 15 | ||||
| -rw-r--r-- | src/server/game/Maps/Map.cpp | 4 | ||||
| -rw-r--r-- | src/server/game/Scripting/ScriptLoader.cpp | 39 | ||||
| -rw-r--r-- | src/server/game/Scripting/ScriptMgr.cpp | 32 | ||||
| -rw-r--r-- | src/server/game/Spells/SpellMgr.cpp | 3 |
8 files changed, 77 insertions, 36 deletions
diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index b4e18b66a69..41dae740e59 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -2231,6 +2231,7 @@ SmartScriptHolder SmartScript::CreateEvent(SMART_EVENT e, uint32 event_flags, ui script.event.raw.param4 = event_param4; script.event.event_phase_mask = phaseMask; script.event.event_flags = event_flags; + script.event.event_chance = 100; script.action.type = action; script.action.raw.param1 = action_param1; diff --git a/src/server/game/Entities/Unit/StatSystem.cpp b/src/server/game/Entities/Unit/StatSystem.cpp index 09d29750c57..28e42939287 100644 --- a/src/server/game/Entities/Unit/StatSystem.cpp +++ b/src/server/game/Entities/Unit/StatSystem.cpp @@ -973,11 +973,10 @@ bool Guardian::UpdateStats(Stats stat) float mod = 0.75f; if (IsPetGhoul() && (stat == STAT_STAMINA || stat == STAT_STRENGTH)) { - switch (stat) - { - case STAT_STAMINA: mod = 0.3f; break; // Default Owner's Stamina scale - case STAT_STRENGTH: mod = 0.7f; break; // Default Owner's Strength scale - } + if (stat == STAT_STAMINA) + mod = 0.3f; // Default Owner's Stamina scale + else + mod = 0.7f; // Default Owner's Strength scale // Check just if owner has Ravenous Dead since it's effect is not an aura AuraEffect const* aurEff = owner->GetAuraEffect(SPELL_AURA_MOD_TOTAL_STAT_PERCENTAGE, SPELLFAMILY_DEATHKNIGHT, 3010, 0); diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index aca351c4c6a..fde3c0ddfae 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -13296,13 +13296,13 @@ bool Unit::IsTriggeredAtSpellProcEvent(Unit* victim, Aura* aura, SpellInfo const { if (!isVictim) { - uint32 WeaponSpeed = GetAttackTime(attType); - chance = GetPPMProcChance(WeaponSpeed, spellProcEvent->ppmRate, spellProto); + uint32 weaponSpeed = GetAttackTime(attType); + chance = GetPPMProcChance(weaponSpeed, spellProcEvent->ppmRate, spellProto); } - else + else if (victim) { - uint32 WeaponSpeed = victim->GetAttackTime(attType); - chance = victim->GetPPMProcChance(WeaponSpeed, spellProcEvent->ppmRate, spellProto); + uint32 weaponSpeed = victim->GetAttackTime(attType); + chance = victim->GetPPMProcChance(weaponSpeed, spellProcEvent->ppmRate, spellProto); } } // Apply chance modifer aura diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index 86a6a906df5..e95779c1f20 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -6622,17 +6622,20 @@ void ObjectMgr::LoadPetNumber() std::string ObjectMgr::GeneratePetName(uint32 entry) { - StringVector & list0 = _petHalfName0[entry]; - StringVector & list1 = _petHalfName1[entry]; + StringVector& list0 = _petHalfName0[entry]; + StringVector& list1 = _petHalfName1[entry]; if (list0.empty() || list1.empty()) { CreatureTemplate const* cinfo = GetCreatureTemplate(entry); - const char* petname = GetPetName(cinfo->family, sWorld->GetDefaultDbcLocale()); - if (!petname) - return cinfo->Name; + if (!cinfo) + return std::string(); - return std::string(petname); + char const* petname = GetPetName(cinfo->family, sWorld->GetDefaultDbcLocale()); + if (petname) + return std::string(petname); + else + return cinfo->Name; } return *(list0.begin()+urand(0, list0.size()-1)) + *(list1.begin()+urand(0, list1.size()-1)); diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index 56330c503de..65d9ee4f5ba 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -2114,6 +2114,10 @@ void Map::AddObjectToRemoveList(WorldObject* obj) void Map::AddObjectToSwitchList(WorldObject* obj, bool on) { ASSERT(obj->GetMapId() == GetId() && obj->GetInstanceId() == GetInstanceId()); + // i_objectsToSwitch is iterated only in Map::RemoveAllObjectsInRemoveList() and it uses + // the contained objects only if GetTypeId() == TYPEID_UNIT , so we can return in all other cases + if (obj->GetTypeId() != TYPEID_UNIT) + return; std::map<WorldObject*, bool>::iterator itr = i_objectsToSwitch.find(obj); if (itr == i_objectsToSwitch.end()) diff --git a/src/server/game/Scripting/ScriptLoader.cpp b/src/server/game/Scripting/ScriptLoader.cpp index 3c1ec5db0a8..437638da16d 100644 --- a/src/server/game/Scripting/ScriptLoader.cpp +++ b/src/server/game/Scripting/ScriptLoader.cpp @@ -536,20 +536,31 @@ void AddSC_zuldrak(); void AddSC_crystalsong_forest(); void AddSC_isle_of_conquest(); -//outland -void AddSC_boss_exarch_maladaar(); //Auchindoun Auchenai Crypts +// Outland + +// Auchindoun - Auchenai Crypts void AddSC_boss_shirrak_the_dead_watcher(); -void AddSC_boss_nexusprince_shaffar(); //Auchindoun Mana Tombs +void AddSC_boss_exarch_maladaar(); +void AddSC_instance_auchenai_crypts(); + +// Auchindoun - Mana Tombs void AddSC_boss_pandemonius(); -void AddSC_boss_darkweaver_syth(); //Auchindoun Sekketh Halls +void AddSC_boss_nexusprince_shaffar(); +void AddSC_instance_mana_tombs(); + +// Auchindoun - Sekketh Halls +void AddSC_boss_darkweaver_syth(); void AddSC_boss_talon_king_ikiss(); void AddSC_boss_anzu(); void AddSC_instance_sethekk_halls(); -void AddSC_instance_shadow_labyrinth(); //Auchindoun Shadow Labyrinth + +// Auchindoun - Shadow Labyrinth void AddSC_boss_ambassador_hellmaw(); void AddSC_boss_blackheart_the_inciter(); void AddSC_boss_grandmaster_vorpil(); void AddSC_boss_murmur(); +void AddSC_instance_shadow_labyrinth(); + void AddSC_black_temple(); //Black Temple void AddSC_boss_illidan(); void AddSC_boss_shade_of_akama(); @@ -1054,19 +1065,29 @@ void AddKalimdorScripts() void AddOutlandScripts() { #ifdef SCRIPTS - AddSC_boss_exarch_maladaar(); //Auchindoun Auchenai Crypts + // Auchindoun - Auchenai Crypts AddSC_boss_shirrak_the_dead_watcher(); - AddSC_boss_nexusprince_shaffar(); //Auchindoun Mana Tombs + AddSC_boss_exarch_maladaar(); + AddSC_instance_auchenai_crypts(); + + // Auchindoun - Mana Tombs AddSC_boss_pandemonius(); - AddSC_boss_darkweaver_syth(); //Auchindoun Sekketh Halls + AddSC_boss_nexusprince_shaffar(); + AddSC_instance_mana_tombs(); + + // Auchindoun - Sekketh Halls + AddSC_boss_darkweaver_syth(); AddSC_boss_talon_king_ikiss(); AddSC_boss_anzu(); AddSC_instance_sethekk_halls(); - AddSC_instance_shadow_labyrinth(); //Auchindoun Shadow Labyrinth + + // Auchindoun - Shadow Labyrinth AddSC_boss_ambassador_hellmaw(); AddSC_boss_blackheart_the_inciter(); AddSC_boss_grandmaster_vorpil(); AddSC_boss_murmur(); + AddSC_instance_shadow_labyrinth(); + AddSC_black_temple(); //Black Temple AddSC_boss_illidan(); AddSC_boss_shade_of_akama(); diff --git a/src/server/game/Scripting/ScriptMgr.cpp b/src/server/game/Scripting/ScriptMgr.cpp index 3272498662b..65ddb3a8d05 100644 --- a/src/server/game/Scripting/ScriptMgr.cpp +++ b/src/server/game/Scripting/ScriptMgr.cpp @@ -29,10 +29,16 @@ #include "SpellInfo.h" #include "SpellScript.h" #include "GossipDef.h" -#include "CreatureAI.h" +#include "CreatureAIImpl.h" #include "Player.h" #include "WorldPacket.h" +namespace +{ + typedef std::set<ScriptObject*> ExampleScriptContainer; + ExampleScriptContainer ExampleScripts; +} + // This is the global static registry of scripts. template<class TScript> class ScriptRegistry @@ -104,6 +110,9 @@ class ScriptRegistry if (script->GetName().find("example") == std::string::npos && script->GetName().find("Smart") == std::string::npos) TC_LOG_ERROR(LOG_FILTER_SQL, "Script named '%s' does not have a script name assigned in database.", script->GetName().c_str()); + + // These scripts don't get stored anywhere so throw them into this to avoid leaking memory + ExampleScripts.insert(script); } } else @@ -160,7 +169,11 @@ class ScriptRegistry if (!V) \ return R; - +struct TSpellSummary +{ + uint8 Targets; // set of enum SelectTarget + uint8 Effects; // set of enum SelectEffect +} *SpellSummary; ScriptMgr::ScriptMgr() : _scriptCount(0), _scheduledScripts(0) @@ -220,6 +233,13 @@ void ScriptMgr::Unload() SCR_CLEAR(UnitScript); #undef SCR_CLEAR + + for (ExampleScriptContainer::iterator itr = ExampleScripts.begin(); itr != ExampleScripts.end(); ++itr) + delete *itr; + ExampleScripts.clear(); + + delete[] SpellSummary; + delete[] UnitAI::AISpellInfo; } void ScriptMgr::LoadDatabase() @@ -227,14 +247,10 @@ void ScriptMgr::LoadDatabase() sScriptSystemMgr->LoadScriptWaypoints(); } -struct TSpellSummary -{ - uint8 Targets; // set of enum SelectTarget - uint8 Effects; // set of enum SelectEffect -} *SpellSummary; - void ScriptMgr::FillSpellSummary() { + UnitAI::FillAISpellInfo(); + SpellSummary = new TSpellSummary[sSpellMgr->GetSpellInfoStoreSize()]; SpellInfo const* pTempSpell; diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp index b34b935e975..721a171917e 100644 --- a/src/server/game/Spells/SpellMgr.cpp +++ b/src/server/game/Spells/SpellMgr.cpp @@ -27,7 +27,6 @@ #include "Chat.h" #include "Spell.h" #include "BattlegroundMgr.h" -#include "CreatureAI.h" #include "MapManager.h" #include "BattlefieldWG.h" #include "BattlefieldMgr.h" @@ -3079,8 +3078,6 @@ void SpellMgr::LoadSpellInfoCustomAttributes() spellInfo->_InitializeExplicitTargetMask(); } - CreatureAI::FillAISpellInfo(); - TC_LOG_INFO(LOG_FILTER_SERVER_LOADING, ">> Loaded SpellInfo custom attributes in %u ms", GetMSTimeDiffToNow(oldMSTime)); } |
