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:
commit
86c34de614
30 files changed
+2563
-1631
No files matched your search
+1235
-1235
File diff suppressed because it is too large.
Load diff
@@ -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()
|
||||
|
||||
@@ -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
|
||||
}
|
||||
@@ -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);
|
||||
+3
-3
@@ -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');
|
||||
+18
-18
@@ -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;
|
||||
+2
-2
@@ -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)");
|
||||
+4
-4
@@ -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
@@ -1 +1 @@
|
||||
UPDATE `creature_template` SET `ScriptName` = '' WHERE `entry` = 29920;
|
||||
UPDATE `creature_template` SET `ScriptName` = '' WHERE `entry` = 29920;
|
||||
+3
-3
@@ -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');
|
||||
+3
-3
@@ -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, '');
|
||||
+4
-4
@@ -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');
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
Reference in new issue
Block a user