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:
Carbenium committed 2015-07-21 23:20:40 +02:00
commit 67d616c195
26 files changed
+219 -246

No files matched your search

+7 -9
View File
@@ -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"
+2
View File
@@ -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 )
+2 -2
View File
@@ -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}"
)
+2 -3
View File
@@ -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
+6 -6
View File
@@ -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())
{
+1 -1
View File
@@ -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);
+1 -1
View File
@@ -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;
+4 -2
View File
@@ -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();
+2 -4
View File
@@ -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:
+1 -2
View File
@@ -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,32 +21,33 @@
#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
{
NPC_ANOMALUS = 26763,
NPC_KERISTRASZA = 26723,
// Alliance
NPC_ALLIANCE_BERSERKER = 26800,
NPC_ALLIANCE_RANGER = 26802,
NPC_ALLIANCE_CLERIC = 26805,
NPC_ALLIANCE_COMMANDER = 27949,
NPC_COMMANDER_STOUTBEARD = 26796,
// Horde
NPC_HORDE_BERSERKER = 26799,
NPC_HORDE_RANGER = 26801,
@@ -59,7 +60,7 @@ enum GameObjectIds
{
GO_ANOMALUS_CONTAINMET_SPHERE = 188527,
GO_ORMOROKS_CONTAINMET_SPHERE = 188528,
GO_TELESTRAS_CONTAINMET_SPHERE = 188526
GO_TELESTRAS_CONTAINMET_SPHERE = 188526
};
#endif
@@ -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 { }
};
+4 -3
View File
@@ -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);
+7
View File
@@ -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())
+5
View File
@@ -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;
+3 -1
View File
@@ -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>