Merge commit '718c238524e5d9bc4d43c56c4870c78af794f520' into 4.3.4

Conflicts:
	dep/PackageList.txt
	dep/libmpq/AUTHORS
	dep/libmpq/FAQ
	dep/libmpq/README
	dep/libmpq/THANKS
	dep/libmpq/bindings/d/mpq.d
	dep/libmpq/bindings/python/mpq.py
	dep/libmpq/configure.ac
	dep/libmpq/debian/control
	dep/libmpq/debian/copyright
	dep/libmpq/doc/man1/libmpq-config.1
	dep/libmpq/doc/man3/Makefile.am
	dep/libmpq/doc/man3/libmpq.3
	dep/libmpq/doc/man3/libmpq__archive_close.3
	dep/libmpq/doc/man3/libmpq__archive_files.3
	dep/libmpq/doc/man3/libmpq__archive_offset.3
	dep/libmpq/doc/man3/libmpq__archive_open.3
	dep/libmpq/doc/man3/libmpq__archive_size_packed.3
	dep/libmpq/doc/man3/libmpq__archive_size_unpacked.3
	dep/libmpq/doc/man3/libmpq__archive_version.3
	dep/libmpq/doc/man3/libmpq__block_close_offset.3
	dep/libmpq/doc/man3/libmpq__block_open_offset.3
	dep/libmpq/doc/man3/libmpq__block_read.3
	dep/libmpq/doc/man3/libmpq__block_size_unpacked.3
	dep/libmpq/doc/man3/libmpq__file_blocks.3
	dep/libmpq/doc/man3/libmpq__file_compressed.3
	dep/libmpq/doc/man3/libmpq__file_encrypted.3
	dep/libmpq/doc/man3/libmpq__file_imploded.3
	dep/libmpq/doc/man3/libmpq__file_number.3
	dep/libmpq/doc/man3/libmpq__file_offset.3
	dep/libmpq/doc/man3/libmpq__file_read.3
	dep/libmpq/doc/man3/libmpq__file_size_packed.3
	dep/libmpq/doc/man3/libmpq__file_size_unpacked.3
	dep/libmpq/doc/man3/libmpq__strerror.3
	dep/libmpq/doc/man3/libmpq__version.3
	dep/libmpq/libmpq/Makefile.am
	dep/libmpq/libmpq/common.c
	dep/libmpq/libmpq/common.h
	dep/libmpq/libmpq/explode.c
	dep/libmpq/libmpq/explode.h
	dep/libmpq/libmpq/extract.c
	dep/libmpq/libmpq/extract.h
	dep/libmpq/libmpq/huffman.c
	dep/libmpq/libmpq/huffman.h
	dep/libmpq/libmpq/mpq-internal.h
	dep/libmpq/libmpq/mpq.c
	dep/libmpq/libmpq/mpq.h
	dep/libmpq/libmpq/pack_begin.h
	dep/libmpq/libmpq/pack_end.h
	dep/libmpq/libmpq/platform.h
	dep/libmpq/libmpq/wave.c
	dep/libmpq/libmpq/wave.h
	dep/libmpq/tools/crypt_buf_gen.c
	src/tools/map_extractor/mpq_libmpq.cpp
	src/tools/map_extractor/mpq_libmpq04.h
	src/tools/vmap4_extractor/mpq_libmpq.cpp
	src/tools/vmap4_extractor/mpq_libmpq04.h
This commit is contained in:
Carbenium committed 2015-07-22 02:13:10 +02:00
commit 86c34de614
30 files changed
+2563 -1631

No files matched your search

+970 -87
View File
File diff suppressed because it is too large. Load diff
+1235 -1235
View File
File diff suppressed because it is too large. Load diff
+1
View File
@@ -2,6 +2,7 @@
if(CMAKE_SYSTEM_NAME MATCHES "Linux")
if (NOT NOJEM)
set(JEMALLOC_LIBRARY "jemalloc")
add_definitions(-DNO_BUFFERPOOL)
message(STATUS "UNIX: Using jemalloc")
endif()
endif()
+60
View File
@@ -45,3 +45,63 @@
fun:_ZNKSt13__atomic_baseIjE4loadESt12memory_order
fun:_ZNKSt13__atomic_baseIjEcvjEv
}
{
[1] std::atomic
Helgrind:Race
fun:load
fun:_ZNKSt13__atomic_baseIjEcvjEv
}
{
[1] std::atomic
Helgrind:Race
fun:store
fun:_ZNSt13__atomic_baseIiEaSEi
}
{
[1] std::atomic
Helgrind:Race
fun:store
fun:_ZNSt13__atomic_baseIbEaSEb
}
{
[1] std::atomic
Helgrind:Race
fun:load
fun:_ZNKSt11atomic_boolcvbEv
}
{
[1] std::atomic
Helgrind:Race
fun:store
fun:_ZNSt13__atomic_baseIjEaSEj
}
{
[2] integer counters
Helgrind:Race
fun:_ZN4MMAP11MMapManager7loadMapERKSsjii
fun:_ZN3Map8LoadMMapEii
}
{
[2] integer counters
Helgrind:Race
fun:_ZN8Movement7counterIjLj4294967295EE8IncreaseEv
}
{
[2] integer counters
Helgrind:Race
fun:_ZN3G3D10BufferPool6mallocEm
}
{
[3] System libraries
Helgrind:Race
fun:__GI_mempcpy
fun:_IO_file_xsputn@@GLIBC_2.2.5
fun:vfprintf
}
{
[3] System libraries
Helgrind:Race
fun:__GI_mempcpy
fun:_IO_file_xsputn@@GLIBC_2.2.5
fun:fwrite
}
+38
View File
@@ -0,0 +1,38 @@
dep/libmpq/libmpq/extract.c | 1 +
dep/libmpq/libmpq/mpq.c | 4 ++--
2 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/dep/libmpq/libmpq/extract.c b/dep/libmpq/libmpq/extract.c
index f4ebb29..dc970b7 100644
--- a/dep/libmpq/libmpq/extract.c
+++ b/dep/libmpq/libmpq/extract.c
@@ -49,6 +49,7 @@ static decompress_table_s dcmp_table[] = {
/* this function decompress a stream using huffman algorithm. */
int32_t libmpq__decompress_huffman(uint8_t *in_buf, uint32_t in_size, uint8_t *out_buf, uint32_t out_size) {
+ (void)in_size;
/* TODO: make typdefs of this structs? */
/* some common variables. */
int32_t tb = 0;
diff --git a/dep/libmpq/libmpq/mpq.c b/dep/libmpq/libmpq/mpq.c
index 1936f25..71081b5 100644
--- a/dep/libmpq/libmpq/mpq.c
+++ b/dep/libmpq/libmpq/mpq.c
@@ -65,7 +65,7 @@ const char *libmpq__version(void) {
const char *libmpq__strerror(int32_t return_code) {
/* check for array bounds */
- if (-return_code < 0 || -return_code > sizeof(__libmpq_error_strings)/sizeof(char*))
+ if (-return_code < 0 || (size_t)-return_code > sizeof(__libmpq_error_strings)/sizeof(char*))
return NULL;
/* return appropriate string */
@@ -912,7 +912,7 @@ int32_t libmpq__block_read(mpq_archive_s *mpq_archive, uint32_t file_number, uin
}
/* read block from file. */
- if (fread(in_buf, 1, in_size, mpq_archive->fp) != in_size) {
+ if ((libmpq__off_t)fread(in_buf, 1, in_size, mpq_archive->fp) != in_size) {
/* free buffers. */
free(in_buf);
@@ -1,3 +1,3 @@
DELETE FROM `spell_script_names` WHERE `spell_id` = 38194;
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
(38194, 'spell_talon_king_ikiss_blink');
DELETE FROM `spell_script_names` WHERE `spell_id` = 38194;
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
(38194, 'spell_talon_king_ikiss_blink');
@@ -1,18 +1,18 @@
-- SWP: Move Muru summons to database
SET @MURU := 25741;
DELETE FROM `creature_summon_groups` WHERE `summonerId` = @MURU AND `entry` IN (25798, 25799, 25744);
INSERT INTO `creature_summon_groups` (`summonerId`, `summonerType`, `groupId`, `entry`, `position_x`, `position_y`, `position_z`, `orientation`, `summonType`, `summonTime`) VALUES
(@MURU, 0, 0, 25799, 1780.16, 666.83, 71.19, 5.21, 5, 0), -- Shadowsword Fury Mage
(@MURU, 0, 0, 25799, 1847.93, 600.30, 71.30, 2.57, 5, 0),
(@MURU, 0, 0, 25798, 1779.97, 660.64, 71.19, 5.28, 5, 0), -- Shadowsword Berserker
(@MURU, 0, 0, 25798, 1786.20, 661.01, 71.19, 4.51, 5, 0),
(@MURU, 0, 0, 25798, 1845.17, 602.63, 71.28, 2.43, 5, 0),
(@MURU, 0, 0, 25798, 1842.91, 599.93, 71.23, 2.44, 5, 0),
(@MURU, 0, 1, 25744, 1819.90, 609.80, 69.74, 1.94, 5, 0), -- Darkfiend
(@MURU, 0, 1, 25744, 1829.39, 617.89, 69.73, 2.61, 5, 0),
(@MURU, 0, 1, 25744, 1801.98, 633.62, 69.74, 5.71, 5, 0),
(@MURU, 0, 1, 25744, 1830.88, 629.99, 69.73, 3.52, 5, 0),
(@MURU, 0, 1, 25744, 1800.38, 621.41, 69.74, 0.22, 5, 0),
(@MURU, 0, 1, 25744, 1808.30, 612.45, 69.73, 1.02, 5, 0),
(@MURU, 0, 1, 25744, 1823.90, 639.69, 69.74, 4.12, 5, 0),
(@MURU, 0, 1, 25744, 1811.85, 640.46, 69.73, 4.97, 5, 0);
-- SWP: Move Muru summons to database
SET @MURU := 25741;
DELETE FROM `creature_summon_groups` WHERE `summonerId` = @MURU AND `entry` IN (25798, 25799, 25744);
INSERT INTO `creature_summon_groups` (`summonerId`, `summonerType`, `groupId`, `entry`, `position_x`, `position_y`, `position_z`, `orientation`, `summonType`, `summonTime`) VALUES
(@MURU, 0, 0, 25799, 1780.16, 666.83, 71.19, 5.21, 5, 0), -- Shadowsword Fury Mage
(@MURU, 0, 0, 25799, 1847.93, 600.30, 71.30, 2.57, 5, 0),
(@MURU, 0, 0, 25798, 1779.97, 660.64, 71.19, 5.28, 5, 0), -- Shadowsword Berserker
(@MURU, 0, 0, 25798, 1786.20, 661.01, 71.19, 4.51, 5, 0),
(@MURU, 0, 0, 25798, 1845.17, 602.63, 71.28, 2.43, 5, 0),
(@MURU, 0, 0, 25798, 1842.91, 599.93, 71.23, 2.44, 5, 0),
(@MURU, 0, 1, 25744, 1819.90, 609.80, 69.74, 1.94, 5, 0), -- Darkfiend
(@MURU, 0, 1, 25744, 1829.39, 617.89, 69.73, 2.61, 5, 0),
(@MURU, 0, 1, 25744, 1801.98, 633.62, 69.74, 5.71, 5, 0),
(@MURU, 0, 1, 25744, 1830.88, 629.99, 69.73, 3.52, 5, 0),
(@MURU, 0, 1, 25744, 1800.38, 621.41, 69.74, 0.22, 5, 0),
(@MURU, 0, 1, 25744, 1808.30, 612.45, 69.73, 1.02, 5, 0),
(@MURU, 0, 1, 25744, 1823.90, 639.69, 69.74, 4.12, 5, 0),
(@MURU, 0, 1, 25744, 1811.85, 640.46, 69.73, 4.97, 5, 0);
@@ -1 +1 @@
UPDATE `creature_loot_template` SET `ChanceOrQuestChance`=6 WHERE `entry` IN (34566, 35216, 35268, 35269, 35347, 35348, 35349, 35350, 35351, 35352, 35447, 35448, 35449, 35615, 35616) AND `item`=3;
UPDATE `creature_loot_template` SET `ChanceOrQuestChance`=6 WHERE `entry` IN (34566, 35216, 35268, 35269, 35347, 35348, 35349, 35350, 35351, 35352, 35447, 35448, 35449, 35615, 35616) AND `item`=3;
@@ -1,2 +1,2 @@
-- Remove no longer used script
UPDATE `creature_template` SET `ScriptName` = '' WHERE `entry` = 17662; -- Broggok Poison Cloud
-- Remove no longer used script
UPDATE `creature_template` SET `ScriptName` = '' WHERE `entry` = 17662; -- Broggok Poison Cloud
@@ -1,6 +1,6 @@
-- Corrects unit_flags and sets AI for Illusion of Jandice Barov (11439)
SET @ENTRY := 11439;
UPDATE `creature_template` SET `ScriptName` = '', `AIName` = 'SmartAI', `unit_flags` = `unit_flags` &~4194304 WHERE `entry` = @ENTRY;
DELETE FROM `smart_scripts` WHERE `entryorguid` = @ENTRY AND `source_type` = 0;
INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
(@ENTRY, 0, 0, 0, 0, 0, 100, 2, 2000, 8000, 5000, 8000, 11, 15284, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, "Illusion of Jandice Barov - In Combat - Cast 'Cleave' (Normal Dungeon)");
-- Corrects unit_flags and sets AI for Illusion of Jandice Barov (11439)
SET @ENTRY := 11439;
UPDATE `creature_template` SET `ScriptName` = '', `AIName` = 'SmartAI', `unit_flags` = `unit_flags` &~4194304 WHERE `entry` = @ENTRY;
DELETE FROM `smart_scripts` WHERE `entryorguid` = @ENTRY AND `source_type` = 0;
INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
(@ENTRY, 0, 0, 0, 0, 0, 100, 2, 2000, 8000, 5000, 8000, 11, 15284, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, "Illusion of Jandice Barov - In Combat - Cast 'Cleave' (Normal Dungeon)");
@@ -1,4 +1,4 @@
DELETE FROM `spell_script_names` WHERE `spell_id` IN (27695, 27687);
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
(27695, 'spell_kormok_summon_bone_mages'),
(27687, 'spell_kormok_summon_bone_minions');
DELETE FROM `spell_script_names` WHERE `spell_id` IN (27695, 27687);
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
(27695, 'spell_kormok_summon_bone_mages'),
(27687, 'spell_kormok_summon_bone_minions');
@@ -1,5 +1,5 @@
SET @ENTRY := 11136; -- Freed Soul
UPDATE `creature_template` SET `AIName` = 'SmartAI', `ScriptName` = '' WHERE `entry` = @ENTRY;
DELETE FROM `smart_scripts` WHERE `entryorguid` = @ENTRY AND `source_type` = 0;
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(@ENTRY, 0, 0, 0, 11, 0, 100, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Freed Soul - On Respawn - Say Line 0');
SET @ENTRY := 11136; -- Freed Soul
UPDATE `creature_template` SET `AIName` = 'SmartAI', `ScriptName` = '' WHERE `entry` = @ENTRY;
DELETE FROM `smart_scripts` WHERE `entryorguid` = @ENTRY AND `source_type` = 0;
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(@ENTRY, 0, 0, 0, 11, 0, 100, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'Freed Soul - On Respawn - Say Line 0');
@@ -1,6 +1,6 @@
SET @ENTRY := 25040; -- Greater Water Elemental
UPDATE `creature_template` SET `AIName` = 'SmartAI', `ScriptName` = '' WHERE `entry` = @ENTRY;
DELETE FROM `smart_scripts` WHERE `entryorguid` = @ENTRY AND `source_type` = 0;
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(@ENTRY, 0, 1, 0, 0, 0, 100, 0, 3000, 3000, 5000, 5000, 11, 46983, 64, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 'Greater Water Elemental - In Combat CMC - Cast Waterbolt');
SET @ENTRY := 25040; -- Greater Water Elemental
UPDATE `creature_template` SET `AIName` = 'SmartAI', `ScriptName` = '' WHERE `entry` = @ENTRY;
DELETE FROM `smart_scripts` WHERE `entryorguid` = @ENTRY AND `source_type` = 0;
INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(@ENTRY, 0, 1, 0, 0, 0, 100, 0, 3000, 3000, 5000, 5000, 11, 46983, 64, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 'Greater Water Elemental - In Combat CMC - Cast Waterbolt');
@@ -1 +1 @@
UPDATE `conditions` SET `ConditionValue1` = 46 WHERE `SourceEntry` IN (63989, 63997, 63998) AND `SourceTypeOrReferenceId` = 18;
UPDATE `conditions` SET `ConditionValue1` = 46 WHERE `SourceEntry` IN (63989, 63997, 63998) AND `SourceTypeOrReferenceId` = 18;
@@ -1 +1 @@
UPDATE `creature_template` SET `ScriptName` = '' WHERE `entry` = 29920;
UPDATE `creature_template` SET `ScriptName` = '' WHERE `entry` = 29920;
@@ -1,3 +1,3 @@
DELETE FROM `spell_script_names` WHERE `spell_id` = 48292;
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
(48292, 'spell_gen_50pct_count_pct_from_max_hp');
DELETE FROM `spell_script_names` WHERE `spell_id` = 48292;
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
(48292, 'spell_gen_50pct_count_pct_from_max_hp');
@@ -1,3 +1,3 @@
DELETE FROM `achievement_criteria_data` WHERE `criteria_id` = 7361 AND `type` = 12;
INSERT INTO `achievement_criteria_data`(`criteria_id`, `type`, `value1`, `value2`, `ScriptName`) VALUES
(7361, 12, 1, 0, '');
DELETE FROM `achievement_criteria_data` WHERE `criteria_id` = 7361 AND `type` = 12;
INSERT INTO `achievement_criteria_data`(`criteria_id`, `type`, `value1`, `value2`, `ScriptName`) VALUES
(7361, 12, 1, 0, '');
@@ -1,4 +1,4 @@
--
DELETE FROM `spell_script_names` WHERE `spell_id` = 39238;
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
(39238, 'spell_q10929_fumping');
--
DELETE FROM `spell_script_names` WHERE `spell_id` = 39238;
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
(39238, 'spell_q10929_fumping');
+60 -16
View File
@@ -46,7 +46,7 @@ using namespace boost::program_options;
# define _TRINITY_REALM_CONFIG "authserver.conf"
#endif
#ifdef _WIN32
#if PLATFORM == PLATFORM_WINDOWS
#include "ServiceWin32.h"
char serviceName[] = "authserver";
char serviceLongName[] = "TrinityCore auth service";
@@ -58,6 +58,9 @@ char serviceDescription[] = "TrinityCore World of Warcraft emulator auth service
* 2 - paused
*/
int m_ServiceStatus = -1;
boost::asio::deadline_timer* _serviceStatusWatchTimer;
void ServiceStatusWatcher(boost::system::error_code const& error);
#endif
bool StartDB();
@@ -66,8 +69,8 @@ void SignalHandler(const boost::system::error_code& error, int signalNumber);
void KeepDatabaseAliveHandler(const boost::system::error_code& error);
variables_map GetConsoleArguments(int argc, char** argv, std::string& configFile, std::string& configService);
boost::asio::io_service _ioService;
boost::asio::deadline_timer _dbPingTimer(_ioService);
boost::asio::io_service* _ioService;
boost::asio::deadline_timer* _dbPingTimer;
uint32 _dbPingInterval;
LoginDatabaseWorkerPool LoginDatabase;
@@ -80,13 +83,13 @@ int main(int argc, char** argv)
if (vm.count("help"))
return 0;
#ifdef _WIN32
#if PLATFORM == PLATFORM_WINDOWS
if (configService.compare("install") == 0)
return WinServiceInstall() == true ? 0 : 1;
else if (configService.compare("uninstall") == 0)
return WinServiceUninstall() == true ? 0 : 1;
else if (configService.compare("run") == 0)
WinServiceRun();
return WinServiceRun() ? 0 : 1;
#endif
std::string configError;
@@ -119,13 +122,16 @@ int main(int argc, char** argv)
if (!StartDB())
return 1;
_ioService = new boost::asio::io_service();
// Get the list of realms for the server
sRealmList->Initialize(_ioService, sConfigMgr->GetIntDefault("RealmsStateUpdateDelay", 20));
sRealmList->Initialize(*_ioService, sConfigMgr->GetIntDefault("RealmsStateUpdateDelay", 20));
if (sRealmList->size() == 0)
{
TC_LOG_ERROR("server.authserver", "No valid realms specified.");
StopDB();
delete _ioService;
return 1;
}
@@ -135,15 +141,16 @@ int main(int argc, char** argv)
{
TC_LOG_ERROR("server.authserver", "Specified port out of allowed range (1-65535)");
StopDB();
delete _ioService;
return 1;
}
std::string bindIp = sConfigMgr->GetStringDefault("BindIP", "0.0.0.0");
sAuthSocketMgr.StartNetwork(_ioService, bindIp, port);
sAuthSocketMgr.StartNetwork(*_ioService, bindIp, port);
// Set signal handlers
boost::asio::signal_set signals(_ioService, SIGINT, SIGTERM);
boost::asio::signal_set signals(*_ioService, SIGINT, SIGTERM);
#if PLATFORM == PLATFORM_WINDOWS
signals.add(SIGBREAK);
#endif
@@ -154,20 +161,38 @@ int main(int argc, char** argv)
// Enabled a timed callback for handling the database keep alive ping
_dbPingInterval = sConfigMgr->GetIntDefault("MaxPingTime", 30);
_dbPingTimer.expires_from_now(boost::posix_time::minutes(_dbPingInterval));
_dbPingTimer.async_wait(KeepDatabaseAliveHandler);
_dbPingTimer = new boost::asio::deadline_timer(*_ioService);
_dbPingTimer->expires_from_now(boost::posix_time::minutes(_dbPingInterval));
_dbPingTimer->async_wait(KeepDatabaseAliveHandler);
#if PLATFORM == PLATFORM_WINDOWS
if (m_ServiceStatus != -1)
{
_serviceStatusWatchTimer = new boost::asio::deadline_timer(*_ioService);
_serviceStatusWatchTimer->expires_from_now(boost::posix_time::seconds(1));
_serviceStatusWatchTimer->async_wait(ServiceStatusWatcher);
}
#endif
// Start the io service worker loop
_ioService.run();
_ioService->run();
_dbPingTimer->cancel();
sAuthSocketMgr.StopNetwork();
// Close the Database Pool and library
StopDB();
TC_LOG_INFO("server.authserver", "Halting process...");
signals.cancel();
delete _dbPingTimer;
delete _ioService;
return 0;
}
/// Initialize connection to the database
bool StartDB()
{
@@ -198,7 +223,7 @@ void StopDB()
void SignalHandler(const boost::system::error_code& error, int /*signalNumber*/)
{
if (!error)
_ioService.stop();
_ioService->stop();
}
void KeepDatabaseAliveHandler(const boost::system::error_code& error)
@@ -208,11 +233,30 @@ void KeepDatabaseAliveHandler(const boost::system::error_code& error)
TC_LOG_INFO("server.authserver", "Ping MySQL to keep connection alive");
LoginDatabase.KeepAlive();
_dbPingTimer.expires_from_now(boost::posix_time::minutes(_dbPingInterval));
_dbPingTimer.async_wait(KeepDatabaseAliveHandler);
_dbPingTimer->expires_from_now(boost::posix_time::minutes(_dbPingInterval));
_dbPingTimer->async_wait(KeepDatabaseAliveHandler);
}
}
#if PLATFORM == PLATFORM_WINDOWS
void ServiceStatusWatcher(boost::system::error_code const& error)
{
if (!error)
{
if (m_ServiceStatus == 0)
{
_ioService->stop();
delete _serviceStatusWatchTimer;
}
else
{
_serviceStatusWatchTimer->expires_from_now(boost::posix_time::seconds(1));
_serviceStatusWatchTimer->async_wait(ServiceStatusWatcher);
}
}
}
#endif
variables_map GetConsoleArguments(int argc, char** argv, std::string& configFile, std::string& configService)
{
options_description all("Allowed options");
@@ -220,7 +264,7 @@ variables_map GetConsoleArguments(int argc, char** argv, std::string& configFile
("help,h", "print usage message")
("config,c", value<std::string>(&configFile)->default_value(_TRINITY_REALM_CONFIG), "use <arg> as configuration file")
;
#ifdef _WIN32
#if PLATFORM == PLATFORM_WINDOWS
options_description win("Windows platform specific options");
win.add_options()
("service,s", value<std::string>(&configService)->default_value(""), "Windows service options: [install | uninstall]")
@@ -581,7 +581,11 @@ void SmartAI::JustDied(Unit* killer)
{
GetScript()->ProcessEventsFor(SMART_EVENT_DEATH, killer);
if (HasEscortState(SMART_ESCORT_ESCORTING))
{
EndPath(true);
me->StopMoving();//force stop
me->GetMotionMaster()->MoveIdle();
}
}
void SmartAI::KilledUnit(Unit* victim)
@@ -2542,3 +2542,29 @@ void Creature::StartPickPocketRefillTimer()
_pickpocketLootRestore = time(NULL) + sWorld->getIntConfig(CONFIG_CREATURE_PICKPOCKET_REFILL);
}
void Creature::SetTextRepeatId(uint8 textGroup, uint8 id)
{
CreatureTextRepeatIds& repeats = m_textRepeat[textGroup];
if (std::find(repeats.begin(), repeats.end(), id) == repeats.end())
repeats.push_back(id);
else
TC_LOG_ERROR("sql.sql", "CreatureTextMgr: TextGroup %u for Creature(%s) GuidLow %u Entry %u, id %u already added", uint32(textGroup), GetName().c_str(), GetGUIDLow(), GetEntry(), uint32(id));
}
CreatureTextRepeatIds Creature::GetTextRepeatGroup(uint8 textGroup)
{
CreatureTextRepeatIds ids;
CreatureTextRepeatGroup::const_iterator groupItr = m_textRepeat.find(textGroup);
if (groupItr != m_textRepeat.end())
ids = groupItr->second;
return ids;
}
void Creature::ClearTextRepeatGroup(uint8 textGroup)
{
CreatureTextRepeatGroup::iterator groupItr = m_textRepeat.find(textGroup);
if (groupItr != m_textRepeat.end())
groupItr->second.clear();
}
@@ -417,6 +417,10 @@ struct TrainerSpellData
#define MAX_VENDOR_ITEMS 150 // Limitation in 4.x.x item count in SMSG_LIST_INVENTORY
//used for handling non-repeatable random texts
typedef std::vector<uint8> CreatureTextRepeatIds;
typedef std::unordered_map<uint8, CreatureTextRepeatIds> CreatureTextRepeatGroup;
class Creature : public Unit, public GridObject<Creature>, public MapObject
{
public:
@@ -664,6 +668,10 @@ class Creature : public Unit, public GridObject<Creature>, public MapObject
void FocusTarget(Spell const* focusSpell, WorldObject const* target);
void ReleaseFocus(Spell const* focusSpell);
CreatureTextRepeatIds GetTextRepeatGroup(uint8 textGroup);
void SetTextRepeatId(uint8 textGroup, uint8 id);
void ClearTextRepeatGroup(uint8 textGroup);
protected:
bool CreateFromProto(uint32 guidlow, uint32 entry, CreatureData const* data = nullptr, uint32 vehId = 0);
bool InitEntry(uint32 entry, CreatureData const* data = nullptr);
@@ -728,6 +736,8 @@ class Creature : public Unit, public GridObject<Creature>, public MapObject
bool TriggerJustRespawned;
Spell const* _focusSpell; ///> Locks the target during spell cast for proper facing
CreatureTextRepeatGroup m_textRepeat;
};
class AssistDelayEvent : public BasicEvent
+4 -22
View File
@@ -77,7 +77,7 @@ void CreatureTextMgr::LoadCreatureTexts()
uint32 oldMSTime = getMSTime();
mTextMap.clear(); // for reload case
mTextRepeatMap.clear(); //reset all currently used temp texts
//all currently used temp texts are NOT reset
PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_SEL_CREATURE_TEXT);
PreparedQueryResult result = WorldDatabase.Query(stmt);
@@ -224,13 +224,7 @@ uint32 CreatureTextMgr::SendChat(Creature* source, uint8 textGroup, WorldObject
if (tempGroup.empty())
{
CreatureTextRepeatMap::iterator mapItr = mTextRepeatMap.find(source->GetGUID());
if (mapItr != mTextRepeatMap.end())
{
CreatureTextRepeatGroup::iterator groupItr = mapItr->second.find(textGroup);
groupItr->second.clear();
}
source->ClearTextRepeatGroup(textGroup);
tempGroup = textGroupContainer;
}
@@ -427,26 +421,14 @@ void CreatureTextMgr::SetRepeatId(Creature* source, uint8 textGroup, uint8 id)
if (!source)
return;
CreatureTextRepeatIds& repeats = mTextRepeatMap[source->GetGUID()][textGroup];
if (std::find(repeats.begin(), repeats.end(), id) == repeats.end())
repeats.push_back(id);
else
TC_LOG_ERROR("sql.sql", "CreatureTextMgr: TextGroup %u for Creature(%s) GuidLow %u Entry %u, id %u already added", uint32(textGroup), source->GetName().c_str(), source->GetGUIDLow(), source->GetEntry(), uint32(id));
source->SetTextRepeatId(textGroup, id);
}
CreatureTextRepeatIds CreatureTextMgr::GetRepeatGroup(Creature* source, uint8 textGroup)
{
ASSERT(source);//should never happen
CreatureTextRepeatIds ids;
CreatureTextRepeatMap::const_iterator mapItr = mTextRepeatMap.find(source->GetGUID());
if (mapItr != mTextRepeatMap.end())
{
CreatureTextRepeatGroup::const_iterator groupItr = (*mapItr).second.find(textGroup);
if (groupItr != mapItr->second.end())
ids = groupItr->second;
}
return ids;
return source->GetTextRepeatGroup(textGroup);
}
bool CreatureTextMgr::TextExist(uint32 sourceEntry, uint8 textGroup)
-6
View File
@@ -75,11 +75,6 @@ typedef std::unordered_map<uint32, CreatureTextHolder> CreatureTextMap; // a
typedef std::map<CreatureTextId, CreatureTextLocale> LocaleCreatureTextMap;
//used for handling non-repeatable random texts
typedef std::vector<uint8> CreatureTextRepeatIds;
typedef std::unordered_map<uint8, CreatureTextRepeatIds> CreatureTextRepeatGroup;
typedef std::unordered_map<ObjectGuid, CreatureTextRepeatGroup> CreatureTextRepeatMap;//guid based
class CreatureTextMgr
{
private:
@@ -115,7 +110,6 @@ class CreatureTextMgr
float GetRangeForChatType(ChatMsg msgType) const;
CreatureTextMap mTextMap;
CreatureTextRepeatMap mTextRepeatMap;
LocaleCreatureTextMap mLocaleTextMap;
};
@@ -77,12 +77,11 @@ class boss_alar : public CreatureScript
public:
boss_alar() : CreatureScript("boss_alar") { }
struct boss_alarAI : public ScriptedAI
struct boss_alarAI : public BossAI
{
boss_alarAI(Creature* creature) : ScriptedAI(creature)
boss_alarAI(Creature* creature) : BossAI(creature, DATA_ALAR)
{
Initialize();
instance = creature->GetInstanceScript();
DefaultMoveSpeedRate = creature->GetSpeedRate(MOVE_RUN);
DiveBomb_Timer = 0;
MeltArmor_Timer = 0;
@@ -105,8 +104,6 @@ class boss_alar : public CreatureScript
cur_wp = 4;
}
InstanceScript* instance;
WaitEventType WaitEvent;
uint32 WaitTimer;
@@ -129,9 +126,8 @@ class boss_alar : public CreatureScript
void Reset() override
{
instance->SetData(DATA_ALAREVENT, NOT_STARTED);
Initialize();
_Reset();
me->SetDisplayId(me->GetNativeDisplayId());
me->SetSpeed(MOVE_RUN, DefaultMoveSpeedRate);
@@ -145,18 +141,11 @@ class boss_alar : public CreatureScript
void EnterCombat(Unit* /*who*/) override
{
instance->SetData(DATA_ALAREVENT, IN_PROGRESS);
_EnterCombat();
me->SetDisableGravity(true); // after enterevademode will be set walk movement
DoZoneInCombat();
me->setActive(true);
}
void JustDied(Unit* /*killer*/) override
{
instance->SetData(DATA_ALAREVENT, DONE);
}
void JustSummoned(Creature* summon) override
{
if (summon->GetEntry() == CREATURE_EMBER_OF_ALAR)
@@ -508,7 +497,7 @@ class npc_ember_of_alar : public CreatureScript
DoCast(me, SPELL_EMBER_BLAST, true);
me->SetDisplayId(11686);
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
if (instance->GetData(DATA_ALAREVENT) == 2)
if (instance->GetBossState(DATA_ALAR) == IN_PROGRESS)
{
if (Unit* Alar = ObjectAccessor::GetUnit(*me, instance->GetGuidData(DATA_ALAR)))
{
@@ -92,17 +92,13 @@ class boss_high_astromancer_solarian : public CreatureScript
{
public:
boss_high_astromancer_solarian()
: CreatureScript("boss_high_astromancer_solarian")
{
}
boss_high_astromancer_solarian() : CreatureScript("boss_high_astromancer_solarian") { }
struct boss_high_astromancer_solarianAI : public ScriptedAI
struct boss_high_astromancer_solarianAI : public BossAI
{
boss_high_astromancer_solarianAI(Creature* creature) : ScriptedAI(creature), Summons(me)
boss_high_astromancer_solarianAI(Creature* creature) : BossAI(creature, DATA_HIGH_ASTROMANCER_SOLARIAN)
{
Initialize();
instance = creature->GetInstanceScript();
defaultarmor = creature->GetArmor();
defaultsize = creature->GetObjectScale();
@@ -126,9 +122,6 @@ class boss_high_astromancer_solarian : public CreatureScript
Phase = 1;
}
InstanceScript* instance;
SummonList Summons;
uint8 Phase;
uint32 ArcaneMissiles_Timer;
@@ -152,16 +145,13 @@ class boss_high_astromancer_solarian : public CreatureScript
void Reset() override
{
Initialize();
instance->SetData(DATA_HIGHASTROMANCERSOLARIANEVENT, NOT_STARTED);
_Reset();
me->SetArmor(defaultarmor);
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
me->SetVisible(true);
me->SetObjectScale(defaultsize);
me->SetDisplayId(MODEL_HUMAN);
Summons.DespawnAll();
}
void KilledUnit(Unit* /*victim*/) override
@@ -174,15 +164,13 @@ class boss_high_astromancer_solarian : public CreatureScript
me->SetObjectScale(defaultsize);
me->SetDisplayId(MODEL_HUMAN);
Talk(SAY_DEATH);
instance->SetData(DATA_HIGHASTROMANCERSOLARIANEVENT, DONE);
_JustDied();
}
void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_AGGRO);
DoZoneInCombat();
instance->SetData(DATA_HIGHASTROMANCERSOLARIANEVENT, IN_PROGRESS);
_EnterCombat();
}
void SummonMinion(uint32 entry, float x, float y, float z)
@@ -193,7 +181,7 @@ class boss_high_astromancer_solarian : public CreatureScript
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
Summoned->AI()->AttackStart(target);
Summons.Summon(Summoned);
summons.Summon(Summoned);
}
}
@@ -431,10 +419,7 @@ class npc_solarium_priest : public CreatureScript
{
public:
npc_solarium_priest()
: CreatureScript("npc_solarium_priest")
{
}
npc_solarium_priest() : CreatureScript("npc_solarium_priest") { }
struct npc_solarium_priestAI : public ScriptedAI
{
@@ -462,9 +447,7 @@ class npc_solarium_priest : public CreatureScript
Initialize();
}
void EnterCombat(Unit* /*who*/) override
{
}
void EnterCombat(Unit* /*who*/) override { }
void UpdateAI(uint32 diff) override
{
@@ -286,17 +286,13 @@ class boss_kaelthas : public CreatureScript
{
public:
boss_kaelthas()
: CreatureScript("boss_kaelthas")
boss_kaelthas() : CreatureScript("boss_kaelthas") { }
struct boss_kaelthasAI : public BossAI
{
}
//Kael'thas AI
struct boss_kaelthasAI : public ScriptedAI
{
boss_kaelthasAI(Creature* creature) : ScriptedAI(creature), summons(me)
boss_kaelthasAI(Creature* creature) : BossAI(creature, DATA_KAELTHAS)
{
Initialize();
instance = creature->GetInstanceScript();
PhaseSubphase = 0;
Phase_Timer = 0;
}
@@ -320,8 +316,6 @@ class boss_kaelthas : public CreatureScript
ChainPyros = false;
}
InstanceScript* instance;
uint32 Fireball_Timer;
uint32 ArcaneDisruption_Timer;
uint32 Phoenix_Timer;
@@ -341,8 +335,6 @@ class boss_kaelthas : public CreatureScript
bool IsCastingFireball;
bool ChainPyros;
SummonList summons;
ObjectGuid m_auiAdvisorGuid[MAX_ADVISORS];
void Reset() override
@@ -351,8 +343,8 @@ class boss_kaelthas : public CreatureScript
if (me->IsInCombat())
PrepareAdvisors();
summons.DespawnAll();
_Reset();
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
@@ -413,7 +405,6 @@ class boss_kaelthas : public CreatureScript
}
void MoveInLineOfSight(Unit* who) override
{
if (!me->HasUnitState(UNIT_STATE_STUNNED) && me->CanCreatureAttack(who))
{
@@ -444,6 +435,8 @@ class boss_kaelthas : public CreatureScript
{
if (!instance->GetData(DATA_KAELTHASEVENT) && !Phase)
StartEvent();
instance->SetBossState(DATA_KAELTHAS, IN_PROGRESS);
}
void KilledUnit(Unit* /*victim*/) override
@@ -463,11 +456,6 @@ class boss_kaelthas : public CreatureScript
}
}
void SummonedCreatureDespawn(Creature* summon) override
{
summons.Despawn(summon);
}
void JustDied(Unit* /*killer*/) override
{
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
@@ -475,8 +463,6 @@ class boss_kaelthas : public CreatureScript
Talk(SAY_DEATH);
summons.DespawnAll();
instance->SetData(DATA_KAELTHASEVENT, 0);
for (uint8 i = 0; i < MAX_ADVISORS; ++i)
@@ -484,6 +470,7 @@ class boss_kaelthas : public CreatureScript
if (Unit* pAdvisor = ObjectAccessor::GetUnit(*me, m_auiAdvisorGuid[i]))
pAdvisor->Kill(pAdvisor);
}
_JustDied();
}
void UpdateAI(uint32 diff) override
@@ -1024,10 +1011,8 @@ class boss_thaladred_the_darkener : public CreatureScript
{
public:
boss_thaladred_the_darkener()
: CreatureScript("boss_thaladred_the_darkener")
{
}
boss_thaladred_the_darkener() : CreatureScript("boss_thaladred_the_darkener") { }
struct boss_thaladred_the_darkenerAI : public advisorbase_ai
{
boss_thaladred_the_darkenerAI(Creature* creature) : advisorbase_ai(creature)
@@ -1130,10 +1115,8 @@ class boss_lord_sanguinar : public CreatureScript
{
public:
boss_lord_sanguinar()
: CreatureScript("boss_lord_sanguinar")
{
}
boss_lord_sanguinar() : CreatureScript("boss_lord_sanguinar") { }
struct boss_lord_sanguinarAI : public advisorbase_ai
{
boss_lord_sanguinarAI(Creature* creature) : advisorbase_ai(creature)
@@ -1205,10 +1188,8 @@ class boss_grand_astromancer_capernian : public CreatureScript
{
public:
boss_grand_astromancer_capernian()
: CreatureScript("boss_grand_astromancer_capernian")
{
}
boss_grand_astromancer_capernian() : CreatureScript("boss_grand_astromancer_capernian") { }
struct boss_grand_astromancer_capernianAI : public advisorbase_ai
{
boss_grand_astromancer_capernianAI(Creature* creature) : advisorbase_ai(creature)
@@ -1358,10 +1339,8 @@ class boss_master_engineer_telonicus : public CreatureScript
{
public:
boss_master_engineer_telonicus()
: CreatureScript("boss_master_engineer_telonicus")
{
}
boss_master_engineer_telonicus() : CreatureScript("boss_master_engineer_telonicus") { }
struct boss_master_engineer_telonicusAI : public advisorbase_ai
{
boss_master_engineer_telonicusAI(Creature* creature) : advisorbase_ai(creature)
@@ -1449,10 +1428,8 @@ class npc_kael_flamestrike : public CreatureScript
{
public:
npc_kael_flamestrike()
: CreatureScript("npc_kael_flamestrike")
{
}
npc_kael_flamestrike() : CreatureScript("npc_kael_flamestrike") { }
struct npc_kael_flamestrikeAI : public ScriptedAI
{
npc_kael_flamestrikeAI(Creature* creature) : ScriptedAI(creature)
@@ -1482,7 +1459,6 @@ class npc_kael_flamestrike : public CreatureScript
void MoveInLineOfSight(Unit* /*who*/) override { }
void EnterCombat(Unit* /*who*/) override { }
void UpdateAI(uint32 diff) override
@@ -1523,10 +1499,8 @@ class npc_phoenix_tk : public CreatureScript
{
public:
npc_phoenix_tk()
: CreatureScript("npc_phoenix_tk")
{
}
npc_phoenix_tk() : CreatureScript("npc_phoenix_tk") { }
struct npc_phoenix_tkAI : public ScriptedAI
{
npc_phoenix_tkAI(Creature* creature) : ScriptedAI(creature)
@@ -1585,10 +1559,8 @@ class npc_phoenix_egg_tk : public CreatureScript
{
public:
npc_phoenix_egg_tk()
: CreatureScript("npc_phoenix_egg_tk")
{
}
npc_phoenix_egg_tk() : CreatureScript("npc_phoenix_egg_tk") { }
struct npc_phoenix_egg_tkAI : public ScriptedAI
{
npc_phoenix_egg_tkAI(Creature* creature) : ScriptedAI(creature)
@@ -1611,7 +1583,6 @@ class npc_phoenix_egg_tk : public CreatureScript
//ignore any
void MoveInLineOfSight(Unit* /*who*/) override { }
void AttackStart(Unit* who) override
{
if (me->Attack(who, false))
@@ -47,17 +47,13 @@ class boss_void_reaver : public CreatureScript
{
public:
boss_void_reaver()
: CreatureScript("boss_void_reaver")
{
}
boss_void_reaver() : CreatureScript("boss_void_reaver") { }
struct boss_void_reaverAI : public ScriptedAI
struct boss_void_reaverAI : public BossAI
{
boss_void_reaverAI(Creature* creature) : ScriptedAI(creature)
boss_void_reaverAI(Creature* creature) : BossAI(creature, DATA_VOID_REAVER)
{
Initialize();
instance = creature->GetInstanceScript();
}
void Initialize()
@@ -70,8 +66,6 @@ class boss_void_reaver : public CreatureScript
Enraged = false;
}
InstanceScript* instance;
uint32 Pounding_Timer;
uint32 ArcaneOrb_Timer;
uint32 KnockAway_Timer;
@@ -82,9 +76,7 @@ class boss_void_reaver : public CreatureScript
void Reset() override
{
Initialize();
if (me->IsAlive())
instance->SetData(DATA_VOIDREAVEREVENT, NOT_STARTED);
_Reset();
}
void KilledUnit(Unit* /*victim*/) override
@@ -96,15 +88,13 @@ class boss_void_reaver : public CreatureScript
{
Talk(SAY_DEATH);
DoZoneInCombat();
instance->SetData(DATA_VOIDREAVEREVENT, DONE);
_JustDied();
}
void EnterCombat(Unit* /*who*/) override
{
Talk(SAY_AGGRO);
instance->SetData(DATA_VOIDREAVEREVENT, IN_PROGRESS);
_EnterCombat();
}
void UpdateAI(uint32 diff) override
@@ -27,8 +27,6 @@ EndScriptData */
#include "InstanceScript.h"
#include "the_eye.h"
#define MAX_ENCOUNTER 5
/* The Eye encounters:
0 - Kael'thas event
1 - Al' ar event
@@ -39,20 +37,16 @@ EndScriptData */
class instance_the_eye : public InstanceMapScript
{
public:
instance_the_eye()
: InstanceMapScript("instance_the_eye", 550)
{
}
instance_the_eye() : InstanceMapScript("instance_the_eye", 550) { }
struct instance_the_eye_InstanceMapScript : public InstanceScript
{
instance_the_eye_InstanceMapScript(Map* map) : InstanceScript(map)
{
SetHeaders(DataHeader);
memset(&m_auiEncounter, 0, sizeof(m_auiEncounter));
SetBossNumber(EncounterCount);
KaelthasEventPhase = 0;
AlarEventPhase = 0;
}
ObjectGuid ThaladredTheDarkener;
@@ -63,44 +57,34 @@ class instance_the_eye : public InstanceMapScript
ObjectGuid Astromancer;
ObjectGuid Alar;
uint8 KaelthasEventPhase;
uint8 AlarEventPhase;
uint32 m_auiEncounter[MAX_ENCOUNTER];
bool IsEncounterInProgress() const override
{
for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
if (m_auiEncounter[i] == IN_PROGRESS)
return true;
return false;
}
void OnCreatureCreate(Creature* creature) override
{
switch (creature->GetEntry())
{
case 20064:
ThaladredTheDarkener = creature->GetGUID();
break;
case 20063:
MasterEngineerTelonicus = creature->GetGUID();
break;
case 20062:
GrandAstromancerCapernian = creature->GetGUID();
break;
case 20060:
LordSanguinar = creature->GetGUID();
break;
case 19622:
Kaelthas = creature->GetGUID();
break;
case 18805:
Astromancer = creature->GetGUID();
break;
case 19514:
Alar = creature->GetGUID();
break;
case NPC_SANGUINAR:
LordSanguinar = creature->GetGUID();
break;
case NPC_CAPERNIAN:
GrandAstromancerCapernian = creature->GetGUID();
break;
case NPC_TELONICUS:
MasterEngineerTelonicus = creature->GetGUID();
break;
case NPC_THALADRED:
ThaladredTheDarkener = creature->GetGUID();
break;
case NPC_KAELTHAS:
Kaelthas = creature->GetGUID();
break;
case NPC_HIGH_ASTROMANCER_SOLARIAN:
Astromancer = creature->GetGUID();
break;
case NPC_ALAR:
Alar = creature->GetGUID();
break;
default:
break;
}
}
@@ -113,7 +97,7 @@ class instance_the_eye : public InstanceMapScript
case DATA_GRANDASTROMANCERCAPERNIAN: return GrandAstromancerCapernian;
case DATA_MASTERENGINEERTELONICUS: return MasterEngineerTelonicus;
case DATA_KAELTHAS: return Kaelthas;
case DATA_ASTROMANCER: return Astromancer;
case DATA_HIGH_ASTROMANCER_SOLARIAN: return Astromancer;
case DATA_ALAR: return Alar;
}
return ObjectGuid::Empty;
@@ -123,64 +107,23 @@ class instance_the_eye : public InstanceMapScript
{
switch (type)
{
case DATA_ALAREVENT:
AlarEventPhase = data;
m_auiEncounter[0] = data;
break;
case DATA_HIGHASTROMANCERSOLARIANEVENT:
m_auiEncounter[1] = data;
break;
case DATA_VOIDREAVEREVENT:
m_auiEncounter[2] = data;
break;
case DATA_KAELTHASEVENT:
KaelthasEventPhase = data;
m_auiEncounter[3] = data;
break;
case DATA_KAELTHASEVENT:
KaelthasEventPhase = data;
break;
default:
break;
}
if (data == DONE)
SaveToDB();
}
uint32 GetData(uint32 type) const override
{
switch (type)
{
case DATA_ALAREVENT: return AlarEventPhase;
case DATA_HIGHASTROMANCERSOLARIANEVENT: return m_auiEncounter[1];
case DATA_VOIDREAVEREVENT: return m_auiEncounter[2];
case DATA_KAELTHASEVENT: return KaelthasEventPhase;
case DATA_KAELTHASEVENT:
return KaelthasEventPhase;
}
return 0;
}
std::string GetSaveData() override
{
OUT_SAVE_INST_DATA;
std::ostringstream stream;
stream << m_auiEncounter[0] << ' ' << m_auiEncounter[1] << ' ' << m_auiEncounter[2] << ' ' << m_auiEncounter[3];
OUT_SAVE_INST_DATA_COMPLETE;
return stream.str();
}
void Load(const char* in) override
{
if (!in)
{
OUT_LOAD_INST_DATA_FAIL;
return;
}
OUT_LOAD_INST_DATA(in);
std::istringstream stream(in);
stream >> m_auiEncounter[0] >> m_auiEncounter[1] >> m_auiEncounter[2] >> m_auiEncounter[3];
for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
if (m_auiEncounter[i] == IN_PROGRESS) // Do not load an encounter as "In Progress" - reset it instead.
m_auiEncounter[i] = NOT_STARTED;
OUT_LOAD_INST_DATA_COMPLETE;
}
};
InstanceScript* GetInstanceScript(InstanceMap* map) const override
@@ -21,19 +21,33 @@
#define DataHeader "TE"
uint32 const EncounterCount = 4;
enum DataTypes
{
DATA_ALAREVENT = 1,
DATA_ASTROMANCER = 2,
DATA_GRANDASTROMANCERCAPERNIAN = 3,
DATA_HIGHASTROMANCERSOLARIANEVENT = 4,
DATA_KAELTHAS = 5,
// Encounter States/Boss GUIDs
DATA_KAELTHAS = 0,
DATA_ALAR = 1,
DATA_HIGH_ASTROMANCER_SOLARIAN = 2,
DATA_VOID_REAVER = 3,
DATA_ASTROMANCER = 4,
DATA_GRANDASTROMANCERCAPERNIAN = 5,
DATA_KAELTHASEVENT = 6,
DATA_LORDSANGUINAR = 7,
DATA_MASTERENGINEERTELONICUS = 8,
DATA_THALADREDTHEDARKENER = 10,
DATA_VOIDREAVEREVENT = 11,
DATA_ALAR = 12
DATA_THALADREDTHEDARKENER = 9
};
enum CreatureIds
{
NPC_SANGUINAR = 20060,
NPC_CAPERNIAN = 20062,
NPC_TELONICUS = 20063,
NPC_THALADRED = 20064,
NPC_KAELTHAS = 19622,
NPC_HIGH_ASTROMANCER_SOLARIAN = 18805,
NPC_ALAR = 19514
};
#endif