aboutsummaryrefslogtreecommitdiff
path: root/src/server/game
diff options
context:
space:
mode:
authorNay <dnpd.dd@gmail.com>2013-08-27 16:10:11 +0100
committerNay <dnpd.dd@gmail.com>2013-08-27 16:10:11 +0100
commit14d80d269dd7f9624983bc5a610e511f31ed33f0 (patch)
treef4dafe85b046d91506ec345516aa8e82d4ec38f6 /src/server/game
parentb2134dbbe300f6b0ff55d551295a56a67748056f (diff)
parentcc14e18664f50983e52398ec02c9f6b2b770ef85 (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.cpp1
-rw-r--r--src/server/game/Entities/Unit/StatSystem.cpp9
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp10
-rw-r--r--src/server/game/Globals/ObjectMgr.cpp15
-rw-r--r--src/server/game/Maps/Map.cpp4
-rw-r--r--src/server/game/Scripting/ScriptLoader.cpp39
-rw-r--r--src/server/game/Scripting/ScriptMgr.cpp32
-rw-r--r--src/server/game/Spells/SpellMgr.cpp3
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));
}