aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/collision/BoundingIntervalHierarchy.cpp2
-rw-r--r--src/server/game/AI/CoreAI/PetAI.cpp6
-rw-r--r--src/server/game/AI/EventAI/CreatureEventAI.cpp7
-rw-r--r--src/server/game/AI/SmartScripts/SmartScript.cpp36
-rw-r--r--src/server/game/AI/SmartScripts/SmartScriptMgr.h4
-rw-r--r--src/server/game/Achievements/AchievementMgr.cpp5
-rw-r--r--src/server/game/Addons/AddonMgr.h3
-rw-r--r--src/server/game/Battlefield/Battlefield.cpp1
-rw-r--r--src/server/game/Battlegrounds/ArenaTeam.cpp2
-rw-r--r--src/server/game/Battlegrounds/BattlegroundMgr.cpp3
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp1
-rw-r--r--src/server/game/Entities/GameObject/GameObject.cpp4
-rw-r--r--src/server/game/Entities/Object/ObjectDefines.h8
-rw-r--r--src/server/game/Entities/Pet/Pet.cpp3
-rw-r--r--src/server/game/Entities/Player/Player.cpp8
-rw-r--r--src/server/game/Entities/Unit/StatSystem.cpp8
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp22
-rw-r--r--src/server/game/Globals/ObjectMgr.cpp17
-rw-r--r--src/server/game/Globals/ObjectMgr.h3
-rw-r--r--src/server/game/Handlers/CharacterHandler.cpp3
-rw-r--r--src/server/game/Loot/LootMgr.cpp2
-rw-r--r--src/server/game/Maps/MapManager.cpp1
-rw-r--r--src/server/game/Miscellaneous/SharedDefines.h2
-rw-r--r--src/server/game/Movement/Spline/MoveSplineInit.cpp4
-rw-r--r--src/server/game/Scripting/ScriptLoader.cpp2
-rw-r--r--src/server/game/Server/WorldSocketMgr.cpp2
-rw-r--r--src/server/game/Spells/Spell.h2
-rw-r--r--src/server/game/Spells/SpellEffects.cpp16
-rw-r--r--src/server/game/Spells/SpellInfo.cpp2
-rw-r--r--src/server/game/Warden/WardenWin.cpp2
-rw-r--r--src/server/game/World/World.cpp1
-rw-r--r--src/server/scripts/Commands/cs_lookup.cpp2
-rw-r--r--src/server/scripts/Commands/cs_reload.cpp22
-rw-r--r--src/server/scripts/EasternKingdoms/CMakeLists.txt1
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp331
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/instance_scholomance.cpp43
-rw-r--r--src/server/scripts/EasternKingdoms/Scholomance/scholomance.h36
-rw-r--r--src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp4
-rw-r--r--src/server/shared/Dynamic/LinkedReference/Reference.h4
-rw-r--r--src/server/shared/Utilities/Util.cpp7
-rw-r--r--src/server/worldserver/RemoteAccess/RARunnable.cpp2
-rw-r--r--src/tools/vmap4_extractor/model.cpp6
42 files changed, 482 insertions, 158 deletions
diff --git a/src/server/collision/BoundingIntervalHierarchy.cpp b/src/server/collision/BoundingIntervalHierarchy.cpp
index 76218936879..ad3753ea3c9 100644
--- a/src/server/collision/BoundingIntervalHierarchy.cpp
+++ b/src/server/collision/BoundingIntervalHierarchy.cpp
@@ -241,7 +241,7 @@ void BIH::subdivide(int left, int right, std::vector<uint32> &tempTree, buildDat
bool BIH::writeToFile(FILE* wf) const
{
uint32 treeSize = tree.size();
- uint32 check=0, count=0;
+ uint32 check=0, count;
check += fwrite(&bounds.low(), sizeof(float), 3, wf);
check += fwrite(&bounds.high(), sizeof(float), 3, wf);
check += fwrite(&treeSize, sizeof(uint32), 1, wf);
diff --git a/src/server/game/AI/CoreAI/PetAI.cpp b/src/server/game/AI/CoreAI/PetAI.cpp
index 31e49e4b8d3..a8d2a2248ad 100644
--- a/src/server/game/AI/CoreAI/PetAI.cpp
+++ b/src/server/game/AI/CoreAI/PetAI.cpp
@@ -251,6 +251,12 @@ void PetAI::UpdateAI(const uint32 diff)
for (TargetSpellList::const_iterator itr = targetSpellStore.begin(); itr != targetSpellStore.end(); ++itr)
delete itr->second;
}
+
+ // Update speed as needed to prevent dropping too far behind and despawning
+ me->UpdateSpeed(MOVE_RUN, true);
+ me->UpdateSpeed(MOVE_WALK, true);
+ me->UpdateSpeed(MOVE_FLIGHT, true);
+
}
void PetAI::UpdateAllies()
diff --git a/src/server/game/AI/EventAI/CreatureEventAI.cpp b/src/server/game/AI/EventAI/CreatureEventAI.cpp
index f1a1b8824c7..7172a187504 100644
--- a/src/server/game/AI/EventAI/CreatureEventAI.cpp
+++ b/src/server/game/AI/EventAI/CreatureEventAI.cpp
@@ -746,15 +746,12 @@ void CreatureEventAI::ProcessAction(CreatureEventAI_Action const& action, uint32
break;
case ACTION_T_SUMMON_GO:
{
- GameObject* object = NULL;
-
float x, y, z;
me->GetPosition(x, y, z);
- object = me->SummonGameObject(action.raw.param1, x, y, z, 0, 0, 0, 0, 0, action.raw.param2);
+ GameObject* object = me->SummonGameObject(action.raw.param1, x, y, z, 0, 0, 0, 0, 0, action.raw.param2);
if (!object)
- {
sLog->outError(LOG_FILTER_TSCR, "EventAI failed to spawn object %u. Spawn event %d is on creature %d", action.raw.param1, eventId, me->GetEntry());
- }
+
break;
}
case ACTION_T_SET_SHEATH:
diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp
index 4b147e080e2..e68c8c27194 100644
--- a/src/server/game/AI/SmartScripts/SmartScript.cpp
+++ b/src/server/game/AI/SmartScripts/SmartScript.cpp
@@ -2260,46 +2260,30 @@ ObjectList* SmartScript::GetTargets(SmartScriptHolder const& e, Unit* invoker /*
case SMART_TARGET_CREATURE_GUID:
{
Creature* target = NULL;
- if (e.target.unitGUID.entry)
+ if (!trigger && !GetBaseObject())
{
- uint64 guid = MAKE_NEW_GUID(e.target.unitGUID.guid, e.target.unitGUID.entry, HIGHGUID_UNIT);
- target = HashMapHolder<Creature>::Find(guid);
+ sLog->outError(LOG_FILTER_SQL, "SMART_TARGET_CREATURE_GUID can not be used without invoker");
+ break;
}
- else
- {
- if (!trigger && !GetBaseObject())
- {
- sLog->outError(LOG_FILTER_SQL, "SMART_TARGET_CREATURE_GUID can not be used without invoker and without entry");
- break;
- }
- target = FindCreatureNear(trigger ? trigger : GetBaseObject(), e.target.unitGUID.guid);
- }
+ target = FindCreatureNear(trigger ? trigger : GetBaseObject(), e.target.unitGUID.dbGuid);
- if (target)
+ if (target && (!e.target.unitGUID.entry || target->GetEntry() == e.target.unitGUID.entry))
l->push_back(target);
break;
}
case SMART_TARGET_GAMEOBJECT_GUID:
{
GameObject* target = NULL;
- if (e.target.unitGUID.entry)
+ if (!trigger && !GetBaseObject())
{
- uint64 guid = MAKE_NEW_GUID(e.target.goGUID.guid, e.target.goGUID.entry, HIGHGUID_GAMEOBJECT);
- target = HashMapHolder<GameObject>::Find(guid);
+ sLog->outError(LOG_FILTER_SQL, "SMART_TARGET_GAMEOBJECT_GUID can not be used without invoker");
+ break;
}
- else
- {
- if (!trigger && !GetBaseObject())
- {
- sLog->outError(LOG_FILTER_SQL, "SMART_TARGET_GAMEOBJECT_GUID can not be used without invoker and without entry");
- break;
- }
- target = FindGameObjectNear(trigger ? trigger : GetBaseObject(), e.target.goGUID.guid);
- }
+ target = FindGameObjectNear(trigger ? trigger : GetBaseObject(), e.target.goGUID.dbGuid);
- if (target)
+ if (target && (!e.target.goGUID.entry || target->GetEntry() == e.target.goGUID.entry))
l->push_back(target);
break;
}
diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.h b/src/server/game/AI/SmartScripts/SmartScriptMgr.h
index b6690e35944..c70e78d5395 100644
--- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h
+++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h
@@ -996,7 +996,7 @@ struct SmartTarget
struct
{
- uint32 guid;
+ uint32 dbGuid;
uint32 entry;
} unitGUID;
@@ -1031,7 +1031,7 @@ struct SmartTarget
struct
{
- uint32 guid;
+ uint32 dbGuid;
uint32 entry;
} goGUID;
diff --git a/src/server/game/Achievements/AchievementMgr.cpp b/src/server/game/Achievements/AchievementMgr.cpp
index 4caee8bfd6c..2fd55ac29ef 100644
--- a/src/server/game/Achievements/AchievementMgr.cpp
+++ b/src/server/game/Achievements/AchievementMgr.cpp
@@ -2032,8 +2032,6 @@ void AchievementMgr::RemoveTimedAchievement(AchievementCriteriaTimedTypes type,
void AchievementMgr::CompletedAchievement(AchievementEntry const* achievement)
{
- sLog->outInfo(LOG_FILTER_ACHIEVEMENTSYS, "AchievementMgr::CompletedAchievement(%u)", achievement->ID);
-
// disable for gamemasters with GM-mode enabled
if (m_player->isGameMaster())
return;
@@ -2041,6 +2039,9 @@ void AchievementMgr::CompletedAchievement(AchievementEntry const* achievement)
if (achievement->flags & ACHIEVEMENT_FLAG_COUNTER || HasAchieved(achievement->ID))
return;
+ sLog->outInfo(LOG_FILTER_ACHIEVEMENTSYS, "AchievementMgr::CompletedAchievement(%u). Player: %s (%u)",
+ achievement->ID, m_player->GetName().c_str(), m_player->GetGUIDLow());
+
SendAchievementEarned(achievement);
CompletedAchievementData& ca = m_completedAchievements[achievement->ID];
ca.date = time(NULL);
diff --git a/src/server/game/Addons/AddonMgr.h b/src/server/game/Addons/AddonMgr.h
index 5893b79165f..4d387fcfd4c 100644
--- a/src/server/game/Addons/AddonMgr.h
+++ b/src/server/game/Addons/AddonMgr.h
@@ -37,9 +37,8 @@ struct AddonInfo
struct SavedAddon
{
- SavedAddon(const std::string& name, uint32 crc)
+ SavedAddon(const std::string& name, uint32 crc) : Name(name)
{
- Name = name;
CRC = crc;
}
diff --git a/src/server/game/Battlefield/Battlefield.cpp b/src/server/game/Battlefield/Battlefield.cpp
index 837fa1039f3..32f71822737 100644
--- a/src/server/game/Battlefield/Battlefield.cpp
+++ b/src/server/game/Battlefield/Battlefield.cpp
@@ -41,6 +41,7 @@ Battlefield::Battlefield()
m_TypeId = 0;
m_BattleId = 0;
m_ZoneId = 0;
+ m_Map = NULL;
m_MapId = 0;
m_MaxPlayer = 0;
m_MinPlayer = 0;
diff --git a/src/server/game/Battlegrounds/ArenaTeam.cpp b/src/server/game/Battlegrounds/ArenaTeam.cpp
index 9a7d2e58bb0..1b0955fb670 100644
--- a/src/server/game/Battlegrounds/ArenaTeam.cpp
+++ b/src/server/game/Battlegrounds/ArenaTeam.cpp
@@ -337,7 +337,7 @@ void ArenaTeam::Disband(WorldSession* session)
// Broadcast update
if (session)
{
- BroadcastEvent(ERR_ARENA_TEAM_DISBANDED_S, 0, 2, session->GetPlayerName().c_str(), GetName(), "");
+ BroadcastEvent(ERR_ARENA_TEAM_DISBANDED_S, 0, 2, session->GetPlayerName(), GetName(), "");
if (Player* player = session->GetPlayer())
sLog->outDebug(LOG_FILTER_ARENAS, "Player: %s [GUID: %u] disbanded arena team type: %u [Id: %u].", player->GetName().c_str(), player->GetGUIDLow(), GetType(), GetId());
diff --git a/src/server/game/Battlegrounds/BattlegroundMgr.cpp b/src/server/game/Battlegrounds/BattlegroundMgr.cpp
index 6145ed3b6c2..71ac8cf8180 100644
--- a/src/server/game/Battlegrounds/BattlegroundMgr.cpp
+++ b/src/server/game/Battlegrounds/BattlegroundMgr.cpp
@@ -1135,9 +1135,8 @@ BattlegroundTypeId BattlegroundMgr::GetRandomBG(BattlegroundTypeId bgTypeId)
if (weight)
{
- uint32 selectedWeight = 0;
// Select a random value
- selectedWeight = urand(0, weight - 1);
+ uint32 selectedWeight = urand(0, weight - 1);
// Select the correct bg (if we have in DB A(10), B(20), C(10), D(15) --> [0---A---9|10---B---29|30---C---39|40---D---54])
weight = 0;
for (BattlegroundSelectionWeightMap::const_iterator it = selectionWeights.begin(); it != selectionWeights.end(); ++it)
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp
index 1082ad7df66..61c68bca121 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp
@@ -30,6 +30,7 @@
BattlegroundAB::BattlegroundAB()
{
+ m_IsInformedNearVictory = false;
m_BuffChange = true;
BgObjects.resize(BG_AB_OBJECT_MAX);
BgCreatures.resize(BG_AB_ALL_NODES_COUNT + 5);//+5 for aura triggers
diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp
index 508147cec9f..bf0fbb4199d 100644
--- a/src/server/game/Entities/GameObject/GameObject.cpp
+++ b/src/server/game/Entities/GameObject/GameObject.cpp
@@ -1098,11 +1098,7 @@ void GameObject::Use(Unit* user)
case GAMEOBJECT_TYPE_BUTTON: //1
//doors/buttons never really despawn, only reset to default state/flags
UseDoorOrButton(0, false, user);
-
- // activate script
- GetMap()->ScriptsStart(sGameObjectScripts, GetDBTableGUIDLow(), spellCaster, this);
return;
-
case GAMEOBJECT_TYPE_QUESTGIVER: //2
{
if (user->GetTypeId() != TYPEID_PLAYER)
diff --git a/src/server/game/Entities/Object/ObjectDefines.h b/src/server/game/Entities/Object/ObjectDefines.h
index 021e3d0aea5..d0b9819b0a3 100644
--- a/src/server/game/Entities/Object/ObjectDefines.h
+++ b/src/server/game/Entities/Object/ObjectDefines.h
@@ -34,7 +34,7 @@ enum HighGuid
HIGHGUID_DYNAMICOBJECT = 0xF100, // blizz F100
HIGHGUID_CORPSE = 0xF101, // blizz F100
HIGHGUID_MO_TRANSPORT = 0x1FC0, // blizz 1FC0 (for GAMEOBJECT_TYPE_MO_TRANSPORT)
- HIGHGUID_GROUP = 0x1F05
+ HIGHGUID_GROUP = 0x1F50
};
// used for creating values for respawn for example
@@ -198,15 +198,15 @@ uint32 GUID_HIPART(uint64 guid)
uint32 GUID_ENPART(uint64 x)
{
return IsGuidHaveEnPart(x)
- ? ((uint32)((x >> 32) & UI64LIT(0x00000000000FFFFF)))
+ ? (uint32)((x >> 24) & UI64LIT(0x0000000000FFFFFF))
: 0;
}
uint32 GUID_LOPART(uint64 x)
{
return IsGuidHaveEnPart(x)
- ? ((uint32)(x & UI64LIT(0x00000000FFFFFFFF)))
- : ((uint32)(x & UI64LIT(0x0000000000FFFFFF)));
+ ? (uint32)(x & UI64LIT(0x0000000000FFFFFF))
+ : (uint32)(x & UI64LIT(0x00000000FFFFFFFF));
}
bool IsGuidHaveEnPart(uint64 guid)
diff --git a/src/server/game/Entities/Pet/Pet.cpp b/src/server/game/Entities/Pet/Pet.cpp
index fcfd6523812..d11f6d94734 100644
--- a/src/server/game/Entities/Pet/Pet.cpp
+++ b/src/server/game/Entities/Pet/Pet.cpp
@@ -1775,8 +1775,7 @@ void Pet::resetTalentsForAllPetsOf(Player* owner, Pet* online_pet /*= NULL*/)
ss << id;
need_comma = true;
- }
- while (resultPets->NextRow());
+ } while (resultPets->NextRow());
ss << ") AND spell IN (";
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 801530eb9f1..e501471b688 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -16008,6 +16008,8 @@ void Player::ItemRemovedQuestCheck(uint32 entry, uint32 count)
void Player::KilledMonster(CreatureTemplate const* cInfo, uint64 guid)
{
+ ASSERT(cInfo);
+
if (cInfo->Entry)
KilledMonsterCredit(cInfo->Entry, guid);
@@ -16160,6 +16162,12 @@ void Player::CastedCreatureOrGO(uint32 entry, uint64 guid, uint32 spell_id)
if (reqTarget != entry) // if entry doesn't match, check for killcredits referenced in template
{
CreatureTemplate const* cinfo = sObjectMgr->GetCreatureTemplate(entry);
+ if (!cinfo)
+ {
+ sLog->outError(LOG_FILTER_PLAYER, "Player::CastedCreatureOrGO: GetCreatureTemplate failed for entry %u. Skipping.", entry);
+ continue;
+ }
+
for (uint8 k = 0; k < MAX_KILL_CREDIT; ++k)
if (cinfo->KillCredit[k] == reqTarget)
entry = cinfo->KillCredit[k];
diff --git a/src/server/game/Entities/Unit/StatSystem.cpp b/src/server/game/Entities/Unit/StatSystem.cpp
index 1bd7c1b217d..5cf0550905c 100644
--- a/src/server/game/Entities/Unit/StatSystem.cpp
+++ b/src/server/game/Entities/Unit/StatSystem.cpp
@@ -200,10 +200,9 @@ void Player::UpdateResistances(uint32 school)
void Player::UpdateArmor()
{
- float value = 0.0f;
UnitMods unitMod = UNIT_MOD_ARMOR;
- value = GetModifierValue(unitMod, BASE_VALUE); // base armor (from items)
+ float value = GetModifierValue(unitMod, BASE_VALUE); // base armor (from items)
value *= GetModifierValue(unitMod, BASE_PCT); // armor percent from items
value += GetStat(STAT_AGILITY) * 2.0f; // armor bonus from stats
value += GetModifierValue(unitMod, TOTAL_VALUE);
@@ -1091,10 +1090,9 @@ bool Guardian::UpdateStats(Stats stat)
case STAT_STRENGTH: mod = 0.7f; break; // Default Owner's Strength scale
default: break;
}
- // Ravenous Dead
- AuraEffect const* aurEff = NULL;
+
// Check just if owner has Ravenous Dead since it's effect is not an aura
- aurEff = owner->GetAuraEffect(SPELL_AURA_MOD_TOTAL_STAT_PERCENTAGE, SPELLFAMILY_DEATHKNIGHT, 3010, 0);
+ AuraEffect const* aurEff = owner->GetAuraEffect(SPELL_AURA_MOD_TOTAL_STAT_PERCENTAGE, SPELLFAMILY_DEATHKNIGHT, 3010, 0);
if (aurEff)
{
SpellInfo const* spellInfo = aurEff->GetSpellInfo(); // Then get the SpellProto and add the dummy effect value
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index b53b3a4c617..5d1ab9aa17a 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -12712,9 +12712,27 @@ void Unit::UpdateSpeed(UnitMoveType mtype, bool forced)
case MOVE_SWIM:
case MOVE_FLIGHT:
{
- // Set creature speed rate from CreatureInfo
+ // Set creature speed rate
if (GetTypeId() == TYPEID_UNIT)
- speed *= ToCreature()->GetCreatureTemplate()->speed_run; // at this point, MOVE_WALK is never reached
+ {
+ Unit* pOwner = GetCharmerOrOwner();
+ if (isPet() && !isInCombat() && pOwner) // Must check for owner or crash on "Tame Beast"
+ {
+ // For every yard over 5, increase speed by 0.01
+ // to help prevent pet from lagging behind and despawning
+ float dist = GetDistance(pOwner);
+ float base_rate = 1.00f; // base speed is 100% of owner speed
+
+ if (dist < 5)
+ dist = 5;
+
+ float mult = base_rate + ((dist - 5) * 0.01f);
+
+ speed *= pOwner->GetSpeedRate(mtype) * mult; // pets derive speed from owner when not in combat
+ }
+ else
+ speed *= ToCreature()->GetCreatureTemplate()->speed_run; // at this point, MOVE_WALK is never reached
+ }
// Normalize speed by 191 aura SPELL_AURA_USE_NORMAL_MOVEMENT_SPEED if need
// TODO: possible affect only on MOVE_RUN
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp
index 32c6ffeb153..b41b61904e6 100644
--- a/src/server/game/Globals/ObjectMgr.cpp
+++ b/src/server/game/Globals/ObjectMgr.cpp
@@ -50,7 +50,6 @@
#include "World.h"
ScriptMapMap sSpellScripts;
-ScriptMapMap sGameObjectScripts;
ScriptMapMap sEventScripts;
ScriptMapMap sWaypointScripts;
@@ -60,7 +59,6 @@ std::string GetScriptsTableNameByType(ScriptsType type)
switch (type)
{
case SCRIPTS_SPELL: res = "spell_scripts"; break;
- case SCRIPTS_GAMEOBJECT: res = "gameobject_scripts"; break;
case SCRIPTS_EVENT: res = "event_scripts"; break;
case SCRIPTS_WAYPOINT: res = "waypoint_scripts"; break;
default: break;
@@ -74,7 +72,6 @@ ScriptMapMap* GetScriptsMapByType(ScriptsType type)
switch (type)
{
case SCRIPTS_SPELL: res = &sSpellScripts; break;
- case SCRIPTS_GAMEOBJECT: res = &sGameObjectScripts; break;
case SCRIPTS_EVENT: res = &sEventScripts; break;
case SCRIPTS_WAYPOINT: res = &sWaypointScripts; break;
default: break;
@@ -118,7 +115,7 @@ std::string GetScriptCommandName(ScriptCommands command)
default:
{
char sz[32];
- sprintf(sz, "Unknown command: %u", command);
+ sprintf(sz, "Unknown command: %d", command);
res = sz;
break;
}
@@ -4667,18 +4664,6 @@ void ObjectMgr::LoadScripts(ScriptsType type)
sLog->outInfo(LOG_FILTER_SERVER_LOADING, ">> Loaded %u script definitions in %u ms", count, GetMSTimeDiffToNow(oldMSTime));
}
-void ObjectMgr::LoadGameObjectScripts()
-{
- LoadScripts(SCRIPTS_GAMEOBJECT);
-
- // check ids
- for (ScriptMapMap::const_iterator itr = sGameObjectScripts.begin(); itr != sGameObjectScripts.end(); ++itr)
- {
- if (!GetGOData(itr->first))
- sLog->outError(LOG_FILTER_SQL, "Table `gameobject_scripts` has not existing gameobject (GUID: %u) as script id", itr->first);
- }
-}
-
void ObjectMgr::LoadSpellScripts()
{
LoadScripts(SCRIPTS_SPELL);
diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h
index 620a265ca1e..9339684964c 100644
--- a/src/server/game/Globals/ObjectMgr.h
+++ b/src/server/game/Globals/ObjectMgr.h
@@ -128,7 +128,6 @@ enum ScriptsType
SCRIPTS_FIRST = 1,
SCRIPTS_SPELL = SCRIPTS_FIRST,
- SCRIPTS_GAMEOBJECT,
SCRIPTS_EVENT,
SCRIPTS_WAYPOINT,
@@ -361,7 +360,6 @@ typedef std::map<uint32, ScriptMap > ScriptMapMap;
typedef std::multimap<uint32, uint32> SpellScriptsContainer;
typedef std::pair<SpellScriptsContainer::iterator, SpellScriptsContainer::iterator> SpellScriptsBounds;
extern ScriptMapMap sSpellScripts;
-extern ScriptMapMap sGameObjectScripts;
extern ScriptMapMap sEventScripts;
extern ScriptMapMap sWaypointScripts;
@@ -863,7 +861,6 @@ class ObjectMgr
return _creatureQuestInvolvedRelations.equal_range(creature_entry);
}
- void LoadGameObjectScripts();
void LoadEventScripts();
void LoadSpellScripts();
void LoadWaypointScripts();
diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp
index 886303c9b9c..d8e50be11f0 100644
--- a/src/server/game/Handlers/CharacterHandler.cpp
+++ b/src/server/game/Handlers/CharacterHandler.cpp
@@ -67,9 +67,8 @@ bool LoginQueryHolder::Initialize()
bool res = true;
uint32 lowGuid = GUID_LOPART(m_guid);
- PreparedStatement* stmt = NULL;
- stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER);
+ PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER);
stmt->setUInt32(0, lowGuid);
res &= SetPreparedQuery(PLAYER_LOGIN_QUERY_LOAD_FROM, stmt);
diff --git a/src/server/game/Loot/LootMgr.cpp b/src/server/game/Loot/LootMgr.cpp
index b1db7f6563f..a64e8117ce9 100644
--- a/src/server/game/Loot/LootMgr.cpp
+++ b/src/server/game/Loot/LootMgr.cpp
@@ -664,7 +664,7 @@ void Loot::DeleteLootItemFromContainerItemDB(uint32 itemID)
CharacterDatabase.Execute(stmt);
// Mark the item looted to prevent resaving
- for (LootItemList::iterator _itr = items.begin(); _itr != items.end(); _itr++)
+ for (LootItemList::iterator _itr = items.begin(); _itr != items.end(); ++_itr)
{
if (_itr->itemid != itemID)
continue;
diff --git a/src/server/game/Maps/MapManager.cpp b/src/server/game/Maps/MapManager.cpp
index a7b7e4044b8..755d443091a 100644
--- a/src/server/game/Maps/MapManager.cpp
+++ b/src/server/game/Maps/MapManager.cpp
@@ -179,6 +179,7 @@ bool MapManager::CanPlayerEnter(uint32 mapid, Player* player, bool loginCheck)
else // attempt to downscale
mapDiff = GetDownscaledMapDifficultyData(entry->MapID, targetDifficulty);
}
+ // FIXME: mapDiff is never used
//Bypass checks for GMs
if (player->isGameMaster())
diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h
index cdcacc86d3c..05696694033 100644
--- a/src/server/game/Miscellaneous/SharedDefines.h
+++ b/src/server/game/Miscellaneous/SharedDefines.h
@@ -789,7 +789,7 @@ enum SpellEffects
SPELL_EFFECT_APPLY_AREA_AURA_FRIEND = 128,
SPELL_EFFECT_APPLY_AREA_AURA_ENEMY = 129,
SPELL_EFFECT_REDIRECT_THREAT = 130,
- SPELL_EFFECT_131 = 131,
+ SPELL_EFFECT_PLAY_SOUND = 131,
SPELL_EFFECT_PLAY_MUSIC = 132,
SPELL_EFFECT_UNLEARN_SPECIALIZATION = 133,
SPELL_EFFECT_KILL_CREDIT2 = 134,
diff --git a/src/server/game/Movement/Spline/MoveSplineInit.cpp b/src/server/game/Movement/Spline/MoveSplineInit.cpp
index df0b3e3944f..b327d0d0cd6 100644
--- a/src/server/game/Movement/Spline/MoveSplineInit.cpp
+++ b/src/server/game/Movement/Spline/MoveSplineInit.cpp
@@ -162,9 +162,11 @@ namespace Movement
{
if (_transformForTransport)
{
- float unused = 0.0f;
if (TransportBase* transport = _owner.GetDirectTransport())
+ {
+ float unused = 0.0f; // need reference
transport->CalculatePassengerOffset(input.x, input.y, input.z, unused);
+ }
}
return input;
diff --git a/src/server/game/Scripting/ScriptLoader.cpp b/src/server/game/Scripting/ScriptLoader.cpp
index d1f4162ee7a..479979f177f 100644
--- a/src/server/game/Scripting/ScriptLoader.cpp
+++ b/src/server/game/Scripting/ScriptLoader.cpp
@@ -192,6 +192,7 @@ void AddSC_boss_lorekeeperpolkelt();
void AddSC_boss_rasfrost();
void AddSC_boss_theravenian();
void AddSC_boss_vectus();
+void AddSC_boss_kirtonos_the_herald();
void AddSC_instance_scholomance();
void AddSC_shadowfang_keep(); //Shadowfang keep
void AddSC_instance_shadowfang_keep();
@@ -826,6 +827,7 @@ void AddEasternKingdomsScripts()
AddSC_boss_rasfrost();
AddSC_boss_theravenian();
AddSC_boss_vectus();
+ AddSC_boss_kirtonos_the_herald();
AddSC_instance_scholomance();
AddSC_shadowfang_keep(); //Shadowfang keep
AddSC_instance_shadowfang_keep();
diff --git a/src/server/game/Server/WorldSocketMgr.cpp b/src/server/game/Server/WorldSocketMgr.cpp
index 7876ad2cb66..15025bf893d 100644
--- a/src/server/game/Server/WorldSocketMgr.cpp
+++ b/src/server/game/Server/WorldSocketMgr.cpp
@@ -60,7 +60,7 @@ class ReactorRunnable : protected ACE_Task_Base
m_Connections(0),
m_ThreadId(-1)
{
- ACE_Reactor_Impl* imp = 0;
+ ACE_Reactor_Impl* imp;
#if defined (ACE_HAS_EVENT_POLL) || defined (ACE_HAS_DEV_POLL)
diff --git a/src/server/game/Spells/Spell.h b/src/server/game/Spells/Spell.h
index dc5e2bae990..1fe8affc407 100644
--- a/src/server/game/Spells/Spell.h
+++ b/src/server/game/Spells/Spell.h
@@ -333,7 +333,7 @@ class Spell
void EffectPlayMusic(SpellEffIndex effIndex);
void EffectSpecCount(SpellEffIndex effIndex);
void EffectActivateSpec(SpellEffIndex effIndex);
- void EffectPlayerNotification(SpellEffIndex effIndex);
+ void EffectPlaySound(SpellEffIndex effIndex);
void EffectRemoveAura(SpellEffIndex effIndex);
void EffectCastButtons(SpellEffIndex effIndex);
void EffectRechargeManaGem(SpellEffIndex effIndex);
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp
index fa5cec3db6a..8913cf2ac20 100644
--- a/src/server/game/Spells/SpellEffects.cpp
+++ b/src/server/game/Spells/SpellEffects.cpp
@@ -198,7 +198,7 @@ pEffect SpellEffects[TOTAL_SPELL_EFFECTS]=
&Spell::EffectApplyAreaAura, //128 SPELL_EFFECT_APPLY_AREA_AURA_FRIEND
&Spell::EffectApplyAreaAura, //129 SPELL_EFFECT_APPLY_AREA_AURA_ENEMY
&Spell::EffectRedirectThreat, //130 SPELL_EFFECT_REDIRECT_THREAT
- &Spell::EffectPlayerNotification, //131 SPELL_EFFECT_PLAYER_NOTIFICATION sound id in misc value (SoundEntries.dbc)
+ &Spell::EffectPlaySound, //131 SPELL_EFFECT_PLAY_SOUND sound id in misc value (SoundEntries.dbc)
&Spell::EffectPlayMusic, //132 SPELL_EFFECT_PLAY_MUSIC sound id in misc value (SoundEntries.dbc)
&Spell::EffectUnlearnSpecialization, //133 SPELL_EFFECT_UNLEARN_SPECIALIZATION unlearn profession specialization
&Spell::EffectKillCredit, //134 SPELL_EFFECT_KILL_CREDIT misc value is creature entry
@@ -2010,7 +2010,6 @@ void Spell::SendLoot(uint64 guid, LootType loottype)
case GAMEOBJECT_TYPE_DOOR:
case GAMEOBJECT_TYPE_BUTTON:
gameObjTarget->UseDoorOrButton(0, false, player);
- player->GetMap()->ScriptsStart(sGameObjectScripts, gameObjTarget->GetDBTableGUIDLow(), player, gameObjTarget);
return;
case GAMEOBJECT_TYPE_QUESTGIVER:
@@ -6141,7 +6140,7 @@ void Spell::EffectActivateSpec(SpellEffIndex /*effIndex*/)
unitTarget->ToPlayer()->ActivateSpec(damage-1); // damage is 1 or 2, spec is 0 or 1
}
-void Spell::EffectPlayerNotification(SpellEffIndex effIndex)
+void Spell::EffectPlaySound(SpellEffIndex effIndex)
{
if (effectHandleMode != SPELL_EFFECT_HANDLE_HIT_TARGET)
return;
@@ -6154,20 +6153,21 @@ void Spell::EffectPlayerNotification(SpellEffIndex effIndex)
case 58730: // Restricted Flight Area
case 58600: // Restricted Flight Area
unitTarget->ToPlayer()->GetSession()->SendNotification(LANG_ZONE_NOFLYZONE);
- unitTarget->PlayDirectSound(9417); // Fel Reaver sound
+ break;
+ default:
break;
}
- uint32 soundid = m_spellInfo->Effects[effIndex].MiscValue;
+ uint32 soundId = m_spellInfo->Effects[effIndex].MiscValue;
- if (!sSoundEntriesStore.LookupEntry(soundid))
+ if (!sSoundEntriesStore.LookupEntry(soundId))
{
- sLog->outError(LOG_FILTER_SPELLS_AURAS, "EffectPlayerNotification: Sound (Id: %u) not exist in spell %u.", soundid, m_spellInfo->Id);
+ sLog->outError(LOG_FILTER_SPELLS_AURAS, "EffectPlayerSound: Sound (Id: %u) not exist in spell %u.", soundId, m_spellInfo->Id);
return;
}
WorldPacket data(SMSG_PLAY_SOUND, 4);
- data << uint32(soundid);
+ data << uint32(soundId);
unitTarget->ToPlayer()->GetSession()->SendPacket(&data);
}
diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp
index be2d79d22b6..afbf85a0a13 100644
--- a/src/server/game/Spells/SpellInfo.cpp
+++ b/src/server/game/Spells/SpellInfo.cpp
@@ -684,7 +684,7 @@ SpellEffectInfo::StaticData SpellEffectInfo::_data[TOTAL_SPELL_EFFECTS] =
{EFFECT_IMPLICIT_TARGET_EXPLICIT, TARGET_OBJECT_TYPE_UNIT}, // 128 SPELL_EFFECT_APPLY_AREA_AURA_FRIEND
{EFFECT_IMPLICIT_TARGET_EXPLICIT, TARGET_OBJECT_TYPE_UNIT}, // 129 SPELL_EFFECT_APPLY_AREA_AURA_ENEMY
{EFFECT_IMPLICIT_TARGET_EXPLICIT, TARGET_OBJECT_TYPE_UNIT}, // 130 SPELL_EFFECT_REDIRECT_THREAT
- {EFFECT_IMPLICIT_TARGET_NONE, TARGET_OBJECT_TYPE_UNIT}, // 131 SPELL_EFFECT_131
+ {EFFECT_IMPLICIT_TARGET_NONE, TARGET_OBJECT_TYPE_UNIT}, // 131 SPELL_EFFECT_PLAY_SOUND
{EFFECT_IMPLICIT_TARGET_EXPLICIT, TARGET_OBJECT_TYPE_UNIT}, // 132 SPELL_EFFECT_PLAY_MUSIC
{EFFECT_IMPLICIT_TARGET_EXPLICIT, TARGET_OBJECT_TYPE_UNIT}, // 133 SPELL_EFFECT_UNLEARN_SPECIALIZATION
{EFFECT_IMPLICIT_TARGET_NONE, TARGET_OBJECT_TYPE_UNIT}, // 134 SPELL_EFFECT_KILL_CREDIT2
diff --git a/src/server/game/Warden/WardenWin.cpp b/src/server/game/Warden/WardenWin.cpp
index ed7a10b8cb0..bff12280d89 100644
--- a/src/server/game/Warden/WardenWin.cpp
+++ b/src/server/game/Warden/WardenWin.cpp
@@ -453,8 +453,8 @@ void WardenWin::HandleData(ByteBuffer &buff)
if (luaStrLen != 0)
{
char *str = new char[luaStrLen + 1];
- memset(str, 0, luaStrLen + 1);
memcpy(str, buff.contents() + buff.rpos(), luaStrLen);
+ str[luaStrLen] = '\0'; // null terminator
sLog->outDebug(LOG_FILTER_WARDEN, "Lua string: %s", str);
delete[] str;
}
diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp
index 855d576a2dd..38faf4de22f 100644
--- a/src/server/game/World/World.cpp
+++ b/src/server/game/World/World.cpp
@@ -1648,7 +1648,6 @@ void World::SetInitialWorldSettings()
///- Load and initialize scripts
sObjectMgr->LoadSpellScripts(); // must be after load Creature/Gameobject(Template/Data)
- sObjectMgr->LoadGameObjectScripts(); // must be after load Creature/Gameobject(Template/Data)
sObjectMgr->LoadEventScripts(); // must be after load Creature/Gameobject(Template/Data)
sObjectMgr->LoadWaypointScripts();
diff --git a/src/server/scripts/Commands/cs_lookup.cpp b/src/server/scripts/Commands/cs_lookup.cpp
index 3395047c720..2130e61cb47 100644
--- a/src/server/scripts/Commands/cs_lookup.cpp
+++ b/src/server/scripts/Commands/cs_lookup.cpp
@@ -1033,7 +1033,7 @@ public:
found = true;
}
}
-
+
if (!found)
handler->SendSysMessage(LANG_COMMAND_NOSPELLFOUND);
diff --git a/src/server/scripts/Commands/cs_reload.cpp b/src/server/scripts/Commands/cs_reload.cpp
index ef1fc681a31..43c2001fbf7 100644
--- a/src/server/scripts/Commands/cs_reload.cpp
+++ b/src/server/scripts/Commands/cs_reload.cpp
@@ -97,7 +97,6 @@ public:
{ "gameobject_involvedrelation", SEC_ADMINISTRATOR, true, &HandleReloadGOQuestInvRelationsCommand, "", NULL },
{ "gameobject_loot_template", SEC_ADMINISTRATOR, true, &HandleReloadLootTemplatesGameobjectCommand, "", NULL },
{ "gameobject_questrelation", SEC_ADMINISTRATOR, true, &HandleReloadGOQuestRelationsCommand, "", NULL },
- { "gameobject_scripts", SEC_ADMINISTRATOR, true, &HandleReloadGameObjectScriptsCommand, "", NULL },
{ "gm_tickets", SEC_ADMINISTRATOR, true, &HandleReloadGMTicketsCommand, "", NULL },
{ "gossip_menu", SEC_ADMINISTRATOR, true, &HandleReloadGossipMenuCommand, "", NULL },
{ "gossip_menu_option", SEC_ADMINISTRATOR, true, &HandleReloadGossipMenuOptionCommand, "", NULL },
@@ -260,7 +259,6 @@ public:
}
sLog->outInfo(LOG_FILTER_GENERAL, "Re-Loading Scripts...");
- HandleReloadGameObjectScriptsCommand(handler, "a");
HandleReloadEventScriptsCommand(handler, "a");
HandleReloadSpellScriptsCommand(handler, "a");
handler->SendGlobalGMSysMessage("DB tables `*_scripts` reloaded.");
@@ -951,26 +949,6 @@ public:
return true;
}
- static bool HandleReloadGameObjectScriptsCommand(ChatHandler* handler, const char* args)
- {
- if (sScriptMgr->IsScriptScheduled())
- {
- handler->SendSysMessage("DB scripts used currently, please attempt reload later.");
- handler->SetSentErrorMessage(true);
- return false;
- }
-
- if (*args != 'a')
- sLog->outInfo(LOG_FILTER_GENERAL, "Re-Loading Scripts from `gameobject_scripts`...");
-
- sObjectMgr->LoadGameObjectScripts();
-
- if (*args != 'a')
- handler->SendGlobalGMSysMessage("DB table `gameobject_scripts` reloaded.");
-
- return true;
- }
-
static bool HandleReloadEventScriptsCommand(ChatHandler* handler, const char* args)
{
if (sScriptMgr->IsScriptScheduled())
diff --git a/src/server/scripts/EasternKingdoms/CMakeLists.txt b/src/server/scripts/EasternKingdoms/CMakeLists.txt
index 15faf9dfb83..f581baa31fa 100644
--- a/src/server/scripts/EasternKingdoms/CMakeLists.txt
+++ b/src/server/scripts/EasternKingdoms/CMakeLists.txt
@@ -31,6 +31,7 @@ set(scripts_STAT_SRCS
EasternKingdoms/Scholomance/instance_scholomance.cpp
EasternKingdoms/Scholomance/boss_lorekeeper_polkelt.cpp
EasternKingdoms/Scholomance/boss_ras_frostwhisper.cpp
+ EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp
EasternKingdoms/zone_isle_of_queldanas.cpp
EasternKingdoms/boss_kruul.cpp
EasternKingdoms/ZulGurub/boss_hakkar.cpp
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp
new file mode 100644
index 00000000000..091c9fd1f91
--- /dev/null
+++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp
@@ -0,0 +1,331 @@
+/*
+ * Copyright (C) 2008-2013 TrinityCore <http://www.trinitycore.org/>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "ScriptMgr.h"
+#include "ScriptedCreature.h"
+#include "scholomance.h"
+#include "MoveSplineInit.h"
+#include "GameObjectAI.h"
+#include "Player.h"
+
+enum Says
+{
+ EMOTE_SUMMONED = 0
+};
+
+enum Spells
+{
+ SPELL_SWOOP = 18144,
+ SPELL_WING_FLAP = 12882,
+ SPELL_PIERCE_ARMOR = 6016,
+ SPELL_DISARM = 8379,
+
+ SPELL_KIRTONOS_TRANSFORM = 16467,
+
+ SPELL_SHADOW_BOLT = 17228,
+ SPELL_CURSE_OF_TONGUES = 12889,
+ SPELL_DONINATE_MIND = 14515
+};
+
+enum Events
+{
+ INTRO_1 = 1,
+ INTRO_2 = 2,
+ INTRO_3 = 3,
+ INTRO_4 = 4,
+ INTRO_5 = 5,
+ INTRO_6 = 6,
+ EVENT_SWOOP = 7,
+ EVENT_WING_FLAP = 8,
+ EVENT_PIERCE_ARMOR = 9,
+ EVENT_DISARM = 10,
+ EVENT_SHADOW_BOLT = 11,
+ EVENT_CURSE_OF_TONGUES = 12,
+ EVENT_DONINATE_MIND = 13,
+ EVENT_KIRTONOS_TRANSFORM = 14
+};
+
+enum Points
+{
+ MAX_KIRTONOS_WAYPOINTS_INTRO = 14,
+ POINT_KIRTONOS_LAND = 14
+};
+
+enum Misc
+{
+ WEAPON_KIRTONOS_STAFF = 11365
+};
+
+Position const kirtonosIntroWaypoint[MAX_KIRTONOS_WAYPOINTS_INTRO] =
+{
+ {316.7087f, 71.26834f, 104.5843f, 0.0f},
+ {321.1605f, 72.80973f, 104.6676f, 0.0f},
+ {332.3713f, 77.98991f, 105.8621f, 0.0f},
+ {333.3254f, 86.60159f, 106.6399f, 0.0f},
+ {334.1263f, 101.6836f, 106.8343f, 0.0f},
+ {331.0458f, 114.5935f, 106.3621f, 0.0f},
+ {329.5439f, 126.7019f, 106.1399f, 0.0f},
+ {335.2471f, 136.5460f, 105.7232f, 0.0f},
+ {343.2100f, 139.9459f, 107.6399f, 0.0f},
+ {364.3288f, 140.9012f, 109.9454f, 0.0f},
+ {362.6760f, 115.6384f, 110.3065f, 0.0f},
+ {341.7896f, 91.94390f, 107.1676f, 0.0f},
+ {313.4945f, 93.45945f, 104.0565f, 0.0f},
+ {306.3839f, 93.61675f, 104.0565f, 0.0f},
+};
+
+class boss_kirtonos_the_herald : public CreatureScript
+{
+ public: boss_kirtonos_the_herald() : CreatureScript("boss_kirtonos_the_herald") { }
+
+ struct boss_kirtonos_the_heraldAI : public BossAI
+ {
+ boss_kirtonos_the_heraldAI(Creature* creature) : BossAI(creature, TYPE_KIRTONOS) { }
+
+ void Reset()
+ {
+ _introEvent = 0;
+ _introTimer = 0;
+ _Reset();
+ }
+
+ void EnterCombat(Unit* /*who*/)
+ {
+ _introTimer = 0;
+ _introEvent = 0;
+ events.ScheduleEvent(EVENT_SWOOP, urand(8000, 8000));
+ events.ScheduleEvent(EVENT_WING_FLAP, urand(15000, 15000));
+ events.ScheduleEvent(EVENT_PIERCE_ARMOR, urand(18000, 18000));
+ events.ScheduleEvent(EVENT_DISARM, urand(22000, 22000));
+ events.ScheduleEvent(EVENT_SHADOW_BOLT, urand(42000, 42000));
+ events.ScheduleEvent(EVENT_CURSE_OF_TONGUES, urand(53000, 53000));
+ events.ScheduleEvent(EVENT_DONINATE_MIND, urand(34000, 48000));
+ events.ScheduleEvent(EVENT_KIRTONOS_TRANSFORM, urand(20000, 20000));
+ _EnterCombat();
+ }
+
+ void JustDied(Unit* /*killer*/)
+ {
+ if (GameObject* gate = me->GetMap()->GetGameObject(instance->GetData64(GO_GATE_KIRTONOS)))
+ gate->SetGoState(GO_STATE_ACTIVE);
+ if (GameObject* brazier = me->GetMap()->GetGameObject(instance->GetData64(GO_BRAZIER_OF_THE_HERALD)))
+ {
+ brazier->ResetDoorOrButton();
+ brazier->SetGoState(GO_STATE_READY);
+ }
+ _JustDied();
+ }
+
+ void EnterEvadeMode()
+ {
+ if (GameObject* gate = me->GetMap()->GetGameObject(instance->GetData64(GO_GATE_KIRTONOS)))
+ gate->SetGoState(GO_STATE_ACTIVE);
+ if (GameObject* brazier = me->GetMap()->GetGameObject(instance->GetData64(GO_BRAZIER_OF_THE_HERALD)))
+ {
+ brazier->ResetDoorOrButton();
+ brazier->SetGoState(GO_STATE_READY);
+ }
+ me->DespawnOrUnsummon(5000);
+ }
+
+ void DamageTaken(Unit* /*killer*/, uint32 &damage)
+ {
+
+ }
+
+ void IsSummonedBy(Unit* summoner)
+ {
+ me->SetDisableGravity(true);
+ me->SetReactState(REACT_PASSIVE);
+ me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE|UNIT_FLAG_NOT_SELECTABLE);
+ _introEvent = INTRO_1;
+ _introTimer = 1;
+ _currentPoint = 0;
+ Talk(EMOTE_SUMMONED);
+ }
+
+ void JustSummoned(Creature* summon)
+ {
+ BossAI::JustSummoned(summon);
+ }
+
+ void MovementInform(uint32 movementType, uint32 pointId)
+ {
+ if (movementType != POINT_MOTION_TYPE)
+ return;
+
+ _currentPoint = pointId + 1;
+ }
+
+ void UpdateAI(uint32 const diff)
+ {
+ if (_introEvent)
+ {
+ if (_introTimer <= diff)
+ {
+ switch (_introEvent)
+ {
+ case INTRO_1:
+ if (_currentPoint < POINT_KIRTONOS_LAND)
+ me->GetMotionMaster()->MovePoint(_currentPoint, kirtonosIntroWaypoint[_currentPoint]);
+ else
+ {
+ _introTimer = 1000;
+ _introEvent = INTRO_2;
+ }
+ break;
+ case INTRO_2:
+ me->SetWalk(true);
+ me->GetMotionMaster()->MovePoint(0, 299.4884f, 92.76137f, 105.6335f);
+ _introTimer = 1000;
+ _introEvent = INTRO_3;
+ break;
+ case INTRO_3:
+ if (GameObject* gate = me->GetMap()->GetGameObject(instance->GetData64(GO_GATE_KIRTONOS)))
+ gate->SetGoState(GO_STATE_READY);
+ me->SetFacingTo(0.01745329f);
+ _introTimer = 3000;
+ _introEvent = INTRO_4;
+ break;
+ case INTRO_4:
+ if (GameObject* brazier = me->GetMap()->GetGameObject(instance->GetData64(GO_BRAZIER_OF_THE_HERALD)))
+ brazier->SetGoState(GO_STATE_READY);
+ me->SetDisableGravity(false);
+ DoCast(me, SPELL_KIRTONOS_TRANSFORM);
+ _introTimer = 1000;
+ _introEvent = INTRO_5;
+ break;
+ case INTRO_5:
+ me->HandleEmoteCommand(EMOTE_ONESHOT_ROAR);
+ me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 0, uint32(WEAPON_KIRTONOS_STAFF));
+ me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE|UNIT_FLAG_NOT_SELECTABLE);
+ me->SetReactState(REACT_AGGRESSIVE);
+ _introTimer = 5000;
+ _introEvent = INTRO_6;
+ case INTRO_6:
+ me->GetMotionMaster()->MovePoint(0, 314.8673f, 90.3021f, 101.6459f);
+ _introTimer = 0;
+ _introEvent = 0;
+ break;
+ }
+ }
+ else
+ _introTimer -= diff;
+ }
+
+ if (!UpdateVictim())
+ return;
+
+ events.Update(diff);
+
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
+
+ while (uint32 eventId = events.ExecuteEvent())
+ {
+ switch (eventId)
+ {
+ case EVENT_SWOOP:
+ DoCast(me, SPELL_SWOOP);
+ events.ScheduleEvent(EVENT_SWOOP, urand(15000, 15000));
+ break;
+ case EVENT_WING_FLAP:
+ DoCast(me, SPELL_WING_FLAP);
+ events.ScheduleEvent(EVENT_WING_FLAP, urand(13000, 13000));
+ break;
+ case EVENT_PIERCE_ARMOR:
+ DoCastVictim(SPELL_PIERCE_ARMOR, true);
+ events.ScheduleEvent(EVENT_PIERCE_ARMOR, urand(12000, 12000));
+ break;
+ case EVENT_DISARM:
+ DoCastVictim(SPELL_DISARM, true);
+ events.ScheduleEvent(EVENT_DISARM, urand(11000, 11000));
+ break;
+ case EVENT_SHADOW_BOLT:
+ DoCastVictim(SPELL_SHADOW_BOLT, true);
+ events.ScheduleEvent(EVENT_SHADOW_BOLT, urand(42000, 42000));
+ break;
+ case EVENT_CURSE_OF_TONGUES:
+ DoCastVictim(SPELL_CURSE_OF_TONGUES, true);
+ events.ScheduleEvent(EVENT_CURSE_OF_TONGUES, urand(35000, 35000));
+ break;
+ case EVENT_DONINATE_MIND:
+ DoCastVictim(SPELL_DONINATE_MIND, true);
+ events.ScheduleEvent(EVENT_DONINATE_MIND, urand(44000, 48000));
+ break;
+ case EVENT_KIRTONOS_TRANSFORM:
+ if (me->HasAura(SPELL_KIRTONOS_TRANSFORM))
+ {
+ me->RemoveAura(SPELL_KIRTONOS_TRANSFORM);
+ me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 0, uint32(0));
+ }
+ else
+ {
+ DoCast(me, SPELL_KIRTONOS_TRANSFORM);
+ me->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + 0, uint32(WEAPON_KIRTONOS_STAFF));
+ }
+ events.ScheduleEvent(EVENT_KIRTONOS_TRANSFORM, urand(16000, 18000));
+ break;
+ default:
+ break;
+ }
+ }
+
+ DoMeleeAttackIfReady();
+ }
+
+ private:
+ uint8 _introEvent;
+ uint32 _introTimer;
+ uint32 _currentPoint;
+ };
+
+ CreatureAI* GetAI(Creature* creature) const
+ {
+ return new boss_kirtonos_the_heraldAI(creature);
+ }
+};
+
+/*######
+## go_brazier_of_the_herald
+######*/
+
+enum Brazier_Of_The_Herald
+{
+ NPC_KIRTONOS = 10506,
+ SOUND_SCREECH = 557
+};
+
+class go_brazier_of_the_herald : public GameObjectScript
+{
+public:
+ go_brazier_of_the_herald() : GameObjectScript("go_brazier_of_the_herald") { }
+
+ bool OnGossipHello(Player* player, GameObject* go)
+ {
+ go->UseDoorOrButton();
+ go->PlayDirectSound(SOUND_SCREECH,0);
+ player->SummonCreature(NPC_KIRTONOS, 315.028f, 70.53845f, 102.1496f, 0.3859715f, TEMPSUMMON_DEAD_DESPAWN, 900000);
+ return true;
+ }
+};
+
+void AddSC_boss_kirtonos_the_herald()
+{
+ new boss_kirtonos_the_herald();
+ new go_brazier_of_the_herald;
+}
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/instance_scholomance.cpp b/src/server/scripts/EasternKingdoms/Scholomance/instance_scholomance.cpp
index 583b9074433..fc966c4bbb9 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/instance_scholomance.cpp
+++ b/src/server/scripts/EasternKingdoms/Scholomance/instance_scholomance.cpp
@@ -27,17 +27,6 @@ EndScriptData */
#include "InstanceScript.h"
#include "scholomance.h"
-#define GO_GATE_KIRTONOS 175570
-#define GO_GATE_GANDLING 177374
-#define GO_GATE_MALICIA 177375
-#define GO_GATE_THEOLEN 177377
-#define GO_GATE_POLKELT 177376
-#define GO_GATE_RAVENIAN 177372
-#define GO_GATE_BAROV 177373
-#define GO_GATE_ILLUCIA 177371
-
-#define MAX_ENCOUNTER 2
-
class instance_scholomance : public InstanceMapScript
{
public:
@@ -64,6 +53,7 @@ public:
uint64 GateRavenianGUID;
uint64 GateBarovGUID;
uint64 GateIlluciaGUID;
+ uint64 BrazierOfTheHeraldGUID;
void Initialize()
{
@@ -77,6 +67,7 @@ public:
GateRavenianGUID = 0;
GateBarovGUID = 0;
GateIlluciaGUID = 0;
+ BrazierOfTheHeraldGUID = 0;
for (uint8 i = 0; i < 6; ++i)
IsBossDied[i] = false;
@@ -86,14 +77,15 @@ public:
{
switch (go->GetEntry())
{
- case GO_GATE_KIRTONOS: GateKirtonosGUID = go->GetGUID(); break;
- case GO_GATE_GANDLING: GateGandlingGUID = go->GetGUID(); break;
- case GO_GATE_MALICIA: GateMiliciaGUID = go->GetGUID(); break;
- case GO_GATE_THEOLEN: GateTheolenGUID = go->GetGUID(); break;
- case GO_GATE_POLKELT: GatePolkeltGUID = go->GetGUID(); break;
- case GO_GATE_RAVENIAN: GateRavenianGUID = go->GetGUID(); break;
- case GO_GATE_BAROV: GateBarovGUID = go->GetGUID(); break;
- case GO_GATE_ILLUCIA: GateIlluciaGUID = go->GetGUID(); break;
+ case GO_GATE_KIRTONOS: GateKirtonosGUID = go->GetGUID(); break;
+ case GO_GATE_GANDLING: GateGandlingGUID = go->GetGUID(); break;
+ case GO_GATE_MALICIA: GateMiliciaGUID = go->GetGUID(); break;
+ case GO_GATE_THEOLEN: GateTheolenGUID = go->GetGUID(); break;
+ case GO_GATE_POLKELT: GatePolkeltGUID = go->GetGUID(); break;
+ case GO_GATE_RAVENIAN: GateRavenianGUID = go->GetGUID(); break;
+ case GO_GATE_BAROV: GateBarovGUID = go->GetGUID(); break;
+ case GO_GATE_ILLUCIA: GateIlluciaGUID = go->GetGUID(); break;
+ case GO_BRAZIER_OF_THE_HERALD: BrazierOfTheHeraldGUID = go->GetGUID(); break;
}
}
@@ -135,6 +127,19 @@ public:
IsBossDied[3] && IsBossDied[4] && IsBossDied[5])
? IN_PROGRESS : 0;
}
+
+ uint64 GetData64(uint32 type) const
+ {
+ switch (type)
+ {
+ case GO_GATE_KIRTONOS:
+ return GateKirtonosGUID;
+ case GO_BRAZIER_OF_THE_HERALD:
+ return BrazierOfTheHeraldGUID;
+ }
+
+ return 0;
+ }
};
};
diff --git a/src/server/scripts/EasternKingdoms/Scholomance/scholomance.h b/src/server/scripts/EasternKingdoms/Scholomance/scholomance.h
index bae7c8c8efc..20b782fd43a 100644
--- a/src/server/scripts/EasternKingdoms/Scholomance/scholomance.h
+++ b/src/server/scripts/EasternKingdoms/Scholomance/scholomance.h
@@ -19,13 +19,31 @@
#ifndef DEF_SCHOLOMANCE_H
#define DEF_SCHOLOMANCE_H
-#define TYPE_GANDLING 1
-#define DATA_DOCTORTHEOLENKRASTINOV_DEATH 2
-#define DATA_INSTRUCTORMALICIA_DEATH 3
-#define DATA_LADYILLUCIABAROV_DEATH 4
-#define DATA_LORDALEXEIBAROV_DEATH 5
-#define DATA_LOREKEEPERPOLKELT_DEATH 6
-#define DATA_THERAVENIAN_DEATH 7
-#define TYPE_KIRTONOS 8
-#endif
+uint32 const MAX_ENCOUNTER = 2;
+
+enum DataTypes
+{
+ TYPE_GANDLING = 1,
+ DATA_DOCTORTHEOLENKRASTINOV_DEATH = 2,
+ DATA_INSTRUCTORMALICIA_DEATH = 3,
+ DATA_LADYILLUCIABAROV_DEATH = 4,
+ DATA_LORDALEXEIBAROV_DEATH = 5,
+ DATA_LOREKEEPERPOLKELT_DEATH = 6,
+ DATA_THERAVENIAN_DEATH = 7,
+ TYPE_KIRTONOS = 8
+};
+enum GameobjectIds
+{
+ GO_GATE_KIRTONOS = 175570,
+ GO_GATE_GANDLING = 177374,
+ GO_GATE_MALICIA = 177375,
+ GO_GATE_THEOLEN = 177377,
+ GO_GATE_POLKELT = 177376,
+ GO_GATE_RAVENIAN = 177372,
+ GO_GATE_BAROV = 177373,
+ GO_GATE_ILLUCIA = 177371,
+ GO_BRAZIER_OF_THE_HERALD = 175564
+};
+
+#endif
diff --git a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp
index 25daff60761..952363c6dcf 100644
--- a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp
+++ b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp
@@ -153,13 +153,13 @@ enum Texts
SAY_KILLED_PLAYER_P_THREE = 12,
SAY_SPELL_CASTING_P_THREE = 13,
SAY_DEATH,
-
+
// Alexstrasza
SAY_ONE = 0,
SAY_TWO = 1,
SAY_THREE = 2,
SAY_FOUR = 3,
-
+
// Power Sparks
EMOTE_POWER_SPARK_SUMMONED = 0
};
diff --git a/src/server/shared/Dynamic/LinkedReference/Reference.h b/src/server/shared/Dynamic/LinkedReference/Reference.h
index c221753cfbf..4c3630b175d 100644
--- a/src/server/shared/Dynamic/LinkedReference/Reference.h
+++ b/src/server/shared/Dynamic/LinkedReference/Reference.h
@@ -20,7 +20,7 @@
#define _REFERENCE_H
#include "Dynamic/LinkedList.h"
-#include <assert.h>
+#include "Errors.h" // for ASSERT
//=====================================================
@@ -45,7 +45,7 @@ template <class TO, class FROM> class Reference : public LinkedListElement
// Create new link
void link(TO* toObj, FROM* fromObj)
{
- assert(fromObj); // fromObj MUST not be NULL
+ ASSERT(fromObj); // fromObj MUST not be NULL
if (isValid())
unlink();
if (toObj != NULL)
diff --git a/src/server/shared/Utilities/Util.cpp b/src/server/shared/Utilities/Util.cpp
index 50fbaa799c6..0d9314c48a3 100644
--- a/src/server/shared/Utilities/Util.cpp
+++ b/src/server/shared/Utilities/Util.cpp
@@ -20,6 +20,7 @@
#include "Common.h"
#include "utf8.h"
#include "SFMT.h"
+#include "Errors.h" // for ASSERT
#include <ace/TSS_T.h>
#include <ace/INET_Addr.h>
@@ -28,19 +29,19 @@ static SFMTRandTSS sfmtRand;
int32 irand(int32 min, int32 max)
{
- assert(max >= min);
+ ASSERT(max >= min);
return int32(sfmtRand->IRandom(min, max));
}
uint32 urand(uint32 min, uint32 max)
{
- assert(max >= min);
+ ASSERT(max >= min);
return sfmtRand->URandom(min, max);
}
float frand(float min, float max)
{
- assert(max >= min);
+ ASSERT(max >= min);
return float(sfmtRand->Random() * (max - min) + min);
}
diff --git a/src/server/worldserver/RemoteAccess/RARunnable.cpp b/src/server/worldserver/RemoteAccess/RARunnable.cpp
index e64e8d03115..8d57ef6c3b2 100644
--- a/src/server/worldserver/RemoteAccess/RARunnable.cpp
+++ b/src/server/worldserver/RemoteAccess/RARunnable.cpp
@@ -35,7 +35,7 @@
RARunnable::RARunnable()
{
- ACE_Reactor_Impl* imp = NULL;
+ ACE_Reactor_Impl* imp;
#if defined (ACE_HAS_EVENT_POLL) || defined (ACE_HAS_DEV_POLL)
imp = new ACE_Dev_Poll_Reactor();
diff --git a/src/tools/vmap4_extractor/model.cpp b/src/tools/vmap4_extractor/model.cpp
index 57f9b421dbe..c642f73ccae 100644
--- a/src/tools/vmap4_extractor/model.cpp
+++ b/src/tools/vmap4_extractor/model.cpp
@@ -77,8 +77,7 @@ bool Model::ConvertToVMAPModel(const char * outfilename)
return false;
}
fwrite(szRawVMAPMagic, 8, 1, output);
- uint32 nVertices = 0;
- nVertices = header.nBoundingVertices;
+ uint32 nVertices = header.nBoundingVertices;
fwrite(&nVertices, sizeof(int), 1, output);
uint32 nofgroups = 1;
fwrite(&nofgroups,sizeof(uint32), 1, output);
@@ -91,8 +90,7 @@ bool Model::ConvertToVMAPModel(const char * outfilename)
wsize = sizeof(branches) + sizeof(uint32) * branches;
fwrite(&wsize, sizeof(int), 1, output);
fwrite(&branches,sizeof(branches), 1, output);
- uint32 nIndexes = 0;
- nIndexes = header.nBoundingTriangles;
+ uint32 nIndexes = header.nBoundingTriangles;
fwrite(&nIndexes,sizeof(uint32), 1, output);
fwrite("INDX",4, 1, output);
wsize = sizeof(uint32) + sizeof(unsigned short) * nIndexes;