Merge commit '999a5ffa642c27dc3566664cf0e5b44dffafb1b7' into 4.3.4
Conflicts: sql/updates/world/2015_03_01_00_world.sql src/server/game/Server/WorldSocket.cpp src/server/scripts/Northrend/Nexus/Nexus/boss_commander_stoutbeard.cpp
This commit is contained in:
commit
67d616c195
26 files changed
+216
-243
No files matched your search
+7
-9
@@ -12,21 +12,19 @@
|
||||
# This is done EACH compile so they can be alerted about the consequences.
|
||||
|
||||
if(NOT BUILDDIR)
|
||||
# Workaround for funny MSVC behaviour - this segment only run during compile
|
||||
set(NO_GIT ${WITHOUT_GIT})
|
||||
set(GIT_EXEC ${GIT_EXECUTABLE})
|
||||
# Workaround for funny MSVC behaviour - this segment is only used when using cmake gui
|
||||
set(BUILDDIR ${CMAKE_BINARY_DIR})
|
||||
endif()
|
||||
|
||||
if(NO_GIT)
|
||||
if(WITHOUT_GIT)
|
||||
set(rev_date "1970-01-01 00:00:00 +0000")
|
||||
set(rev_hash "unknown")
|
||||
set(rev_branch "Archived")
|
||||
else()
|
||||
if(GIT_EXEC)
|
||||
if(GIT_EXECUTABLE)
|
||||
# Create a revision-string that we can use
|
||||
execute_process(
|
||||
COMMAND "${GIT_EXEC}" describe --match init --dirty=+ --abbrev=12
|
||||
COMMAND "${GIT_EXECUTABLE}" describe --match init --dirty=+ --abbrev=12
|
||||
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
|
||||
OUTPUT_VARIABLE rev_info
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
@@ -35,7 +33,7 @@ else()
|
||||
|
||||
# And grab the commits timestamp
|
||||
execute_process(
|
||||
COMMAND "${GIT_EXEC}" show -s --format=%ci
|
||||
COMMAND "${GIT_EXECUTABLE}" show -s --format=%ci
|
||||
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
|
||||
OUTPUT_VARIABLE rev_date
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
@@ -44,7 +42,7 @@ else()
|
||||
|
||||
# Also retrieve branch name
|
||||
execute_process(
|
||||
COMMAND "${GIT_EXEC}" rev-parse --abbrev-ref HEAD
|
||||
COMMAND "${GIT_EXECUTABLE}" rev-parse --abbrev-ref HEAD
|
||||
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
|
||||
OUTPUT_VARIABLE rev_branch
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
@@ -69,7 +67,7 @@ else()
|
||||
endif()
|
||||
|
||||
# Create the actual revision.h file from the above params
|
||||
if(NOT "${rev_hash_cached}" MATCHES "${rev_hash}" OR NOT "${rev_branch_cached}" MATCHES "${rev_branch}")
|
||||
if(NOT "${rev_hash_cached}" MATCHES "${rev_hash}" OR NOT "${rev_branch_cached}" MATCHES "${rev_branch}" OR NOT EXISTS "${BUILDDIR}/revision.h")
|
||||
configure_file(
|
||||
"${CMAKE_SOURCE_DIR}/revision.h.in.cmake"
|
||||
"${BUILDDIR}/revision.h"
|
||||
|
||||
@@ -94,6 +94,7 @@ find_path(MYSQL_INCLUDE_DIR
|
||||
"$ENV{ProgramFiles}/MySQL/*/include"
|
||||
"$ENV{SystemDrive}/MySQL/*/include"
|
||||
"c:/msys/local/include"
|
||||
"$ENV{MYSQL_ROOT}/include"
|
||||
DOC
|
||||
"Specify the directory containing mysql.h."
|
||||
)
|
||||
@@ -159,6 +160,7 @@ if( WIN32 )
|
||||
"$ENV{ProgramFiles}/MySQL/*/lib/opt"
|
||||
"$ENV{SystemDrive}/MySQL/*/lib/opt"
|
||||
"c:/msys/local/include"
|
||||
"$ENV{MYSQL_ROOT}/lib"
|
||||
DOC "Specify the location of the mysql library here."
|
||||
)
|
||||
endif( WIN32 )
|
||||
|
||||
@@ -10,6 +10,6 @@
|
||||
|
||||
# Need to pass old ${CMAKE_BINARY_DIR} as param because its different at build stage
|
||||
add_custom_target(revision.h ALL
|
||||
COMMAND ${CMAKE_COMMAND} -DNO_GIT=${WITHOUT_GIT} -DGIT_EXEC=${GIT_EXECUTABLE} -DBUILDDIR=${CMAKE_BINARY_DIR} -P ${CMAKE_SOURCE_DIR}/cmake/genrev.cmake
|
||||
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
||||
COMMAND "${CMAKE_COMMAND}" -DBUILDDIR="${CMAKE_BINARY_DIR}" -P "${CMAKE_SOURCE_DIR}/cmake/genrev.cmake" "${CMAKE_BINARY_DIR}"
|
||||
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
|
||||
)
|
||||
@@ -386,13 +386,12 @@ namespace VMAP
|
||||
{
|
||||
if (!iLoadedSpawns.count(referencedVal))
|
||||
{
|
||||
#ifdef VMAP_DEBUG
|
||||
if (referencedVal > iNTreeValues)
|
||||
{
|
||||
TC_LOG_DEBUG("maps", "StaticMapTree::LoadMapTile() : invalid tree element (%u/%u)", referencedVal, iNTreeValues);
|
||||
VMAP_ERROR_LOG("maps", "StaticMapTree::LoadMapTile() : invalid tree element (%u/%u) referenced in tile %s", referencedVal, iNTreeValues, tilefile.c_str());
|
||||
continue;
|
||||
}
|
||||
#endif
|
||||
|
||||
iTreeValues[referencedVal] = ModelInstance(spawn, model);
|
||||
iLoadedSpawns[referencedVal] = 1;
|
||||
}
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include "ByteBuffer.h"
|
||||
|
||||
#include <functional>
|
||||
#include <unordered_set>
|
||||
|
||||
enum TypeID
|
||||
{
|
||||
@@ -229,6 +230,7 @@ typedef std::set<ObjectGuid> GuidSet;
|
||||
typedef std::list<ObjectGuid> GuidList;
|
||||
typedef std::deque<ObjectGuid> GuidDeque;
|
||||
typedef std::vector<ObjectGuid> GuidVector;
|
||||
typedef std::unordered_set<ObjectGuid> GuidUnorderedSet;
|
||||
|
||||
// minimum buffer size for packed guid is 9 bytes
|
||||
#define PACKED_GUID_MIN_BUFFER_SIZE 9
|
||||
|
||||
@@ -23115,13 +23115,13 @@ bool Player::IsVisibleGloballyFor(Player const* u) const
|
||||
}
|
||||
|
||||
template<class T>
|
||||
inline void UpdateVisibilityOf_helper(GuidSet& s64, T* target, std::set<Unit*>& /*v*/)
|
||||
inline void UpdateVisibilityOf_helper(GuidUnorderedSet& s64, T* target, std::set<Unit*>& /*v*/)
|
||||
{
|
||||
s64.insert(target->GetGUID());
|
||||
}
|
||||
|
||||
template<>
|
||||
inline void UpdateVisibilityOf_helper(GuidSet& s64, GameObject* target, std::set<Unit*>& /*v*/)
|
||||
inline void UpdateVisibilityOf_helper(GuidUnorderedSet& s64, GameObject* target, std::set<Unit*>& /*v*/)
|
||||
{
|
||||
// @HACK: This is to prevent objects like deeprun tram from disappearing when player moves far from its spawn point while riding it
|
||||
// But exclude stoppable elevators from this hack - they would be teleporting from one end to another
|
||||
@@ -23132,14 +23132,14 @@ inline void UpdateVisibilityOf_helper(GuidSet& s64, GameObject* target, std::set
|
||||
}
|
||||
|
||||
template<>
|
||||
inline void UpdateVisibilityOf_helper(GuidSet& s64, Creature* target, std::set<Unit*>& v)
|
||||
inline void UpdateVisibilityOf_helper(GuidUnorderedSet& s64, Creature* target, std::set<Unit*>& v)
|
||||
{
|
||||
s64.insert(target->GetGUID());
|
||||
v.insert(target);
|
||||
}
|
||||
|
||||
template<>
|
||||
inline void UpdateVisibilityOf_helper(GuidSet& s64, Player* target, std::set<Unit*>& v)
|
||||
inline void UpdateVisibilityOf_helper(GuidUnorderedSet& s64, Player* target, std::set<Unit*>& v)
|
||||
{
|
||||
s64.insert(target->GetGUID());
|
||||
v.insert(target);
|
||||
@@ -23201,7 +23201,7 @@ void Player::UpdateTriggerVisibility()
|
||||
|
||||
UpdateData udata(GetMapId());
|
||||
WorldPacket packet;
|
||||
for (GuidSet::iterator itr = m_clientGUIDs.begin(); itr != m_clientGUIDs.end(); ++itr)
|
||||
for (auto itr = m_clientGUIDs.begin(); itr != m_clientGUIDs.end(); ++itr)
|
||||
{
|
||||
if (itr->IsCreature())
|
||||
{
|
||||
@@ -24262,7 +24262,7 @@ void Player::UpdateForQuestWorldObjects()
|
||||
|
||||
UpdateData udata(GetMapId());
|
||||
WorldPacket packet;
|
||||
for (GuidSet::iterator itr = m_clientGUIDs.begin(); itr != m_clientGUIDs.end(); ++itr)
|
||||
for (auto itr = m_clientGUIDs.begin(); itr != m_clientGUIDs.end(); ++itr)
|
||||
{
|
||||
if (itr->IsGameObject())
|
||||
{
|
||||
|
||||
@@ -2382,7 +2382,7 @@ class Player : public Unit, public GridObject<Player>
|
||||
WorldLocation GetStartPosition() const;
|
||||
|
||||
// currently visible objects at player client
|
||||
GuidSet m_clientGUIDs;
|
||||
GuidUnorderedSet m_clientGUIDs;
|
||||
|
||||
bool HaveAtClient(WorldObject const* u) const;
|
||||
|
||||
|
||||
@@ -65,7 +65,7 @@ void VisibleNotifier::SendToSelf()
|
||||
}
|
||||
}
|
||||
|
||||
for (GuidSet::const_iterator it = vis_guids.begin(); it != vis_guids.end(); ++it)
|
||||
for (auto it = vis_guids.begin(); it != vis_guids.end(); ++it)
|
||||
{
|
||||
i_player.m_clientGUIDs.erase(*it);
|
||||
i_data.AddOutOfRangeGUID(*it);
|
||||
|
||||
@@ -44,7 +44,7 @@ namespace Trinity
|
||||
Player &i_player;
|
||||
UpdateData i_data;
|
||||
std::set<Unit*> i_visibleNow;
|
||||
GuidSet vis_guids;
|
||||
GuidUnorderedSet vis_guids;
|
||||
|
||||
VisibleNotifier(Player &player) : i_player(player), i_data(player.GetMapId()), vis_guids(player.m_clientGUIDs) { }
|
||||
template<class T> void Visit(GridRefManager<T> &m);
|
||||
|
||||
@@ -656,7 +656,7 @@ void WorldSession::HandleQuestgiverStatusMultipleQuery(WorldPacket& /*recvPacket
|
||||
WorldPacket data(SMSG_QUESTGIVER_STATUS_MULTIPLE, 4 + 8 + 4);
|
||||
data << uint32(count); // placeholder
|
||||
|
||||
for (GuidSet::const_iterator itr = _player->m_clientGUIDs.begin(); itr != _player->m_clientGUIDs.end(); ++itr)
|
||||
for (auto itr = _player->m_clientGUIDs.begin(); itr != _player->m_clientGUIDs.end(); ++itr)
|
||||
{
|
||||
uint32 questStatus = DIALOG_STATUS_NONE;
|
||||
|
||||
|
||||
@@ -437,7 +437,8 @@ void AddSC_boss_heigan();
|
||||
void AddSC_boss_gothik();
|
||||
void AddSC_boss_thaddius();
|
||||
void AddSC_instance_naxxramas();
|
||||
void AddSC_boss_magus_telestra(); //The Nexus Nexus
|
||||
void AddSC_boss_nexus_commanders(); // The Nexus Nexus
|
||||
void AddSC_boss_magus_telestra();
|
||||
void AddSC_boss_anomalus();
|
||||
void AddSC_boss_ormorok();
|
||||
void AddSC_boss_keristrasza();
|
||||
@@ -1289,7 +1290,8 @@ void AddNorthrendScripts()
|
||||
AddSC_boss_gothik();
|
||||
AddSC_boss_thaddius();
|
||||
AddSC_instance_naxxramas();
|
||||
AddSC_boss_magus_telestra(); //The Nexus Nexus
|
||||
AddSC_boss_nexus_commanders(); // The Nexus Nexus
|
||||
AddSC_boss_magus_telestra();
|
||||
AddSC_boss_anomalus();
|
||||
AddSC_boss_ormorok();
|
||||
AddSC_boss_keristrasza();
|
||||
|
||||
@@ -164,14 +164,12 @@ bool WorldSocket::ReadDataHandler()
|
||||
|
||||
Opcodes opcode = Opcodes(header->cmd);
|
||||
|
||||
std::string opcodeName = GetOpcodeNameForLogging(opcode);
|
||||
|
||||
WorldPacket packet(opcode, std::move(_packetBuffer));
|
||||
|
||||
if (sPacketLog->CanLogPacket())
|
||||
sPacketLog->LogPacket(packet, CLIENT_TO_SERVER, GetRemoteIpAddress(), GetRemotePort());
|
||||
|
||||
TC_LOG_TRACE("network.opcode", "C->S: %s %s", (_worldSession ? _worldSession->GetPlayerInfo() : GetRemoteIpAddress().to_string()).c_str(), opcodeName.c_str());
|
||||
TC_LOG_TRACE("network.opcode", "C->S: %s %s", (_worldSession ? _worldSession->GetPlayerInfo() : GetRemoteIpAddress().to_string()).c_str(), GetOpcodeNameForLogging(opcode).c_str());
|
||||
|
||||
switch (opcode)
|
||||
{
|
||||
@@ -188,7 +186,7 @@ bool WorldSocket::ReadDataHandler()
|
||||
HandleAuthSession(packet);
|
||||
break;
|
||||
case CMSG_KEEP_ALIVE:
|
||||
TC_LOG_DEBUG("network", "%s", opcodeName.c_str());
|
||||
TC_LOG_DEBUG("network", "%s", GetOpcodeNameForLogging(opcode).c_str());
|
||||
sScriptMgr->OnPacketReceive(_worldSession, packet);
|
||||
break;
|
||||
case CMSG_LOG_DISCONNECT:
|
||||
|
||||
@@ -78,8 +78,7 @@ set(scripts_STAT_SRCS
|
||||
Northrend/Nexus/Oculus/boss_urom.cpp
|
||||
Northrend/Nexus/Oculus/oculus.cpp
|
||||
Northrend/Nexus/Oculus/instance_oculus.cpp
|
||||
Northrend/Nexus/Nexus/boss_commander_kolurg.cpp
|
||||
Northrend/Nexus/Nexus/boss_commander_stoutbeard.cpp
|
||||
Northrend/Nexus/Nexus/boss_nexus_commanders.cpp
|
||||
Northrend/Nexus/Nexus/boss_ormorok.cpp
|
||||
Northrend/Nexus/Nexus/boss_magus_telestra.cpp
|
||||
Northrend/Nexus/Nexus/instance_nexus.cpp
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
#include "ObjectMgr.h"
|
||||
#include "ScriptMgr.h"
|
||||
#include "ScriptedCreature.h"
|
||||
#include "SpellAuras.h"
|
||||
#include "SpellAuraEffects.h"
|
||||
#include "GridNotifiers.h"
|
||||
#include "icecrown_citadel.h"
|
||||
|
||||
@@ -213,7 +213,7 @@ class boss_rotface : public CreatureScript
|
||||
}
|
||||
break;
|
||||
case EVENT_MUTATED_INFECTION:
|
||||
me->CastCustomSpell(SPELL_MUTATED_INFECTION, SPELLVALUE_MAX_TARGETS, 1, NULL, false);
|
||||
DoCastAOE(SPELL_MUTATED_INFECTION);
|
||||
events.ScheduleEvent(EVENT_MUTATED_INFECTION, infectionCooldown);
|
||||
break;
|
||||
case EVENT_VILE_GAS:
|
||||
@@ -509,13 +509,6 @@ class spell_rotface_mutated_infection : public SpellScriptLoader
|
||||
{
|
||||
PrepareSpellScript(spell_rotface_mutated_infection_SpellScript);
|
||||
|
||||
public:
|
||||
spell_rotface_mutated_infection_SpellScript()
|
||||
{
|
||||
_target = nullptr;
|
||||
}
|
||||
|
||||
private:
|
||||
void FilterTargets(std::list<WorldObject*>& targets)
|
||||
{
|
||||
// remove targets with this aura already
|
||||
@@ -527,14 +520,6 @@ class spell_rotface_mutated_infection : public SpellScriptLoader
|
||||
WorldObject* target = Trinity::Containers::SelectRandomContainerElement(targets);
|
||||
targets.clear();
|
||||
targets.push_back(target);
|
||||
_target = target;
|
||||
}
|
||||
|
||||
void ReplaceTargets(std::list<WorldObject*>& targets)
|
||||
{
|
||||
targets.clear();
|
||||
if (_target)
|
||||
targets.push_back(_target);
|
||||
}
|
||||
|
||||
void NotifyTargets()
|
||||
@@ -546,19 +531,43 @@ class spell_rotface_mutated_infection : public SpellScriptLoader
|
||||
|
||||
void Register() override
|
||||
{
|
||||
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_rotface_mutated_infection_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY);
|
||||
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_rotface_mutated_infection_SpellScript::ReplaceTargets, EFFECT_1, TARGET_UNIT_SRC_AREA_ENEMY);
|
||||
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_rotface_mutated_infection_SpellScript::ReplaceTargets, EFFECT_2, TARGET_UNIT_SRC_AREA_ENEMY);
|
||||
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_rotface_mutated_infection_SpellScript::FilterTargets, EFFECT_ALL, TARGET_UNIT_SRC_AREA_ENEMY);
|
||||
AfterHit += SpellHitFn(spell_rotface_mutated_infection_SpellScript::NotifyTargets);
|
||||
}
|
||||
};
|
||||
|
||||
WorldObject* _target;
|
||||
class spell_rotface_mutated_infection_AuraScript : public AuraScript
|
||||
{
|
||||
PrepareAuraScript(spell_rotface_mutated_infection_AuraScript);
|
||||
|
||||
bool Validate(SpellInfo const* spellInfo) override
|
||||
{
|
||||
if (!sSpellMgr->GetSpellInfo(uint32(spellInfo->Effects[EFFECT_2].CalcValue())))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void HandleEffectRemove(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
|
||||
{
|
||||
Unit* target = GetTarget();
|
||||
target->CastSpell(target, uint32(GetSpellInfo()->Effects[EFFECT_2].CalcValue()), true, nullptr, aurEff, GetCasterGUID());
|
||||
}
|
||||
|
||||
void Register() override
|
||||
{
|
||||
AfterEffectRemove += AuraEffectRemoveFn(spell_rotface_mutated_infection_AuraScript::HandleEffectRemove, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE, AURA_EFFECT_HANDLE_REAL);
|
||||
}
|
||||
};
|
||||
|
||||
SpellScript* GetSpellScript() const override
|
||||
{
|
||||
return new spell_rotface_mutated_infection_SpellScript();
|
||||
}
|
||||
|
||||
AuraScript* GetAuraScript() const override
|
||||
{
|
||||
return new spell_rotface_mutated_infection_AuraScript();
|
||||
}
|
||||
};
|
||||
|
||||
class spell_rotface_little_ooze_combine : public SpellScriptLoader
|
||||
|
||||
@@ -2396,6 +2396,7 @@ class spell_the_lich_king_defile : public SpellScriptLoader
|
||||
void CorrectRange(std::list<WorldObject*>& targets)
|
||||
{
|
||||
targets.remove_if(ExactDistanceCheck(GetCaster(), 10.0f * GetCaster()->GetObjectScale()));
|
||||
targets.remove_if(Trinity::UnitAuraCheck(true, SPELL_HARVEST_SOUL_VALKYR));
|
||||
}
|
||||
|
||||
void ChangeDamageAndGrow()
|
||||
|
||||
@@ -1,80 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2008-2015 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/>.
|
||||
*/
|
||||
|
||||
/* Script Data Start
|
||||
SDName: Boss Commander Kolurg
|
||||
SDAuthor: LordVanMartin
|
||||
SD%Complete:
|
||||
SDComment: Only Alliance Heroic
|
||||
SDCategory:
|
||||
Script Data End */
|
||||
|
||||
#include "ScriptMgr.h"
|
||||
#include "ScriptedCreature.h"
|
||||
|
||||
enum Spells
|
||||
{
|
||||
SPELL_BATTLE_SHOUT = 31403,
|
||||
SPELL_CHARGE = 60067,
|
||||
SPELL_FRIGHTENING_SHOUT = 19134,
|
||||
SPELL_WHIRLWIND_1 = 38619,
|
||||
SPELL_WHIRLWIND_2 = 38618
|
||||
|
||||
};
|
||||
|
||||
//not used
|
||||
//Yell
|
||||
#define SAY_AGGRO -1576024
|
||||
#define SAY_KILL -1576025
|
||||
#define SAY_DEATH -1576026
|
||||
|
||||
class boss_commander_kolurg : public CreatureScript
|
||||
{
|
||||
public:
|
||||
boss_commander_kolurg() : CreatureScript("boss_commander_kolurg") { }
|
||||
|
||||
CreatureAI* GetAI(Creature* creature) const override
|
||||
{
|
||||
return new boss_commander_kolurgAI(creature);
|
||||
}
|
||||
|
||||
struct boss_commander_kolurgAI : public ScriptedAI
|
||||
{
|
||||
boss_commander_kolurgAI(Creature* creature) : ScriptedAI(creature) { }
|
||||
|
||||
void Reset() override { }
|
||||
void EnterCombat(Unit* /*who*/) override { }
|
||||
void AttackStart(Unit* /*who*/) override { }
|
||||
void MoveInLineOfSight(Unit* /*who*/) override { }
|
||||
|
||||
void UpdateAI(uint32 /*diff*/) override
|
||||
{
|
||||
//Return since we have no target
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
void JustDied(Unit* /*killer*/) override { }
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
void AddSC_boss_commander_kolurg()
|
||||
{
|
||||
new boss_commander_kolurg();
|
||||
}
|
||||
@@ -0,0 +1,110 @@
|
||||
/*
|
||||
* Copyright (C) 2008-2015 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 "nexus.h"
|
||||
|
||||
enum Spells
|
||||
{
|
||||
SPELL_BATTLE_SHOUT = 31403,
|
||||
SPELL_CHARGE = 60067,
|
||||
SPELL_FRIGHTENING_SHOUT = 19134,
|
||||
SPELL_WHIRLWIND = 38618,
|
||||
SPELL_FROZEN_PRISON = 47543
|
||||
};
|
||||
|
||||
enum Yells
|
||||
{
|
||||
SAY_AGGRO = 0,
|
||||
SAY_KILL = 1,
|
||||
SAY_DEATH = 2
|
||||
};
|
||||
|
||||
enum Events
|
||||
{
|
||||
EVENT_CHARGE_COMMANDER = 1,
|
||||
EVENT_WHIRLWIND,
|
||||
EVENT_FRIGHTENING_SHOUT
|
||||
};
|
||||
|
||||
class boss_nexus_commanders : public CreatureScript
|
||||
{
|
||||
public:
|
||||
boss_nexus_commanders() : CreatureScript("boss_nexus_commanders") { }
|
||||
|
||||
struct boss_nexus_commandersAI : public BossAI
|
||||
{
|
||||
boss_nexus_commandersAI(Creature* creature) : BossAI(creature, DATA_COMMANDER) { }
|
||||
|
||||
void EnterCombat(Unit* /*who*/) override
|
||||
{
|
||||
_EnterCombat();
|
||||
Talk(SAY_AGGRO);
|
||||
me->RemoveAurasDueToSpell(SPELL_FROZEN_PRISON);
|
||||
DoCast(me, SPELL_BATTLE_SHOUT);
|
||||
|
||||
events.ScheduleEvent(EVENT_CHARGE_COMMANDER, urand(3000, 4000));
|
||||
events.ScheduleEvent(EVENT_WHIRLWIND, urand(6000, 8000));
|
||||
events.ScheduleEvent(EVENT_FRIGHTENING_SHOUT, urand(13000, 15000));
|
||||
}
|
||||
|
||||
void ExecuteEvent(uint32 eventId) override
|
||||
{
|
||||
switch (eventId)
|
||||
{
|
||||
case EVENT_CHARGE_COMMANDER:
|
||||
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100.0f, true))
|
||||
DoCast(target, SPELL_CHARGE);
|
||||
events.ScheduleEvent(EVENT_CHARGE_COMMANDER, urand(11000, 15000));
|
||||
break;
|
||||
case EVENT_WHIRLWIND:
|
||||
DoCast(me, SPELL_WHIRLWIND);
|
||||
events.ScheduleEvent(EVENT_WHIRLWIND, urand(19500, 25000));
|
||||
break;
|
||||
case EVENT_FRIGHTENING_SHOUT:
|
||||
DoCastAOE(SPELL_FRIGHTENING_SHOUT);
|
||||
events.ScheduleEvent(EVENT_FRIGHTENING_SHOUT, urand(45000, 55000));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void JustDied(Unit* /*killer*/) override
|
||||
{
|
||||
_JustDied();
|
||||
Talk(SAY_DEATH);
|
||||
}
|
||||
|
||||
void KilledUnit(Unit* who) override
|
||||
{
|
||||
if (who->GetTypeId() == TYPEID_PLAYER)
|
||||
Talk(SAY_KILL);
|
||||
}
|
||||
};
|
||||
|
||||
CreatureAI* GetAI(Creature* creature) const override
|
||||
{
|
||||
return GetInstanceAI<boss_nexus_commandersAI>(creature);
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_boss_nexus_commanders()
|
||||
{
|
||||
new boss_nexus_commanders();
|
||||
}
|
||||
@@ -21,18 +21,19 @@
|
||||
#define NexusScriptName "instance_nexus"
|
||||
#define DataHeader "NEX"
|
||||
|
||||
uint32 const EncounterCount = 4;
|
||||
uint32 const EncounterCount = 5;
|
||||
|
||||
enum DataTypes
|
||||
{
|
||||
DATA_MAGUS_TELESTRA = 0,
|
||||
DATA_ANOMALUS = 1,
|
||||
DATA_ORMOROK = 2,
|
||||
DATA_KERISTRASZA = 3,
|
||||
DATA_COMMANDER = 0,
|
||||
DATA_MAGUS_TELESTRA = 1,
|
||||
DATA_ANOMALUS = 2,
|
||||
DATA_ORMOROK = 3,
|
||||
DATA_KERISTRASZA = 4,
|
||||
|
||||
ANOMALUS_CONTAINMET_SPHERE = 4,
|
||||
ORMOROKS_CONTAINMET_SPHERE = 5,
|
||||
TELESTRAS_CONTAINMET_SPHERE = 6
|
||||
ANOMALUS_CONTAINMET_SPHERE = 5,
|
||||
ORMOROKS_CONTAINMET_SPHERE = 6,
|
||||
TELESTRAS_CONTAINMET_SPHERE = 7
|
||||
};
|
||||
|
||||
enum CreatureIds
|
||||
|
||||
@@ -641,97 +641,6 @@ enum JokkumScriptcast
|
||||
EVENT_KROLMIR_9 = 24,
|
||||
};
|
||||
|
||||
class npc_king_jokkum_vehicle : public CreatureScript
|
||||
{
|
||||
public:
|
||||
npc_king_jokkum_vehicle() : CreatureScript("npc_king_jokkum_vehicle") { }
|
||||
|
||||
struct npc_king_jokkum_vehicleAI : public VehicleAI
|
||||
{
|
||||
npc_king_jokkum_vehicleAI(Creature* creature) : VehicleAI(creature)
|
||||
{
|
||||
pathEnd = false;
|
||||
}
|
||||
|
||||
void Reset() override
|
||||
{
|
||||
playerGUID.Clear();
|
||||
pathEnd = false;
|
||||
}
|
||||
|
||||
void OnCharmed(bool /*apply*/) override { }
|
||||
|
||||
void PassengerBoarded(Unit* who, int8 /*seat*/, bool apply) override
|
||||
{
|
||||
if (apply)
|
||||
{
|
||||
playerGUID = who->GetGUID();
|
||||
Talk(SAY_HOLD_ON, who);
|
||||
me->CastSpell(who, SPELL_JOKKUM_KILL_CREDIT, true);
|
||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_NPC);
|
||||
me->GetMotionMaster()->MovePath(PATH_JOKKUM, false);
|
||||
}
|
||||
}
|
||||
|
||||
void MovementInform(uint32 type, uint32 id) override
|
||||
{
|
||||
if (type != WAYPOINT_MOTION_TYPE)
|
||||
return;
|
||||
|
||||
if (pathEnd)
|
||||
{
|
||||
if (id == 4)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (id == 19)
|
||||
{
|
||||
pathEnd = true;
|
||||
me->SetFacingTo(0.418879f);
|
||||
Talk(SAY_JOKKUM_1);
|
||||
if (Player* player = ObjectAccessor::GetPlayer(*me, playerGUID))
|
||||
me->CastSpell(player, SPELL_PLAYER_CAST_VERANUS_SUMMON);
|
||||
me->CastSpell(me, SPELL_EJECT_ALL_PASSENGERS);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
{
|
||||
if (!pathEnd)
|
||||
return;
|
||||
|
||||
events.Update(diff);
|
||||
|
||||
while (uint32 eventId = events.ExecuteEvent())
|
||||
{
|
||||
switch (eventId)
|
||||
{
|
||||
case EVENT_KROLMIR_1:
|
||||
Talk(SAY_JOKKUM_2);
|
||||
events.ScheduleEvent(EVENT_KROLMIR_2, 4000);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
EventMap events;
|
||||
ObjectGuid playerGUID;
|
||||
bool pathEnd;
|
||||
|
||||
};
|
||||
|
||||
CreatureAI* GetAI(Creature* creature) const override
|
||||
{
|
||||
return new npc_king_jokkum_vehicleAI(creature);
|
||||
}
|
||||
};
|
||||
|
||||
class spell_jokkum_scriptcast : public SpellScriptLoader
|
||||
{
|
||||
public: spell_jokkum_scriptcast() : SpellScriptLoader("spell_jokkum_scriptcast") { }
|
||||
@@ -855,7 +764,6 @@ void AddSC_storm_peaks()
|
||||
new npc_icefang();
|
||||
new npc_hyldsmeet_protodrake();
|
||||
new npc_brann_bronzebeard_keystone();
|
||||
new npc_king_jokkum_vehicle();
|
||||
new spell_jokkum_scriptcast();
|
||||
new spell_veranus_summon();
|
||||
new spell_close_rift();
|
||||
|
||||
@@ -283,7 +283,10 @@ class boss_harbinger_skyriss_illusion : public CreatureScript
|
||||
{
|
||||
boss_harbinger_skyriss_illusionAI(Creature* creature) : ScriptedAI(creature) { }
|
||||
|
||||
void Reset() override { }
|
||||
void Reset() override
|
||||
{
|
||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
}
|
||||
|
||||
void EnterCombat(Unit* /*who*/) override { }
|
||||
};
|
||||
|
||||
@@ -171,19 +171,20 @@ bool BigNumber::isZero() const
|
||||
|
||||
std::unique_ptr<uint8[]> BigNumber::AsByteArray(int32 minSize, bool littleEndian)
|
||||
{
|
||||
int length = (minSize >= GetNumBytes()) ? minSize : GetNumBytes();
|
||||
int numBytes = GetNumBytes();
|
||||
int length = (minSize >= numBytes) ? minSize : numBytes;
|
||||
|
||||
uint8* array = new uint8[length];
|
||||
|
||||
// If we need more bytes than length of BigNumber set the rest to 0
|
||||
if (length > GetNumBytes())
|
||||
if (length > numBytes)
|
||||
memset((void*)array, 0, length);
|
||||
|
||||
BN_bn2bin(_bn, (unsigned char *)array);
|
||||
|
||||
// openssl's BN stores data internally in big endian format, reverse if little endian desired
|
||||
if (littleEndian)
|
||||
std::reverse(array, array + length);
|
||||
std::reverse(array, array + numBytes);
|
||||
|
||||
std::unique_ptr<uint8[]> ret(array);
|
||||
return ret;
|
||||
|
||||
@@ -1068,7 +1068,7 @@ bool logChildren)
|
||||
{
|
||||
case btChar:
|
||||
case btStdString:
|
||||
FormatOutputValue(buffer, basicType, length, (PVOID)offset, sizeof(buffer));
|
||||
FormatOutputValue(buffer, basicType, length, (PVOID)offset, sizeof(buffer), elementsCount);
|
||||
symbolDetails.top().Value = buffer;
|
||||
break;
|
||||
default:
|
||||
@@ -1196,7 +1196,8 @@ void WheatyExceptionReport::FormatOutputValue(char * pszCurrBuffer,
|
||||
BasicType basicType,
|
||||
DWORD64 length,
|
||||
PVOID pAddress,
|
||||
size_t bufferSize)
|
||||
size_t bufferSize,
|
||||
size_t countOverride)
|
||||
{
|
||||
__try
|
||||
{
|
||||
@@ -1204,10 +1205,15 @@ size_t bufferSize)
|
||||
{
|
||||
case btChar:
|
||||
{
|
||||
if (strlen((char*)pAddress) > bufferSize - 6)
|
||||
// Special case handling for char[] type
|
||||
if (countOverride != 0)
|
||||
length = countOverride;
|
||||
else
|
||||
length = strlen((char*)pAddress);
|
||||
if (length > bufferSize - 6)
|
||||
pszCurrBuffer += sprintf(pszCurrBuffer, "\"%.*s...\"", bufferSize - 6, (char*)pAddress);
|
||||
else
|
||||
pszCurrBuffer += sprintf(pszCurrBuffer, "\"%s\"", (char*)pAddress);
|
||||
pszCurrBuffer += sprintf(pszCurrBuffer, "\"%.*s\"", length, (char*)pAddress);
|
||||
break;
|
||||
}
|
||||
case btStdString:
|
||||
|
||||
@@ -172,7 +172,7 @@ class WheatyExceptionReport
|
||||
|
||||
static char * DumpTypeIndex(char *, DWORD64, DWORD, unsigned, DWORD_PTR, bool &, const char*, char*, bool, bool);
|
||||
|
||||
static void FormatOutputValue(char * pszCurrBuffer, BasicType basicType, DWORD64 length, PVOID pAddress, size_t bufferSize);
|
||||
static void FormatOutputValue(char * pszCurrBuffer, BasicType basicType, DWORD64 length, PVOID pAddress, size_t bufferSize, size_t countOverride = 0);
|
||||
|
||||
static BasicType GetBasicType(DWORD typeIndex, DWORD64 modBase);
|
||||
static DWORD_PTR DereferenceUnsafePointer(DWORD_PTR address);
|
||||
|
||||
@@ -199,6 +199,9 @@ void Log::CreateLoggerFromConfig(std::string const& appenderName)
|
||||
return;
|
||||
}
|
||||
|
||||
if (level < lowestLogLevel)
|
||||
lowestLogLevel = level;
|
||||
|
||||
logger.Create(name, level);
|
||||
//fprintf(stdout, "Log::CreateLoggerFromConfig: Created Logger %s, Level %u\n", name.c_str(), level);
|
||||
|
||||
@@ -321,6 +324,9 @@ bool Log::SetLogLevel(std::string const& name, const char* newLevelc, bool isLog
|
||||
return false;
|
||||
|
||||
it->second.setLogLevel(newLevel);
|
||||
|
||||
if (newLevel != LOG_LEVEL_DISABLED && newLevel < lowestLogLevel)
|
||||
lowestLogLevel = newLevel;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -394,6 +400,7 @@ void Log::LoadFromConfig()
|
||||
{
|
||||
Close();
|
||||
|
||||
lowestLogLevel = LOG_LEVEL_FATAL;
|
||||
AppenderId = 0;
|
||||
m_logsDir = sConfigMgr->GetStringDefault("LogsDir", "");
|
||||
if (!m_logsDir.empty())
|
||||
|
||||
@@ -82,6 +82,7 @@ class Log
|
||||
AppenderMap appenders;
|
||||
LoggerMap loggers;
|
||||
uint8 AppenderId;
|
||||
LogLevel lowestLogLevel;
|
||||
|
||||
std::string m_logsDir;
|
||||
std::string m_logsTimestamp;
|
||||
@@ -113,6 +114,10 @@ inline bool Log::ShouldLog(std::string const& type, LogLevel level) const
|
||||
// Speed up in cases where requesting "Type.sub1.sub2" but only configured
|
||||
// Logger "Type"
|
||||
|
||||
// Don't even look for a logger if the LogLevel is lower than lowest log levels across all loggers
|
||||
if (level < lowestLogLevel)
|
||||
return false;
|
||||
|
||||
Logger const* logger = GetLoggerByType(type);
|
||||
if (!logger)
|
||||
return false;
|
||||
|
||||
@@ -34,7 +34,9 @@
|
||||
using boost::asio::ip::tcp;
|
||||
|
||||
#define READ_BLOCK_SIZE 4096
|
||||
#define TC_SOCKET_USE_IOCP BOOST_ASIO_HAS_IOCP
|
||||
#ifdef BOOST_ASIO_HAS_IOCP
|
||||
#define TC_SOCKET_USE_IOCP
|
||||
#endif
|
||||
|
||||
template<class T>
|
||||
class Socket : public std::enable_shared_from_this<T>
|
||||
|
||||
Reference in new issue
Block a user