Merge branch 'master' into Playerbot

# Conflicts:
#	src/server/game/Entities/Creature/Creature.cpp
#	src/server/game/Entities/Creature/Creature.h
#	src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp
This commit is contained in:
郑佩茹
2022-07-27 09:11:50 -06:00
140 changed files with 6677 additions and 4753 deletions

View File

@@ -0,0 +1,8 @@
-- DB update 2022_07_12_01 -> 2022_07_13_00
--
UPDATE `creature_template` SET `exp`=0, `ManaModifier`=1 WHERE `entry`=11657;
UPDATE `creature_template` SET `unit_flags`=`unit_flags`|512 WHERE `entry`=11677;
UPDATE `creature_template` SET `minlevel`=53, `maxlevel`=54 WHERE `entry`=11600;
UPDATE `creature_template` SET `lootid`=0,`mingold`=0, `maxgold`=0 WHERE `entry` IN (10987,11600,11602,11604,11605,10982,11603);

View File

@@ -0,0 +1,6 @@
-- DB update 2022_07_13_00 -> 2022_07_18_00
--
DELETE FROM `item_loot_template` WHERE (`Entry` = 9265) AND (`Item` IN (9360, 9361));
INSERT INTO `item_loot_template` (`Entry`, `Item`, `Reference`, `Chance`, `QuestRequired`, `LootMode`, `GroupId`, `MinCount`, `MaxCount`, `Comment`) VALUES
(9265, 9360, 0, 92, 0, 1, 1, 1, 1, 'Cuergo\'s Hidden Treasure - Cuergo\'s Gold'),
(9265, 9361, 0, 0, 0, 1, 1, 1, 1, 'Cuergo\'s Hidden Treasure - Cuergo\'s Gold with worm');

View File

@@ -0,0 +1,2 @@
-- DB update 2022_07_18_00 -> 2022_07_18_01
UPDATE `creature_template` SET `flags_extra` = `flags_extra` |64 WHERE (`entry` = 10161);

View File

@@ -0,0 +1,3 @@
-- DB update 2022_07_18_01 -> 2022_07_19_00
--
UPDATE `spell_dbc` SET `DurationIndex`=21 WHERE `ID`=24235;

View File

@@ -0,0 +1,3 @@
-- DB update 2022_07_19_00 -> 2022_07_19_01
--
UPDATE `creature_template` SET `ScriptName`='npc_brain_wash_totem' WHERE `entry`=15112;

View File

@@ -0,0 +1,8 @@
-- DB update 2022_07_19_01 -> 2022_07_19_02
--
UPDATE `creature` SET `MovementType` = 1, `wander_distance` = 5 WHERE `guid` IN (51879,51914);
UPDATE `creature` SET `MovementType` = 0 WHERE `guid` = 132313;
UPDATE `creature_template` SET `AIName` = 'NullCreatureAI' WHERE `AIName` IN ('NullCreatureAi', 'NullAI');
UPDATE `creature_template` SET `AIName` = 'AggressorAI' WHERE `AIName` = 'AgressorAI';
UPDATE `creature_template` SET `AIName` = '' WHERE `AIName` = 'OutdoorPvPObjectiveAI';

View File

@@ -0,0 +1,3 @@
-- DB update 2022_07_19_02 -> 2022_07_19_03
--
UPDATE `spell_proc_event` SET `procPhase`=1 WHERE `entry`=24658;

View File

@@ -0,0 +1,284 @@
-- DB update 2022_07_19_03 -> 2022_07_19_04
--
/* Maintenance on ZG Entranceway mobs part 2 Pooling */
DELETE FROM `creature` WHERE `guid` IN (49116, 49117, 49118, 49119);
DELETE FROM `creature_addon` WHERE `guid` IN (49116, 49117, 49118, 49119);
DELETE FROM `waypoint_data` WHERE `id` IN (49116, 49117, 49118, 49119);
/* 20 Pools of V( (Themselves Pooled) to represent every possibility; this is the only way I know how to represent every possibility I am open to other suggestions; 72 snakes
INSERT INTO `creature` (`guid`, `id1`, `id2`, `id3`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `wander_distance`, `currentwaypoint`, `curhealth`, `curmana`, `MovementType`, `npcflag`, `unit_flags`, `dynamicflags`, `ScriptName`, `VerifiedBuild`) VALUES
(@GUID+, 0, 0, 0, 309, 0, 0, 1, 1, 0, -11884.3, -1379.01, 66.4316, 3.36848, 7200, 3, 0, 15260, 0, 1, 0, 0, 0, '', 0), -- Empty Occasionally 1 slot, front facing exit
(@GUID+, 0, 0, 0, 309, 0, 0, 1, 1, 0, -11896.4, -1365.13, 69.8727, 2.42601, 7200, 3, 0, 15260, 0, 1, 0, 0, 0, '', 0), -- Empty Occasionally 2 slot left facing exit
(@GUID+, 0, 0, 0, 309, 0, 0, 1, 1, 0, -11885, -1368.42, 68.8007, 5.53269, 7200, 3, 0, 15260, 0, 1, 0, 0, 0, '', 0), -- 3 slot center slot
(@GUID+, 0, 0, 0, 309, 0, 0, 1, 1, 0, -11878.2, -1368.68, 69.7661, 3.90954, 7200, 3, 0, 15260, 0, 1, 0, 0, 0, '', 0); -- 4 slot right slot
@POOL+0 Master Pool of all of the following Pools
8 Pools are 6.25% to create a 50% chance of 3 mobs spawning, let E1 and E2 represent empty xyz slots that have been witnessed empty
@POOL+1 E1 A@GUID+0 S@GUID+1 X@GUID+2
@POOL+2 E1 A@GUID+3 X@GUID+4 S@GUID+5
@POOL+3 E1 S@GUID+6 A@GUID+7 X@GUID+8
@POOL+4 E1 S@GUID+9 X@GUID+10 A@GUID+11
@POOL+5 A@GUID+12 E2 S@GUID+13 X@GUID+14
@POOL+6 A@GUID+15 E2 X@GUID+16 S@GUID+17
@POOL+7 S@GUID+18 E2 A@GUID+19 X@GUID+20
@POOL+8 S@GUID+21 E2 X@GUID+22 A@GUID+23
11 Pools of 4.16% and 1 of 4.24% to create a 50% chance of 4 mobs spawning 1-3 of each type
@POOL+9 A@GUID+24 S@GUID+25 X@GUID+26 X@GUID+27
@POOL+10 A@GUID+28 X@GUID+29 S@GUID+30 X@GUID+31
@POOL+11 A@GUID+32 X@GUID+33 X@GUID+34 S@GUID+35
@POOL+12 S@GUID+36 A@GUID+37 X@GUID+38 X@GUID+39
@POOL+13 S@GUID+40 X@GUID+41 A@GUID+42 X@GUID+43
@POOL+14 S@GUID+44 X@GUID+45 X@GUID+46 A@GUID+47
@POOL+15 X@GUID+48 A@GUID+49 S@GUID+50 X@GUID+51
@POOL+16 X@GUID+52 A@GUID+53 X@GUID+54 S@GUID+55
@POOL+17 X@GUID+56 S@GUID+57 A@GUID+58 X@GUID+59
@POOL+18 X@GUID+60 S@GUID+61 X@GUID+62 A@GUID+63
@POOL+19 X@GUID+64 X@GUID+65 A@GUID+66 S@GUID+67
@POOL+20 X@GUID+68 X@GUID+69 S@GUID+70 A@GUID+71 */
SET @GUID :=86939;
DELETE FROM `creature` WHERE `guid` BETWEEN @GUID+0 AND @GUID+71;
INSERT INTO `creature` (`guid`, `id1`, `id2`, `id3`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `wander_distance`, `currentwaypoint`, `curhealth`, `curmana`, `MovementType`, `npcflag`, `unit_flags`, `dynamicflags`, `ScriptName`, `VerifiedBuild`) VALUES
-- 3 Packs
-- @POOL+1 E1 11372, 0, 0,@GUID+0 11371, 0, 0,@GUID+1 11371, 11372, 0,@GUID+2
(@GUID+0, 11372, 0, 0, 309, 0, 0, 1, 1, 0, -11896.4, -1365.13, 69.8727, 2.42601, 7200, 3, 0, 15260, 0, 1, 0, 0, 0, '', 0), -- 2
(@GUID+1, 11371, 0, 0, 309, 0, 0, 1, 1, 0, -11885, -1368.42, 68.8007, 5.53269, 7200, 3, 0, 15260, 0, 1, 0, 0, 0, '', 0), -- 3
(@GUID+2, 11371, 11372, 0, 309, 0, 0, 1, 1, 0, -11878.2, -1368.68, 69.7661, 3.90954, 7200, 3, 0, 15260, 0, 1, 0, 0, 0, '', 0), -- 4
-- @POOL+2 E1 11372, 0, 0,@GUID+3 11371, 11372, 0,@GUID+4 11371, 0, 0,@GUID+5
(@GUID+3, 11372, 0, 0, 309, 0, 0, 1, 1, 0, -11896.4, -1365.13, 69.8727, 2.42601, 7200, 3, 0, 15260, 0, 1, 0, 0, 0, '', 0), -- 2
(@GUID+4, 11371, 11372, 0, 309, 0, 0, 1, 1, 0, -11885, -1368.42, 68.8007, 5.53269, 7200, 3, 0, 15260, 0, 1, 0, 0, 0, '', 0), -- 3
(@GUID+5, 11371, 0, 0, 309, 0, 0, 1, 1, 0, -11878.2, -1368.68, 69.7661, 3.90954, 7200, 3, 0, 15260, 0, 1, 0, 0, 0, '', 0), -- 4
-- @POOL+3 E1 11371, 0, 0,@GUID+6 11372, 0, 0,@GUID+7 11371, 11372, 0,@GUID+8
(@GUID+6, 11371, 0, 0, 309, 0, 0, 1, 1, 0, -11896.4, -1365.13, 69.8727, 2.42601, 7200, 3, 0, 15260, 0, 1, 0, 0, 0, '', 0), -- 2
(@GUID+7, 11372, 0, 0, 309, 0, 0, 1, 1, 0, -11885, -1368.42, 68.8007, 5.53269, 7200, 3, 0, 15260, 0, 1, 0, 0, 0, '', 0), -- 3
(@GUID+8, 11371, 11372, 0, 309, 0, 0, 1, 1, 0, -11878.2, -1368.68, 69.7661, 3.90954, 7200, 3, 0, 15260, 0, 1, 0, 0, 0, '', 0), -- 4
-- @POOL+4 E1 11371, 0, 0,@GUID+9 11371, 11372, 0,@GUID+10 11372, 0, 0,@GUID+11
(@GUID+9, 11371, 0, 0, 309, 0, 0, 1, 1, 0, -11896.4, -1365.13, 69.8727, 2.42601, 7200, 3, 0, 15260, 0, 1, 0, 0, 0, '', 0), -- 2
(@GUID+10, 11371, 11372, 0, 309, 0, 0, 1, 1, 0, -11885, -1368.42, 68.8007, 5.53269, 7200, 3, 0, 15260, 0, 1, 0, 0, 0, '', 0), -- 3
(@GUID+11, 11372, 0, 0, 309, 0, 0, 1, 1, 0, -11878.2, -1368.68, 69.7661, 3.90954, 7200, 3, 0, 15260, 0, 1, 0, 0, 0, '', 0), -- 4
-- @POOL+5 11372, 0, 0,@GUID+12 E2 11371, 0, 0,@GUID+13 11371, 11372, 0,@GUID+14
(@GUID+12, 11372, 0, 0, 309, 0, 0, 1, 1, 0, -11884.3, -1379.01, 66.4316, 3.36848, 7200, 3, 0, 15260, 0, 1, 0, 0, 0, '', 0), -- 1
(@GUID+13, 11371, 0, 0, 309, 0, 0, 1, 1, 0, -11885, -1368.42, 68.8007, 5.53269, 7200, 3, 0, 15260, 0, 1, 0, 0, 0, '', 0), -- 3
(@GUID+14, 11371, 11372, 0, 309, 0, 0, 1, 1, 0, -11878.2, -1368.68, 69.7661, 3.90954, 7200, 3, 0, 15260, 0, 1, 0, 0, 0, '', 0), -- 4
-- @POOL+6 11372, 0, 0,@GUID+15 E2 11371, 11372, 0,@GUID+16 11371, 0, 0,@GUID+17
(@GUID+15, 11372, 0, 0, 309, 0, 0, 1, 1, 0, -11884.3, -1379.01, 66.4316, 3.36848, 7200, 3, 0, 15260, 0, 1, 0, 0, 0, '', 0), -- 1
(@GUID+16, 11371, 11372, 0, 309, 0, 0, 1, 1, 0, -11885, -1368.42, 68.8007, 5.53269, 7200, 3, 0, 15260, 0, 1, 0, 0, 0, '', 0), -- 3
(@GUID+17, 11371, 0, 0, 309, 0, 0, 1, 1, 0, -11878.2, -1368.68, 69.7661, 3.90954, 7200, 3, 0, 15260, 0, 1, 0, 0, 0, '', 0), -- 4
-- @POOL+7 11371, 0, 0,@GUID+18 E2 11372, 0, 0,@GUID+19 11371, 11372, 0,@GUID+20
(@GUID+18, 11371, 0, 0, 309, 0, 0, 1, 1, 0, -11884.3, -1379.01, 66.4316, 3.36848, 7200, 3, 0, 15260, 0, 1, 0, 0, 0, '', 0), -- 1
(@GUID+19, 11372, 0, 0, 309, 0, 0, 1, 1, 0, -11885, -1368.42, 68.8007, 5.53269, 7200, 3, 0, 15260, 0, 1, 0, 0, 0, '', 0), -- 3
(@GUID+20, 11371, 11372, 0, 309, 0, 0, 1, 1, 0, -11878.2, -1368.68, 69.7661, 3.90954, 7200, 3, 0, 15260, 0, 1, 0, 0, 0, '', 0), -- 4
-- @POOL+8 11371, 0, 0,@GUID+21 E2 11371, 11372, 0,@GUID+22 11372, 0, 0,@GUID+23
(@GUID+21, 11371, 0, 0, 309, 0, 0, 1, 1, 0, -11884.3, -1379.01, 66.4316, 3.36848, 7200, 3, 0, 15260, 0, 1, 0, 0, 0, '', 0), -- 1
(@GUID+22, 11371, 11372, 0, 309, 0, 0, 1, 1, 0, -11885, -1368.42, 68.8007, 5.53269, 7200, 3, 0, 15260, 0, 1, 0, 0, 0, '', 0), -- 3
(@GUID+23, 11372, 0, 0, 309, 0, 0, 1, 1, 0, -11878.2, -1368.68, 69.7661, 3.90954, 7200, 3, 0, 15260, 0, 1, 0, 0, 0, '', 0), -- 4
-- 4 Packs
-- @POOL+9 11372, 0, 0,@GUID+24 11371, 0, 0,@GUID+25 11371, 11372, 0,@GUID+26 11371, 11372, 0,@GUID+27
(@GUID+24, 11372, 0, 0, 309, 0, 0, 1, 1, 0, -11884.3, -1379.01, 66.4316, 3.36848, 7200, 3, 0, 15260, 0, 1, 0, 0, 0, '', 0), -- 1
(@GUID+25, 11371, 0, 0, 309, 0, 0, 1, 1, 0, -11896.4, -1365.13, 69.8727, 2.42601, 7200, 3, 0, 15260, 0, 1, 0, 0, 0, '', 0), -- 2
(@GUID+26, 11371, 11372, 0, 309, 0, 0, 1, 1, 0, -11885, -1368.42, 68.8007, 5.53269, 7200, 3, 0, 15260, 0, 1, 0, 0, 0, '', 0), -- 3
(@GUID+27, 11371, 11372, 0, 309, 0, 0, 1, 1, 0, -11878.2, -1368.68, 69.7661, 3.90954, 7200, 3, 0, 15260, 0, 1, 0, 0, 0, '', 0), -- 4
-- @POOL+10 11372, 0, 0,@GUID+28 11371, 11372, 0,@GUID+29 11371, 0, 0,@GUID+30 11371, 11372, 0,@GUID+31
(@GUID+28, 11372, 0, 0, 309, 0, 0, 1, 1, 0, -11884.3, -1379.01, 66.4316, 3.36848, 7200, 3, 0, 15260, 0, 1, 0, 0, 0, '', 0), -- 1
(@GUID+29, 11371, 11372, 0, 309, 0, 0, 1, 1, 0, -11896.4, -1365.13, 69.8727, 2.42601, 7200, 3, 0, 15260, 0, 1, 0, 0, 0, '', 0), -- 2
(@GUID+30, 11371, 0, 0, 309, 0, 0, 1, 1, 0, -11885, -1368.42, 68.8007, 5.53269, 7200, 3, 0, 15260, 0, 1, 0, 0, 0, '', 0), -- 3
(@GUID+31, 11371, 11372, 0, 309, 0, 0, 1, 1, 0, -11878.2, -1368.68, 69.7661, 3.90954, 7200, 3, 0, 15260, 0, 1, 0, 0, 0, '', 0), -- 4
-- @POOL+11 11372, 0, 0,@GUID+32 11371, 11372, 0,@GUID+33 11371, 11372, 0,@GUID+34 11371, 0, 0,@GUID+35
(@GUID+32, 11372, 0, 0, 309, 0, 0, 1, 1, 0, -11884.3, -1379.01, 66.4316, 3.36848, 7200, 3, 0, 15260, 0, 1, 0, 0, 0, '', 0), -- 1
(@GUID+33, 11371, 11372, 0, 309, 0, 0, 1, 1, 0, -11896.4, -1365.13, 69.8727, 2.42601, 7200, 3, 0, 15260, 0, 1, 0, 0, 0, '', 0), -- 2
(@GUID+34, 11371, 11372, 0, 309, 0, 0, 1, 1, 0, -11885, -1368.42, 68.8007, 5.53269, 7200, 3, 0, 15260, 0, 1, 0, 0, 0, '', 0), -- 3
(@GUID+35, 11371, 0, 0, 309, 0, 0, 1, 1, 0, -11878.2, -1368.68, 69.7661, 3.90954, 7200, 3, 0, 15260, 0, 1, 0, 0, 0, '', 0), -- 4
-- @POOL+12 11371, 0, 0,@GUID+36 11372, 0, 0,@GUID+37 11371, 11372, 0,@GUID+38 11371, 11372, 0,@GUID+39
(@GUID+36, 11371, 0, 0, 309, 0, 0, 1, 1, 0, -11884.3, -1379.01, 66.4316, 3.36848, 7200, 3, 0, 15260, 0, 1, 0, 0, 0, '', 0), -- 1
(@GUID+37, 11372, 0, 0, 309, 0, 0, 1, 1, 0, -11896.4, -1365.13, 69.8727, 2.42601, 7200, 3, 0, 15260, 0, 1, 0, 0, 0, '', 0), -- 2
(@GUID+38, 11371, 11372, 0, 309, 0, 0, 1, 1, 0, -11885, -1368.42, 68.8007, 5.53269, 7200, 3, 0, 15260, 0, 1, 0, 0, 0, '', 0), -- 3
(@GUID+39, 11371, 11372, 0, 309, 0, 0, 1, 1, 0, -11878.2, -1368.68, 69.7661, 3.90954, 7200, 3, 0, 15260, 0, 1, 0, 0, 0, '', 0), -- 4
-- @POOL+13 11371, 0, 0,@GUID+40 11371, 11372, 0,@GUID+41 11372, 0, 0,@GUID+42 11371, 11372, 0,@GUID+43
(@GUID+40, 11371, 0, 0, 309, 0, 0, 1, 1, 0, -11884.3, -1379.01, 66.4316, 3.36848, 7200, 3, 0, 15260, 0, 1, 0, 0, 0, '', 0), -- 1
(@GUID+41, 11371, 11372, 0, 309, 0, 0, 1, 1, 0, -11896.4, -1365.13, 69.8727, 2.42601, 7200, 3, 0, 15260, 0, 1, 0, 0, 0, '', 0), -- 2
(@GUID+42, 11372, 0, 0, 309, 0, 0, 1, 1, 0, -11885, -1368.42, 68.8007, 5.53269, 7200, 3, 0, 15260, 0, 1, 0, 0, 0, '', 0), -- 3
(@GUID+43, 11371, 11372, 0, 309, 0, 0, 1, 1, 0, -11878.2, -1368.68, 69.7661, 3.90954, 7200, 3, 0, 15260, 0, 1, 0, 0, 0, '', 0), -- 4
-- @POOL+14 11371, 0, 0,@GUID+44 11371, 11372, 0,@GUID+45 11371, 11372, 0,@GUID+46 11372, 0, 0,@GUID+47
(@GUID+44, 11371, 0, 0, 309, 0, 0, 1, 1, 0, -11884.3, -1379.01, 66.4316, 3.36848, 7200, 3, 0, 15260, 0, 1, 0, 0, 0, '', 0), -- 1
(@GUID+45, 11371, 11372, 0, 309, 0, 0, 1, 1, 0, -11896.4, -1365.13, 69.8727, 2.42601, 7200, 3, 0, 15260, 0, 1, 0, 0, 0, '', 0), -- 2
(@GUID+46, 11371, 11372, 0, 309, 0, 0, 1, 1, 0, -11885, -1368.42, 68.8007, 5.53269, 7200, 3, 0, 15260, 0, 1, 0, 0, 0, '', 0), -- 3
(@GUID+47, 11372, 0, 0, 309, 0, 0, 1, 1, 0, -11878.2, -1368.68, 69.7661, 3.90954, 7200, 3, 0, 15260, 0, 1, 0, 0, 0, '', 0), -- 4
-- @POOL+15 11371, 11372, 0,@GUID+48 11372, 0, 0,@GUID+49 11371, 0, 0,@GUID+50 11371, 11372, 0,@GUID+51
(@GUID+48, 11371, 11372, 0, 309, 0, 0, 1, 1, 0, -11884.3, -1379.01, 66.4316, 3.36848, 7200, 3, 0, 15260, 0, 1, 0, 0, 0, '', 0), -- 1
(@GUID+49, 11372, 0, 0, 309, 0, 0, 1, 1, 0, -11896.4, -1365.13, 69.8727, 2.42601, 7200, 3, 0, 15260, 0, 1, 0, 0, 0, '', 0), -- 2
(@GUID+50, 11371, 0, 0, 309, 0, 0, 1, 1, 0, -11885, -1368.42, 68.8007, 5.53269, 7200, 3, 0, 15260, 0, 1, 0, 0, 0, '', 0), -- 3
(@GUID+51, 11371, 11372, 0, 309, 0, 0, 1, 1, 0, -11878.2, -1368.68, 69.7661, 3.90954, 7200, 3, 0, 15260, 0, 1, 0, 0, 0, '', 0), -- 4
-- @POOL+16 11371, 11372, 0,@GUID+52 11372, 0, 0,@GUID+53 11371, 11372, 0,@GUID+54 11371, 0, 0,@GUID+55
(@GUID+52, 11371, 11372, 0, 309, 0, 0, 1, 1, 0, -11884.3, -1379.01, 66.4316, 3.36848, 7200, 3, 0, 15260, 0, 1, 0, 0, 0, '', 0), -- 1
(@GUID+53, 11372, 0, 0, 309, 0, 0, 1, 1, 0, -11896.4, -1365.13, 69.8727, 2.42601, 7200, 3, 0, 15260, 0, 1, 0, 0, 0, '', 0), -- 2
(@GUID+54, 11371, 11372, 0, 309, 0, 0, 1, 1, 0, -11885, -1368.42, 68.8007, 5.53269, 7200, 3, 0, 15260, 0, 1, 0, 0, 0, '', 0), -- 3
(@GUID+55, 11371, 0, 0, 309, 0, 0, 1, 1, 0, -11878.2, -1368.68, 69.7661, 3.90954, 7200, 3, 0, 15260, 0, 1, 0, 0, 0, '', 0), -- 4
-- @POOL+17 11371, 11372, 0,@GUID+56 11371, 0, 0,@GUID+57 11372, 0, 0,@GUID+58 11371, 11372, 0,@GUID+59
(@GUID+56, 11371, 11372, 0, 309, 0, 0, 1, 1, 0, -11884.3, -1379.01, 66.4316, 3.36848, 7200, 3, 0, 15260, 0, 1, 0, 0, 0, '', 0), -- 1
(@GUID+57, 11371, 0, 0, 309, 0, 0, 1, 1, 0, -11896.4, -1365.13, 69.8727, 2.42601, 7200, 3, 0, 15260, 0, 1, 0, 0, 0, '', 0), -- 2
(@GUID+58, 11372, 0, 0, 309, 0, 0, 1, 1, 0, -11885, -1368.42, 68.8007, 5.53269, 7200, 3, 0, 15260, 0, 1, 0, 0, 0, '', 0), -- 3
(@GUID+59, 11371, 11372, 0, 309, 0, 0, 1, 1, 0, -11878.2, -1368.68, 69.7661, 3.90954, 7200, 3, 0, 15260, 0, 1, 0, 0, 0, '', 0), -- 4
-- @POOL+18 11371, 11372, 0,@GUID+60 11371, 0, 0,@GUID+61 11371, 11372, 0,@GUID+62 11372, 0, 0,@GUID+63
(@GUID+60, 11371, 11372, 0, 309, 0, 0, 1, 1, 0, -11884.3, -1379.01, 66.4316, 3.36848, 7200, 3, 0, 15260, 0, 1, 0, 0, 0, '', 0), -- 1
(@GUID+61, 11371, 0, 0, 309, 0, 0, 1, 1, 0, -11896.4, -1365.13, 69.8727, 2.42601, 7200, 3, 0, 15260, 0, 1, 0, 0, 0, '', 0), -- 2
(@GUID+62, 11371, 11372, 0, 309, 0, 0, 1, 1, 0, -11885, -1368.42, 68.8007, 5.53269, 7200, 3, 0, 15260, 0, 1, 0, 0, 0, '', 0), -- 3
(@GUID+63, 11372, 0, 0, 309, 0, 0, 1, 1, 0, -11878.2, -1368.68, 69.7661, 3.90954, 7200, 3, 0, 15260, 0, 1, 0, 0, 0, '', 0), -- 4
-- @POOL+19 11371, 11372, 0,@GUID+64 11371, 11372, 0,@GUID+65 11372, 0, 0,@GUID+66 11371, 0, 0,@GUID+67
(@GUID+64, 11371, 11372, 0, 309, 0, 0, 1, 1, 0, -11884.3, -1379.01, 66.4316, 3.36848, 7200, 3, 0, 15260, 0, 1, 0, 0, 0, '', 0), -- 1
(@GUID+65, 11371, 11372, 0, 309, 0, 0, 1, 1, 0, -11896.4, -1365.13, 69.8727, 2.42601, 7200, 3, 0, 15260, 0, 1, 0, 0, 0, '', 0), -- 2
(@GUID+66, 11372, 0, 0, 309, 0, 0, 1, 1, 0, -11885, -1368.42, 68.8007, 5.53269, 7200, 3, 0, 15260, 0, 1, 0, 0, 0, '', 0), -- 3
(@GUID+67, 11371, 0, 0, 309, 0, 0, 1, 1, 0, -11878.2, -1368.68, 69.7661, 3.90954, 7200, 3, 0, 15260, 0, 1, 0, 0, 0, '', 0), -- 4
-- @POOL+20 11371, 11372, 0,@GUID+68 11371, 11372, 0,@GUID+69 11371, 0, 0,@GUID+70 11372, 0, 0,@GUID+71
(@GUID+68, 11371, 11372, 0, 309, 0, 0, 1, 1, 0, -11884.3, -1379.01, 66.4316, 3.36848, 7200, 3, 0, 15260, 0, 1, 0, 0, 0, '', 0), -- 1
(@GUID+69, 11371, 11372, 0, 309, 0, 0, 1, 1, 0, -11896.4, -1365.13, 69.8727, 2.42601, 7200, 3, 0, 15260, 0, 1, 0, 0, 0, '', 0), -- 2
(@GUID+70, 11371, 0, 0, 309, 0, 0, 1, 1, 0, -11885, -1368.42, 68.8007, 5.53269, 7200, 3, 0, 15260, 0, 1, 0, 0, 0, '', 0), -- 3
(@GUID+71, 11372, 0, 0, 309, 0, 0, 1, 1, 0, -11878.2, -1368.68, 69.7661, 3.90954, 7200, 3, 0, 15260, 0, 1, 0, 0, 0, '', 0); -- 4
SET @POOL :=448;
DELETE FROM `pool_template` WHERE `entry` BETWEEN @POOL+0 AND @POOL+20;
DELETE FROM `pool_creature` WHERE `guid` BETWEEN @GUID+0 AND @GUID+71;
INSERT INTO `pool_template` (`entry`, `max_limit`, `description`) VALUES
(@POOL+0, 1, 'ZG Entrance Snake 3-4 Pack Pool of Pools'),
(@POOL+1, 3, 'ZG Entrance Snake as 3 Pack 1/8'),
(@POOL+2, 3, 'ZG Entrance Snake as 3 Pack 2/8'),
(@POOL+3, 3, 'ZG Entrance Snake as 3 Pack 3/8'),
(@POOL+4, 3, 'ZG Entrance Snake as 3 Pack 4/8'),
(@POOL+5, 3, 'ZG Entrance Snake as 3 Pack 5/8'),
(@POOL+6, 3, 'ZG Entrance Snake as 3 Pack 6/8'),
(@POOL+7, 3, 'ZG Entrance Snake as 3 Pack 7/8'),
(@POOL+8, 3, 'ZG Entrance Snake as 3 Pack 8/8'),
(@POOL+9, 4, 'ZG Entrance Snake as 4 Pack 1/12'),
(@POOL+10, 4, 'ZG Entrance Snake as 4 Pack 2/12'),
(@POOL+11, 4, 'ZG Entrance Snake as 4 Pack 3/12'),
(@POOL+12, 4, 'ZG Entrance Snake as 4 Pack 4/12'),
(@POOL+13, 4, 'ZG Entrance Snake as 4 Pack 5/12'),
(@POOL+14, 4, 'ZG Entrance Snake as 4 Pack 6/12'),
(@POOL+15, 4, 'ZG Entrance Snake as 4 Pack 7/12'),
(@POOL+16, 4, 'ZG Entrance Snake as 4 Pack 8/12'),
(@POOL+17, 4, 'ZG Entrance Snake as 4 Pack 9/12'),
(@POOL+18, 4, 'ZG Entrance Snake as 4 Pack 10/12'),
(@POOL+19, 4, 'ZG Entrance Snake as 4 Pack 11/12'),
(@POOL+20, 4, 'ZG Entrance Snake as 4 Pack 12/12');
DELETE FROM `pool_pool` WHERE `pool_id` BETWEEN @POOL+0 AND @POOL+20;
DELETE FROM `pool_pool` WHERE `mother_pool` BETWEEN @POOL+0 AND @POOL+20;
INSERT INTO `pool_pool` (`pool_id`, `mother_pool`, `chance`, `description`) VALUES
(@POOL+1, @POOL+0, 6, 'ZG Entrance Snake as 3 Pack 1/8'),
(@POOL+2, @POOL+0, 6, 'ZG Entrance Snake as 3 Pack 2/8'),
(@POOL+3, @POOL+0, 6, 'ZG Entrance Snake as 3 Pack 3/8'),
(@POOL+4, @POOL+0, 7, 'ZG Entrance Snake as 3 Pack 4/8'),
(@POOL+5, @POOL+0, 6, 'ZG Entrance Snake as 3 Pack 5/8'),
(@POOL+6, @POOL+0, 6, 'ZG Entrance Snake as 3 Pack 6/8'),
(@POOL+7, @POOL+0, 6, 'ZG Entrance Snake as 3 Pack 7/8'),
(@POOL+8, @POOL+0, 7, 'ZG Entrance Snake as 3 Pack 8/8'),
(@POOL+9, @POOL+0, 5, 'ZG Entrance Snake as 4 Pack 1/12'),
(@POOL+10, @POOL+0, 4, 'ZG Entrance Snake as 4 Pack 2/12'),
(@POOL+11, @POOL+0, 4, 'ZG Entrance Snake as 4 Pack 3/12'),
(@POOL+12, @POOL+0, 4, 'ZG Entrance Snake as 4 Pack 4/12'),
(@POOL+13, @POOL+0, 4, 'ZG Entrance Snake as 4 Pack 5/12'),
(@POOL+14, @POOL+0, 5, 'ZG Entrance Snake as 4 Pack 6/12'),
(@POOL+15, @POOL+0, 4, 'ZG Entrance Snake as 4 Pack 7/12'),
(@POOL+16, @POOL+0, 4, 'ZG Entrance Snake as 4 Pack 8/12'),
(@POOL+17, @POOL+0, 4, 'ZG Entrance Snake as 4 Pack 9/12'),
(@POOL+18, @POOL+0, 4, 'ZG Entrance Snake as 4 Pack 10/12'),
(@POOL+19, @POOL+0, 4, 'ZG Entrance Snake as 4 Pack 11/12'),
(@POOL+20, @POOL+0, 4, 'ZG Entrance Snake as 4 Pack 12/12');
INSERT INTO `pool_creature` (`guid`, `pool_entry`, `description`) VALUES
-- @POOL+1 E1 A@GUID+0 S@GUID+1 X@GUID+2
(@GUID+0, @POOL+1, 'ZG Entrance Snake as 3 Pack 1/8 Adder'),
(@GUID+1, @POOL+1, 'ZG Entrance Snake as 3 Pack 1/8 Serpent'),
(@GUID+2, @POOL+1, 'ZG Entrance Snake as 3 Pack 1/8 Xsnake'),
-- @POOL+2 E1 A@GUID+3 X@GUID+4 S@GUID+5
(@GUID+3, @POOL+2, 'ZG Entrance Snake as 3 Pack 2/8 Adder'),
(@GUID+4, @POOL+2, 'ZG Entrance Snake as 3 Pack 2/8 Xsnake'),
(@GUID+5, @POOL+2, 'ZG Entrance Snake as 3 Pack 2/8 Serpent'),
-- @POOL+3 E1 S@GUID+6 A@GUID+7 X@GUID+8
(@GUID+6, @POOL+3, 'ZG Entrance Snake as 3 Pack 3/8 Serpent'),
(@GUID+7, @POOL+3, 'ZG Entrance Snake as 3 Pack 3/8 Adder'),
(@GUID+8, @POOL+3, 'ZG Entrance Snake as 3 Pack 3/8 Xsnake'),
-- @POOL+4 E1 S@GUID+9 X@GUID+10 A@GUID+11
(@GUID+9, @POOL+4, 'ZG Entrance Snake as 3 Pack 4/8 Serpent'),
(@GUID+10, @POOL+4, 'ZG Entrance Snake as 3 Pack 4/8 Xsnake'),
(@GUID+11, @POOL+4, 'ZG Entrance Snake as 3 Pack 4/8 Adder'),
-- @POOL+5 A@GUID+12 E2 S@GUID+13 X@GUID+14
(@GUID+12, @POOL+5, 'ZG Entrance Snake as 3 Pack 5/8 Adder'),
(@GUID+13, @POOL+5, 'ZG Entrance Snake as 3 Pack 5/8 Serpent'),
(@GUID+14, @POOL+5, 'ZG Entrance Snake as 3 Pack 5/8 Xsnake'),
-- @POOL+6 A@GUID+15 E2 X@GUID+16 S@GUID+17
(@GUID+15, @POOL+6, 'ZG Entrance Snake as 3 Pack 6/8 Adder'),
(@GUID+16, @POOL+6, 'ZG Entrance Snake as 3 Pack 6/8 Xsnake'),
(@GUID+17, @POOL+6, 'ZG Entrance Snake as 3 Pack 6/8 Serpent'),
-- @POOL+7 S@GUID+18 E2 A@GUID+19 X@GUID+20
(@GUID+18, @POOL+7, 'ZG Entrance Snake as 3 Pack 7/8 Serpent'),
(@GUID+19, @POOL+7, 'ZG Entrance Snake as 3 Pack 7/8 Adder'),
(@GUID+20, @POOL+7, 'ZG Entrance Snake as 3 Pack 7/8 Xsnake'),
-- @POOL+8 S@GUID+21 E2 X@GUID+22 A@GUID+23
(@GUID+21, @POOL+8, 'ZG Entrance Snake as 3 Pack 8/8 Serpent'),
(@GUID+22, @POOL+8, 'ZG Entrance Snake as 3 Pack 8/8 Xsnake'),
(@GUID+23, @POOL+8, 'ZG Entrance Snake as 3 Pack 8/8 Adder'),
-- @POOL+9 A@GUID+24 S@GUID+25 X@GUID+26 X@GUID+27
(@GUID+24, @POOL+9, 'ZG Entrance Snake as 4 Pack 1/12 Adder'),
(@GUID+25, @POOL+9, 'ZG Entrance Snake as 4 Pack 1/12 Serpent'),
(@GUID+26, @POOL+9, 'ZG Entrance Snake as 4 Pack 1/12 Xsnake'),
(@GUID+27, @POOL+9, 'ZG Entrance Snake as 4 Pack 1/12 Xsnake'),
-- @POOL+10 A@GUID+28 X@GUID+29 S@GUID+30 X@GUID+31
(@GUID+28, @POOL+10, 'ZG Entrance Snake as 4 Pack 2/12 Adder'),
(@GUID+29, @POOL+10, 'ZG Entrance Snake as 4 Pack 2/12 Xsnake'),
(@GUID+30, @POOL+10, 'ZG Entrance Snake as 4 Pack 2/12 Serpent'),
(@GUID+31, @POOL+10, 'ZG Entrance Snake as 4 Pack 2/12 Xsnake'),
-- @POOL+11 A@GUID+32 X@GUID+33 X@GUID+34 S@GUID+35
(@GUID+32, @POOL+11, 'ZG Entrance Snake as 4 Pack 3/12 Adder'),
(@GUID+33, @POOL+11, 'ZG Entrance Snake as 4 Pack 3/12 Xsnake'),
(@GUID+34, @POOL+11, 'ZG Entrance Snake as 4 Pack 3/12 Xsnake'),
(@GUID+35, @POOL+11, 'ZG Entrance Snake as 4 Pack 3/12 Serpent'),
-- @POOL+12 S@GUID+36 A@GUID+37 X@GUID+38 X@GUID+39
(@GUID+36, @POOL+12, 'ZG Entrance Snake as 4 Pack 4/12 Serpent'),
(@GUID+37, @POOL+12, 'ZG Entrance Snake as 4 Pack 4/12 Adder'),
(@GUID+38, @POOL+12, 'ZG Entrance Snake as 4 Pack 4/12 Xsnake'),
(@GUID+39, @POOL+12, 'ZG Entrance Snake as 4 Pack 4/12 Xsnake'),
-- @POOL+13 S@GUID+40 X@GUID+41 A@GUID+42 X@GUID+43
(@GUID+40, @POOL+13, 'ZG Entrance Snake as 4 Pack 5/12 Serpent'),
(@GUID+41, @POOL+13, 'ZG Entrance Snake as 4 Pack 5/12 Xsnake'),
(@GUID+42, @POOL+13, 'ZG Entrance Snake as 4 Pack 5/12 Adder'),
(@GUID+43, @POOL+13, 'ZG Entrance Snake as 4 Pack 5/12 Xsnake'),
-- @POOL+14 S@GUID+44 X@GUID+45 X@GUID+46 A@GUID+47
(@GUID+44, @POOL+14, 'ZG Entrance Snake as 4 Pack 6/12 Serpent'),
(@GUID+45, @POOL+14, 'ZG Entrance Snake as 4 Pack 6/12 Xsnake'),
(@GUID+46, @POOL+14, 'ZG Entrance Snake as 4 Pack 6/12 Xsnake'),
(@GUID+47, @POOL+14, 'ZG Entrance Snake as 4 Pack 6/12 Adder'),
-- @POOL+15 X@GUID+48 A@GUID+49 S@GUID+50 X@GUID+51
(@GUID+48, @POOL+15, 'ZG Entrance Snake as 4 Pack 7/12 Xsnake'),
(@GUID+49, @POOL+15, 'ZG Entrance Snake as 4 Pack 7/12 Adder'),
(@GUID+50, @POOL+15, 'ZG Entrance Snake as 4 Pack 7/12 Serpent'),
(@GUID+51, @POOL+15, 'ZG Entrance Snake as 4 Pack 7/12 Xsnake'),
-- @POOL+16 X@GUID+52 A@GUID+53 X@GUID+54 S@GUID+55
(@GUID+52, @POOL+16, 'ZG Entrance Snake as 4 Pack 8/12 Xsnake'),
(@GUID+53, @POOL+16, 'ZG Entrance Snake as 4 Pack 8/12 Adder'),
(@GUID+54, @POOL+16, 'ZG Entrance Snake as 4 Pack 8/12 Xsnake'),
(@GUID+55, @POOL+16, 'ZG Entrance Snake as 4 Pack 8/12 Serpent'),
-- @POOL+17 X@GUID+56 S@GUID+57 A@GUID+58 X@GUID+59
(@GUID+56, @POOL+17, 'ZG Entrance Snake as 4 Pack 9/12 Xsnake'),
(@GUID+57, @POOL+17, 'ZG Entrance Snake as 4 Pack 9/12 Serpent'),
(@GUID+58, @POOL+17, 'ZG Entrance Snake as 4 Pack 9/12 Adder'),
(@GUID+59, @POOL+17, 'ZG Entrance Snake as 4 Pack 9/12 Xsnake'),
-- @POOL+18 X@GUID+60 S@GUID+61 X@GUID+62 A@GUID+63
(@GUID+60, @POOL+18, 'ZG Entrance Snake as 4 Pack 10/12 Xsnake'),
(@GUID+61, @POOL+18, 'ZG Entrance Snake as 4 Pack 10/12 Serpent'),
(@GUID+62, @POOL+18, 'ZG Entrance Snake as 4 Pack 10/12 Xsnake'),
(@GUID+63, @POOL+18, 'ZG Entrance Snake as 4 Pack 10/12 Adder'),
-- @POOL+19 X@GUID+64 X@GUID+65 A@GUID+66 S@GUID+67
(@GUID+64, @POOL+19, 'ZG Entrance Snake as 4 Pack 11/12 Xsnake'),
(@GUID+65, @POOL+19, 'ZG Entrance Snake as 4 Pack 11/12 Xsnake'),
(@GUID+66, @POOL+19, 'ZG Entrance Snake as 4 Pack 11/12 Adder'),
(@GUID+67, @POOL+19, 'ZG Entrance Snake as 4 Pack 11/12 Serpent'),
-- @POOL+20 X@GUID+68 X@GUID+69 S@GUID+70 A@GUID+71
(@GUID+68, @POOL+20, 'ZG Entrance Snake as 4 Pack 12/12 Xsnake'),
(@GUID+69, @POOL+20, 'ZG Entrance Snake as 4 Pack 12/12 Xsnake'),
(@GUID+70, @POOL+20, 'ZG Entrance Snake as 4 Pack 12/12 Serpent'),
(@GUID+71, @POOL+20, 'ZG Entrance Snake as 4 Pack 12/12 Adder');

View File

@@ -0,0 +1,54 @@
-- DB update 2022_07_19_04 -> 2022_07_20_00
--
SET @NPC := 42880;
SET @PATH := @NPC * 10;
UPDATE `creature` SET `position_x`=-10661, `position_y`=-3924.57, `position_z`=18.8015, `orientation`=5.83672, `MovementType`='2' WHERE `guid`=@NPC;
DELETE FROM `creature_addon` WHERE `guid` = @NPC;
INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH);
DELETE FROM `waypoint_data` WHERE `id` = @PATH;
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`) VALUES
(@PATH, 1, -10641.5, -3982.49, 19.943),
(@PATH, 2, -10591, -3982.21, 21.4646),
(@PATH, 3, -10574.5, -3995.66, 18.5265),
(@PATH, 4, -10556.4, -4008.31, 19.5063),
(@PATH, 5, -10541.2, -4012.2, 22.3642),
(@PATH, 6, -10510.2, -4016.9, 18.3724),
(@PATH, 7, -10482.4, -4010.78, 18.9192),
(@PATH, 8, -10475.6, -4003.55, 19.5199),
(@PATH, 9, -10460.1, -3998.53, 18.5604),
(@PATH, 10, -10434, -4005, 18.5093),
(@PATH, 11, -10408.6, -4010.32, 18.2372),
(@PATH, 12, -10387.1, -3999.93, 19.7943),
(@PATH, 13, -10363.4, -3997.07, 19.3136),
(@PATH, 14, -10343.3, -4003.71, 20.5207),
(@PATH, 15, -10328.6, -4013.14, 18.4205),
(@PATH, 16, -10335.8, -4029.01, 19.4894),
(@PATH, 17, -10325.5, -4054.12, 19.7849),
(@PATH, 18, -10315.2, -4078.22, 22.4922),
(@PATH, 19, -10296, -4123.39, 23.2141),
(@PATH, 20, -10301, -4143.57, 19.8863),
(@PATH, 21, -10322.1, -4159.15, 18.3385),
(@PATH, 22, -10357.8, -4178.26, 20.1807),
(@PATH, 23, -10379.9, -4192.31, 22.7909),
(@PATH, 24, -10419, -4192.8, 19.1422),
(@PATH, 25, -10441.2, -4184.96, 18.6967),
(@PATH, 26, -10480, -4193.1, 18.9901),
(@PATH, 27, -10495, -4205.67, 19.6285),
(@PATH, 28, -10511.9, -4209.93, 19.0212),
(@PATH, 29, -10547.4, -4199.08, 18.7961),
(@PATH, 30, -10564.6, -4187.57, 19.3169),
(@PATH, 31, -10581, -4203.9, 20.3609),
(@PATH, 32, -10594, -4205.64, 21.6639),
(@PATH, 33, -10620.6, -4211.36, 23.3686),
(@PATH, 34, -10673.5, -4191.09, 22.867),
(@PATH, 35, -10710.4, -4172.44, 21.8668),
(@PATH, 36, -10723.1, -4139.99, 18.6405),
(@PATH, 37, -10745.3, -4114.88, 19.7025),
(@PATH, 38, -10749.3, -4070.5, 20.6484),
(@PATH, 39, -10756.1, -4048.57, 22.868),
(@PATH, 40, -10742.5, -4002.81, 20.3069),
(@PATH, 41, -10701.2, -3956.85, 23.3119),
(@PATH, 42, -10662.1, -3926.38, 19.4344);

View File

@@ -0,0 +1,227 @@
-- DB update 2022_07_20_00 -> 2022_07_20_01
--
SET @EVENT := 8;
DELETE FROM `game_event_creature` WHERE `eventEntry` = @EVENT AND `guid` IN
(146602,
146609,
146618,
146619,
146621);
INSERT INTO `game_event_creature` (`eventEntry`, `guid`) VALUES
(@EVENT, 146602),
(@EVENT, 146609),
(@EVENT, 146618),
(@EVENT, 146619),
(@EVENT, 146621);
DELETE FROM `game_event_gameobject` WHERE `eventEntry` = @EVENT AND `guid` IN
(9780,
9754,
9782,
9751,
9766,
9756,
9747,
9749,
9809,
9774,
9746,
9748,
9802,
9808,
9752,
9760,
9792,
9762,
9778,
9757,
9770,
9793,
9758,
9769,
9830,
9828,
9761,
9779,
9791,
9773,
9768,
9833,
9759,
9800,
9804,
9801,
9787,
9783,
9798,
9772,
9794,
9781,
9790,
9795,
9813,
9753,
9811,
9805,
9785,
9807,
9797,
9799,
9810,
9784,
9771,
9796,
9743,
9803,
9786,
9777,
9767,
9765,
9789,
9763,
242252,
242257,
242259,
242267,
242253,
242254,
242275,
242274,
242273,
242271,
242263,
242272,
242276,
242270,
242265,
242255,
242306,
242307,
242302,
242301,
242304,
242303,
242300,
242299,
242305,
242266,
242264,
242282,
242258,
242261,
242284,
242283,
242256,
242260,
242278,
242277,
242279,
242280,
242281);
INSERT INTO `game_event_gameobject` (`eventEntry`, `guid`) VALUES
(@EVENT, 9780),
(@EVENT, 9754),
(@EVENT, 9782),
(@EVENT, 9751),
(@EVENT, 9766),
(@EVENT, 9756),
(@EVENT, 9747),
(@EVENT, 9749),
(@EVENT, 9809),
(@EVENT, 9774),
(@EVENT, 9746),
(@EVENT, 9748),
(@EVENT, 9802),
(@EVENT, 9808),
(@EVENT, 9752),
(@EVENT, 9760),
(@EVENT, 9792),
(@EVENT, 9762),
(@EVENT, 9778),
(@EVENT, 9757),
(@EVENT, 9770),
(@EVENT, 9793),
(@EVENT, 9758),
(@EVENT, 9769),
(@EVENT, 9830),
(@EVENT, 9828),
(@EVENT, 9761),
(@EVENT, 9779),
(@EVENT, 9791),
(@EVENT, 9773),
(@EVENT, 9768),
(@EVENT, 9833),
(@EVENT, 9759),
(@EVENT, 9800),
(@EVENT, 9804),
(@EVENT, 9801),
(@EVENT, 9787),
(@EVENT, 9783),
(@EVENT, 9798),
(@EVENT, 9772),
(@EVENT, 9794),
(@EVENT, 9781),
(@EVENT, 9790),
(@EVENT, 9795),
(@EVENT, 9813),
(@EVENT, 9753),
(@EVENT, 9811),
(@EVENT, 9805),
(@EVENT, 9785),
(@EVENT, 9807),
(@EVENT, 9797),
(@EVENT, 9799),
(@EVENT, 9810),
(@EVENT, 9784),
(@EVENT, 9771),
(@EVENT, 9796),
(@EVENT, 9743),
(@EVENT, 9803),
(@EVENT, 9786),
(@EVENT, 9777),
(@EVENT, 9767),
(@EVENT, 9765),
(@EVENT, 9789),
(@EVENT, 9763),
(@EVENT, 242252),
(@EVENT, 242257),
(@EVENT, 242259),
(@EVENT, 242267),
(@EVENT, 242253),
(@EVENT, 242254),
(@EVENT, 242275),
(@EVENT, 242274),
(@EVENT, 242273),
(@EVENT, 242271),
(@EVENT, 242263),
(@EVENT, 242272),
(@EVENT, 242276),
(@EVENT, 242270),
(@EVENT, 242265),
(@EVENT, 242255),
(@EVENT, 242306),
(@EVENT, 242307),
(@EVENT, 242302),
(@EVENT, 242301),
(@EVENT, 242304),
(@EVENT, 242303),
(@EVENT, 242300),
(@EVENT, 242299),
(@EVENT, 242305),
(@EVENT, 242266),
(@EVENT, 242264),
(@EVENT, 242282),
(@EVENT, 242258),
(@EVENT, 242261),
(@EVENT, 242284),
(@EVENT, 242283),
(@EVENT, 242256),
(@EVENT, 242260),
(@EVENT, 242278),
(@EVENT, 242277),
(@EVENT, 242279),
(@EVENT, 242280),
(@EVENT, 242281);

View File

@@ -0,0 +1,57 @@
-- DB update 2022_07_20_01 -> 2022_07_20_02
-- Rocklance
SET @NPC := 20720;
SET @PATH := @NPC * 10;
UPDATE `creature` SET `position_x`=-1199.35, `position_y`=-3100.46, `position_z`=94.7484, `orientation`=2.7918, `MovementType`='2' WHERE `guid`=@NPC;
DELETE FROM `creature_addon` WHERE `guid` = @NPC;
INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH);
DELETE FROM `waypoint_data` WHERE `id` = @PATH;
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`) VALUES
(@PATH, 1, -1201.63, -3099.24, 94.8781),
(@PATH, 2, -1219.21, -3099.76, 95.241),
(@PATH, 3, -1272.76, -3089.53, 93.8928),
(@PATH, 4, -1315.08, -3106.5, 91.7995),
(@PATH, 5, -1330.48, -3095.55, 92.4438),
(@PATH, 6, -1341.49, -3060.61, 92.6899),
(@PATH, 7, -1354.4, -3030.3, 93.3309),
(@PATH, 8, -1386.31, -3005.86, 93.1475),
(@PATH, 9, -1430.19, -2974.08, 93.1218),
(@PATH, 10, -1436.49, -2943.46, 91.668),
(@PATH, 11, -1436.75, -2920.35, 92.5429),
(@PATH, 12, -1410.03, -2893.52, 93.1282),
(@PATH, 13, -1388.5, -2866.72, 94.5754),
(@PATH, 14, -1360.27, -2850.79, 94.705),
(@PATH, 15, -1332.8, -2857.77, 93.5965),
(@PATH, 16, -1288.33, -2870.37, 93.0108),
(@PATH, 17, -1265.32, -2850.79, 94.069),
(@PATH, 18, -1239.87, -2834.24, 94.41),
(@PATH, 19, -1219.09, -2834.03, 93.9937),
(@PATH, 20, -1194.71, -2865.09, 93.5771),
(@PATH, 21, -1170.2, -2886.21, 94.3522),
(@PATH, 22, -1146.43, -2925.68, 93.1956),
(@PATH, 23, -1123.57, -2957.35, 92.8819),
(@PATH, 24, -1114.24, -2966.51, 92.4826),
(@PATH, 25, -1111.46, -3018.12, 94.8292),
(@PATH, 26, -1101.72, -3047.27, 93.4784),
(@PATH, 27, -1123.65, -3070.33, 91.8408),
(@PATH, 28, -1147.38, -3076.85, 92.3126),
(@PATH, 29, -1177.95, -3082.89, 92.8266);
DELETE FROM `creature_formations` WHERE `leaderGUID` = @NPC;
INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`) VALUES (@NPC, @NPC, 0, 0, 512);
INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`) VALUES (@NPC, 20588, 3, 215, 512);
INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`) VALUES (@NPC, 14007, 3, 135, 512);
UPDATE `creature` SET `spawntimesecs`=25000 WHERE `guid`=14007;
UPDATE `creature` SET `spawntimesecs`=25000 WHERE `guid`=20588;
UPDATE `creature` SET `spawntimesecs`=19800 WHERE `guid`=@NPC;
UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 5841;
DELETE FROM `smart_scripts` WHERE (`entryorguid` = 5841) AND (`source_type` = 0) AND (`id` IN (3, 4));
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`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(5841, 0, 3, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 70, 500, 0, 0, 0, 0, 0, 10, 14007, 0, 0, 0, 0, 0, 0, 0, 'Rocklance - On Respawn - Respawn Formation Member 14007'),
(5841, 0, 4, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 70, 500, 0, 0, 0, 0, 0, 10, 20588, 0, 0, 0, 0, 0, 0, 0, 'Rocklance - On Respawn - Respawn Formation Member 20588');

View File

@@ -0,0 +1,4 @@
-- DB update 2022_07_20_02 -> 2022_07_20_03
--
DELETE FROM `command` WHERE `name` = 'npc guid';
INSERT INTO `command` (`name`, `security`, `help`) VALUES ('npc guid', 1, 'Syntax: .npc guid\r\n\r\nDisplays GUID, faction, NPC flags, Entry ID, Model ID for selected creature.');

View File

@@ -0,0 +1,9 @@
-- DB update 2022_07_20_03 -> 2022_07_20_04
UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 11076;
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 11076);
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`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(11076, 0, 0, 0, 0, 0, 100, 0, 0, 0, 3400, 4800, 0, 11, 12471, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Cauldron Lord Razarch - In Combat - Cast \'Shadow Bolt\''),
(11076, 0, 1, 0, 0, 0, 100, 0, 11000, 15000, 20000, 25000, 0, 11, 17204, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Cauldron Lord Razarch - In Combat - Cast \'Summon Skeleton\''),
(11076, 0, 2, 0, 2, 0, 100, 0, 0, 50, 14000, 18000, 0, 11, 17173, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Cauldron Lord Razarch - Between 0-50% Health - Cast \'Drain Life\''),
(11076, 0, 3, 0, 4, 0, 100, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Cauldron Lord Razarch - On Aggro - Say Line 0');

View File

@@ -0,0 +1,6 @@
-- DB update 2022_07_20_04 -> 2022_07_20_05
UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 1785;
DELETE FROM `smart_scripts` WHERE (`entryorguid` = 1785) AND (`source_type` = 0) AND (`id` IN (0, 1));
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`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(1785, 0, 0, 0, 2, 0, 100, 1, 5, 30, 0, 0, 0, 11, 12542, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Skeletal Terror - Between 5-30% Health - Cast \'Fear\' (No Repeat)');

View File

@@ -0,0 +1,28 @@
-- DB update 2022_07_20_05 -> 2022_07_20_06
-- Remorseful Highborne --> Add gossip texts (Credit: https://github.com/Haeniken/FairyCore/commit/25260b92a6c5163643248deeae7247a3bac6cbb7)
UPDATE `creature_template` SET `gossip_menu_id`=3803, `npcflag` = `npcflag` | 1 WHERE `entry`=10684;
DELETE FROM `gossip_menu` WHERE `MenuID`=3803;
INSERT INTO `gossip_menu` (`MenuID`, `TextID`) VALUES
(3803,4635),
(3803,4636);
DELETE FROM `npc_text` WHERE `ID`=4636;
INSERT INTO `npc_text` (`ID`, `text0_0`, `text0_1`, `BroadcastTextID0`, `lang0`, `Probability0`) VALUES
(4636,'',"I will not forrrget what you have done...$B$BPleassse, leave meee...",7309,0,1);
DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=14 AND `SourceGroup`=3803;
INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
(14,3803,4636,0,0,8,0,5248,0,0,0,0,0,'',"Remorseful Highborne - Show Gossip Menu Text 4636 if Quest 5248 is rewarded");
-- Remorseful Highborne --> Add texts on quest finished
DELETE FROM `creature_text` WHERE `CreatureID`=10684;
INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES
(10684,0,0,"Highborne spirits! Be at peace! The Crystal of Zin-Malor is whole once again!",14,0,100,0,0,0,6505,0,"Remorseful Highborne"),
(10684,0,1,"Cursed spirits! Let go of the past! The Crystal of Zin-Malor no longer binds you!",14,0,100,0,0,0,6506,0,"Remorseful Highborne"),
(10684,0,2,"Spirits of the Highborne! You may now rest! The curse of the crystal releases you!",14,0,100,0,0,0,6507,0,"Remorseful Highborne");
UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=10684;
DELETE FROM `smart_scripts` WHERE `entryorguid`=10684 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
(10684,0,0,0,20,0,100,0,5248,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Remorseful Highborne - On Quest \'Tormented by the Past\' Finished - Say Line 0");

View File

@@ -0,0 +1,4 @@
-- DB update 2022_07_20_06 -> 2022_07_20_07
--
UPDATE `smart_scripts` SET `target_type`=24 WHERE `entryorguid`=25416 AND `source_type`=0 AND `id`=4;
UPDATE `smart_scripts` SET `target_type`=24 WHERE `entryorguid`=25418 AND `source_type`=0 AND `id`=4;

View File

@@ -0,0 +1,6 @@
-- DB update 2022_07_20_07 -> 2022_07_20_08
UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 202;
DELETE FROM `smart_scripts` WHERE (`entryorguid` = 202) AND (`source_type` = 0) AND (`id` IN (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`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(202, 0, 0, 0, 0, 0, 100, 0, 5000, 8000, 9000, 13000, 0, 11, 7399, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Skeletal Horror - In Combat - Cast \'Terrify\' (No Repeat)');

View File

@@ -0,0 +1,7 @@
-- DB update 2022_07_20_08 -> 2022_07_20_09
UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 12119;
DELETE FROM `smart_scripts` WHERE (`entryorguid` = 12119) AND (`source_type` = 0) AND (`id` IN (0, 1));
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`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(12119, 0, 0, 0, 0, 0, 100, 0, 5000, 5000, 6500, 6500, 0, 11, 20604, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 'Flamewaker Protector - In Combat - Cast \'Dominate Mind\''),
(12119, 0, 1, 0, 0, 0, 100, 0, 5000, 10000, 7000, 7000, 0, 11, 20605, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Flamewaker Protector - In Combat - Cast \'Cleave\'');

View File

@@ -0,0 +1,22 @@
-- DB update 2022_07_20_09 -> 2022_07_20_10
--
/* Snakes */
UPDATE `creature` SET `id1`=11371 WHERE `guid` IN (49096, 49097);
UPDATE `creature` SET `id2`=11372 WHERE `guid` IN (49096, 49097);
/* Priest can be Axe thrower */
UPDATE `creature` SET `id2`=11350 WHERE `guid`=49754;
/* Crocs movement is a scripted action that occurs about every 30 seconds, and all crocs do it--not normal random movement */
UPDATE `creature` SET `wander_distance`=0, `MovementType`=0 WHERE `id1`=15043;
/* Reposition a Snake */
/* Reposition two Trolls */
DELETE FROM `creature` WHERE `guid` IN (49121, 49122, 49097);
INSERT INTO `creature` (`guid`, `id1`, `id2`, `id3`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `wander_distance`, `currentwaypoint`, `curhealth`, `curmana`, `MovementType`, `npcflag`, `unit_flags`, `dynamicflags`, `ScriptName`, `VerifiedBuild`) VALUES
(49097, 11371, 11372, 0, 309, 0, 0, 1, 1, 0, -11959.5, -1547.96, 40.6727, 3.1776, 7200, 0, 0, 15260, 0, 0, 0, 0, 0, '', 0),
(49121, 11351, 0, 0, 309, 0, 0, 1, 1, 1, -12008.5, -1484.79, 79.1498, 4.87654, 7200, 0, 0, 21364, 0, 0, 0, 0, 0, '', 0),
(49122, 11831, 0, 0, 309, 0, 0, 1, 1, 1, -12004.5, -1483.46, 79.5746, 4.71553, 7200, 0, 0, 24420, 12170, 0, 0, 0, 0, '', 0);
/* Movetype and wander distance corrections for Snakes and Bats/Bat Riders */
UPDATE `creature` SET `wander_distance`=2, `MovementType`=1 WHERE `guid` IN (49096, 49097, 49190, 49191, 49192, 49193);

View File

@@ -0,0 +1,6 @@
-- DB update 2022_07_20_10 -> 2022_07_20_11
--
DELETE FROM `spell_script_names` WHERE `spell_id` = 25371 AND `ScriptName` = 'spell_consume_aq20';
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES (25371, 'spell_consume_aq20');
DELETE FROM `spell_script_names` WHERE `spell_id` = 25373 AND `ScriptName` = 'spell_gen_10pct_count_pct_from_max_hp';
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES (25373, 'spell_gen_10pct_count_pct_from_max_hp');

View File

@@ -0,0 +1,4 @@
-- DB update 2022_07_20_11 -> 2022_07_20_12
--
DELETE FROM `spell_script_names` WHERE `spell_id` = 26180 AND `ScriptName` = 'spell_huhuran_wyvern_sting';
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES (26180, 'spell_huhuran_wyvern_sting');

View File

@@ -0,0 +1,3 @@
-- DB update 2022_07_20_12 -> 2022_07_20_13
-- fix Slim Pickings quest
UPDATE `creature_template` SET `npcflag`=`npcflag`|1 WHERE `entry` = 26809;

View File

@@ -0,0 +1,6 @@
-- DB update 2022_07_20_13 -> 2022_07_20_14
--
DELETE FROM `creature_addon` WHERE `guid`=144632;
INSERT INTO `creature_addon` (`guid`, `auras`) VALUES
(144632, '8876'); -- Triggers SPELL_THRASH = 3391

View File

@@ -0,0 +1,47 @@
-- DB update 2022_07_20_14 -> 2022_07_20_15
--
UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` IN (15325, 15343, 15320, 15335, 15336, 15319, 15461, 15462, 15505);
DELETE FROM `smart_scripts` WHERE `entryorguid`IN (15325, 15343, 15320, 15335, 15336, 15319, 15461, 15462, 15505);
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`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
-- swarmguard
(15343, 0, 0, 0, 9, 0, 100, 0, 0, 5, 8000, 12000, 0, 11, 25174, 3, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Qiraji Swarmguard - Within 0-5 Range - Cast \'Sundering Cleave\''),
-- hive wasp
(15325, 0, 0, 0, 9, 0, 100, 0, 0, 40, 5000, 7000, 0, 11, 25185, 4, 32, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Hive\'Zara Wasp - Within 0-40 Range - Cast \'Itch\''),
-- hive soldier
(15320, 0, 0, 0, 0, 0, 100, 0, 1000, 3000, 19000, 23000, 0, 11, 22857, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Hive\'Zara Soldier - In Combat - Cast \'Retaliation\''),
(15320, 0, 1, 0, 9, 0, 100, 0, 0, 30, 5000, 7000, 0, 11, 25497, 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Hive\'Zara Soldier - Within 0-30 Range - Cast \'Venom Spit\''),
-- flesh hunter
(15335, 0, 0, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 11, 8876, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Flesh Hunter - On Respawn - Cast \'Thrash\''),
(15335, 0, 1, 0, 4, 0, 100, 0, 0, 0, 0, 0, 0, 22, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Flesh Hunter - On Aggro - Set Event Phase 1'),
(15335, 0, 2, 0, 9, 0, 100, 0, 0, 45, 5000, 7000, 0, 11, 25424, 4, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Flesh Hunter - Within 0-45 Range - Cast \'Poison Bolt\''),
(15335, 0, 3, 0, 24, 2, 100, 0, 25371, 1, 5000, 5000, 0, 22, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Flesh Hunter - On Target Buffed With \'Consume\' - Set Event Phase 2 (Phase 2)'),
(15335, 0, 4, 0, 28, 0, 100, 0, 5000, 5000, 0, 0, 0, 22, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Flesh Hunter - On Passenger Removed - Set Event Phase 1'),
(15335, 0, 5, 0, 9, 1, 100, 0, 0, 10, 21000, 24000, 0, 11, 25371, 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Flesh Hunter - Within 0-10 Range - Cast \'Consume\' (Phase 1)'),
(15335, 0, 6, 0, 7, 0, 100, 0, 0, 0, 0, 0, 0, 22, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Flesh Hunter - On Evade - Set Event Phase 1'),
-- tail lasher
(15336, 0, 0, 0, 4, 0, 100, 0, 0, 0, 0, 0, 0, 22, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Hive\'Zara Tail Lasher - On Aggro - Set Event Phase 1'),
(15336, 0, 1, 0, 9, 1, 100, 0, 0, 5, 6000, 9000, 0, 11, 25645, 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Hive\'Zara Tail Lasher - Within 0-5 Range - Cast \'Poison\' (Phase 1)'),
(15336, 0, 2, 0, 24, 1, 100, 0, 25645, 5, 5000, 5000, 0, 22, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Hive\'Zara Tail Lasher - On Target Buffed With \'Poison\' - Set Event Phase 2 (Phase 1)'),
(15336, 0, 3, 0, 24, 2, 100, 0, 25645, 1, 5000, 5000, 0, 22, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Hive\'Zara Tail Lasher - On Target Buffed With \'Poison\' - Set Event Phase 1 (Phase 2)'),
(15336, 0, 4, 0, 9, 0, 100, 0, 0, 30, 7000, 10000, 0, 11, 25654, 4, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Hive\'Zara Tail Lasher - Within 0-30 Range - Cast \'Tail Lash\''),
(15336, 0, 5, 0, 7, 0, 100, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'Hive\'Zara Tail Lasher - On Evade - Set Event Phase 0'),
-- hive collector
(15319, 0, 0, 0, 9, 0, 100, 0, 0, 30, 10000, 16000, 0, 11, 12252, 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Hive\'Zara Collector - Within 0-30 Range - Cast \'Web Spray\''),
(15319, 0, 1, 0, 0, 0, 100, 0, 7000, 11000, 12000, 15000, 0, 11, 3589, 4, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Hive\'Zara Collector - In Combat - Cast \'Deafening Screech\''),
-- shrieker scarab
(15461, 0, 0, 0, 9, 0, 100, 0, 0, 40, 14000, 18000, 0, 11, 22886, 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Shrieker Scarab - Within 0-40 Range - Cast \'Berserker Charge\''),
(15461, 0, 1, 0, 0, 0, 100, 0, 5000, 9000, 10000, 15000, 0, 11, 26379, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Shrieker Scarab - In Combat - Cast \'Piercing Shriek\''),
-- spitting scarab
(15462, 0, 0, 0, 9, 0, 100, 0, 0, 40, 14000, 18000, 0, 11, 22886, 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Spitting Scarab - Within 0-40 Range - Cast \'Berserker Charge\''),
(15462, 0, 1, 0, 0, 0, 100, 0, 5000, 9000, 4000, 6000, 0, 11, 24334, 4, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Spitting Scarab - In Combat - Cast \'Acid Spit\''),
-- canal frenzy
(15505, 0, 0, 0, 9, 0, 100, 0, 0, 5, 5000, 8000, 0, 11, 12097, 4, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Canal Frenzy - Within 0-5 Range - Cast \'Pierce Armor\'');

View File

@@ -0,0 +1,3 @@
-- DB update 2022_07_20_15 -> 2022_07_22_00
--
UPDATE `creature_loot_template` SET `Chance`='100' WHERE `Item`=20513 AND `Reference`=0 AND `GroupId`=0;

View File

@@ -0,0 +1,6 @@
-- DB update 2022_07_22_00 -> 2022_07_23_00
UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 17606;
DELETE FROM `smart_scripts` WHERE (`entryorguid` = 17606) AND (`source_type` = 0) AND (`id` IN (1, 2));
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`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(17606, 0, 1, 0, 0, 0, 100, 0, 0, 3000, 4500, 5000, 0, 11, 19816, 64, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Sunhawk Reclaimer - IC - Cast Fireball');

View File

@@ -0,0 +1,46 @@
-- DB update 2022_07_23_00 -> 2022_07_23_01
--
ALTER TABLE `pet_levelstats` CHANGE `hp` `hp` INT UNSIGNED DEFAULT 0 NOT NULL,
CHANGE `mana` `mana` INT UNSIGNED DEFAULT 0 NOT NULL,
CHANGE `str` `str` INT UNSIGNED DEFAULT 0 NOT NULL,
CHANGE `agi` `agi` INT UNSIGNED DEFAULT 0 NOT NULL,
CHANGE `sta` `sta` INT UNSIGNED DEFAULT 0 NOT NULL,
CHANGE `inte` `inte` INT UNSIGNED DEFAULT 0 NOT NULL,
CHANGE `spi` `spi` INT UNSIGNED DEFAULT 0 NOT NULL,
CHANGE `min_dmg` `min_dmg` INT UNSIGNED DEFAULT 0 NOT NULL,
CHANGE `max_dmg` `max_dmg` INT UNSIGNED DEFAULT 0 NOT NULL;
ALTER TABLE `player_classlevelstats` CHANGE `basehp` `basehp` INT UNSIGNED DEFAULT 1 NOT NULL,
CHANGE `basemana` `basemana` INT UNSIGNED DEFAULT 1 NOT NULL;
ALTER TABLE `player_levelstats` CHANGE `str` `str` INT UNSIGNED DEFAULT 0 NOT NULL,
CHANGE `agi` `agi` INT UNSIGNED DEFAULT 0 NOT NULL,
CHANGE `sta` `sta` INT UNSIGNED DEFAULT 0 NOT NULL,
CHANGE `inte` `inte` INT UNSIGNED DEFAULT 0 NOT NULL,
CHANGE `spi` `spi` INT UNSIGNED DEFAULT 0 NOT NULL;
ALTER TABLE `creature_classlevelstats` CHANGE `basehp0` `basehp0` INT UNSIGNED DEFAULT 1 NOT NULL,
CHANGE `basehp1` `basehp1` INT UNSIGNED DEFAULT 1 NOT NULL,
CHANGE `basehp2` `basehp2` INT UNSIGNED DEFAULT 1 NOT NULL,
CHANGE `basemana` `basemana` INT UNSIGNED DEFAULT 0 NOT NULL,
CHANGE `basearmor` `basearmor` INT UNSIGNED DEFAULT 1 NOT NULL,
CHANGE `attackpower` `attackpower` INT UNSIGNED DEFAULT 0 NOT NULL,
CHANGE `rangedattackpower` `rangedattackpower` INT UNSIGNED DEFAULT 0 NOT NULL;
ALTER TABLE `item_template` CHANGE `stat_value1` `stat_value1` INT DEFAULT 0 NOT NULL,
CHANGE `stat_value2` `stat_value2` INT DEFAULT 0 NOT NULL,
CHANGE `stat_value3` `stat_value3` INT DEFAULT 0 NOT NULL,
CHANGE `stat_value4` `stat_value4` INT DEFAULT 0 NOT NULL,
CHANGE `stat_value5` `stat_value5` INT DEFAULT 0 NOT NULL,
CHANGE `stat_value6` `stat_value6` INT DEFAULT 0 NOT NULL,
CHANGE `stat_value7` `stat_value7` INT DEFAULT 0 NOT NULL,
CHANGE `stat_value8` `stat_value8` INT DEFAULT 0 NOT NULL,
CHANGE `stat_value9` `stat_value9` INT DEFAULT 0 NOT NULL,
CHANGE `stat_value10` `stat_value10` INT DEFAULT 0 NOT NULL,
CHANGE `armor` `armor` INT UNSIGNED DEFAULT 0 NOT NULL,
CHANGE `holy_res` `holy_res` INT UNSIGNED DEFAULT 0 NOT NULL,
CHANGE `fire_res` `fire_res` INT UNSIGNED DEFAULT 0 NOT NULL,
CHANGE `nature_res` `nature_res` INT UNSIGNED DEFAULT 0 NOT NULL,
CHANGE `frost_res` `frost_res` INT UNSIGNED DEFAULT 0 NOT NULL,
CHANGE `shadow_res` `shadow_res` INT UNSIGNED DEFAULT 0 NOT NULL,
CHANGE `arcane_res` `arcane_res` INT UNSIGNED DEFAULT 0 NOT NULL;

View File

@@ -0,0 +1,12 @@
-- DB update 2022_07_23_01 -> 2022_07_24_00
UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 7453;
DELETE FROM `smart_scripts` WHERE (`entryorguid` = 7453) AND (`source_type` = 0) AND (`id` IN (0, 1));
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`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(7453, 0, 0, 0, 0, 0, 100, 0, 7000, 11000, 15000, 18000, 0, 11, 15798, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Moontouched Owlbeast - In Combat - Cast \'Moonfire\''),
(7453, 0, 1, 0, 0, 0, 100, 0, 0, 0, 18000, 21000, 0, 11, 12160, 32, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Moontouched Owlbeast - In Combat - Cast \'Rejuvenation\'');
DELETE FROM `creature_template_spell` WHERE (`CreatureID` = 7453) AND (`Index` IN (0, 1));
INSERT INTO `creature_template_spell` (`CreatureID`, `Index`, `Spell`, `VerifiedBuild`) VALUES
(7453, 0, 15798, 12340),
(7453, 1, 12160, 12340);

View File

@@ -0,0 +1,3 @@
-- DB update 2022_07_24_00 -> 2022_07_24_01
--
UPDATE `reference_loot_template` SET `Chance`=0 WHERE `Entry`=35026 AND `Item` IN (22407, 22406, 22405, 22404, 22403);

View File

@@ -0,0 +1,39 @@
-- DB update 2022_07_24_01 -> 2022_07_24_02
-- Warmaul Chef Bufferlo
UPDATE `creature_template` SET `AIName`="SmartAI", `speed_walk`=1 WHERE `entry`=18440;
DELETE FROM `smart_scripts` WHERE `entryorguid`=18440 AND `source_type`=0;
DELETE FROM `smart_scripts` WHERE `entryorguid` IN (1844000,1844001,1844002) AND `source_type`=9;
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`,`event_param5`,`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
(18440,0,0,0,4,0,100,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,"Warmaul Chef Bufferlo - On Aggro - Say Line 0"),
(18440,0,1,0,1,0,100,0,10000,30000,80000,100000,0,87,1844000,1844001,1844002,0,0,0,1,0,0,0,0,0,0,0,"Warmaul Chef Bufferlo - Out of Combat - Run Random Script"),
(18440,0,2,0,0,0,100,0,7000,12000,7000,12000,0,11,32376,0,0,0,0,0,2,0,0,0,0,0,0,0,"Warmaul Chef Bufferlo - In Combat - Cast 'Tenderize'"),
(18440,0,3,0,0,0,100,0,4000,6000,14000,18000,0,11,32378,0,0,0,0,0,2,0,0,0,0,0,0,0,"Warmaul Chef Bufferlo - In Combat - Cast 'Filet'"),
(18440,0,4,0,4,0,100,0,0,0,0,0,0,11,31994,0,0,0,0,0,2,0,0,0,0,0,0,0,"Warmaul Chef Bufferlo - On Aggro - Cast 'Shoulder Charge'"),
(1844000,9,0,0,0,0,100,0,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,"Warmaul Chef Bufferlo - On Script - Say Line 1"),
(1844000,9,1,0,0,0,100,0,6000,6000,0,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,"Warmaul Chef Bufferlo - On Script - Say Line 2"),
(1844001,9,0,0,0,0,100,0,0,0,0,0,0,5,36,0,0,0,0,0,1,0,0,0,0,0,0,0,"Warmaul Chef Bufferlo - On Script - Play Emote 36"),
(1844001,9,1,0,0,0,100,0,2000,2000,0,0,0,1,3,0,0,0,0,0,1,0,0,0,0,0,0,0,"Warmaul Chef Bufferlo - On Script - Say Line 3"),
(1844002,9,0,0,0,0,100,0,0,0,0,0,0,5,35,0,0,0,0,0,1,0,0,0,0,0,0,0,"Warmaul Chef Bufferlo - On Script - Play Emote 35"),
(1844002,9,1,0,0,0,100,0,2000,2000,0,0,0,1,4,0,0,0,0,0,1,0,0,0,0,0,0,0,"Warmaul Chef Bufferlo - On Script - Say Line 4"),
(1844002,9,2,0,0,0,100,0,5000,5000,0,0,0,1,5,0,0,0,0,0,1,0,0,0,0,0,0,0,"Warmaul Chef Bufferlo - On Script - Say Line 5"),
(1844002,9,3,0,0,0,100,0,4000,4000,0,0,0,1,6,0,0,0,0,0,1,0,0,0,0,0,0,0,"Warmaul Chef Bufferlo - On Script - Say Line 6"),
(1844002,9,4,0,0,0,100,0,4000,4000,0,0,0,1,7,0,0,0,0,0,1,0,0,0,0,0,0,0,"Warmaul Chef Bufferlo - On Script - Say Line 7"),
(1844002,9,5,0,0,0,100,0,2000,2000,0,0,0,5,35,0,0,0,0,0,1,0,0,0,0,0,0,0,"Warmaul Chef Bufferlo - On Script - Play Emote 35"),
(1844002,9,6,0,0,0,100,0,2000,2000,0,0,0,1,8,0,0,0,0,0,1,0,0,0,0,0,0,0,"Warmaul Chef Bufferlo - On Script - Say Line 8"),
(1844002,9,7,0,0,0,100,0,8000,8000,0,0,0,1,9,0,0,0,0,0,1,0,0,0,0,0,0,0,"Warmaul Chef Bufferlo - On Script - Say Line 9"),
(1844002,9,8,0,0,0,100,0,3000,3000,0,0,0,5,153,0,0,0,0,0,1,0,0,0,0,0,0,0,"Warmaul Chef Bufferlo - On Script - Play Emote 153");
DELETE FROM `creature_text` WHERE `CreatureID`=18440;
INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES
(18440,0,0,"IT DUZ WUT IT'S TOLD!",12,0,100,0,0,0,15419,0,"Warmaul Chef Bufferlo"),
(18440,0,1,"GET IN DA STEW!",12,0,100,0,0,0,15420,0,"Warmaul Chef Bufferlo"),
(18440,0,2,"YOU GUD IN DA BELLY!",12,0,100,0,0,0,15421,0,"Warmaul Chef Bufferlo"),
(18440,1,0,"Your daddy pay Warmaul and maybe we no eat you.",12,0,100,1,0,0,15426,0,"Warmaul Chef Bufferlo"),
(18440,2,0,"Ha-ha! Just kidding. We eat you for shure anyway!",12,0,100,11,0,0,15427,0,"Warmaul Chef Bufferlo"),
(18440,3,0,"BAM! Look at dat gristle sizzle!",12,0,100,1,0,0,15430,0,"Warmaul Chef Bufferlo"),
(18440,4,0,"And dis is da recipe for da bestest Broken chowder!",12,0,100,1,0,0,15431,0,"Warmaul Chef Bufferlo"),
(18440,5,0,"First you need da spices.",12,0,100,1,0,0,15432,0,"Warmaul Chef Bufferlo"),
(18440,6,0,"Da salt goes into da pot...",12,0,100,35,0,0,15433,0,"Warmaul Chef Bufferlo"),
(18440,7,0,"Den you put da pepper in da pot...",12,0,100,0,0,0,15434,0,"Warmaul Chef Bufferlo"),
(18440,8,0,"Now we gonna kick it up a notch wit da secret ingra... ingor... inrag... da secret sauce!",12,0,100,43,0,0,15435,0,"Warmaul Chef Bufferlo"),
(18440,9,0,"And last, we put in da Corki!",12,0,100,1,0,0,15436,0,"Warmaul Chef Bufferlo");

View File

@@ -0,0 +1,5 @@
-- DB update 2022_07_24_02 -> 2022_07_24_03
--
DELETE FROM `spell_script_names` WHERE `spell_id`=56246;
INSERT INTO `spell_script_names` VALUES
(56246,'spell_warl_glyph_of_felguard');

View File

@@ -0,0 +1,3 @@
-- DB update 2022_07_24_03 -> 2022_07_24_04
--
UPDATE `spell_proc_event` SET `SpellFamilyName`=11, `SpellFamilyMask0`=0x00000003, `SpellFamilyMask1`=0x00001000 WHERE `entry`=16166;

View File

@@ -0,0 +1,13 @@
-- DB update 2022_07_24_04 -> 2022_07_24_05
--
-- Crocs movement is a scripted action that occurs about every 30 seconds, not normal random movement
UPDATE `creature` SET `wander_distance`=0, `MovementType`=0 WHERE `id1`=15043;
DELETE FROM `smart_scripts` WHERE `entryorguid`=15043 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`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(15043, 0, 0, 0, 0, 0, 100, 0, 8000, 9000, 11000, 12000, 0, 11, 3604, 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Zulian Crocolisk - In Combat - Cast \'Tendon Rip\''),
(15043, 0, 1, 0, 0, 0, 100, 0, 17000, 19000, 22000, 24000, 0, 11, 13445, 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Zulian Crocolisk - In Combat - Cast \'Rend\''),
(15043, 0, 2, 0, 1, 0, 100, 0, 30000, 30000, 40000, 40000, 0, 89, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'ZG Crocolisks will wander a small amount for about 10 seconds out of every 40 (wander on-2)'),
(15043, 0, 3, 0, 1, 0, 100, 0, 39500, 39500, 40000, 40000, 0, 89, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'ZG Crocolisks will wander a small amount for about 10 seconds out of every 40 (wander on-0)'),
(15043, 0, 4, 0, 1, 0, 100, 0, 39999, 39999, 40000, 40000, 0, 101, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Send ZG Croclisks toward home position to control wandering range (set home POS)'),
(15043, 0, 5, 0, 1, 0, 100, 0, 40000, 40000, 40000, 40000, 0, 24, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Send ZG Croclisks toward home position to control wandering range (reset to home POS)');

View File

@@ -0,0 +1,19 @@
-- DB update 2022_07_24_05 -> 2022_07_24_06
-- Immune to Taunt
UPDATE `creature_template` SET `flags_extra`=`flags_extra`|256 WHERE `entry`=15370;
-- Disable exp on Buru egg / Hive'zara hatchling
UPDATE `creature_template` SET `flags_extra`=`flags_extra`|64 WHERE `entry` IN (15514,15521);
-- New smartAI - despawn
UPDATE `creature_template` SET `AIName`='SmartAI' WHERE `entry`=15521;
DELETE FROM `smart_scripts` WHERE `entryorguid`= 15521 AND `source_type`= 0 AND `id`= 0;
INSERT INTO `smart_scripts` (`entryorguid`, `event_type`, `event_flags`, `event_param1`, `event_param2`, `action_type`, `action_param1`, `target_type`, `comment`) VALUES
(15521, 1, 1, 10000, 10000, 41, 500, 1, 'Hive\'Zara Hatchling - Out of Combat - Despawn (No Repeat)');
-- Root egg properly - avoid reset
DELETE FROM `creature_template_movement` WHERE `CreatureId`=15514;
INSERT INTO `creature_template_movement` (`CreatureId`, `Ground`, `Swim`, `Flight`, `Rooted`, `Chase`, `Random`) VALUES
(15514, 1, 1, 0, 1, 0, 0);

View File

@@ -0,0 +1,5 @@
-- DB update 2022_07_24_06 -> 2022_07_24_07
--
UPDATE `gameobject_template` SET `ScriptName` = 'go_sand_trap' WHERE `entry` = 180647;
UPDATE `creature_text` SET `TextRange` = 3 WHERE `CreatureID` = 15339 AND `GroupID` = 5;

View File

@@ -0,0 +1,3 @@
-- DB update 2022_07_24_07 -> 2022_07_25_00
--
UPDATE `smart_scripts` SET `action_param1`=500 WHERE `entryorguid`=28788 AND `source_type`=0 AND `id`=5;

View File

@@ -0,0 +1,11 @@
-- DB update 2022_07_25_00 -> 2022_07_25_01
DELETE FROM `creature_formations` WHERE `leaderguid` IN (144488, 144486, 144484, 144483);
INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`, `point_1`, `point_2`) VALUES
(144488, 144488, 0, 0, 3, 0, 0),
(144488, 144489, 0, 0, 3, 0, 0),
(144486, 144486, 0, 0, 3, 0, 0),
(144486, 144487, 0, 0, 3, 0, 0),
(144484, 144484, 0, 0, 3, 0, 0),
(144484, 144485, 0, 0, 3, 0, 0),
(144483, 144483, 0, 0, 3, 0, 0),
(144483, 144482, 0, 0, 3, 0, 0);

View File

@@ -0,0 +1,53 @@
-- DB update 2022_07_25_01 -> 2022_07_25_02
DELETE FROM `creature_formations` WHERE `leaderguid` IN (144698, 144695, 144715, 144684, 144726);
INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`, `point_1`, `point_2`) VALUES
(144698, 144698, 0, 0, 3, 0, 0),
(144698, 144723, 0, 0, 3, 0, 0),
(144698, 144699, 0, 0, 3, 0, 0),
(144698, 144725, 0, 0, 3, 0, 0),
(144698, 144700, 0, 0, 3, 0, 0),
(144698, 144721, 0, 0, 3, 0, 0),
(144698, 144722, 0, 0, 3, 0, 0),
(144698, 144724, 0, 0, 3, 0, 0),
(144698, 144697, 0, 0, 3, 0, 0),
(144698, 144696, 0, 0, 3, 0, 0),
(144695, 144695, 0, 0, 3, 0, 0),
(144695, 144720, 0, 0, 3, 0, 0),
(144695, 144718, 0, 0, 3, 0, 0),
(144695, 144694, 0, 0, 3, 0, 0),
(144695, 144717, 0, 0, 3, 0, 0),
(144695, 144692, 0, 0, 3, 0, 0),
(144695, 144716, 0, 0, 3, 0, 0),
(144695, 144690, 0, 0, 3, 0, 0),
(144695, 144693, 0, 0, 3, 0, 0),
(144695, 144719, 0, 0, 3, 0, 0),
(144715, 144715, 0, 0, 3, 0, 0),
(144715, 144688, 0, 0, 3, 0, 0),
(144715, 144691, 0, 0, 3, 0, 0),
(144715, 144714, 0, 0, 3, 0, 0),
(144715, 144689, 0, 0, 3, 0, 0),
(144715, 144713, 0, 0, 3, 0, 0),
(144715, 144712, 0, 0, 3, 0, 0),
(144715, 144686, 0, 0, 3, 0, 0),
(144715, 144687, 0, 0, 3, 0, 0),
(144715, 144711, 0, 0, 3, 0, 0),
(144684, 144684, 0, 0, 3, 0, 0),
(144684, 144710, 0, 0, 3, 0, 0),
(144684, 144708, 0, 0, 3, 0, 0),
(144684, 144709, 0, 0, 3, 0, 0),
(144684, 144683, 0, 0, 3, 0, 0),
(144684, 144682, 0, 0, 3, 0, 0),
(144684, 144681, 0, 0, 3, 0, 0),
(144684, 144706, 0, 0, 3, 0, 0),
(144684, 144707, 0, 0, 3, 0, 0),
(144684, 144685, 0, 0, 3, 0, 0),
(144726, 144726, 0, 0, 3, 0, 0),
(144726, 144727, 0, 0, 3, 0, 0),
(144726, 144703, 0, 0, 3, 0, 0),
(144726, 144729, 0, 0, 3, 0, 0),
(144726, 144704, 0, 0, 3, 0, 0),
(144726, 144702, 0, 0, 3, 0, 0),
(144726, 144701, 0, 0, 3, 0, 0),
(144726, 144728, 0, 0, 3, 0, 0),
(144726, 144730, 0, 0, 3, 0, 0),
(144726, 144705, 0, 0, 3, 0, 0);

View File

@@ -0,0 +1,4 @@
-- DB update 2022_07_25_02 -> 2022_07_25_03
--
DELETE FROM `spell_script_names` WHERE `spell_id` = 25185 AND `ScriptName` = 'spell_itch_aq20';
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES (25185, 'spell_itch_aq20');

View File

@@ -0,0 +1,77 @@
-- DB update 2022_07_25_03 -> 2022_07_25_04
-- Captain Qeez
DELETE FROM `creature_formations` WHERE `leaderGUID` = 144676;
INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`, `point_1`, `point_2`) VALUES
(144676, 144676, 0, 0, 11, 0, 0),
(144676, 144611, 0, 0, 11, 0, 0),
(144676, 144656, 0, 0, 11, 0, 0),
(144676, 144653, 0, 0, 11, 0, 0),
(144676, 144655, 0, 0, 11, 0, 0),
(144676, 144610, 0, 0, 11, 0, 0),
(144676, 144654, 0, 0, 11, 0, 0);
-- Tubid
DELETE FROM `creature_formations` WHERE `leaderGUID` = 144677;
INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`, `point_1`, `point_2`) VALUES
(144677, 144677, 0, 0, 11, 0, 0),
(144677, 144658, 0, 0, 11, 0, 0),
(144677, 144616, 0, 0, 11, 0, 0),
(144677, 144617, 0, 0, 11, 0, 0),
(144677, 144619, 0, 0, 11, 0, 0),
(144677, 144660, 0, 0, 11, 0, 0),
(144677, 144659, 0, 0, 11, 0, 0);
-- Drenn
DELETE FROM `creature_formations` WHERE `leaderGUID` = 144674;
INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`, `point_1`, `point_2`) VALUES
(144674, 144674, 0, 0, 11, 0, 0),
(144674, 144618, 0, 0, 11, 0, 0),
(144674, 144657, 0, 0, 11, 0, 0),
(144674, 144614, 0, 0, 11, 0, 0),
(144674, 144613, 0, 0, 11, 0, 0),
(144674, 144612, 0, 0, 11, 0, 0),
(144674, 144615, 0, 0, 11, 0, 0);
-- Yeggeth
DELETE FROM `creature_formations` WHERE `leaderGUID` = 144652;
INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`, `point_1`, `point_2`) VALUES
(144652, 144652, 0, 0, 11, 0, 0),
(144652, 144664, 0, 0, 11, 0, 0),
(144652, 144622, 0, 0, 11, 0, 0),
(144652, 144624, 0, 0, 11, 0, 0),
(144652, 144663, 0, 0, 11, 0, 0),
(144652, 144621, 0, 0, 11, 0, 0),
(144652, 144620, 0, 0, 11, 0, 0);
-- Xurrem
DELETE FROM `creature_formations` WHERE `leaderGUID` = 144675;
INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`, `point_1`, `point_2`) VALUES
(144675, 144675, 0, 0, 11, 0, 0),
(144675, 144625, 0, 0, 11, 0, 0),
(144675, 144623, 0, 0, 11, 0, 0),
(144675, 144665, 0, 0, 11, 0, 0),
(144675, 144626, 0, 0, 11, 0, 0),
(144675, 144662, 0, 0, 11, 0, 0),
(144675, 144661, 0, 0, 11, 0, 0);
-- Pakkon
DELETE FROM `creature_formations` WHERE `leaderGUID` = 144673;
INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`, `point_1`, `point_2`) VALUES
(144673, 144673, 0, 0, 11, 0, 0),
(144673, 144669, 0, 0, 11, 0, 0),
(144673, 144630, 0, 0, 11, 0, 0),
(144673, 144670, 0, 0, 11, 0, 0),
(144673, 144631, 0, 0, 11, 0, 0),
(144673, 144672, 0, 0, 11, 0, 0),
(144673, 144671, 0, 0, 11, 0, 0);
-- Zerram
DELETE FROM `creature_formations` WHERE `leaderGUID` = 144651;
INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`, `point_1`, `point_2`) VALUES
(144651, 144651, 0, 0, 11, 0, 0),
(144651, 144668, 0, 0, 11, 0, 0),
(144651, 144629, 0, 0, 11, 0, 0),
(144651, 144667, 0, 0, 11, 0, 0),
(144651, 144628, 0, 0, 11, 0, 0),
(144651, 144666, 0, 0, 11, 0, 0),
(144651, 144627, 0, 0, 11, 0, 0);

View File

@@ -0,0 +1,7 @@
-- DB update 2022_07_25_04 -> 2022_07_25_05
--
DELETE FROM `creature_template_movement` WHERE `creatureId` = 15802;
INSERT INTO `creature_template_movement` (`CreatureId`, `Ground`, `Swim`, `Flight`, `Rooted`, `Chase`, `Random`, `InteractionPauseTimer`) VALUES
(15802, 1, 0, 0, 1, 0, 0, 0);
UPDATE `creature_template` SET `ScriptName` = '' WHERE `entry` = 15802;

View File

@@ -0,0 +1,19 @@
-- DB update 2022_07_25_05 -> 2022_07_25_06
UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 15343;
DELETE FROM `smart_scripts` WHERE (`entryorguid` = 15343) AND (`source_type` = 0) AND (`id` IN (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`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(15343, 0, 0, 0, 9, 0, 100, 0, 0, 5, 5000, 7000, 0, 11, 25174, 3, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Qiraji Swarmguard - Within 0-5 Range - Cast \'Sundering Cleave\'');
UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 15325;
DELETE FROM `smart_scripts` WHERE (`entryorguid` = 15325) AND (`source_type` = 0) AND (`id` IN (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`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(15325, 0, 0, 0, 9, 0, 100, 0, 0, 40, 11000, 16000, 0, 11, 25185, 4, 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Hive\'Zara Wasp - Within 0-40 Range - Cast \'Itch\'');
UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 15338;
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 15338);
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`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(15338, 0, 0, 0, 0, 0, 100, 0, 5000, 9000, 8000, 11000, 0, 11, 25756, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Obsidian Destroyer - In Combat - Cast \'Purge\''),
(15338, 0, 1, 0, 0, 0, 100, 0, 2000, 4000, 6000, 6000, 0, 11, 25755, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Obsidian Destroyer - In Combat - Cast \'Drain Mana\''),
(15338, 0, 2, 0, 6, 0, 100, 0, 0, 0, 0, 0, 0, 11, 27627, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'Obsidian Destroyer - On Just Died - Cast \'Serverside - Drop Obsidian\''),
(15338, 0, 3, 0, 7, 0, 100, 0, 0, 0, 0, 0, 0, 108, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Obsidian Destroyer - On Respawn - Set Mana To 0');
UPDATE `creature_template` SET `unit_flags2` = 0 WHERE (`entry` = 15338);

View File

@@ -0,0 +1,7 @@
-- DB update 2022_07_25_06 -> 2022_07_25_07
-- Ossirian immune to Taunt
UPDATE `creature_template` SET `flags_extra`=`flags_extra`|256 WHERE `entry`=15339;
-- Sand Vortex UNIT_FLAG_NOT_SELECTABLE
UPDATE `creature_template` SET `unit_flags`=`unit_flags`|33554432 WHERE `entry`=15428;

View File

@@ -0,0 +1,3 @@
-- DB update 2022_07_25_07 -> 2022_07_25_08
--
UPDATE `creature_template` SET `ScriptName` = 'npc_anubisath_guardian' WHERE `entry` = 15355;

View File

@@ -0,0 +1,9 @@
-- DB update 2022_07_25_08 -> 2022_07_26_00
--
UPDATE `creature_template` SET `mingold`=0, `maxgold`=0, `AIName`='SmartAI' WHERE `entry`=15527;
DELETE FROM `smart_scripts` WHERE `entryorguid`=15527 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`, `target_type`, `comment`) VALUES
(15527, 0, 0, 0, 0, 0, 100, 0, 6000, 6000, 6000, 6000, 11, 25679, 2, 2, 'Mana Fiend - In Combat - Cast Arcane Explosion'),
(15527, 0, 1, 0, 13, 0, 100, 0, 10000, 20000, 0, 0, 11, 15122, 0, 2, 'Mana Fiend - In Combat - Cast Counterspell');

View File

@@ -0,0 +1,2 @@
-- DB update 2022_07_26_00 -> 2022_07_26_01
UPDATE `creature_onkill_reputation` SET `MaxStanding1` = 5 WHERE (`creature_id` IN (7157, 7156, 7158));

View File

@@ -0,0 +1,13 @@
-- DB update 2022_07_26_01 -> 2022_07_26_02
--
DELETE FROM `spell_script_names` WHERE `ScriptName` = 'spell_moam_mana_drain_filter';
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
(25676, 'spell_moam_mana_drain_filter');
DELETE FROM `spell_script_names` WHERE `ScriptName` = 'spell_moam_summon_mana_fiends';
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
(25684, 'spell_moam_summon_mana_fiends');
DELETE FROM `creature_text` WHERE `CreatureID` = 15340 AND `GroupID` = 2;
INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES
(15340, 2, 0, '%s drains your mana and turns to stone.', 16, 0, 100, 0, 0, 0, 11474, 0, 'moam EMOTE_STONE_PHASE');

View File

@@ -0,0 +1,5 @@
-- DB update 2022_07_26_02 -> 2022_07_26_03
--
DELETE FROM `spell_custom_attr` WHERE `spell_id` = 5255;
INSERT INTO `spell_custom_attr` (`spell_id`, `attributes`) VALUES
(5255, 0x00008000);

View File

@@ -0,0 +1,9 @@
-- DB update 2022_07_26_03 -> 2022_07_26_04
--
UPDATE `creature_template` SET `mingold`=0, `maxgold`=0 WHERE `entry`=15546;
UPDATE `creature_template` SET `flags_extra`=`flags_extra`|256 WHERE `entry`=15369;
DELETE FROM `creature_addon` WHERE `guid`=144641;
INSERT INTO `creature_addon` (`guid`, `auras`) VALUES
(144641, '8876'); -- Triggers SPELL_THRASH = 3391

View File

@@ -0,0 +1,760 @@
-- DB update 2022_07_26_04 -> 2022_07_26_05
--
/* Vile Familiar - GUID 4701 */
SET @NPC := 4701;
SET @PATH := @NPC * 10;
UPDATE `creature` SET `position_x` = -35.7399, `position_y` = -4228.09, `position_z` = 65.2618, `orientation` = 3.89663 WHERE `guid` = @NPC;
DELETE FROM `creature_addon` WHERE `guid` = @NPC;
INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH);
UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC;
DELETE FROM `waypoint_data` where `id` = @PATH;
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES
(@PATH, 1, -35.7399, -4228.09, 65.2618, 100.0, 0),
(@PATH, 2, -25.1474, -4238.52, 68.0743, 100.0, 0),
(@PATH, 3, -28.5747, -4245.48, 68.4759, 100.0, 0),
(@PATH, 4, -23.6166, -4258.85, 66.6592, 100.0, 0),
(@PATH, 5, -35.6993, -4270.22, 66.894, 100.0, 0),
(@PATH, 6, -56.3938, -4280.35, 70.0308, 100.0, 0),
(@PATH, 7, -53.3781, -4302.13, 69.8885, 100.0, 0),
(@PATH, 8, -39.7387, -4310.99, 70.2738, 100.0, 0),
(@PATH, 9, -53.3781, -4302.13, 69.8885, 100.0, 0),
(@PATH, 10, -56.3938, -4280.35, 70.0308, 100.0, 0),
(@PATH, 11, -35.6993, -4270.22, 66.894, 100.0, 0),
(@PATH, 12, -23.6166, -4258.85, 66.6592, 100.0, 0),
(@PATH, 13, -28.5747, -4245.48, 68.4759, 100.0, 0),
(@PATH, 14, -25.1474, -4238.52, 68.0743, 100.0, 0),
(@PATH, 15, -35.7399, -4228.09, 65.2619, 100.0, 0),
(@PATH, 16, -49.5318, -4222.88, 62.2678, 100.0, 0);
/* Vile Familiar - GUID 4705 */
SET @NPC := 4705;
SET @PATH := @NPC * 10;
UPDATE `creature` SET `position_x` = -152.718, `position_y` = -4264.43, `position_z` = 61.5234, `orientation` = 1.04177 WHERE `guid` = @NPC;
DELETE FROM `creature_addon` WHERE `guid` = @NPC;
INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH);
UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC;
DELETE FROM `waypoint_data` where `id` = @PATH;
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES
(@PATH, 1, -152.718, -4264.43, 61.5234, 100.0, 0),
(@PATH, 2, -150.795, -4251.99, 59.8122, 100.0, 0),
(@PATH, 3, -140.417, -4234.24, 58.089, 100.0, 0),
(@PATH, 4, -127.943, -4230.0, 57.2045, 100.0, 0),
(@PATH, 5, -110.444, -4210.7, 54.7955, 100.0, 0),
(@PATH, 6, -96.4095, -4201.51, 51.431, 100.0, 0),
(@PATH, 7, -80.8383, -4204.42, 49.8348, 100.0, 0),
(@PATH, 8, -79.6806, -4223.97, 53.0284, 100.0, 0),
(@PATH, 9, -83.5118, -4242.02, 52.784, 100.0, 0),
(@PATH, 10, -96.4792, -4250.83, 51.9981, 100.0, 0),
(@PATH, 11, -83.5118, -4242.02, 52.784, 100.0, 0),
(@PATH, 12, -79.6806, -4223.97, 53.0284, 100.0, 0),
(@PATH, 13, -80.8383, -4204.42, 49.8348, 100.0, 0),
(@PATH, 14, -96.4095, -4201.51, 51.431, 100.0, 0),
(@PATH, 15, -110.265, -4210.5, 54.7808, 100.0, 0),
(@PATH, 16, -127.943, -4230.0, 57.2045, 100.0, 0),
(@PATH, 17, -140.286, -4234.02, 58.09, 100.0, 0),
(@PATH, 18, -150.776, -4251.96, 59.792, 100.0, 0),
(@PATH, 19, -152.797, -4264.3, 61.4815, 100.0, 0),
(@PATH, 20, -145.721, -4275.72, 63.287, 100.0, 0);
/* Sen'jin Watcher - GUID 6401 */
SET @NPC := 6401;
SET @PATH := @NPC * 10;
UPDATE `creature` SET `position_x` = -820.061, `position_y` = -4892.82, `position_z` = 19.3183, `orientation` = 3.33843 WHERE `guid` = @NPC;
DELETE FROM `creature_addon` WHERE `guid` = @NPC;
INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH);
UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC;
DELETE FROM `waypoint_data` where `id` = @PATH;
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES
(@PATH, 1, -820.061, -4892.82, 19.3183, 100.0, 0),
(@PATH, 2, -814.445, -4894.38, 19.1953, 100.0, 0),
(@PATH, 3, -810.197, -4898.55, 19.2201, 100.0, 0),
(@PATH, 4, -805.71, -4902.39, 19.3582, 100.0, 0),
(@PATH, 5, -800.273, -4902.95, 19.4798, 100.0, 0),
(@PATH, 6, -794.502, -4901.52, 19.5224, 100.0, 0),
(@PATH, 7, -791.733, -4902.05, 19.5467, 100.0, 0),
(@PATH, 8, -789.871, -4904.44, 19.5926, 100.0, 0),
(@PATH, 9, -790.881, -4909.7, 19.5959, 100.0, 0),
(@PATH, 10, -793.125, -4911.08, 19.5652, 100.0, 0),
(@PATH, 11, -798.939, -4909.47, 19.4492, 100.0, 0),
(@PATH, 12, -801.808, -4908.93, 19.3913, 100.0, 0),
(@PATH, 13, -804.86, -4909.7, 19.3525, 100.0, 0),
(@PATH, 14, -808.699, -4913.92, 19.2707, 100.0, 0),
(@PATH, 15, -811.502, -4919.28, 19.3742, 100.0, 0),
(@PATH, 16, -815.664, -4923.35, 19.5169, 100.0, 0),
(@PATH, 17, -821.037, -4926.27, 19.7472, 100.0, 0),
(@PATH, 18, -824.913, -4930.46, 20.2496, 100.0, 0),
(@PATH, 19, -825.216, -4933.02, 20.4924, 100.0, 0),
(@PATH, 20, -822.131, -4938.15, 20.9481, 100.0, 0),
(@PATH, 21, -822.812, -4941.48, 21.2641, 100.0, 0),
(@PATH, 22, -828.34, -4939.55, 21.1166, 100.0, 0),
(@PATH, 23, -831.006, -4931.77, 20.6677, 100.0, 0),
(@PATH, 24, -833.433, -4930.48, 20.7289, 100.0, 0),
(@PATH, 25, -835.654, -4928.46, 20.7985, 100.0, 0),
(@PATH, 26, -839.542, -4923.88, 20.6797, 100.0, 0),
(@PATH, 27, -840.869, -4921.56, 20.6249, 100.0, 0),
(@PATH, 28, -842.204, -4918.86, 20.5327, 100.0, 0),
(@PATH, 29, -842.497, -4916.01, 20.4017, 100.0, 0),
(@PATH, 30, -840.453, -4910.24, 20.1169, 100.0, 0),
(@PATH, 31, -838.588, -4907.94, 19.9559, 100.0, 0),
(@PATH, 32, -833.656, -4904.45, 19.8107, 100.0, 0),
(@PATH, 33, -831.472, -4902.45, 19.8099, 100.0, 0),
(@PATH, 34, -829.256, -4897.08, 19.89, 100.0, 0),
(@PATH, 35, -828.472, -4894.54, 19.858, 100.0, 0);
/* Sen'jin Watcher - GUID 7318 */
SET @NPC := 7318;
SET @PATH := @NPC * 10;
DELETE FROM `creature_addon` WHERE `guid` = @NPC;
INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH);
UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC;
DELETE FROM `waypoint_data` where `id` = @PATH;
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES
(@PATH, 1, -751.532, -4937.42, 22.0626, 1.39087, 0),
(@PATH, 2, -749.446, -4925.95, 21.7179, 1.40658, 0),
(@PATH, 3, -748.146, -4909.12, 21.6451, 1.53224, 0),
(@PATH, 4, -749.044, -4894.65, 21.3131, 1.80792, 0),
(@PATH, 5, -758.065, -4886.38, 20.7674, 2.42367, 0),
(@PATH, 6, -769.284, -4881.33, 20.2048, 2.81558, 0),
(@PATH, 7, -786.327, -4873.79, 19.3151, 2.69777, 0),
(@PATH, 8, -800.025, -4868.83, 19.0121, 2.81558, 0),
(@PATH, 9, -814.01, -4868.4, 19.1711, 3.05199, 0),
(@PATH, 10, -830.176, -4867.12, 20.0416, 3.19336, 0),
(@PATH, 11, -840.925, -4866.71, 20.9414, 3.11796, 0),
(@PATH, 12, -852.233, -4866.44, 20.6684, 3.11796, 0),
(@PATH, 13, -862.73, -4866.2, 19.5395, 3.11796, 0),
(@PATH, 14, -877.267, -4867.57, 15.675, 3.35358, 0),
(@PATH, 15, -889.625, -4876.12, 11.69, 4.09814, 0),
(@PATH, 16, -892.882, -4882.87, 10.4069, 4.41387, 0),
(@PATH, 17, -894.161, -4891.19, 9.9882, 4.72724, 0),
(@PATH, 18, -891.952, -4904.18, 11.096, 5.00292, 0),
(@PATH, 19, -887.942, -4917.59, 13.5855, 5.00292, 0),
(@PATH, 20, -885.714, -4929.01, 15.4245, 4.84505, 0),
(@PATH, 21, -884.325, -4939.42, 16.5051, 4.84505, 0),
(@PATH, 22, -882.937, -4949.83, 17.3169, 4.84505, 0),
(@PATH, 23, -881.758, -4958.38, 17.6026, 5.00292, 0),
(@PATH, 24, -877.399, -4967.48, 17.6634, 5.3964, 0),
(@PATH, 25, -869.496, -4975.38, 16.6692, 5.55427, 0),
(@PATH, 26, -860.011, -4982.71, 14.9847, 5.67208, 0),
(@PATH, 27, -852.52, -4987.43, 14.0936, 5.78989, 0),
(@PATH, 28, -840.341, -4990.7, 14.844, 6.18102, 0),
(@PATH, 29, -830.497, -4989.98, 15.4556, 0.13345, 0),
(@PATH, 30, -819.594, -4986.79, 16.2936, 0.369069, 0),
(@PATH, 31, -809.257, -4982.2, 17.4642, 0.446824, 0),
(@PATH, 32, -793.258, -4973.57, 18.1898, 0.486879, 0),
(@PATH, 33, -775.559, -4963.22, 20.2241, 0.564633, 0),
(@PATH, 34, -763.732, -4955.73, 21.347, 0.564633, 0),
(@PATH, 35, -757.087, -4948.8, 21.8513, 0.878007, 0),
(@PATH, 36, -750.98, -4940.85, 22.1672, 0.995817, 0);
/* Sen'jin Watcher - GUID 7324 */
SET @NPC := 7324;
SET @PATH := @NPC * 10;
UPDATE `creature` SET `position_x` = -772.175, `position_y` = -4941.56, `position_z` = 36.863, `orientation` = 2.03416 WHERE `guid` = @NPC;
DELETE FROM `creature_addon` WHERE `guid` = @NPC;
INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH);
UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC;
DELETE FROM `waypoint_data` where `id` = @PATH;
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES
(@PATH, 1, -772.175, -4941.56, 36.863, 100.0, 0),
(@PATH, 2, -774.724, -4940.84, 38.2501, 100.0, 0),
(@PATH, 3, -777.686, -4940.8, 38.2811, 100.0, 0),
(@PATH, 4, -779.612, -4942.97, 38.2811, 100.0, 0),
(@PATH, 5, -781.083, -4945.55, 38.2811, 100.0, 0),
(@PATH, 6, -786.085, -4947.83, 38.2811, 100.0, 0),
(@PATH, 7, -788.325, -4946.54, 38.2811, 100.0, 0),
(@PATH, 8, -789.578, -4943.82, 38.2811, 100.0, 0),
(@PATH, 9, -789.76, -4940.87, 38.2811, 100.0, 0),
(@PATH, 10, -784.81, -4937.9, 38.2811, 100.0, 0),
(@PATH, 11, -779.324, -4939.52, 38.2811, 100.0, 0),
(@PATH, 12, -776.578, -4940.72, 38.2811, 100.0, 0),
(@PATH, 13, -768.679, -4942.92, 34.9, 100.0, 0),
(@PATH, 14, -766.035, -4944.11, 33.9918, 100.0, 0),
(@PATH, 15, -763.665, -4945.41, 32.7905, 100.0, 0),
(@PATH, 16, -762.145, -4947.73, 31.7292, 100.0, 0),
(@PATH, 17, -762.604, -4953.17, 29.8729, 100.0, 0),
(@PATH, 18, -764.436, -4955.34, 29.2952, 100.0, 0),
(@PATH, 19, -767.039, -4956.27, 28.2648, 100.0, 0),
(@PATH, 20, -772.457, -4955.5, 26.0306, 100.0, 0),
(@PATH, 21, -779.579, -4952.01, 22.2463, 100.0, 0),
(@PATH, 22, -782.32, -4950.71, 22.2463, 100.0, 0),
(@PATH, 23, -786.267, -4947.33, 22.2463, 100.0, 0),
(@PATH, 24, -786.019, -4944.63, 22.2463, 100.0, 0),
(@PATH, 25, -781.034, -4943.89, 22.2463, 100.0, 0),
(@PATH, 26, -778.747, -4948.8, 22.2463, 100.0, 0),
(@PATH, 27, -777.972, -4951.7, 22.2463, 100.0, 0),
(@PATH, 28, -771.84, -4955.62, 26.2679, 100.0, 0),
(@PATH, 29, -769.283, -4956.47, 27.5535, 100.0, 0),
(@PATH, 30, -766.381, -4956.36, 28.4894, 100.0, 0),
(@PATH, 31, -763.87, -4955.03, 29.4397, 100.0, 0),
(@PATH, 32, -762.094, -4952.75, 30.1289, 100.0, 0),
(@PATH, 33, -761.814, -4947.37, 31.8481, 100.0, 0),
(@PATH, 34, -763.198, -4945.0, 32.8622, 100.0, 0),
(@PATH, 35, -768.301, -4942.61, 34.8163, 100.0, 0);
/* Den Grunt - GUID 7656 */
SET @NPC := 7656;
SET @PATH := @NPC * 10;
UPDATE `creature` SET `position_x` = -600.043, `position_y` = -4342.45, `position_z` = 37.8159, `orientation` = 1.11138 WHERE `guid` = @NPC;
UPDATE `creature_addon` set `path_id` = @PATH WHERE `guid` = @NPC;
UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC;
DELETE FROM `waypoint_data` where `id` = @PATH;
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES
(@PATH, 1, -600.043, -4342.45, 37.8159, 100.0, 0),
(@PATH, 2, -599.399, -4324.38, 37.5988, 100.0, 0),
(@PATH, 3, -599.657, -4312.29, 37.5986, 100.0, 0),
(@PATH, 4, -599.869, -4298.37, 37.811, 100.0, 0),
(@PATH, 5, -599.768, -4307.47, 37.5992, 100.0, 0),
(@PATH, 6, -599.445, -4319.6, 37.5986, 100.0, 0),
(@PATH, 7, -599.705, -4334.79, 37.5988, 100.0, 0),
(@PATH, 8, -600.446, -4349.94, 38.131, 100.0, 0),
(@PATH, 9, -600.588, -4362.75, 38.8676, 100.0, 0),
(@PATH, 10, -601.845, -4378.2, 39.9664, 100.0, 0),
(@PATH, 11, -601.612, -4395.27, 42.6652, 100.0, 0),
(@PATH, 12, -600.024, -4410.47, 43.5231, 100.0, 0),
(@PATH, 13, -594.057, -4427.35, 42.4307, 100.0, 0),
(@PATH, 14, -579.457, -4457.44, 41.9763, 100.0, 0),
(@PATH, 15, -573.993, -4468.27, 42.2239, 100.0, 0),
(@PATH, 16, -570.217, -4476.48, 42.5183, 100.0, 0),
(@PATH, 17, -569.013, -4485.33, 42.566, 100.0, 0),
(@PATH, 18, -570.17, -4497.38, 42.5664, 100.0, 0),
(@PATH, 19, -578.906, -4511.47, 42.5098, 100.0, 0),
(@PATH, 20, -581.195, -4514.85, 42.4688, 100.0, 0),
(@PATH, 21, -572.172, -4501.6, 42.5659, 100.0, 0),
(@PATH, 22, -569.257, -4490.21, 42.5659, 100.0, 0),
(@PATH, 23, -569.142, -4481.09, 42.566, 100.0, 0),
(@PATH, 24, -571.964, -4472.59, 42.4032, 100.0, 0),
(@PATH, 25, -578.171, -4460.08, 41.9867, 100.0, 0),
(@PATH, 26, -583.786, -4448.55, 41.618, 100.0, 0),
(@PATH, 27, -589.919, -4434.83, 42.0238, 100.0, 0),
(@PATH, 28, -597.115, -4418.48, 43.1092, 100.0, 0),
(@PATH, 29, -600.253, -4403.03, 43.6641, 100.0, 0),
(@PATH, 30, -601.071, -4387.19, 41.4481, 100.0, 0),
(@PATH, 31, -600.667, -4370.0, 39.3044, 100.0, 0),
(@PATH, 32, -600.132, -4356.39, 38.4777, 100.0, 0);
/* Clattering Scorpid - GUID 7953 */
SET @NPC := 7953;
SET @PATH := @NPC * 10;
DELETE FROM `creature_addon` WHERE `guid` = @NPC;
INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH);
UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC;
DELETE FROM `waypoint_data` where `id` = @PATH;
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES
(@PATH, 1, -103.086, -4657.6, 33.6479, 100.0, 0),
(@PATH, 2, -85.3881, -4677.97, 32.5394, 100.0, 0),
(@PATH, 3, -81.7362, -4701.13, 30.2284, 100.0, 0),
(@PATH, 4, -70.1425, -4695.94, 30.9405, 100.0, 0),
(@PATH, 5, -59.5394, -4681.0, 33.771, 100.0, 0),
(@PATH, 6, -54.5816, -4677.98, 35.3588, 100.0, 0),
(@PATH, 7, -49.7002, -4676.23, 38.9528, 100.0, 0),
(@PATH, 8, -46.3046, -4673.13, 41.046, 100.0, 0),
(@PATH, 9, -44.1007, -4670.26, 41.0807, 100.0, 0),
(@PATH, 10, -44.0761, -4665.47, 38.7072, 100.0, 0),
(@PATH, 11, -44.3984, -4659.13, 35.8799, 100.0, 0),
(@PATH, 12, -40.1175, -4644.03, 36.3342, 100.0, 0),
(@PATH, 13, -34.7326, -4631.52, 40.2554, 100.0, 0),
(@PATH, 14, -33.4486, -4622.9, 43.117, 100.0, 0),
(@PATH, 15, -45.7339, -4611.2, 44.6652, 100.0, 0),
(@PATH, 16, -59.8055, -4613.19, 43.9173, 100.0, 0),
(@PATH, 17, -72.1956, -4616.84, 41.993, 100.0, 0),
(@PATH, 18, -82.2069, -4628.65, 38.7271, 100.0, 0),
(@PATH, 19, -89.89, -4632.09, 38.1229, 100.0, 0),
(@PATH, 20, -103.297, -4625.97, 39.8145, 100.0, 0),
(@PATH, 21, -112.51, -4623.24, 41.5492, 100.0, 0),
(@PATH, 22, -116.701, -4640.65, 36.011, 100.0, 0),
(@PATH, 23, -116.177, -4648.41, 34.4998, 100.0, 0);
/* Dire Mottled Boar - GUID 8539 */
SET @NPC := 8539;
SET @PATH := @NPC * 10;
DELETE FROM `creature_addon` WHERE `guid` = @NPC;
INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH);
UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC;
DELETE FROM `waypoint_data` where `id` = @PATH;
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES
(@PATH, 1, -214.372, -4845.64, 29.1291, 100.0, 0),
(@PATH, 2, -225.02, -4850.37, 30.6568, 100.0, 0),
(@PATH, 3, -235.224, -4854.72, 31.7916, 100.0, 0),
(@PATH, 4, -247.126, -4856.09, 31.6676, 100.0, 0),
(@PATH, 5, -256.584, -4848.05, 31.4637, 100.0, 0),
(@PATH, 6, -269.014, -4841.03, 32.0333, 100.0, 0),
(@PATH, 7, -289.34, -4837.1, 34.9092, 100.0, 0),
(@PATH, 8, -310.287, -4836.23, 39.2223, 100.0, 0),
(@PATH, 9, -320.813, -4838.24, 39.9581, 100.0, 0),
(@PATH, 10, -330.673, -4844.51, 40.5147, 100.0, 0),
(@PATH, 11, -333.401, -4850.53, 40.7722, 100.0, 0),
(@PATH, 12, -328.735, -4858.96, 40.7124, 100.0, 0),
(@PATH, 13, -321.563, -4868.14, 40.2101, 100.0, 0),
(@PATH, 14, -317.509, -4873.85, 39.4117, 100.0, 0),
(@PATH, 15, -306.572, -4879.36, 36.7733, 100.0, 0),
(@PATH, 16, -292.646, -4884.23, 33.3096, 100.0, 0),
(@PATH, 17, -280.699, -4884.3, 31.3057, 100.0, 0),
(@PATH, 18, -270.147, -4887.51, 29.426, 100.0, 0),
(@PATH, 19, -265.117, -4889.67, 28.3422, 100.0, 0),
(@PATH, 20, -252.422, -4898.02, 27.9178, 100.0, 0),
(@PATH, 21, -246.598, -4899.89, 27.4249, 100.0, 0),
(@PATH, 22, -239.562, -4898.45, 29.0681, 100.0, 0),
(@PATH, 23, -234.568, -4895.74, 29.3167, 100.0, 0),
(@PATH, 24, -226.236, -4890.71, 29.3149, 100.0, 0),
(@PATH, 25, -217.424, -4884.85, 29.7653, 100.0, 0),
(@PATH, 26, -211.227, -4871.29, 29.6777, 100.0, 0),
(@PATH, 27, -210.178, -4858.07, 29.221, 100.0, 0);
/* Clattering Scorpid - GUID 10474 */
SET @NPC := 10474;
SET @PATH := @NPC * 10;
DELETE FROM `creature_addon` WHERE `guid` = @NPC;
INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH);
UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC;
DELETE FROM `waypoint_data` where `id` = @PATH;
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES
(@PATH, 1, -406.087, -4716.63, 44.8804, 100.0, 0),
(@PATH, 2, -408.276, -4708.65, 45.1308, 100.0, 0),
(@PATH, 3, -409.576, -4703.31, 40.2804, 100.0, 0),
(@PATH, 4, -412.923, -4691.66, 39.5794, 100.0, 0),
(@PATH, 5, -419.728, -4679.76, 38.7276, 100.0, 0),
(@PATH, 6, -428.741, -4672.17, 37.967, 100.0, 0),
(@PATH, 7, -439.755, -4664.31, 40.0006, 100.0, 0),
(@PATH, 8, -456.36, -4658.33, 40.9741, 100.0, 0),
(@PATH, 9, -460.767, -4666.47, 39.0189, 100.0, 0),
(@PATH, 10, -467.21, -4674.15, 36.7182, 100.0, 0),
(@PATH, 11, -478.211, -4682.6, 38.8073, 100.0, 0),
(@PATH, 12, -489.172, -4689.26, 36.6404, 100.0, 0),
(@PATH, 13, -494.44, -4693.17, 36.7468, 100.0, 0),
(@PATH, 14, -482.252, -4697.46, 36.8586, 100.0, 0),
(@PATH, 15, -470.356, -4697.13, 38.0726, 100.0, 0),
(@PATH, 16, -455.515, -4698.51, 38.4622, 100.0, 0),
(@PATH, 17, -444.913, -4710.9, 37.4488, 100.0, 0),
(@PATH, 18, -433.46, -4722.15, 38.8961, 100.0, 0),
(@PATH, 19, -424.593, -4731.05, 40.0664, 100.0, 0),
(@PATH, 20, -415.99, -4737.86, 40.2052, 100.0, 0),
(@PATH, 21, -409.609, -4729.68, 41.9805, 100.0, 0),
(@PATH, 22, -406.009, -4721.75, 41.9123, 100.0, 0);
/* Vile Familiar - GUID 12169 */
SET @NPC := 12169;
SET @PATH := @NPC * 10;
UPDATE `creature` SET `position_x` = -107.068, `position_y` = -4306.76, `position_z` = 62.6159, `orientation` = 6.04921 WHERE `guid` = @NPC;
DELETE FROM `creature_addon` WHERE `guid` = @NPC;
INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH);
UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC;
DELETE FROM `waypoint_data` where `id` = @PATH;
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES
(@PATH, 1, -107.068, -4306.76, 62.6159, 100.0, 0),
(@PATH, 2, -124.8, -4318.37, 66.0147, 100.0, 0),
(@PATH, 3, -139.239, -4303.63, 66.1942, 100.0, 0),
(@PATH, 4, -143.22, -4283.83, 64.4553, 100.0, 0),
(@PATH, 5, -129.423, -4280.46, 64.745, 100.0, 0),
(@PATH, 6, -109.47, -4285.22, 63.7303, 100.0, 0),
(@PATH, 7, -94.2235, -4292.27, 60.9362, 100.0, 0);
/* Clattering Scorpid - GUID 12264 */
SET @NPC := 12264;
SET @PATH := @NPC * 10;
UPDATE `creature` SET `position_x` = -121.162, `position_y` = -4709.15, `position_z` = 27.93, `orientation` = 0.263307 WHERE `guid` = @NPC;
DELETE FROM `creature_addon` WHERE `guid` = @NPC;
INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH);
UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC;
DELETE FROM `waypoint_data` where `id` = @PATH;
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES
(@PATH, 1, -121.162, -4709.15, 27.93, 100.0, 0),
(@PATH, 2, -103.324, -4704.22, 28.4752, 100.0, 0),
(@PATH, 3, -91.8912, -4693.48, 30.4882, 100.0, 0),
(@PATH, 4, -98.0826, -4668.58, 32.5437, 100.0, 0),
(@PATH, 5, -108.558, -4659.12, 33.0813, 100.0, 0),
(@PATH, 6, -123.121, -4652.93, 33.8118, 100.0, 0),
(@PATH, 7, -137.574, -4653.24, 35.3335, 100.0, 0),
(@PATH, 8, -152.153, -4651.58, 37.4562, 100.0, 0),
(@PATH, 9, -167.803, -4649.81, 37.7494, 100.0, 0),
(@PATH, 10, -186.079, -4647.93, 38.5911, 100.0, 0),
(@PATH, 11, -188.795, -4657.63, 36.2397, 100.0, 0),
(@PATH, 12, -189.618, -4669.97, 33.4692, 100.0, 0),
(@PATH, 13, -198.707, -4679.42, 33.1351, 100.0, 0),
(@PATH, 14, -209.977, -4691.24, 32.6171, 100.0, 0),
(@PATH, 15, -217.987, -4698.61, 31.033, 100.0, 0),
(@PATH, 16, -221.252, -4706.95, 29.1452, 100.0, 0),
(@PATH, 17, -226.853, -4716.18, 29.2998, 100.0, 0),
(@PATH, 18, -228.244, -4721.6, 29.3076, 100.0, 0),
(@PATH, 19, -222.968, -4725.64, 29.6394, 100.0, 0),
(@PATH, 20, -217.048, -4728.59, 31.5374, 100.0, 0),
(@PATH, 21, -209.686, -4728.02, 32.0704, 100.0, 0),
(@PATH, 22, -196.465, -4727.24, 32.0757, 100.0, 0),
(@PATH, 23, -178.542, -4717.88, 31.7107, 100.0, 0),
(@PATH, 24, -175.455, -4698.0, 32.316, 100.0, 0),
(@PATH, 25, -153.919, -4700.8, 30.4153, 100.0, 0),
(@PATH, 26, -141.606, -4706.08, 28.791, 100.0, 0),
(@PATH, 27, -132.901, -4712.47, 27.927, 100.0, 0);
/* Razormane Scout - GUID 12307 */
SET @NPC := 12307;
SET @PATH := @NPC * 10;
UPDATE `creature` SET `position_x` = 69.2959, `position_y` = -4609.61, `position_z` = 48.2853, `orientation` = 0.64357 WHERE `guid` = @NPC;
DELETE FROM `creature_addon` WHERE `guid` = @NPC;
INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH);
UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC;
DELETE FROM `waypoint_data` where `id` = @PATH;
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES
(@PATH, 1, 69.2959, -4609.61, 48.2853, 100.0, 10000),
(@PATH, 2, 72.8356, -4591.06, 55.2529, 100.0, 0),
(@PATH, 3, 76.6362, -4578.17, 56.5297, 100.0, 0),
(@PATH, 4, 84.8748, -4572.65, 56.1986, 100.0, 0),
(@PATH, 5, 93.5395, -4567.38, 55.1739, 100.0, 0),
(@PATH, 6, 95.7022, -4560.2, 54.7452, 100.0, 0),
(@PATH, 7, 90.0297, -4556.16, 54.7916, 100.0, 0),
(@PATH, 8, 84.1164, -4557.37, 54.8289, 100.0, 0),
(@PATH, 9, 79.8056, -4559.84, 54.9896, 100.0, 0),
(@PATH, 10, 74.5471, -4569.52, 55.9016, 100.0, 0),
(@PATH, 11, 75.6316, -4575.49, 56.3877, 100.0, 0),
(@PATH, 12, 81.4626, -4576.27, 56.6136, 100.0, 0),
(@PATH, 13, 84.9299, -4571.12, 55.8428, 100.0, 0),
(@PATH, 14, 84.1083, -4562.97, 54.7466, 100.0, 0),
(@PATH, 15, 82.6289, -4555.58, 55.1128, 100.0, 0),
(@PATH, 16, 83.1458, -4551.12, 55.8152, 100.0, 0),
(@PATH, 17, 88.5177, -4548.67, 56.596, 100.0, 20000),
(@PATH, 18, 85.0209, -4556.79, 54.8304, 100.0, 0),
(@PATH, 19, 81.9841, -4566.79, 55.1042, 100.0, 0),
(@PATH, 20, 78.8213, -4577.88, 56.6008, 100.0, 0),
(@PATH, 21, 75.8794, -4588.68, 56.083, 100.0, 0),
(@PATH, 22, 72.7215, -4599.41, 52.3967, 100.0, 0);
/* Dire Mottled Boar - GUID 12312 */
SET @NPC := 12312;
SET @PATH := @NPC * 10;
UPDATE `creature` SET `position_x` = -61.8657, `position_y` = -4828.86, `position_z` = 22.6982, `orientation` = 1.96017 WHERE `guid` = @NPC;
DELETE FROM `creature_addon` WHERE `guid` = @NPC;
INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH);
UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC;
DELETE FROM `waypoint_data` where `id` = @PATH;
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES
(@PATH, 1, -61.8657, -4828.86, 22.6982, 100.0, 0),
(@PATH, 2, -74.1842, -4823.68, 23.4622, 100.0, 0),
(@PATH, 3, -83.4586, -4827.15, 23.5508, 100.0, 0),
(@PATH, 4, -91.9781, -4833.29, 23.7535, 100.0, 0),
(@PATH, 5, -103.712, -4841.91, 22.8193, 100.0, 0),
(@PATH, 6, -114.994, -4850.2, 21.4633, 100.0, 0),
(@PATH, 7, -126.212, -4858.57, 20.7062, 100.0, 0),
(@PATH, 8, -130.104, -4870.51, 20.677, 100.0, 0),
(@PATH, 9, -127.47, -4878.73, 21.0682, 100.0, 0),
(@PATH, 10, -118.877, -4883.74, 21.1563, 100.0, 0),
(@PATH, 11, -107.751, -4884.02, 20.3514, 100.0, 0),
(@PATH, 12, -99.2225, -4885.73, 18.9527, 100.0, 0),
(@PATH, 13, -83.4712, -4889.91, 17.615, 100.0, 0),
(@PATH, 14, -76.0254, -4891.22, 17.5674, 100.0, 0),
(@PATH, 15, -68.0709, -4887.69, 17.682, 100.0, 0),
(@PATH, 16, -60.9011, -4879.28, 18.6881, 100.0, 0),
(@PATH, 17, -58.3497, -4872.06, 20.4372, 100.0, 0),
(@PATH, 18, -55.5972, -4863.78, 20.8662, 100.0, 0),
(@PATH, 19, -54.8455, -4852.25, 21.3061, 100.0, 0),
(@PATH, 20, -56.5215, -4843.12, 22.1018, 100.0, 0);
/* Razormane Scout - GUID 12316 */
SET @NPC := 12316;
SET @PATH := @NPC * 10;
DELETE FROM `creature_addon` WHERE `guid` = @NPC;
INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH);
UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC;
DELETE FROM `waypoint_data` where `id` = @PATH;
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES
(@PATH, 1, 124.53, -4582.72, 63.7189, 100.0, 0),
(@PATH, 2, 133.618, -4582.61, 63.8564, 100.0, 0),
(@PATH, 3, 138.082, -4583.02, 62.9627, 100.0, 0),
(@PATH, 4, 141.923, -4585.0, 65.7188, 100.0, 0),
(@PATH, 5, 145.08, -4587.58, 64.9695, 100.0, 20000),
(@PATH, 6, 141.282, -4584.24, 65.4642, 100.0, 0),
(@PATH, 7, 137.239, -4583.36, 62.5436, 100.0, 0),
(@PATH, 8, 134.007, -4582.37, 63.8799, 100.0, 0),
(@PATH, 9, 123.97, -4582.68, 63.7515, 100.0, 0),
(@PATH, 10, 117.123, -4580.07, 62.112, 100.0, 0),
(@PATH, 11, 110.209, -4572.99, 57.9044, 100.0, 0),
(@PATH, 12, 102.608, -4566.32, 55.3204, 100.0, 20000),
(@PATH, 13, 110.348, -4573.89, 58.1059, 100.0, 0),
(@PATH, 14, 116.007, -4578.7, 61.2531, 100.0, 0),
(@PATH, 15, 121.21, -4582.27, 63.9267, 100.0, 0);
/* Dire Mottled Boar - GUID 12943 */
SET @NPC := 12943;
SET @PATH := @NPC * 10;
UPDATE `creature` SET `position_x` = -200.386, `position_y` = -4883.89, `position_z` = 27.1407, `orientation` = 3.59203 WHERE `guid` = @NPC;
DELETE FROM `creature_addon` WHERE `guid` = @NPC;
INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH);
UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC;
DELETE FROM `waypoint_data` where `id` = @PATH;
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES
(@PATH, 1, -200.386, -4883.89, 27.1407, 100.0, 0),
(@PATH, 2, -193.105, -4896.78, 25.5057, 100.0, 0),
(@PATH, 3, -187.962, -4899.92, 23.7865, 100.0, 0),
(@PATH, 4, -182.618, -4903.26, 19.2486, 100.0, 0),
(@PATH, 5, -170.129, -4906.9, 19.2486, 100.0, 0),
(@PATH, 6, -156.713, -4894.43, 19.5028, 100.0, 0),
(@PATH, 7, -146.434, -4884.93, 20.0447, 100.0, 0),
(@PATH, 8, -126.3, -4870.36, 21.0744, 100.0, 0),
(@PATH, 9, -129.568, -4853.1, 20.1477, 100.0, 0),
(@PATH, 10, -117.071, -4842.32, 21.1624, 100.0, 0),
(@PATH, 11, -103.254, -4835.31, 23.3766, 100.0, 0),
(@PATH, 12, -100.011, -4829.95, 23.8422, 100.0, 0),
(@PATH, 13, -105.703, -4815.96, 24.8568, 100.0, 0),
(@PATH, 14, -111.89, -4808.07, 25.1118, 100.0, 0),
(@PATH, 15, -123.375, -4813.62, 24.5666, 100.0, 0),
(@PATH, 16, -146.001, -4825.22, 23.1651, 100.0, 0),
(@PATH, 17, -153.565, -4838.05, 21.2692, 100.0, 0),
(@PATH, 18, -168.864, -4845.25, 20.7892, 100.0, 0),
(@PATH, 19, -182.876, -4852.28, 22.8461, 100.0, 0),
(@PATH, 20, -192.274, -4840.5, 25.7954, 100.0, 0),
(@PATH, 21, -196.924, -4835.91, 26.8833, 100.0, 0),
(@PATH, 22, -201.854, -4832.7, 24.8223, 100.0, 0),
(@PATH, 23, -209.203, -4836.12, 24.9899, 100.0, 0),
(@PATH, 24, -214.462, -4839.38, 27.5361, 100.0, 0),
(@PATH, 25, -223.442, -4846.79, 29.9977, 100.0, 0),
(@PATH, 26, -226.932, -4855.15, 31.4781, 100.0, 0),
(@PATH, 27, -218.524, -4863.81, 30.614, 100.0, 0),
(@PATH, 28, -206.247, -4873.63, 28.7488, 100.0, 0);
/* Kul Tiras Marine - GUID 12998 */
SET @NPC := 12998;
SET @PATH := @NPC * 10;
UPDATE `creature` SET `position_x` = -230.719, `position_y` = -5125.15, `position_z` = 42.4774, `orientation` = 4.53786 WHERE `guid` = @NPC;
DELETE FROM `creature_addon` WHERE `guid` = @NPC;
INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH);
UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC;
DELETE FROM `waypoint_data` where `id` = @PATH;
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES
(@PATH, 1, -230.719, -5125.15, 42.4774, 100.0, 0),
(@PATH, 2, -230.686, -5131.19, 45.7119, 100.0, 0),
(@PATH, 3, -229.064, -5132.69, 45.8029, 100.0, 0),
(@PATH, 4, -222.909, -5132.9, 49.2699, 100.0, 0),
(@PATH, 5, -221.358, -5132.17, 49.2699, 100.0, 0),
(@PATH, 6, -221.043, -5127.19, 49.2699, 100.0, 0),
(@PATH, 7, -224.449, -5124.92, 49.2699, 100.0, 0),
(@PATH, 8, -225.147, -5115.53, 49.3237, 100.0, 0),
(@PATH, 9, -224.832, -5124.48, 49.2703, 100.0, 0),
(@PATH, 10, -220.976, -5127.14, 49.2703, 100.0, 0),
(@PATH, 11, -221.009, -5131.62, 49.2703, 100.0, 0),
(@PATH, 12, -223.324, -5132.8, 49.2703, 100.0, 0),
(@PATH, 13, -229.317, -5132.73, 45.712, 100.0, 0),
(@PATH, 14, -230.802, -5130.94, 45.712, 100.0, 0),
(@PATH, 15, -230.745, -5125.24, 42.477, 100.0, 0),
(@PATH, 16, -229.071, -5123.85, 42.477, 100.0, 0),
(@PATH, 17, -221.9, -5124.38, 38.2719, 100.0, 0),
(@PATH, 18, -220.41, -5126.12, 38.2719, 100.0, 0),
(@PATH, 19, -220.741, -5128.71, 38.2719, 100.0, 0),
(@PATH, 20, -224.215, -5129.94, 38.2719, 100.0, 0),
(@PATH, 21, -231.927, -5129.92, 34.0668, 100.0, 0),
(@PATH, 22, -233.333, -5128.56, 34.0668, 100.0, 0),
(@PATH, 23, -232.741, -5126.2, 34.0668, 100.0, 0),
(@PATH, 24, -229.79, -5125.62, 34.0668, 100.0, 0),
(@PATH, 25, -228.711, -5122.72, 34.0653, 100.0, 0),
(@PATH, 26, -228.582, -5108.82, 34.0653, 100.0, 0),
(@PATH, 27, -228.8, -5098.57, 41.3473, 100.0, 0),
(@PATH, 28, -231.072, -5095.27, 41.3473, 100.0, 0),
(@PATH, 29, -235.625, -5093.99, 41.3473, 100.0, 0),
(@PATH, 30, -252.0, -5094.0, 41.3473, 100.0, 0),
(@PATH, 31, -232.244, -5094.07, 41.3473, 100.0, 0),
(@PATH, 32, -228.875, -5098.53, 41.3473, 100.0, 0),
(@PATH, 33, -228.729, -5108.67, 34.0658, 100.0, 0),
(@PATH, 34, -229.067, -5111.95, 34.0658, 100.0, 0),
(@PATH, 35, -234.399, -5112.87, 34.0658, 100.0, 0),
(@PATH, 36, -252.847, -5113.07, 34.0658, 100.0, 0),
(@PATH, 37, -231.446, -5112.98, 34.0658, 100.0, 0),
(@PATH, 38, -228.84, -5117.89, 34.0658, 100.0, 0),
(@PATH, 39, -228.85, -5124.55, 34.0658, 100.0, 0),
(@PATH, 40, -231.059, -5125.75, 34.0658, 100.0, 0),
(@PATH, 41, -233.287, -5126.61, 34.0658, 100.0, 0),
(@PATH, 42, -233.166, -5129.52, 34.0658, 100.0, 0),
(@PATH, 43, -231.672, -5129.95, 34.0669, 100.0, 0),
(@PATH, 44, -224.454, -5129.98, 38.2726, 100.0, 0),
(@PATH, 45, -221.865, -5129.24, 38.2726, 100.0, 0),
(@PATH, 46, -220.17, -5126.07, 38.2726, 100.0, 0),
(@PATH, 47, -221.888, -5124.38, 38.2719, 100.0, 0),
(@PATH, 48, -229.382, -5123.85, 42.4772, 100.0, 0);
/* Clattering Scorpid - GUID 13002 */
SET @NPC := 13002;
SET @PATH := @NPC * 10;
UPDATE `creature` SET `position_x` = -327.766, `position_y` = -4760.08, `position_z` = 36.6491, `orientation` = 6.08023 WHERE `guid` = @NPC;
DELETE FROM `creature_addon` WHERE `guid` = @NPC;
INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH);
UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC;
DELETE FROM `waypoint_data` where `id` = @PATH;
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES
(@PATH, 1, -327.766, -4760.08, 36.6491, 100.0, 0),
(@PATH, 2, -307.026, -4757.96, 36.3603, 100.0, 0),
(@PATH, 3, -286.811, -4756.11, 34.1922, 100.0, 0),
(@PATH, 4, -272.284, -4754.77, 34.1844, 100.0, 0),
(@PATH, 5, -265.5, -4753.05, 33.6913, 100.0, 0),
(@PATH, 6, -256.536, -4741.59, 32.2737, 100.0, 0),
(@PATH, 7, -256.426, -4725.89, 33.2756, 100.0, 0),
(@PATH, 8, -257.675, -4709.1, 34.2231, 100.0, 0),
(@PATH, 9, -260.288, -4699.09, 37.0144, 100.0, 0),
(@PATH, 10, -264.176, -4694.38, 38.3938, 100.0, 0),
(@PATH, 11, -269.589, -4690.96, 38.8834, 100.0, 0),
(@PATH, 12, -280.665, -4690.68, 39.2254, 100.0, 0),
(@PATH, 13, -291.292, -4693.17, 39.4739, 100.0, 0),
(@PATH, 14, -303.736, -4689.96, 41.9234, 100.0, 0),
(@PATH, 15, -311.884, -4690.42, 41.0454, 100.0, 0),
(@PATH, 16, -321.512, -4692.89, 40.3765, 100.0, 0),
(@PATH, 17, -337.345, -4696.95, 38.814, 100.0, 0),
(@PATH, 18, -347.369, -4707.03, 38.2411, 100.0, 0),
(@PATH, 19, -357.466, -4726.06, 38.4795, 100.0, 0),
(@PATH, 20, -361.583, -4734.52, 39.4971, 100.0, 0),
(@PATH, 21, -366.072, -4742.29, 38.7492, 100.0, 0),
(@PATH, 22, -369.61, -4747.54, 40.3396, 100.0, 0),
(@PATH, 23, -361.003, -4753.41, 37.5095, 100.0, 0),
(@PATH, 24, -345.576, -4759.72, 36.8648, 100.0, 0);
/* Hexed Troll - GUID 13026 */
SET @NPC := 13026;
SET @PATH := @NPC * 10;
UPDATE `creature` SET `position_x` = -1138.31, `position_y` = -5597.88, `position_z` = 7.61002, `orientation` = 3.24477 WHERE `guid` = @NPC;
DELETE FROM `creature_addon` WHERE `guid` = @NPC;
INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH);
UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC;
DELETE FROM `waypoint_data` where `id` = @PATH;
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES
(@PATH, 1, -1138.31, -5597.88, 7.61002, 100.0, 0),
(@PATH, 2, -1148.76, -5592.07, 8.36803, 100.0, 0),
(@PATH, 3, -1153.21, -5584.65, 8.89221, 100.0, 0),
(@PATH, 4, -1161.68, -5573.5, 8.47221, 100.0, 0),
(@PATH, 5, -1164.14, -5566.63, 8.27151, 100.0, 0),
(@PATH, 6, -1157.9, -5555.72, 7.68995, 100.0, 0),
(@PATH, 7, -1153.67, -5550.14, 7.69433, 100.0, 0),
(@PATH, 8, -1147.32, -5541.78, 7.18916, 100.0, 0),
(@PATH, 9, -1144.69, -5538.37, 7.33432, 100.0, 0),
(@PATH, 10, -1137.1, -5531.1, 6.45399, 100.0, 0),
(@PATH, 11, -1130.09, -5526.81, 7.79135, 100.0, 0),
(@PATH, 12, -1124.47, -5527.46, 8.42845, 100.0, 0),
(@PATH, 13, -1115.83, -5535.14, 8.6434, 100.0, 0),
(@PATH, 14, -1106.94, -5544.4, 7.6163, 100.0, 0),
(@PATH, 15, -1098.62, -5551.2, 9.11498, 100.0, 0),
(@PATH, 16, -1098.47, -5559.96, 8.45261, 100.0, 0),
(@PATH, 17, -1103.26, -5568.14, 7.54396, 100.0, 0),
(@PATH, 18, -1109.9, -5578.23, 7.82146, 100.0, 0),
(@PATH, 19, -1117.06, -5586.63, 8.32589, 100.0, 0),
(@PATH, 20, -1127.57, -5595.51, 7.71829, 100.0, 0);
/* Vile Familiar - GUID 13062 */
SET @NPC := 13062;
SET @PATH := @NPC * 10;
UPDATE `creature` SET `position_x` = -154.199, `position_y` = -4357.06, `position_z` = 66.8175, `orientation` = 3.49807 WHERE `guid` = @NPC;
DELETE FROM `creature_addon` WHERE `guid` = @NPC;
INSERT INTO `creature_addon` (`guid`, `path_id`) VALUES (@NPC, @PATH);
UPDATE `creature` SET `MovementType` = 2 WHERE `guid` = @NPC;
DELETE FROM `waypoint_data` where `id` = @PATH;
INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`) VALUES
(@PATH, 1, -154.199, -4357.06, 66.8175, 100.0, 0),
(@PATH, 2, -139.779, -4370.04, 66.2358, 100.0, 0),
(@PATH, 3, -132.177, -4361.44, 67.0957, 100.0, 0),
(@PATH, 4, -129.829, -4346.96, 66.2549, 100.0, 0),
(@PATH, 5, -127.669, -4337.69, 64.1934, 100.0, 0),
(@PATH, 6, -113.978, -4332.43, 65.8378, 100.0, 0),
(@PATH, 7, -95.8724, -4329.41, 64.5048, 100.0, 0),
(@PATH, 8, -78.0683, -4330.18, 66.9585, 100.0, 0),
(@PATH, 9, -69.2985, -4337.84, 67.894, 100.0, 0),
(@PATH, 10, -53.1216, -4331.94, 68.3126, 100.0, 0),
(@PATH, 11, -69.2985, -4337.84, 67.894, 100.0, 0),
(@PATH, 12, -78.0683, -4330.18, 66.9585, 100.0, 0),
(@PATH, 13, -95.8724, -4329.41, 64.5048, 100.0, 0),
(@PATH, 14, -113.978, -4332.43, 65.8378, 100.0, 0),
(@PATH, 15, -127.627, -4337.51, 64.1911, 100.0, 0),
(@PATH, 16, -129.829, -4346.96, 66.2549, 100.0, 0),
(@PATH, 17, -132.177, -4361.44, 67.0957, 100.0, 0),
(@PATH, 18, -139.779, -4370.04, 66.2358, 100.0, 0),
(@PATH, 19, -154.199, -4357.06, 66.8175, 100.0, 0),
(@PATH, 20, -162.918, -4360.37, 67.2569, 100.0, 0);

View File

@@ -0,0 +1,23 @@
-- DB update 2022_07_26_05 -> 2022_07_26_06
--
UPDATE `creature_text` SET `BroadcastTextId` = 1456 WHERE `CreatureID` = 10000 AND `GroupID` = 0;
UPDATE `creature_text` SET `BroadcastTextId` = 5680 WHERE `CreatureID` = 10000 AND `GroupID` = 1;
UPDATE `creature_text` SET `BroadcastTextId` = 5681 WHERE `CreatureID` = 10000 AND `GroupID` = 2;
UPDATE `creature_text` SET `BroadcastTextId` = 5682 WHERE `CreatureID` = 10000 AND `GroupID` = 3;
-- SFK: Arugal intro script
DELETE FROM `smart_scripts` WHERE `entryorguid` = 10000 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`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(10000,0,0,0,60,0,100,1,0,0,0,0,0,47,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,'Arugal - Set Invisible'),
(10000,0,1,0,60,0,100,1,5000,5000,0,0,0,47,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,'Arugal - Set Visible'),
(10000,0,2,0,60,0,100,1,5000,5000,0,0,0,11,7741,0,0,0,0,0,1,0,0,0,0,0,0,0,0,'Arugal - Cast spell teleport'),
(10000,0,3,0,60,0,100,1,7000,7000,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,'Arugal - Say text 0'),
(10000,0,4,0,60,0,100,1,7000,7000,0,0,0,5,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,'Arugal - Emote talk'),
(10000,0,5,0,60,0,100,1,10000,10000,0,0,0,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,'Arugal - Say text 1'),
(10000,0,6,0,60,0,100,1,10000,10000,0,0,0,5,25,0,0,0,0,0,1,0,0,0,0,0,0,0,0,'Arugal - Emote point'),
(10000,0,7,0,60,0,100,1,14000,14000,0,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,0,'Arugal - Say text 2'),
(10000,0,8,0,60,0,100,1,14000,14000,0,0,0,5,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,'Arugal - Emote talk'),
(10000,0,9,0,60,0,100,1,16000,16000,0,0,0,5,11,0,0,0,0,0,1,0,0,0,0,0,0,0,0,'Arugal - Emote laught'),
(10000,0,10,0,60,0,100,1,19000,19000,0,0,0,1,3,0,0,0,0,0,1,0,0,0,0,0,0,0,0,'Arugal - Say text 3'),
(10000,0,11,0,60,0,100,1,21000,21000,0,0,0,11,7741,0,0,0,0,0,1,0,0,0,0,0,0,0,0,'Arugal - Cast spell teleport'),
(10000,0,12,0,60,0,100,1,0,0,0,0,0,41,22000,0,0,0,0,0,1,0,0,0,0,0,0,0,0,'Arugal - Despawn');

View File

@@ -0,0 +1,3 @@
-- DB update 2022_07_26_06 -> 2022_07_27_00
--
UPDATE `creature_template` SET `flags_extra` = `flags_extra`|0x80000000 WHERE `entry` = 15339;

View File

@@ -0,0 +1,8 @@
-- DB update 2022_07_27_00 -> 2022_07_27_01
--
UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 15325;
DELETE FROM `smart_scripts` WHERE (`entryorguid` = 15325) AND (`source_type` = 0) AND (`id` IN (0, 1, 2));
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`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(15325, 0, 0, 1, 9, 0, 100, 0, 0, 40, 11000, 16000, 0, 11, 25185, 4, 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Hive\'Zara Wasp - Within 0-40 Range - Cast \'Itch\''),
(15325, 0, 1, 2, 61, 0, 100, 0, 0, 0, 0, 0, 0, 11, 25185, 4, 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Hive\'Zara Wasp - Within 0-40 Range - Cast \'Itch\''),
(15325, 0, 2, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 11, 25185, 4, 3, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Hive\'Zara Wasp - Within 0-40 Range - Cast \'Itch\'');

View File

@@ -0,0 +1,9 @@
-- DB update 2022_07_27_01 -> 2022_07_27_02
UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 15338;
DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 15338);
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`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES
(15338, 0, 0, 0, 0, 0, 100, 0, 5000, 9000, 8000, 11000, 0, 11, 25756, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Obsidian Destroyer - In Combat - Cast \'Purge\''),
(15338, 0, 1, 0, 0, 0, 100, 0, 2000, 4000, 6000, 6000, 0, 11, 25755, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Obsidian Destroyer - In Combat - Cast \'Drain Mana\''),
(15338, 0, 2, 0, 6, 0, 100, 0, 0, 0, 0, 0, 0, 11, 27627, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'Obsidian Destroyer - On Just Died - Cast \'Serverside - Drop Obsidian\''),
(15338, 0, 3, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 108, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Obsidian Destroyer - On Respawn - Set Mana To 0'),
(15338, 0, 4, 0, 7, 0, 100, 0, 0, 0, 0, 0, 0, 108, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Obsidian Destroyer - On Evade - Set Mana To 0');

View File

@@ -0,0 +1,5 @@
-- DB update 2022_07_27_02 -> 2022_07_27_03
--
DELETE FROM `spell_bonus_data` WHERE `entry`=22009;
INSERT INTO `spell_bonus_data` VALUES
(22009,0,0.2,0,0,'Priest - Greater Heal - 8P T2');

View File

@@ -0,0 +1,78 @@
-- DB update 2022_07_27_03 -> 2022_07_27_04
DELETE FROM `creature_formations` WHERE `leaderguid` IN (49609, 49059, 51584, 49309, 51350, 51974, 51570, 49793, 49274, 51979, 49290);
DELETE FROM `creature_formations` WHERE `leaderguid` = 49065 AND `memberGUID` = 49051;
DELETE FROM `creature_formations` WHERE `leaderguid` = 49062 AND `memberGUID` = 49052;
INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`, `point_1`, `point_2`) VALUES
(51584, 51584, 0, 0, 3, 0, 0),
(51584, 49801, 0, 0, 3, 0, 0),
(51584, 49802, 0, 0, 3, 0, 0),
(51584, 49803, 0, 0, 3, 0, 0),
(51584, 49804, 0, 0, 3, 0, 0),
(51584, 51583, 0, 0, 3, 0, 0),
(51584, 49805, 0, 0, 3, 0, 0),
(51584, 51582, 0, 0, 3, 0, 0),
(49309, 49309, 0, 0, 3, 0, 0),
(49309, 49296, 0, 0, 3, 0, 0),
(49309, 49297, 0, 0, 3, 0, 0),
(49309, 49308, 0, 0, 3, 0, 0),
(49309, 49300, 0, 0, 3, 0, 0),
(49309, 49307, 0, 0, 3, 0, 0),
(49309, 49299, 0, 0, 3, 0, 0),
(49309, 49298, 0, 0, 3, 0, 0),
(51350, 51350, 0, 0, 3, 0, 0),
(51350, 51351, 0, 0, 3, 0, 0),
(51350, 49813, 0, 0, 3, 0, 0),
(51350, 51352, 0, 0, 3, 0, 0),
(51350, 49812, 0, 0, 3, 0, 0),
(51350, 49811, 0, 0, 3, 0, 0),
(51350, 51349, 0, 0, 3, 0, 0),
(51974, 51974, 0, 0, 3, 0, 0),
(51974, 51460, 0, 0, 3, 0, 0),
(51974, 51983, 0, 0, 3, 0, 0),
(51974, 51461, 0, 0, 3, 0, 0),
(51570, 51570, 0, 0, 3, 0, 0),
(51570, 51967, 0, 0, 3, 0, 0),
(51570, 51571, 0, 0, 3, 0, 0),
(51570, 51572, 0, 0, 3, 0, 0),
(51570, 51968, 0, 0, 3, 0, 0),
(51570, 51969, 0, 0, 3, 0, 0),
(49793, 49793, 0, 0, 3, 0, 0),
(49793, 49796, 0, 0, 3, 0, 0),
(49793, 49795, 0, 0, 3, 0, 0),
(49793, 49794, 0, 0, 3, 0, 0),
(49274, 49274, 0, 0, 3, 0, 0),
(49274, 49276, 0, 0, 3, 0, 0),
(49274, 51565, 0, 0, 3, 0, 0),
(49274, 51564, 0, 0, 3, 0, 0),
(49274, 49275, 0, 0, 3, 0, 0),
(49274, 51462, 0, 0, 3, 0, 0),
(51979, 51979, 0, 0, 3, 0, 0),
(51979, 51455, 0, 0, 3, 0, 0),
(51979, 51453, 0, 0, 3, 0, 0),
(51979, 51454, 0, 0, 3, 0, 0),
(51979, 51980, 0, 0, 3, 0, 0),
(51979, 51978, 0, 0, 3, 0, 0),
(49290, 49290, 0, 0, 3, 0, 0),
(49290, 51580, 0, 0, 3, 0, 0),
(49290, 49304, 0, 0, 3, 0, 0),
(49290, 51581, 0, 0, 3, 0, 0),
(49290, 49810, 0, 0, 3, 0, 0),
(49290, 49800, 0, 0, 3, 0, 0),
(49290, 49291, 0, 0, 3, 0, 0),
(49290, 49306, 0, 0, 3, 0, 0),
(49290, 49289, 0, 0, 3, 0, 0),
(49059, 49059, 0, 0, 3, 0, 0),
(49059, 49060, 0, 0, 3, 0, 0),
(49059, 49061, 0, 0, 3, 0, 0),
(49065, 49051, 0, 0, 3, 0, 0),
(49062, 49052, 0, 0, 3, 0, 0),
(49609, 49609, 0, 0, 3, 0, 0),
(49609, 49574, 0, 0, 3, 0, 0),
(49609, 49421, 0, 0, 3, 0, 0),
(49609, 49576, 0, 0, 3, 0, 0),
(49609, 49402, 0, 0, 3, 0, 0),
(49609, 49650, 0, 0, 3, 0, 0),
(49609, 49575, 0, 0, 3, 0, 0),
(49609, 49573, 0, 0, 3, 0, 0),
(49609, 49403, 0, 0, 3, 0, 0),
(49609, 49577, 0, 0, 3, 0, 0);

View File

@@ -19,33 +19,29 @@
#define ACORE_FACTORY_HOLDER
#include "Define.h"
#include "Dynamic/TypeList.h"
#include "ObjectRegistry.h"
#include "TypeList.h"
/*
* FactoryHolder holds a factory object of a specific type
/** FactoryHolder holds a factory object of a specific type
*/
template<class T, class Key = std::string>
template<class T, class O, class Key = std::string>
class FactoryHolder
{
public:
typedef ObjectRegistry<FactoryHolder<T, Key >, Key > FactoryHolderRegistry;
typedef ObjectRegistry<FactoryHolder<T, O, Key>, Key> FactoryHolderRegistry;
FactoryHolder(Key k) : i_key(k) { }
explicit FactoryHolder(Key const& k) : _key(k) { }
virtual ~FactoryHolder() { }
inline Key key() const { return i_key; }
void RegisterSelf(void) { FactoryHolderRegistry::instance()->InsertItem(this, i_key); }
void DeregisterSelf(void) { FactoryHolderRegistry::instance()->RemoveItem(this, false); }
void RegisterSelf() { FactoryHolderRegistry::instance()->InsertItem(this, _key); }
/// Abstract Factory create method
virtual T* Create(void* data = nullptr) const = 0;
virtual T* Create(O* object = nullptr) const = 0;
private:
Key i_key;
Key const _key;
};
/*
* Permissible is a classic way of letting the object decide
/** Permissible is a classic way of letting the object decide
* whether how good they handle things. This is not retricted
* to factory selectors.
*/
@@ -54,7 +50,6 @@ class Permissible
{
public:
virtual ~Permissible() { }
virtual int Permit(const T*) const = 0;
virtual int32 Permit(T const*) const = 0;
};
#endif

View File

@@ -23,20 +23,23 @@
#include <string>
#include <unordered_map>
#include <vector>
#include <memory>
/** ObjectRegistry holds all registry item of the same type
*/
template<class T, class Key = std::string>
class ObjectRegistry
class ObjectRegistry final
{
public:
typedef std::map<Key, T*> RegistryMapType;
typedef std::map<Key, std::unique_ptr<T>> RegistryMapType;
/// Returns a registry item
const T* GetRegistryItem(Key key) const
T const* GetRegistryItem(Key const& key) const
{
typename RegistryMapType::const_iterator iter = i_registeredObjects.find(key);
return ( iter == i_registeredObjects.end() ? nullptr : iter->second );
auto itr = _registeredObjects.find(key);
if (itr == _registeredObjects.end())
return nullptr;
return itr->second.get();
}
static ObjectRegistry<T, Key>* instance()
@@ -46,72 +49,40 @@ public:
}
/// Inserts a registry item
bool InsertItem(T* obj, Key key, bool override = false)
bool InsertItem(T* obj, Key const& key, bool force = false)
{
typename RegistryMapType::iterator iter = i_registeredObjects.find(key);
if ( iter != i_registeredObjects.end() )
auto itr = _registeredObjects.find(key);
if (itr != _registeredObjects.end())
{
if ( !override )
if (!force)
{
return false;
}
delete iter->second;
i_registeredObjects.erase(iter);
_registeredObjects.erase(itr);
}
i_registeredObjects[key] = obj;
_registeredObjects.emplace(std::piecewise_construct, std::forward_as_tuple(key), std::forward_as_tuple(obj));
return true;
}
/// Removes a registry item
void RemoveItem(Key key, bool delete_object = true)
{
typename RegistryMapType::iterator iter = i_registeredObjects.find(key);
if ( iter != i_registeredObjects.end() )
{
if ( delete_object )
{
delete iter->second;
}
i_registeredObjects.erase(iter);
}
}
/// Returns true if registry contains an item
bool HasItem(Key key) const
bool HasItem(Key const& key) const
{
return (i_registeredObjects.find(key) != i_registeredObjects.end());
}
/// Inefficiently return a vector of registered items
unsigned int GetRegisteredItems(std::vector<Key>& l) const
{
unsigned int sz = l.size();
l.resize(sz + i_registeredObjects.size());
for (typename RegistryMapType::const_iterator iter = i_registeredObjects.begin(); iter != i_registeredObjects.end(); ++iter)
{
l[sz++] = iter->first;
}
return i_registeredObjects.size();
return (_registeredObjects.count(key) > 0);
}
/// Return the map of registered items
RegistryMapType const& GetRegisteredItems() const
{
return i_registeredObjects;
return _registeredObjects;
}
ObjectRegistry() { }
~ObjectRegistry()
{
for (typename RegistryMapType::iterator iter = i_registeredObjects.begin(); iter != i_registeredObjects.end(); ++iter)
{
delete iter->second;
}
i_registeredObjects.clear();
}
private:
RegistryMapType i_registeredObjects;
RegistryMapType _registeredObjects;
// non instanceable, only static
ObjectRegistry() { }
~ObjectRegistry() { }
};
#endif

View File

@@ -231,7 +231,7 @@ private:
struct TimeTrackerSmall
{
public:
TimeTrackerSmall(uint32 expiry = 0)
TimeTrackerSmall(int32 expiry = 0)
: i_expiryTime(expiry)
{
}
@@ -246,7 +246,7 @@ public:
return i_expiryTime <= 0;
}
void Reset(uint32 interval)
void Reset(int32 interval)
{
i_expiryTime = interval;
}

View File

@@ -26,11 +26,11 @@
// AggressorAI
/////////////////
int AggressorAI::Permissible(Creature const* creature)
int32 AggressorAI::Permissible(Creature const* creature)
{
// have some hostile factions, it will be selected by IsHostileTo check at MoveInLineOfSight
if (!creature->IsCivilian() && !creature->IsNeutralToAll())
return PERMIT_BASE_PROACTIVE;
return PERMIT_BASE_REACTIVE;
return PERMIT_BASE_NO;
}
@@ -320,3 +320,11 @@ void VehicleAI::CheckConditions(uint32 diff)
else
m_ConditionsTimer -= diff;
}
int32 VehicleAI::Permissible(Creature const* creature)
{
if (creature->IsVehicle())
return PERMIT_BASE_SPECIAL;
return PERMIT_BASE_NO;
}

View File

@@ -31,7 +31,7 @@ public:
explicit AggressorAI(Creature* c) : CreatureAI(c) {}
void UpdateAI(uint32) override;
static int Permissible(Creature const*);
static int32 Permissible(Creature const* creature);
};
typedef std::vector<uint32> SpellVct;
@@ -47,7 +47,7 @@ public:
void JustDied(Unit* killer) override;
void UpdateAI(uint32 diff) override;
static int Permissible(Creature const* /*creature*/) { return PERMIT_BASE_NO; }
static int32 Permissible(Creature const* /*creature*/) { return PERMIT_BASE_NO; }
protected:
EventMap events;
@@ -73,7 +73,7 @@ public:
void AttackStart(Unit* who) override;
void UpdateAI(uint32 diff) override;
static int Permissible(Creature const* /*creature*/) { return PERMIT_BASE_NO; }
static int32 Permissible(Creature const* /*creature*/) { return PERMIT_BASE_NO; }
protected:
float m_minRange;
@@ -87,7 +87,7 @@ public:
void AttackStart(Unit* who) override;
void UpdateAI(uint32 diff) override;
static int Permissible(Creature const* /*creature*/) { return PERMIT_BASE_NO; }
static int32 Permissible(Creature const* /*creature*/) { return PERMIT_BASE_NO; }
protected:
float m_minRange;
@@ -105,7 +105,7 @@ public:
void AttackStart(Unit*) override {}
void OnCharmed(bool apply) override;
static int Permissible(Creature const* /*creature*/) { return PERMIT_BASE_NO; }
static int32 Permissible(Creature const* creature);
private:
void LoadConditions();

View File

@@ -17,12 +17,15 @@
#include "GameObjectAI.h"
//GameObjectAI::GameObjectAI(GameObject* g) : go(g) {}
int GameObjectAI::Permissible(GameObject const* go)
int32 GameObjectAI::Permissible(GameObject const* /*go*/)
{
if (go->GetAIName() == "GameObjectAI")
return PERMIT_BASE_SPECIAL;
return PERMIT_BASE_NO;
}
NullGameObjectAI::NullGameObjectAI(GameObject* g) : GameObjectAI(g) {}
NullGameObjectAI::NullGameObjectAI(GameObject* go) : GameObjectAI(go) { }
int32 NullGameObjectAI::Permissible(GameObject const* /*go*/)
{
return PERMIT_BASE_IDLE;
}

View File

@@ -49,7 +49,7 @@ public:
virtual void SetGUID(ObjectGuid /*guid*/, int32 /*id = 0 */) {}
virtual ObjectGuid GetGUID(int32 /*id = 0 */) const { return ObjectGuid::Empty; }
static int Permissible(GameObject const* go);
static int32 Permissible(GameObject const* go);
virtual bool GossipHello(Player* /*player*/, bool /*reportUse*/) { return false; }
virtual bool GossipSelect(Player* /*player*/, uint32 /*sender*/, uint32 /*action*/) { return false; }
@@ -76,6 +76,6 @@ public:
void UpdateAI(uint32 /*diff*/) override {}
static int Permissible(GameObject const* /*go*/) { return PERMIT_BASE_IDLE; }
static int32 Permissible(GameObject const* go);
};
#endif

View File

@@ -19,10 +19,10 @@
#include "CreatureAIImpl.h"
#include "Player.h"
int GuardAI::Permissible(Creature const* creature)
int32 GuardAI::Permissible(Creature const* creature)
{
if (creature->IsGuard())
return PERMIT_BASE_SPECIAL;
return PERMIT_BASE_PROACTIVE;
return PERMIT_BASE_NO;
}

View File

@@ -27,7 +27,7 @@ class GuardAI : public ScriptedAI
public:
explicit GuardAI(Creature* creature);
static int Permissible(Creature const* creature);
static int32 Permissible(Creature const* creature);
void Reset() override;
void EnterEvadeMode(EvadeReason /*why*/) override;

View File

@@ -23,6 +23,17 @@ PassiveAI::PassiveAI(Creature* c) : CreatureAI(c) { me->SetReactState(REACT_PASS
PossessedAI::PossessedAI(Creature* c) : CreatureAI(c) { me->SetReactState(REACT_PASSIVE); }
NullCreatureAI::NullCreatureAI(Creature* c) : CreatureAI(c) { me->SetReactState(REACT_PASSIVE); }
int32 NullCreatureAI::Permissible(Creature const* creature)
{
if (creature->HasFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPELLCLICK))
return PERMIT_BASE_PROACTIVE + 50;
if (creature->IsTrigger())
return PERMIT_BASE_REACTIVE;
return PERMIT_BASE_IDLE;
}
void PassiveAI::UpdateAI(uint32)
{
if (me->IsInCombat() && me->getAttackers().empty())
@@ -84,8 +95,24 @@ void CritterAI::UpdateAI(uint32 diff)
}
}
int32 CritterAI::Permissible(Creature const* creature)
{
if (creature->IsCritter() && !creature->HasUnitTypeMask(UNIT_MASK_GUARDIAN))
return PERMIT_BASE_PROACTIVE;
return PERMIT_BASE_NO;
}
void TriggerAI::IsSummonedBy(Unit* summoner)
{
if (me->m_spells[0])
me->CastSpell(me, me->m_spells[0], false, 0, 0, summoner ? summoner->GetGUID() : ObjectGuid::Empty);
}
int32 TriggerAI::Permissible(Creature const* creature)
{
if (creature->IsTrigger() && creature->m_spells[0])
return PERMIT_BASE_SPECIAL;
return PERMIT_BASE_NO;
}

View File

@@ -30,7 +30,7 @@ public:
void AttackStart(Unit*) override {}
void UpdateAI(uint32) override;
static int Permissible(Creature const*) { return PERMIT_BASE_IDLE; }
static int32 Permissible(Creature const* /*creature*/) { return PERMIT_BASE_NO; }
};
class PossessedAI : public CreatureAI
@@ -46,7 +46,7 @@ public:
void JustDied(Unit*) override;
void KilledUnit(Unit* victim) override;
static int Permissible(Creature const*) { return PERMIT_BASE_IDLE; }
static int32 Permissible(Creature const* /*creature*/) { return PERMIT_BASE_NO; }
};
class NullCreatureAI : public CreatureAI
@@ -60,7 +60,7 @@ public:
void EnterEvadeMode(EvadeReason /*why*/) override {}
void OnCharmed(bool /*apply*/) override {}
static int Permissible(Creature const*) { return PERMIT_BASE_IDLE; }
static int32 Permissible(Creature const* creature);
};
class CritterAI : public PassiveAI
@@ -72,6 +72,7 @@ public:
void EnterEvadeMode(EvadeReason why) override;
void UpdateAI(uint32) override;
static int32 Permissible(Creature const* creature);
// Xinef: Added
private:
uint32 _combatTimer;
@@ -82,6 +83,8 @@ class TriggerAI : public NullCreatureAI
public:
explicit TriggerAI(Creature* c) : NullCreatureAI(c) {}
void IsSummonedBy(Unit* summoner) override;
static int32 Permissible(Creature const* creature);
};
#endif

View File

@@ -28,10 +28,14 @@
#include "SpellMgr.h"
#include "Util.h"
int PetAI::Permissible(Creature const* creature)
int32 PetAI::Permissible(Creature const* creature)
{
if (creature->IsPet())
return PERMIT_BASE_SPECIAL;
if (creature->HasUnitTypeMask(UNIT_MASK_CONTROLABLE_GUARDIAN))
{
if (reinterpret_cast<Guardian const*>(creature)->GetOwner()->GetTypeId() == TYPEID_PLAYER)
return PERMIT_BASE_PROACTIVE;
return PERMIT_BASE_REACTIVE;
}
return PERMIT_BASE_NO;
}

View File

@@ -49,7 +49,7 @@ public:
explicit PetAI(Creature* c);
void UpdateAI(uint32) override;
static int Permissible(Creature const*);
static int32 Permissible(Creature const* creature);
void KilledUnit(Unit* /*victim*/) override;
void AttackStart(Unit* target) override;

View File

@@ -19,7 +19,7 @@
#include "CreatureAIImpl.h"
#include "Errors.h"
int ReactorAI::Permissible(Creature const* creature)
int32 ReactorAI::Permissible(Creature const* creature)
{
if (creature->IsCivilian() || creature->IsNeutralToAll())
return PERMIT_BASE_REACTIVE;

View File

@@ -30,6 +30,6 @@ public:
void MoveInLineOfSight(Unit*) override {}
void UpdateAI(uint32 diff) override;
static int Permissible(Creature const*);
static int32 Permissible(Creature const* creature);
};
#endif

View File

@@ -25,7 +25,7 @@
#include "SpellMgr.h"
#include "Totem.h"
int TotemAI::Permissible(Creature const* creature)
int32 TotemAI::Permissible(Creature const* creature)
{
if (creature->IsTotem())
return PERMIT_BASE_PROACTIVE;

View File

@@ -38,7 +38,7 @@ public:
void DoAction(int32 param) override;
void UpdateAI(uint32 diff) override;
static int Permissible(Creature const* creature);
static int32 Permissible(Creature const* creature);
private:
ObjectGuid i_victimGuid;

View File

@@ -27,6 +27,7 @@
#include "Vehicle.h"
#include "ScriptMgr.h"
#include "Language.h"
#include "ZoneScript.h"
class PhasedRespawn : public BasicEvent
{
@@ -306,7 +307,10 @@ bool CreatureAI::_EnterEvadeMode(EvadeReason /*why*/)
me->SetLootRecipient(nullptr);
me->ResetPlayerDamageReq();
me->SetLastDamagedTime(0);
me->SetCannotReachTarget(false);
me->SetCannotReachTarget();
if (ZoneScript* zoneScript = me->GetZoneScript() ? me->GetZoneScript() : (ZoneScript*)me->GetInstanceScript())
zoneScript->OnCreatureEvade(me);
if (me->IsInEvadeMode())
{

View File

@@ -88,6 +88,7 @@ public:
EVADE_REASON_NO_HOSTILES, // the creature's threat list is empty
EVADE_REASON_BOUNDARY, // the creature has moved outside its evade boundary
EVADE_REASON_SEQUENCE_BREAK, // this is a boss and the pre-requisite encounters for engaging it are not defeated yet
EVADE_REASON_NO_PATH, // the creature was unable to reach its target for over 5 seconds
EVADE_REASON_OTHER
};
@@ -210,6 +211,8 @@ public:
virtual void CalculateThreat(Unit* /*hatedUnit*/, float& /*threat*/, SpellInfo const* /*threatSpell*/) { }
virtual bool OnTeleportUnreacheablePlayer(Player* /*player*/) { return false; }
protected:
virtual void MoveInLineOfSight(Unit* /*who*/);
@@ -222,7 +225,7 @@ private:
bool m_MoveInLineOfSight_locked;
};
enum Permitions
enum Permitions : int32
{
PERMIT_BASE_NO = -1,
PERMIT_BASE_IDLE = 1,

View File

@@ -19,60 +19,32 @@
#define ACORE_CREATUREAIFACTORY_H
#include "FactoryHolder.h"
#include "GameObjectAI.h"
#include "ObjectRegistry.h"
struct SelectableAI : public FactoryHolder<CreatureAI>, public Permissible<Creature>
typedef FactoryHolder<CreatureAI, Creature> CreatureAICreator;
struct SelectableAI : public CreatureAICreator, public Permissible<Creature>
{
SelectableAI(const char* id) : FactoryHolder<CreatureAI>(id) {}
SelectableAI(std::string const& name) : CreatureAICreator(name), Permissible<Creature>() { }
};
template<class REAL_AI>
struct CreatureAIFactory : public SelectableAI
{
CreatureAIFactory(const char* name) : SelectableAI(name) {}
CreatureAIFactory(std::string const& name) : SelectableAI(name) { }
CreatureAI* Create(void*) const;
inline CreatureAI* Create(Creature* c) const override
{
return new REAL_AI(c);
}
int Permit(Creature const* c) const { return REAL_AI::Permissible(c); }
int32 Permit(Creature const* c) const override
{
return REAL_AI::Permissible(c);
}
};
template<class REAL_AI>
inline CreatureAI*
CreatureAIFactory<REAL_AI>::Create(void* data) const
{
Creature* creature = reinterpret_cast<Creature*>(data);
return (new REAL_AI(creature));
}
typedef FactoryHolder<CreatureAI> CreatureAICreator;
typedef FactoryHolder<CreatureAI>::FactoryHolderRegistry CreatureAIRegistry;
//GO
struct SelectableGameObjectAI : public FactoryHolder<GameObjectAI>, public Permissible<GameObject>
{
SelectableGameObjectAI(const char* id) : FactoryHolder<GameObjectAI>(id) {}
};
template<class REAL_GO_AI>
struct GameObjectAIFactory : public SelectableGameObjectAI
{
GameObjectAIFactory(const char* name) : SelectableGameObjectAI(name) {}
GameObjectAI* Create(void*) const;
int Permit(GameObject const* g) const { return REAL_GO_AI::Permissible(g); }
};
template<class REAL_GO_AI>
inline GameObjectAI*
GameObjectAIFactory<REAL_GO_AI>::Create(void* data) const
{
GameObject* go = reinterpret_cast<GameObject*>(data);
return (new REAL_GO_AI(go));
}
typedef FactoryHolder<GameObjectAI> GameObjectAICreator;
typedef FactoryHolder<GameObjectAI>::FactoryHolderRegistry GameObjectAIRegistry;
typedef CreatureAICreator::FactoryHolderRegistry CreatureAIRegistry;
#define sCreatureAIRegistry CreatureAIRegistry::instance()
#endif

View File

@@ -19,7 +19,7 @@
#include "CombatAI.h"
#include "CreatureAIFactory.h"
#include "GuardAI.h"
#include "MovementGeneratorImpl.h"
#include "MovementGenerator.h"
#include "PassiveAI.h"
#include "PetAI.h"
#include "RandomMovementGenerator.h"
@@ -27,6 +27,7 @@
#include "SmartAI.h"
#include "TotemAI.h"
#include "WaypointMovementGenerator.h"
#include "GameObjectAIFactory.h"
namespace AIRegistry
{
@@ -47,10 +48,12 @@ namespace AIRegistry
(new CreatureAIFactory<VehicleAI>("VehicleAI"))->RegisterSelf();
(new CreatureAIFactory<SmartAI>("SmartAI"))->RegisterSelf();
(new GameObjectAIFactory<NullGameObjectAI>("NullGameObjectAI"))->RegisterSelf();
(new GameObjectAIFactory<GameObjectAI>("GameObjectAI"))->RegisterSelf();
(new GameObjectAIFactory<SmartGameObjectAI>("SmartGameObjectAI"))->RegisterSelf();
(new MovementGeneratorFactory<RandomMovementGenerator<Creature> >(RANDOM_MOTION_TYPE))->RegisterSelf();
(new MovementGeneratorFactory<WaypointMovementGenerator<Creature> >(WAYPOINT_MOTION_TYPE))->RegisterSelf();
(new IdleMovementFactory())->RegisterSelf();
(new MovementGeneratorFactory<RandomMovementGenerator<Creature>>(RANDOM_MOTION_TYPE))->RegisterSelf();
(new MovementGeneratorFactory<WaypointMovementGenerator<Creature>>(WAYPOINT_MOTION_TYPE))->RegisterSelf();
}
}

View File

@@ -15,132 +15,97 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "CreatureAISelector.h"
#include "Creature.h"
#include "CreatureAISelector.h"
#include "CreatureAIFactory.h"
#include "MovementGenerator.h"
#include "PassiveAI.h"
#include "Pet.h"
#include "GameObject.h"
#include "GameObjectAIFactory.h"
#include "ScriptMgr.h"
#include "TemporarySummon.h"
namespace FactorySelector
{
CreatureAI* selectAI(Creature* creature)
template <class T, class Value>
inline int32 GetPermitFor(T const* obj, Value const& value)
{
const CreatureAICreator* ai_factory = nullptr;
CreatureAIRegistry& ai_registry(*CreatureAIRegistry::instance());
// xinef: if we have controlable guardian, define petai for players as they can steer him, otherwise db / normal ai
// xinef: dont remember why i changed this qq commented out as may break some quests
if (creature->IsPet()/* || (creature->HasUnitTypeMask(UNIT_MASK_CONTROLABLE_GUARDIAN) && ((Guardian*)creature)->GetOwner()->GetTypeId() == TYPEID_PLAYER)*/)
ai_factory = ai_registry.GetRegistryItem("PetAI");
//scriptname in db
if (!ai_factory)
if (CreatureAI* scriptedAI = sScriptMgr->GetCreatureAI(creature))
return scriptedAI;
// AIname in db
std::string ainame = creature->GetAIName();
if (!ai_factory && !ainame.empty())
ai_factory = ai_registry.GetRegistryItem(ainame);
// select by NPC flags
if (!ai_factory)
{
if (creature->IsVehicle())
ai_factory = ai_registry.GetRegistryItem("VehicleAI");
else if (creature->HasUnitTypeMask(UNIT_MASK_CONTROLABLE_GUARDIAN) && ((Guardian*)creature)->GetOwner()->GetTypeId() == TYPEID_PLAYER)
ai_factory = ai_registry.GetRegistryItem("PetAI");
else if (creature->HasNpcFlag(UNIT_NPC_FLAG_SPELLCLICK))
ai_factory = ai_registry.GetRegistryItem("NullCreatureAI");
else if (creature->IsGuard())
ai_factory = ai_registry.GetRegistryItem("GuardAI");
else if (creature->HasUnitTypeMask(UNIT_MASK_CONTROLABLE_GUARDIAN))
ai_factory = ai_registry.GetRegistryItem("PetAI");
else if (creature->IsTotem())
ai_factory = ai_registry.GetRegistryItem("TotemAI");
else if (creature->IsTrigger())
{
if (creature->m_spells[0])
ai_factory = ai_registry.GetRegistryItem("TriggerAI");
else
ai_factory = ai_registry.GetRegistryItem("NullCreatureAI");
}
else if (creature->IsCritter() && !creature->HasUnitTypeMask(UNIT_MASK_GUARDIAN))
ai_factory = ai_registry.GetRegistryItem("CritterAI");
}
// select by permit check
if (!ai_factory)
{
int best_val = -1;
typedef CreatureAIRegistry::RegistryMapType RMT;
RMT const& l = ai_registry.GetRegisteredItems();
for (RMT::const_iterator iter = l.begin(); iter != l.end(); ++iter)
{
const CreatureAICreator* factory = iter->second;
const SelectableAI* p = dynamic_cast<const SelectableAI*>(factory);
ASSERT(p);
int val = p->Permit(creature);
if (val > best_val)
{
best_val = val;
ai_factory = p;
}
}
}
// select NullCreatureAI if not another cases
ainame = (!ai_factory) ? "NullCreatureAI" : ai_factory->key();
LOG_DEBUG("scripts.ai", "Creature {} used AI is {}.", creature->GetGUID().ToString(), ainame);
return (!ai_factory ? new NullCreatureAI(creature) : ai_factory->Create(creature));
Permissible<T> const* const p = ASSERT_NOTNULL(dynamic_cast<Permissible<T> const*>(value.second.get()));
return p->Permit(obj);
}
MovementGenerator* selectMovementGenerator(Creature* creature)
template <class T>
struct PermissibleOrderPred
{
MovementGeneratorRegistry& mv_registry(*MovementGeneratorRegistry::instance());
ASSERT(creature->GetCreatureTemplate());
const MovementGeneratorCreator* mv_factory = mv_registry.GetRegistryItem(creature->GetDefaultMovementType());
public:
PermissibleOrderPred(T const* obj) : _obj(obj) { }
/* if (mv_factory == nullptr)
template <class Value>
bool operator()(Value const& left, Value const& right) const
{
int best_val = -1;
std::vector<std::string> l;
mv_registry.GetRegisteredItems(l);
for (std::vector<std::string>::iterator iter = l.begin(); iter != l.end(); ++iter)
{
const MovementGeneratorCreator *factory = mv_registry.GetRegistryItem((*iter).c_str());
const SelectableMovement *p = dynamic_cast<const SelectableMovement *>(factory);
ASSERT(p != nullptr);
int val = p->Permit(creature);
if (val > best_val)
{
best_val = val;
mv_factory = p;
}
}
}*/
return GetPermitFor(_obj, left) < GetPermitFor(_obj, right);
}
return (!mv_factory ? nullptr : mv_factory->Create(creature));
private:
T const* const _obj;
};
template <class AI, class T>
inline FactoryHolder<AI, T> const* SelectFactory(T* obj)
{
static_assert(std::is_same<AI, CreatureAI>::value || std::is_same<AI, GameObjectAI>::value, "Invalid template parameter");
static_assert(std::is_same<AI, CreatureAI>::value == std::is_same<T, Creature>::value, "Incompatible AI for type");
static_assert(std::is_same<AI, GameObjectAI>::value == std::is_same<T, GameObject>::value, "Incompatible AI for type");
using AIRegistry = typename FactoryHolder<AI, T>::FactoryHolderRegistry;
// AIName in db
std::string const& aiName = obj->GetAIName();
if (!aiName.empty())
return AIRegistry::instance()->GetRegistryItem(aiName);
// select by permit check
typename AIRegistry::RegistryMapType const& items = AIRegistry::instance()->GetRegisteredItems();
auto itr = std::max_element(items.begin(), items.end(), PermissibleOrderPred<T>(obj));
if (itr != items.end() && GetPermitFor(obj, *itr) >= 0)
return itr->second.get();
// should _never_ happen, Null AI types defined as PERMIT_BASE_IDLE, it must've been found
ABORT();
return nullptr;
}
CreatureAI* SelectAI(Creature* creature)
{
// special pet case, if a tamed creature uses AIName (example SmartAI) we need to override it
if (creature->IsPet())
return ASSERT_NOTNULL(sCreatureAIRegistry->GetRegistryItem("PetAI"))->Create(creature);
// scriptname in db
if (CreatureAI* scriptedAI = sScriptMgr->GetCreatureAI(creature))
return scriptedAI;
return SelectFactory<CreatureAI>(creature)->Create(creature);
}
MovementGenerator* SelectMovementGenerator(Unit* unit)
{
MovementGeneratorType type = IDLE_MOTION_TYPE;
if (Creature* creature = unit->ToCreature())
if (!creature->GetCharmerOrOwnerPlayerOrPlayerItself())
type = creature->GetDefaultMovementType();
MovementGeneratorCreator const* mv_factory = sMovementGeneratorRegistry->GetRegistryItem(type);
return ASSERT_NOTNULL(mv_factory)->Create(unit);
}
GameObjectAI* SelectGameObjectAI(GameObject* go)
{
const GameObjectAICreator* ai_factory = nullptr;
GameObjectAIRegistry& ai_registry(*GameObjectAIRegistry::instance());
// scriptname in db
if (GameObjectAI* scriptedAI = sScriptMgr->GetGameObjectAI(go))
return scriptedAI;
ai_factory = ai_registry.GetRegistryItem(go->GetAIName());
//future goAI types go here
std::string ainame = (!ai_factory || go->GetScriptId()) ? "NullGameObjectAI" : ai_factory->key();
LOG_DEBUG("scripts.ai", "GameObject {} used AI is {}.", go->GetGUID().ToString(), ainame);
return (!ai_factory ? new NullGameObjectAI(go) : ai_factory->Create(go));
return SelectFactory<GameObjectAI>(go)->Create(go);
}
}

View File

@@ -21,13 +21,14 @@
class CreatureAI;
class Creature;
class MovementGenerator;
class Unit;
class GameObjectAI;
class GameObject;
namespace FactorySelector
{
CreatureAI* selectAI(Creature*);
MovementGenerator* selectMovementGenerator(Creature*);
GameObjectAI* SelectGameObjectAI(GameObject*);
AC_GAME_API CreatureAI* SelectAI(Creature* creature);
AC_GAME_API MovementGenerator* SelectMovementGenerator(Unit* unit);
AC_GAME_API GameObjectAI* SelectGameObjectAI(GameObject* go);
}
#endif

View File

@@ -0,0 +1,51 @@
/*
* This file is part of the AzerothCore Project. See AUTHORS file for Copyright information
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU Affero General Public License as published by the
* Free Software Foundation; either version 3 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 Affero 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/>.
*/
#ifndef ACORE_GAMEOBJECTAIFACTORY_H
#define ACORE_GAMEOBJECTAIFACTORY_H
#include "ObjectRegistry.h"
#include "FactoryHolder.h"
typedef FactoryHolder<GameObjectAI, GameObject> GameObjectAICreator;
struct SelectableGameObjectAI : public GameObjectAICreator, public Permissible<GameObject>
{
SelectableGameObjectAI(std::string const& name) : GameObjectAICreator(name), Permissible<GameObject>() { }
};
template<class REAL_GO_AI>
struct GameObjectAIFactory : public SelectableGameObjectAI
{
GameObjectAIFactory(std::string const& name) : SelectableGameObjectAI(name) { }
GameObjectAI* Create(GameObject* go) const override
{
return new REAL_GO_AI(go);
}
int32 Permit(GameObject const* go) const override
{
return REAL_GO_AI::Permissible(go);
}
};
typedef GameObjectAICreator::FactoryHolderRegistry GameObjectAIRegistry;
#define sGameObjectAIRegistry GameObjectAIRegistry::instance()
#endif

View File

@@ -297,12 +297,12 @@ void SmartAI::EndPath(bool fail)
mEscortNPCFlags = 0;
}
ObjectList* targets = GetScript()->GetTargetList(SMART_ESCORT_TARGETS);
ObjectVector const* targets = GetScript()->GetStoredTargetVector(SMART_ESCORT_TARGETS, *me);
if (targets && mEscortQuestID)
{
if (targets->size() == 1 && GetScript()->IsPlayer((*targets->begin())))
{
Player* player = (*targets->begin())->ToPlayer();
Player* player = targets->front()->ToPlayer();
if (Group* group = player->GetGroup())
{
for (GroupReference* groupRef = group->GetFirstMember(); groupRef != nullptr; groupRef = groupRef->next())
@@ -327,11 +327,11 @@ void SmartAI::EndPath(bool fail)
}
else
{
for (ObjectList::iterator iter = targets->begin(); iter != targets->end(); ++iter)
for (WorldObject* target : *targets)
{
if (GetScript()->IsPlayer((*iter)))
if (GetScript()->IsPlayer(target))
{
Player* player = (*iter)->ToPlayer();
Player* player = target->ToPlayer();
if (!fail && player->IsAtGroupRewardDistance(me) && !player->HasCorpse())
player->AreaExploredOrEventHappens(mEscortQuestID);
else if (fail && player->GetQuestStatus(mEscortQuestID) == QUEST_STATUS_INCOMPLETE)
@@ -535,8 +535,7 @@ void SmartAI::UpdateAI(uint32 diff)
bool SmartAI::IsEscortInvokerInRange()
{
ObjectList* targets = GetScript()->GetTargetList(SMART_ESCORT_TARGETS);
if (targets)
if (ObjectVector const* targets = GetScript()->GetStoredTargetVector(SMART_ESCORT_TARGETS, *me))
{
float checkDist = me->GetInstanceScript() ? SMART_ESCORT_MAX_PLAYER_DIST * 2 : SMART_ESCORT_MAX_PLAYER_DIST;
if (targets->size() == 1 && GetScript()->IsPlayer((*targets->begin())))
@@ -558,11 +557,11 @@ bool SmartAI::IsEscortInvokerInRange()
}
else
{
for (ObjectList::iterator iter = targets->begin(); iter != targets->end(); ++iter)
for (WorldObject* target : *targets)
{
if (GetScript()->IsPlayer((*iter)))
if (GetScript()->IsPlayer(target))
{
if (me->GetDistance((*iter)->ToPlayer()) <= checkDist)
if (me->GetDistance(target->ToPlayer()) <= checkDist)
return true;
}
}
@@ -763,13 +762,6 @@ void SmartAI::JustRespawned()
mFollowArrivedAlive = true;
}
int SmartAI::Permissible(Creature const* creature)
{
if (creature->GetAIName() == "SmartAI")
return PERMIT_BASE_SPECIAL;
return PERMIT_BASE_NO;
}
void SmartAI::JustReachedHome()
{
GetScript()->OnReset();
@@ -1133,13 +1125,6 @@ void SmartGameObjectAI::SummonedCreatureDies(Creature* summon, Unit* /*killer*/)
GetScript()->ProcessEventsFor(SMART_EVENT_SUMMONED_UNIT_DIES, summon);
}
int SmartGameObjectAI::Permissible(GameObject const* g)
{
if (g->GetAIName() == "SmartGameObjectAI")
return PERMIT_BASE_SPECIAL;
return PERMIT_BASE_NO;
}
void SmartGameObjectAI::UpdateAI(uint32 diff)
{
GetScript()->OnUpdate(diff);

View File

@@ -164,7 +164,7 @@ public:
ObjectGuid GetGUID(int32 id = 0) const override;
//core related
static int32 Permissible(Creature const*);
static int32 Permissible(Creature const* /*creature*/) { return PERMIT_BASE_NO; }
// Called at movepoint reached
void MovepointReached(uint32 id);
@@ -259,7 +259,7 @@ public:
void InitializeAI() override;
void Reset() override;
SmartScript* GetScript() { return &mScript; }
static int32 Permissible(GameObject const* g);
static int32 Permissible(GameObject const* /*go*/) { return PERMIT_BASE_NO; }
bool GossipHello(Player* player, bool reportUse) override;
bool GossipSelect(Player* player, uint32 sender, uint32 action) override;

File diff suppressed because it is too large Load Diff

View File

@@ -39,19 +39,19 @@ public:
void ProcessEventsFor(SMART_EVENT e, Unit* unit = nullptr, uint32 var0 = 0, uint32 var1 = 0, bool bvar = false, SpellInfo const* spell = nullptr, GameObject* gob = nullptr);
void ProcessEvent(SmartScriptHolder& e, Unit* unit = nullptr, uint32 var0 = 0, uint32 var1 = 0, bool bvar = false, SpellInfo const* spell = nullptr, GameObject* gob = nullptr);
bool CheckTimer(SmartScriptHolder const& e) const;
void RecalcTimer(SmartScriptHolder& e, uint32 min, uint32 max);
static void RecalcTimer(SmartScriptHolder& e, uint32 min, uint32 max);
void UpdateTimer(SmartScriptHolder& e, uint32 const diff);
void InitTimer(SmartScriptHolder& e);
static void InitTimer(SmartScriptHolder& e);
void ProcessAction(SmartScriptHolder& e, Unit* unit = nullptr, uint32 var0 = 0, uint32 var1 = 0, bool bvar = false, SpellInfo const* spell = nullptr, GameObject* gob = nullptr);
void ProcessTimedAction(SmartScriptHolder& e, uint32 const& min, uint32 const& max, Unit* unit = nullptr, uint32 var0 = 0, uint32 var1 = 0, bool bvar = false, SpellInfo const* spell = nullptr, GameObject* gob = nullptr);
ObjectList* GetTargets(SmartScriptHolder const& e, Unit* invoker = nullptr);
ObjectList* GetWorldObjectsInDist(float dist);
void GetTargets(ObjectVector& targets, SmartScriptHolder const& e, Unit* invoker = nullptr) const;
void GetWorldObjectsInDist(ObjectVector& objects, float dist) const;
void InstallTemplate(SmartScriptHolder const& e);
SmartScriptHolder CreateSmartEvent(SMART_EVENT e, uint32 event_flags, uint32 event_param1, uint32 event_param2, uint32 event_param3, uint32 event_param4, uint32 event_param5, SMART_ACTION action, uint32 action_param1, uint32 action_param2, uint32 action_param3, uint32 action_param4, uint32 action_param5, uint32 action_param6, SMARTAI_TARGETS t, uint32 target_param1, uint32 target_param2, uint32 target_param3, uint32 target_param4, uint32 phaseMask);
static SmartScriptHolder CreateSmartEvent(SMART_EVENT e, uint32 event_flags, uint32 event_param1, uint32 event_param2, uint32 event_param3, uint32 event_param4, uint32 event_param5, SMART_ACTION action, uint32 action_param1, uint32 action_param2, uint32 action_param3, uint32 action_param4, uint32 action_param5, uint32 action_param6, SMARTAI_TARGETS t, uint32 target_param1, uint32 target_param2, uint32 target_param3, uint32 target_param4, uint32 phaseMask);
void AddEvent(SMART_EVENT e, uint32 event_flags, uint32 event_param1, uint32 event_param2, uint32 event_param3, uint32 event_param4, uint32 event_param5, SMART_ACTION action, uint32 action_param1, uint32 action_param2, uint32 action_param3, uint32 action_param4, uint32 action_param5, uint32 action_param6, SMARTAI_TARGETS t, uint32 target_param1, uint32 target_param2, uint32 target_param3, uint32 target_param4, uint32 phaseMask);
void SetPathId(uint32 id) { mPathId = id; }
uint32 GetPathId() const { return mPathId; }
WorldObject* GetBaseObject()
WorldObject* GetBaseObject() const
{
WorldObject* obj = nullptr;
if (me)
@@ -70,27 +70,17 @@ public:
void OnUpdate(const uint32 diff);
void OnMoveInLineOfSight(Unit* who);
Unit* DoSelectLowestHpFriendly(float range, uint32 MinHPDiff);
Unit* DoSelectLowestHpFriendly(float range, uint32 MinHPDiff) const;
Unit* DoSelectLowestHpPercentFriendly(float range, uint32 minHpPct, uint32 maxHpPct) const;
void DoFindFriendlyCC(std::list<Creature*>& _list, float range);
void DoFindFriendlyMissingBuff(std::list<Creature*>& list, float range, uint32 spellid);
Unit* DoFindClosestFriendlyInRange(float range, bool playerOnly);
void DoFindFriendlyCC(std::vector<Creature*>& creatures, float range) const;
void DoFindFriendlyMissingBuff(std::vector<Creature*>& creatures, float range, uint32 spellid) const;
Unit* DoFindClosestFriendlyInRange(float range, bool playerOnly) const;
void StoreTargetList(ObjectList* targets, uint32 id)
void StoreTargetList(ObjectVector const& targets, uint32 id)
{
if (!targets)
return;
if (mTargetStorage->find(id) != mTargetStorage->end())
{
// check if already stored
if ((*mTargetStorage)[id]->Equals(targets))
return;
delete (*mTargetStorage)[id];
}
(*mTargetStorage)[id] = new ObjectGuidList(targets, GetBaseObject());
// insert or replace
_storedTargets.erase(id);
_storedTargets.emplace(id, ObjectGuidVector(targets));
}
bool IsSmart(Creature* c = nullptr)
@@ -122,11 +112,11 @@ public:
return smart;
}
ObjectList* GetTargetList(uint32 id)
ObjectVector const* GetStoredTargetVector(uint32 id, WorldObject const& ref) const
{
ObjectListMap::iterator itr = mTargetStorage->find(id);
if (itr != mTargetStorage->end())
return (*itr).second->GetObjectList();
auto itr = _storedTargets.find(id);
if (itr != _storedTargets.end())
return itr->second.GetObjectVector(ref);
return nullptr;
}
@@ -187,8 +177,6 @@ public:
return creatureItr != bounds.second ? creatureItr->second : bounds.first->second;
}
ObjectListMap* mTargetStorage;
void OnReset();
void ResetBaseObject()
{
@@ -223,7 +211,7 @@ public:
//TIMED_ACTIONLIST (script type 9 aka script9)
void SetScript9(SmartScriptHolder& e, uint32 entry);
Unit* GetLastInvoker(Unit* invoker = nullptr);
Unit* GetLastInvoker(Unit* invoker = nullptr) const;
ObjectGuid mLastInvoker;
typedef std::unordered_map<uint32, uint32> CounterMap;
CounterMap mCounterList;
@@ -284,6 +272,8 @@ private:
// Xinef: misc
bool _allowPhaseReset;
ObjectVectorMap _storedTargets;
SMARTAI_TEMPLATE mTemplate;
void InstallEvents();

View File

@@ -679,7 +679,7 @@ bool SmartAIMgr::CheckUnusedActionParams(SmartScriptHolder const& e)
case SMART_ACTION_SEND_GOSSIP_MENU: return sizeof(SmartAction::sendGossipMenu);
case SMART_ACTION_GO_SET_LOOT_STATE: return sizeof(SmartAction::setGoLootState);
case SMART_ACTION_SEND_TARGET_TO_TARGET: return sizeof(SmartAction::sendTargetToTarget);
case SMART_ACTION_SET_HOME_POS: return NO_PARAMS;
case SMART_ACTION_SET_HOME_POS: return sizeof(SmartAction::setHomePos);
case SMART_ACTION_SET_HEALTH_REGEN: return sizeof(SmartAction::setHealthRegen);
case SMART_ACTION_SET_ROOT: return sizeof(SmartAction::setRoot);
case SMART_ACTION_SET_GO_FLAG: return sizeof(SmartAction::goFlag);
@@ -1358,24 +1358,39 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e)
break;
}
case SMART_ACTION_RANDOM_EMOTE:
if (e.action.randomEmote.emote1 && !IsEmoteValid(e, e.action.randomEmote.emote1))
return false;
{
if (std::all_of(e.action.randomEmote.emotes.begin(), e.action.randomEmote.emotes.end(), [](uint32 emote) { return emote == 0; }))
{
LOG_ERROR("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} does not have any non-zero emote",
e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType());
return false;
}
if (e.action.randomEmote.emote2 && !IsEmoteValid(e, e.action.randomEmote.emote2))
return false;
if (e.action.randomEmote.emote3 && !IsEmoteValid(e, e.action.randomEmote.emote3))
return false;
if (e.action.randomEmote.emote4 && !IsEmoteValid(e, e.action.randomEmote.emote4))
return false;
if (e.action.randomEmote.emote5 && !IsEmoteValid(e, e.action.randomEmote.emote5))
return false;
if (e.action.randomEmote.emote6 && !IsEmoteValid(e, e.action.randomEmote.emote6))
return false;
break;
for (uint32 emote : e.action.randomEmote.emotes)
if (emote && !IsEmoteValid(e, emote))
return false;
break;
}
case SMART_ACTION_CALL_RANDOM_TIMED_ACTIONLIST:
{
if (std::all_of(e.action.randTimedActionList.actionLists.begin(), e.action.randTimedActionList.actionLists.end(), [](uint32 actionList) { return actionList == 0; }))
{
LOG_ERROR("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} does not have any non-zero action list",
e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType());
return false;
}
break;
}
case SMART_ACTION_START_CLOSEST_WAYPOINT:
{
if (std::all_of(e.action.closestWaypointFromList.wps.begin(), e.action.closestWaypointFromList.wps.end(), [](uint32 wp) { return wp == 0; }))
{
LOG_ERROR("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} does not have any non-zero waypoint id",
e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType());
return false;
}
break;
}
case SMART_ACTION_CAST:
case SMART_ACTION_INVOKER_CAST:
if (!IsSpellValid(e, e.action.cast.spell))
@@ -1434,36 +1449,29 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e)
break;
case SMART_ACTION_RANDOM_PHASE:
{
if (e.action.randomPhase.phase1 >= SMART_EVENT_PHASE_MAX ||
e.action.randomPhase.phase2 >= SMART_EVENT_PHASE_MAX ||
e.action.randomPhase.phase3 >= SMART_EVENT_PHASE_MAX ||
e.action.randomPhase.phase4 >= SMART_EVENT_PHASE_MAX ||
e.action.randomPhase.phase5 >= SMART_EVENT_PHASE_MAX ||
e.action.randomPhase.phase6 >= SMART_EVENT_PHASE_MAX)
{
LOG_ERROR("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} attempts to set invalid phase, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType());
return false;
}
if (e.action.randomPhase.phase1 == 0 &&
e.action.randomPhase.phase2 == 0 &&
e.action.randomPhase.phase3 == 0 &&
e.action.randomPhase.phase4 == 0 &&
e.action.randomPhase.phase5 == 0 &&
e.action.randomPhase.phase6 == 0)
if (std::all_of(e.action.randomPhase.phases.begin(), e.action.randomPhase.phases.end(), [](uint32 phase) { return phase == 0; }))
{
LOG_ERROR("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} does not have any non-zero phase",
e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType());
return false;
}
if (std::any_of(e.action.randomPhase.phases.begin(), e.action.randomPhase.phases.end(), [](uint32 phase) { return phase >= SMART_EVENT_PHASE_MAX; }))
{
LOG_ERROR("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} attempts to set invalid phase, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType());
return false;
}
break;
}
break;
case SMART_ACTION_RANDOM_PHASE_RANGE: //PhaseMin, PhaseMax
{
if (e.action.randomPhaseRange.phaseMin >= SMART_EVENT_PHASE_MAX ||
e.action.randomPhaseRange.phaseMax >= SMART_EVENT_PHASE_MAX)
e.action.randomPhaseRange.phaseMax >= SMART_EVENT_PHASE_MAX)
{
LOG_ERROR("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} attempts to set invalid phase, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType());
return false;
}
if (!IsMinMaxValid(e, e.action.randomPhaseRange.phaseMin, e.action.randomPhaseRange.phaseMax))
return false;
break;
@@ -1570,7 +1578,7 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e)
}
case SMART_ACTION_CALL_RANDOM_RANGE_TIMED_ACTIONLIST:
{
if (!IsMinMaxValid(e, e.action.randRangeTimedActionList.idMin, e.action.randRangeTimedActionList.idMax))
if (!IsMinMaxValid(e, e.action.randTimedActionList.actionLists[0], e.action.randTimedActionList.actionLists[1]))
return false;
break;
}
@@ -1625,12 +1633,10 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e)
{
if (e.GetScriptType() == SMART_SCRIPT_TYPE_CREATURE)
{
int8 equipId = (int8)e.action.equip.entry;
if (equipId)
if (int8 equipId = static_cast<int8>(e.action.equip.entry))
{
EquipmentInfo const* einfo = sObjectMgr->GetEquipmentInfo(e.entryOrGuid, equipId);
if (!einfo)
EquipmentInfo const* eInfo = sObjectMgr->GetEquipmentInfo(e.entryOrGuid, equipId);
if (!eInfo)
{
LOG_ERROR("scripts.ai.sai", "SmartScript: SMART_ACTION_EQUIP uses non-existent equipment info id {} for creature {}, skipped.", equipId, e.entryOrGuid);
return false;
@@ -1783,7 +1789,6 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e)
case SMART_ACTION_MOVE_TO_POS:
case SMART_ACTION_EVADE:
case SMART_ACTION_SET_ACTIVE:
case SMART_ACTION_START_CLOSEST_WAYPOINT:
case SMART_ACTION_FOLLOW:
case SMART_ACTION_SET_ORIENTATION:
case SMART_ACTION_STORE_TARGET_LIST:
@@ -1818,7 +1823,6 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e)
case SMART_ACTION_SET_NPC_FLAG:
case SMART_ACTION_ADD_NPC_FLAG:
case SMART_ACTION_REMOVE_NPC_FLAG:
case SMART_ACTION_CALL_RANDOM_TIMED_ACTIONLIST:
case SMART_ACTION_RANDOM_MOVE:
case SMART_ACTION_SET_UNIT_FIELD_BYTES_1:
case SMART_ACTION_REMOVE_UNIT_FIELD_BYTES_1:

View File

@@ -49,6 +49,16 @@ struct WayPoint
uint32 delay;
};
enum eSmartAI
{
SMART_EVENT_PARAM_COUNT = 4,
SMART_ACTION_PARAM_COUNT = 6,
SMART_SUMMON_COUNTER = 0xFFFFFF,
SMART_ESCORT_LAST_OOC_POINT = 0xFFFFFF,
SMART_RANDOM_POINT = 0xFFFFFE,
SMART_ESCORT_TARGETS = 0xFFFFFF
};
enum SMART_EVENT_PHASE
{
SMART_EVENT_PHASE_ALWAYS = 0,
@@ -758,12 +768,7 @@ struct SmartAction
struct
{
uint32 emote1;
uint32 emote2;
uint32 emote3;
uint32 emote4;
uint32 emote5;
uint32 emote6;
std::array<uint32, SMART_ACTION_PARAM_COUNT> emotes;
} randomEmote;
struct
@@ -858,12 +863,7 @@ struct SmartAction
struct
{
uint32 phase1;
uint32 phase2;
uint32 phase3;
uint32 phase4;
uint32 phase5;
uint32 phase6;
std::array<uint32, SMART_ACTION_PARAM_COUNT> phases;
} randomPhase;
struct
@@ -1049,9 +1049,7 @@ struct SmartAction
{
uint32 entry;
uint32 mask;
uint32 slot1;
uint32 slot2;
uint32 slot3;
std::array<uint32, MAX_EQUIPMENT_ITEMS> slots;
} equip;
struct
@@ -1086,12 +1084,7 @@ struct SmartAction
struct
{
uint32 entry1;
uint32 entry2;
uint32 entry3;
uint32 entry4;
uint32 entry5;
uint32 entry6;
std::array<uint32, SMART_ACTION_PARAM_COUNT> actionLists;
} randTimedActionList;
struct
@@ -1209,12 +1202,7 @@ struct SmartAction
struct
{
uint32 wp1;
uint32 wp2;
uint32 wp3;
uint32 wp4;
uint32 wp5;
uint32 wp6;
std::array<uint32, SMART_ACTION_PARAM_COUNT> wps;
} closestWaypointFromList;
struct
@@ -1584,16 +1572,6 @@ enum SmartTargetRoleFlags
SMART_TARGET_ROLE_FLAG_DAMAGERS = 0x004
};
enum eSmartAI
{
SMART_EVENT_PARAM_COUNT = 4,
SMART_ACTION_PARAM_COUNT = 6,
SMART_SUMMON_COUNTER = 0xFFFFFF,
SMART_ESCORT_LAST_OOC_POINT = 0xFFFFFF,
SMART_RANDOM_POINT = 0xFFFFFE,
SMART_ESCORT_TARGETS = 0xFFFFFF
};
enum SmartScriptType
{
SMART_SCRIPT_TYPE_CREATURE = 0, //done
@@ -1802,60 +1780,42 @@ public:
typedef std::unordered_map<uint32, WayPoint*> WPPath;
typedef std::list<WorldObject*> ObjectList;
typedef std::vector<WorldObject*> ObjectVector;
class ObjectGuidList
class ObjectGuidVector
{
ObjectList* m_objectList;
GuidList* m_guidList;
WorldObject* m_baseObject;
public:
ObjectGuidList(ObjectList* objectList, WorldObject* baseObject)
explicit ObjectGuidVector(ObjectVector const& objectVector) : _objectVector(objectVector)
{
ASSERT(objectList);
m_objectList = objectList;
m_baseObject = baseObject;
m_guidList = new GuidList();
for (ObjectList::iterator itr = objectList->begin(); itr != objectList->end(); ++itr)
{
m_guidList->push_back((*itr)->GetGUID());
}
_guidVector.reserve(_objectVector.size());
for (WorldObject* obj : _objectVector)
_guidVector.push_back(obj->GetGUID());
}
ObjectList* GetObjectList()
ObjectVector const* GetObjectVector(WorldObject const& ref) const
{
if (m_baseObject)
{
//sanitize list using m_guidList
m_objectList->clear();
for (GuidList::iterator itr = m_guidList->begin(); itr != m_guidList->end(); ++itr)
{
if (WorldObject* obj = ObjectAccessor::GetWorldObject(*m_baseObject, *itr))
m_objectList->push_back(obj);
//else
// LOG_DEBUG("scripts.ai", "SmartScript::mTargetStorage stores a guid to an invalid object: {}", (*itr).ToString());
}
}
return m_objectList;
UpdateObjects(ref);
return &_objectVector;
}
bool Equals(ObjectList* objectList)
{
return m_objectList == objectList;
}
~ObjectGuidVector() { }
~ObjectGuidList()
private:
mutable ObjectVector _objectVector;
GuidVector _guidVector;
//sanitize vector using _guidVector
void UpdateObjects(WorldObject const& ref) const
{
delete m_objectList;
delete m_guidList;
_objectVector.clear();
for (ObjectGuid const& guid : _guidVector)
if (WorldObject* obj = ObjectAccessor::GetWorldObject(ref, guid))
_objectVector.push_back(obj);
}
};
typedef std::unordered_map<uint32, ObjectGuidList*> ObjectListMap;
typedef std::unordered_map<uint32, ObjectGuidVector> ObjectVectorMap;
class SmartWaypointMgr
{

View File

@@ -261,12 +261,18 @@ HostileReference* ThreatContainer::getReferenceByTarget(Unit* victim) const
if (!victim)
return nullptr;
ObjectGuid const guid = victim->GetGUID();
return getReferenceByTarget(victim->GetGUID());
}
HostileReference* ThreatContainer::getReferenceByTarget(ObjectGuid const& guid) const
{
for (ThreatContainer::StorageType::const_iterator i = iThreatList.begin(); i != iThreatList.end(); ++i)
{
HostileReference* ref = (*i);
if (ref && ref->getUnitGuid() == guid)
{
return ref;
}
}
return nullptr;

View File

@@ -164,6 +164,7 @@ public:
}
HostileReference* getReferenceByTarget(Unit* victim) const;
HostileReference* getReferenceByTarget(ObjectGuid const& guid) const;
[[nodiscard]] StorageType const& getThreatList() const { return iThreatList; }

View File

@@ -219,8 +219,8 @@ Creature::Creature(bool isWorldObject): Unit(isWorldObject), MovableMapObject(),
m_corpseRemoveTime(0), m_respawnTime(0), m_respawnDelay(300), m_corpseDelay(60), m_wanderDistance(0.0f), m_boundaryCheckTime(2500),
m_transportCheckTimer(1000), lootPickPocketRestoreTime(0), m_reactState(REACT_AGGRESSIVE), m_defaultMovementType(IDLE_MOTION_TYPE),
m_spawnId(0), m_equipmentId(0), m_originalEquipmentId(0), m_AlreadyCallAssistance(false),
m_AlreadySearchedAssistance(false), m_regenHealth(true), m_AI_locked(false), m_meleeDamageSchoolMask(SPELL_SCHOOL_MASK_NORMAL), m_originalEntry(0), m_moveInLineOfSightDisabled(false), m_moveInLineOfSightStrictlyDisabled(false),
m_homePosition(), m_transportHomePosition(), m_creatureInfo(nullptr), m_creatureData(nullptr), m_detectionDistance(20.0f), m_waypointID(0), m_path_id(0), m_formation(nullptr), _lastDamagedTime(nullptr), m_cannotReachTarget(false), m_cannotReachTimer(0),
m_AlreadySearchedAssistance(false), m_regenHealth(true), m_regenPower(true), m_AI_locked(false), m_meleeDamageSchoolMask(SPELL_SCHOOL_MASK_NORMAL), m_originalEntry(0), m_moveInLineOfSightDisabled(false), m_moveInLineOfSightStrictlyDisabled(false),
m_homePosition(), m_transportHomePosition(), m_creatureInfo(nullptr), m_creatureData(nullptr), m_detectionDistance(20.0f), m_waypointID(0), m_path_id(0), m_formation(nullptr), _lastDamagedTime(nullptr), m_cannotReachTimer(0),
_isMissingSwimmingFlagOutOfCombat(false), m_assistanceTimer(0), _playerDamageReq(0), _damagedByPlayer(false)
{
m_regenTimer = CREATURE_REGEN_INTERVAL;
@@ -628,207 +628,238 @@ void Creature::Update(uint32 diff)
LOG_ERROR("entities.unit", "Creature ({}) in wrong state: JUST_DEAD (1)", GetGUID().ToString());
break;
case DEAD:
{
time_t now = GameTime::GetGameTime().count();
if (m_respawnTime <= now)
{
time_t now = GameTime::GetGameTime().count();
if (m_respawnTime <= now)
ConditionList conditions = sConditionMgr->GetConditionsForNotGroupedEntry(CONDITION_SOURCE_TYPE_CREATURE_RESPAWN, GetEntry());
if (!sConditionMgr->IsObjectMeetToConditions(this, conditions))
{
ConditionList conditions = sConditionMgr->GetConditionsForNotGroupedEntry(CONDITION_SOURCE_TYPE_CREATURE_RESPAWN, GetEntry());
if (!sConditionMgr->IsObjectMeetToConditions(this, conditions))
{
// Creature should not respawn, reset respawn timer. Conditions will be checked again the next time it tries to respawn.
m_respawnTime = GameTime::GetGameTime().count() + m_respawnDelay;
break;
}
bool allowed = !IsAIEnabled || AI()->CanRespawn(); // First check if there are any scripts that prevent us respawning
if (!allowed) // Will be rechecked on next Update call
break;
ObjectGuid dbtableHighGuid = ObjectGuid::Create<HighGuid::Unit>(GetEntry(), m_spawnId);
time_t linkedRespawntime = GetMap()->GetLinkedRespawnTime(dbtableHighGuid);
if (!linkedRespawntime) // Can respawn
Respawn();
else // the master is dead
{
ObjectGuid targetGuid = sObjectMgr->GetLinkedRespawnGuid(dbtableHighGuid);
if (targetGuid == dbtableHighGuid) // if linking self, never respawn (check delayed to next day)
SetRespawnTime(DAY);
else
m_respawnTime = (now > linkedRespawntime ? now : linkedRespawntime) + urand(5, MINUTE); // else copy time from master and add a little
SaveRespawnTime(); // also save to DB immediately
}
// Creature should not respawn, reset respawn timer. Conditions will be checked again the next time it tries to respawn.
m_respawnTime = GameTime::GetGameTime().count() + m_respawnDelay;
break;
}
bool allowed = !IsAIEnabled || AI()->CanRespawn(); // First check if there are any scripts that prevent us respawning
if (!allowed) // Will be rechecked on next Update call
break;
ObjectGuid dbtableHighGuid = ObjectGuid::Create<HighGuid::Unit>(GetEntry(), m_spawnId);
time_t linkedRespawntime = GetMap()->GetLinkedRespawnTime(dbtableHighGuid);
if (!linkedRespawntime) // Can respawn
Respawn();
else // the master is dead
{
ObjectGuid targetGuid = sObjectMgr->GetLinkedRespawnGuid(dbtableHighGuid);
if (targetGuid == dbtableHighGuid) // if linking self, never respawn (check delayed to next day)
SetRespawnTime(DAY);
else
m_respawnTime = (now > linkedRespawntime ? now : linkedRespawntime) + urand(5, MINUTE); // else copy time from master and add a little
SaveRespawnTime(); // also save to DB immediately
}
break;
}
break;
}
case CORPSE:
{
Unit::Update(diff);
// deathstate changed on spells update, prevent problems
if (m_deathState != CORPSE)
break;
if (m_groupLootTimer && lootingGroupLowGUID)
{
if (m_groupLootTimer <= diff)
{
Group* group = sGroupMgr->GetGroupByGUID(lootingGroupLowGUID);
if (group)
group->EndRoll(&loot, GetMap());
m_groupLootTimer = 0;
lootingGroupLowGUID = 0;
}
else
{
m_groupLootTimer -= diff;
}
}
else if (m_corpseRemoveTime <= GameTime::GetGameTime().count())
{
RemoveCorpse(false);
LOG_DEBUG("entities.unit", "Removing corpse... {} ", GetUInt32Value(OBJECT_FIELD_ENTRY));
}
{
Unit::Update(diff);
// deathstate changed on spells update, prevent problems
if (m_deathState != CORPSE)
break;
}
case ALIVE:
if (m_groupLootTimer && lootingGroupLowGUID)
{
Unit::Update(diff);
// creature can be dead after Unit::Update call
// CORPSE/DEAD state will processed at next tick (in other case death timer will be updated unexpectedly)
if (!IsAlive())
break;
// if creature is charmed, switch to charmed AI
if (NeedChangeAI)
if (m_groupLootTimer <= diff)
{
UpdateCharmAI();
NeedChangeAI = false;
IsAIEnabled = true;
Group* group = sGroupMgr->GetGroupByGUID(lootingGroupLowGUID);
if (group)
group->EndRoll(&loot, GetMap());
m_groupLootTimer = 0;
lootingGroupLowGUID = 0;
}
else
{
m_groupLootTimer -= diff;
}
}
else if (m_corpseRemoveTime <= GameTime::GetGameTime().count())
{
RemoveCorpse(false);
LOG_DEBUG("entities.unit", "Removing corpse... {} ", GetUInt32Value(OBJECT_FIELD_ENTRY));
}
break;
}
case ALIVE:
{
Unit::Update(diff);
// xinef: update combat state, if npc is not in combat - return to spawn correctly by calling EnterEvadeMode
SelectVictim();
// creature can be dead after Unit::Update call
// CORPSE/DEAD state will processed at next tick (in other case death timer will be updated unexpectedly)
if (!IsAlive())
break;
// if creature is charmed, switch to charmed AI
if (NeedChangeAI)
{
UpdateCharmAI();
NeedChangeAI = false;
IsAIEnabled = true;
// xinef: update combat state, if npc is not in combat - return to spawn correctly by calling EnterEvadeMode
SelectVictim();
}
// periodic check to see if the creature has passed an evade boundary
if (IsAIEnabled && !IsInEvadeMode() && IsEngaged())
{
if (diff >= m_boundaryCheckTime)
{
AI()->CheckInRoom();
m_boundaryCheckTime = 2500;
}
else
m_boundaryCheckTime -= diff;
}
Unit* owner = GetCharmerOrOwner();
if (IsCharmed() && !IsWithinDistInMap(owner, GetMap()->GetVisibilityRange(), true, false))
{
RemoveCharmAuras();
}
if (Unit* victim = GetVictim())
{
// If we are closer than 50% of the combat reach we are going to reposition the victim
if (diff >= m_moveBackwardsMovementTime)
{
float MaxRange = GetCollisionRadius() + GetVictim()->GetCollisionRadius();
if (IsInDist(victim, MaxRange))
AI()->MoveBackwardsChecks();
m_moveBackwardsMovementTime = urand(MOVE_BACKWARDS_CHECK_INTERVAL, MOVE_BACKWARDS_CHECK_INTERVAL * 3);
}
else
{
m_moveBackwardsMovementTime -= diff;
}
// periodic check to see if the creature has passed an evade boundary
if (IsAIEnabled && !IsInEvadeMode() && IsEngaged())
// Circling the target
if (diff >= m_moveCircleMovementTime)
{
if (diff >= m_boundaryCheckTime)
{
AI()->CheckInRoom();
m_boundaryCheckTime = 2500;
} else
m_boundaryCheckTime -= diff;
AI()->MoveCircleChecks();
m_moveCircleMovementTime = urand(MOVE_CIRCLE_CHECK_INTERVAL, MOVE_CIRCLE_CHECK_INTERVAL * 2);
}
Unit* owner = GetCharmerOrOwner();
if (IsCharmed() && !IsWithinDistInMap(owner, GetMap()->GetVisibilityRange(), true, false))
else
{
RemoveCharmAuras();
m_moveCircleMovementTime -= diff;
}
}
if (Unit *victim = GetVictim())
// Call for assistance if not disabled
if (m_assistanceTimer)
{
if (m_assistanceTimer <= diff)
{
// If we are closer than 50% of the combat reach we are going to reposition the victim
if (diff >= m_moveBackwardsMovementTime)
if (CanPeriodicallyCallForAssistance())
{
float MaxRange = GetCollisionRadius() + GetVictim()->GetCollisionRadius();
if (IsInDist(victim, MaxRange))
AI()->MoveBackwardsChecks();
m_moveBackwardsMovementTime = urand(MOVE_BACKWARDS_CHECK_INTERVAL, MOVE_BACKWARDS_CHECK_INTERVAL * 3);
}
else
{
m_moveBackwardsMovementTime -= diff;
}
// Circling the target
if (diff >= m_moveCircleMovementTime)
{
AI()->MoveCircleChecks();
m_moveCircleMovementTime = urand(MOVE_CIRCLE_CHECK_INTERVAL, MOVE_CIRCLE_CHECK_INTERVAL * 2);
}
else
{
m_moveCircleMovementTime -= diff;
SetNoCallAssistance(false);
CallAssistance();
}
m_assistanceTimer = sWorld->getIntConfig(CONFIG_CREATURE_FAMILY_ASSISTANCE_PERIOD);
}
// Call for assistance if not disabled
if (m_assistanceTimer)
else
{
if (m_assistanceTimer <= diff)
m_assistanceTimer -= diff;
}
}
if (!IsInEvadeMode() && IsAIEnabled)
{
// do not allow the AI to be changed during update
m_AI_locked = true;
i_AI->UpdateAI(diff);
m_AI_locked = false;
}
// creature can be dead after UpdateAI call
// CORPSE/DEAD state will processed at next tick (in other case death timer will be updated unexpectedly)
if (!IsAlive())
break;
m_regenTimer -= diff;
if (m_regenTimer <= 0)
{
if (!IsInEvadeMode())
{
// regenerate health if not in combat or if polymorphed)
if (!IsInCombat() || IsPolymorphed())
RegenerateHealth();
else if (IsNotReachableAndNeedRegen())
{
if (CanPeriodicallyCallForAssistance())
// regenerate health if cannot reach the target and the setting is set to do so.
// this allows to disable the health regen of raid bosses if pathfinding has issues for whatever reason
if (sWorld->getBoolConfig(CONFIG_REGEN_HP_CANNOT_REACH_TARGET_IN_RAID) || !GetMap()->IsRaid())
{
SetNoCallAssistance(false);
CallAssistance();
}
m_assistanceTimer = sWorld->getIntConfig(CONFIG_CREATURE_FAMILY_ASSISTANCE_PERIOD);
}
else
{
m_assistanceTimer -= diff;
}
}
if (!IsInEvadeMode() && IsAIEnabled)
{
// do not allow the AI to be changed during update
m_AI_locked = true;
i_AI->UpdateAI(diff);
m_AI_locked = false;
}
// creature can be dead after UpdateAI call
// CORPSE/DEAD state will processed at next tick (in other case death timer will be updated unexpectedly)
if (!IsAlive())
break;
m_regenTimer -= diff;
if (m_regenTimer <= 0)
{
if (!IsInEvadeMode())
{
// regenerate health if not in combat or if polymorphed)
if (!IsInCombat() || IsPolymorphed())
RegenerateHealth();
else if (IsNotReachableAndNeedRegen())
LOG_DEBUG("entities.unit", "RegenerateHealth() enabled because Creature cannot reach the target. Detail: {}", GetDebugInfo());
}
else
LOG_DEBUG("entities.unit", "RegenerateHealth() disabled even if the Creature cannot reach the target. Detail: {}", GetDebugInfo());
}
}
if (getPowerType() == POWER_ENERGY)
Regenerate(POWER_ENERGY);
else
Regenerate(POWER_MANA);
m_regenTimer += CREATURE_REGEN_INTERVAL;
}
if (CanNotReachTarget() && !IsInEvadeMode())
{
m_cannotReachTimer += diff;
if (m_cannotReachTimer >= (sWorld->getIntConfig(CONFIG_NPC_EVADE_IF_NOT_REACHABLE) * IN_MILLISECONDS))
{
Player* cannotReachPlayer = ObjectAccessor::GetPlayer(*this, m_cannotReachTarget);
if (cannotReachPlayer && IsEngagedBy(cannotReachPlayer) && IsAIEnabled && AI()->OnTeleportUnreacheablePlayer(cannotReachPlayer))
{
SetCannotReachTarget();
}
else if (!GetMap()->IsRaid())
{
auto EnterEvade = [&]()
{
// regenerate health if cannot reach the target and the setting is set to do so.
// this allows to disable the health regen of raid bosses if pathfinding has issues for whatever reason
if (sWorld->getBoolConfig(CONFIG_REGEN_HP_CANNOT_REACH_TARGET_IN_RAID) || !GetMap()->IsRaid())
if (CreatureAI* ai = AI())
{
RegenerateHealth();
LOG_DEBUG("entities.unit", "RegenerateHealth() enabled because Creature cannot reach the target. Detail: {}", GetDebugInfo());
ai->EnterEvadeMode(CreatureAI::EvadeReason::EVADE_REASON_NO_PATH);
}
};
if (GetThreatMgr().getThreatList().size() <= 1)
{
EnterEvade();
}
else
{
if (HostileReference* ref = GetThreatMgr().getOnlineContainer().getReferenceByTarget(m_cannotReachTarget))
{
ref->removeReference();
SetCannotReachTarget();
}
else
LOG_DEBUG("entities.unit", "RegenerateHealth() disabled even if the Creature cannot reach the target. Detail: {}", GetDebugInfo());
{
EnterEvade();
}
}
}
if (getPowerType() == POWER_ENERGY)
Regenerate(POWER_ENERGY);
else
Regenerate(POWER_MANA);
m_regenTimer += CREATURE_REGEN_INTERVAL;
}
if (CanNotReachTarget() && !IsInEvadeMode() && !GetMap()->IsRaid())
{
m_cannotReachTimer += diff;
if (IsNotReachable() && IsAIEnabled)
{
AI()->EnterEvadeMode();
}
}
break;
}
break;
}
default:
break;
}
@@ -883,6 +914,11 @@ void Creature::Regenerate(Powers power)
if (!HasUnitFlag2(UNIT_FLAG2_REGENERATE_POWER) && !GetOwnerGUID().IsPlayer())
return;
if (!m_regenPower)
{
return;
}
if (curValue >= maxValue)
return;
@@ -1020,7 +1056,7 @@ bool Creature::AIM_Initialize(CreatureAI* ai)
// Xinef: called in add to world
//Motion_Initialize();
i_AI = ai ? ai : FactorySelector::selectAI(this);
i_AI = ai ? ai : FactorySelector::SelectAI(this);
delete oldAI;
IsAIEnabled = true;
i_AI->InitializeAI();
@@ -1927,7 +1963,7 @@ void Creature::setDeathState(DeathState s, bool despawn)
SetFullHealth();
SetLootRecipient(nullptr);
ResetPlayerDamageReq();
SetCannotReachTarget(false);
SetCannotReachTarget();
CreatureTemplate const* cinfo = GetCreatureTemplate();
// Xinef: npc run by default
//SetWalk(true);
@@ -2861,7 +2897,7 @@ uint8 Creature::getLevelForTarget(WorldObject const* target) const
return uint8(level);
}
std::string Creature::GetAIName() const
std::string const& Creature::GetAIName() const
{
return sObjectMgr->GetCreatureTemplate(GetEntry())->AIName;
}
@@ -3468,7 +3504,24 @@ bool Creature::SetCannotReachTarget(bool cannotReach, bool isChase /*= true*/)
m_cannotReachTimer = 0;
if (cannotReach)
{
LOG_DEBUG("entities.unit", "Creature::SetCannotReachTarget() called with true. Details: {}", GetDebugInfo());
}
}
bool Creature::CanNotReachTarget() const
{
return m_cannotReachTarget;
}
bool Creature::IsNotReachableAndNeedRegen() const
{
if (CanNotReachTarget())
{
return m_cannotReachTimer >= (sWorld->getIntConfig(CONFIG_NPC_REGEN_TIME_IF_NOT_REACHABLE_IN_RAID) * IN_MILLISECONDS);
}
return false;
}
time_t Creature::GetLastDamagedTime() const

View File

@@ -198,7 +198,7 @@ public:
void SetDetectionDistance(float dist){ m_detectionDistance = dist; }
[[nodiscard]] CreatureAddon const* GetCreatureAddon() const;
[[nodiscard]] std::string GetAIName() const;
[[nodiscard]] std::string const& GetAIName() const;
[[nodiscard]] std::string GetScriptName() const;
[[nodiscard]] uint32 GetScriptId() const;
@@ -300,6 +300,7 @@ public:
bool isRegeneratingHealth() { return m_regenHealth; }
void SetRegeneratingHealth(bool c) { m_regenHealth = c; }
void SetRegeneratingPower(bool c) { m_regenPower = c; }
[[nodiscard]] virtual uint8 GetPetAutoSpellSize() const { return MAX_SPELL_CHARM; }
[[nodiscard]] virtual uint32 GetPetAutoSpellOnPos(uint8 pos) const
{
@@ -417,6 +418,7 @@ protected:
bool m_AlreadyCallAssistance;
bool m_AlreadySearchedAssistance;
bool m_regenHealth;
bool m_regenPower;
bool m_AI_locked;
SpellSchoolMask m_meleeDamageSchoolMask;
@@ -455,7 +457,7 @@ private:
mutable std::shared_ptr<time_t> _lastDamagedTime; // Part of Evade mechanics
bool m_cannotReachTarget;
ObjectGuid m_cannotReachTarget;
uint32 m_cannotReachTimer;
Spell const* _focusSpell; ///> Locks the target during spell cast for proper facing

View File

@@ -80,8 +80,7 @@ enum CreatureFlagsExtra : uint32
CREATURE_FLAG_EXTRA_HARD_RESET = 0x80000000,
// Masks
CREATURE_FLAG_EXTRA_UNUSED = (CREATURE_FLAG_EXTRA_UNUSED_12 | CREATURE_FLAG_EXTRA_UNUSED_26 |
CREATURE_FLAG_EXTRA_UNUSED_27 | CREATURE_FLAG_EXTRA_UNUSED_28), // SKIP
CREATURE_FLAG_EXTRA_UNUSED = (CREATURE_FLAG_EXTRA_UNUSED_12 | CREATURE_FLAG_EXTRA_UNUSED_26 | CREATURE_FLAG_EXTRA_UNUSED_27 | CREATURE_FLAG_EXTRA_UNUSED_28), // SKIP
CREATURE_FLAG_EXTRA_DB_ALLOWED = (0xFFFFFFFF & ~(CREATURE_FLAG_EXTRA_UNUSED | CREATURE_FLAG_EXTRA_DUNGEON_BOSS)) // SKIP
};

View File

@@ -381,3 +381,40 @@ void CreatureGroup::LeaderMoveTo(float x, float y, float z, bool run)
}
}
}
void CreatureGroup::RespawnFormation(bool force)
{
for (auto const& itr : m_members)
{
if (itr.first && !itr.first->IsAlive())
{
itr.first->Respawn(force);
}
}
}
bool CreatureGroup::IsFormationInCombat()
{
for (auto const& itr : m_members)
{
if (itr.first && itr.first->IsInCombat())
{
return true;
}
}
return false;
}
bool CreatureGroup::IsAnyMemberAlive()
{
for (auto const& itr : m_members)
{
if (itr.first && itr.first->IsAlive())
{
return true;
}
}
return false;
}

View File

@@ -109,6 +109,9 @@ public:
void LeaderMoveTo(float x, float y, float z, bool run);
void MemberEngagingTarget(Creature* member, Unit* target);
void MemberEvaded(Creature* member);
void RespawnFormation(bool force = false);
[[nodiscard]] bool IsFormationInCombat();
[[nodiscard]] bool IsAnyMemberAlive();
private:
Creature* m_leader; //Important do not forget sometimes to work with pointers instead synonims :D:D

View File

@@ -96,7 +96,7 @@ bool GameObject::AIM_Initialize()
return true;
}
std::string GameObject::GetAIName() const
std::string const& GameObject::GetAIName() const
{
return sObjectMgr->GetGameObjectTemplate(GetEntry())->AIName;
}

View File

@@ -1001,7 +1001,7 @@ public:
[[nodiscard]] virtual uint32 GetScriptId() const;
[[nodiscard]] GameObjectAI* AI() const { return m_AI; }
[[nodiscard]] std::string GetAIName() const;
[[nodiscard]] std::string const& GetAIName() const;
void SetDisplayId(uint32 displayid);
[[nodiscard]] uint32 GetDisplayId() const { return GetUInt32Value(GAMEOBJECT_DISPLAYID); }

View File

@@ -1154,7 +1154,9 @@ bool Guardian::InitStatsForLevel(uint8 petlevel)
{
// xinef: Glyph of Felguard, so ugly im crying... no appropriate spell
if (AuraEffect* aurEff = owner->GetAuraEffectDummy(SPELL_GLYPH_OF_FELGUARD))
SetModifierValue(UNIT_MOD_ATTACK_POWER, TOTAL_PCT, 1.0f + float(aurEff->GetAmount() / 100.0f));
{
HandleStatModifier(UNIT_MOD_ATTACK_POWER, TOTAL_PCT, aurEff->GetAmount(), true);
}
break;
}

View File

@@ -8911,7 +8911,7 @@ void Player::RemovePet(Pet* pet, PetSaveMode mode, bool returnreagent)
return;
}
if (returnreagent && (pet || m_temporaryUnsummonedPetNumber) && !InBattleground())
if (returnreagent && (pet || (m_temporaryUnsummonedPetNumber && (!m_session || !m_session->PlayerLogout()))) && !InBattleground())
{
//returning of reagents only for players, so best done here
uint32 spellId = pet ? pet->GetUInt32Value(UNIT_CREATED_BY_SPELL) : m_oldpetspell;
@@ -12573,8 +12573,13 @@ void Player::SetMover(Unit* target)
LOG_INFO("misc", "Player::SetMover (B2) - {}, {}, {}, {}, {}, {}, {}, {}", target->GetGUID().ToString(), target->GetMapId(), target->GetInstanceId(), target->FindMap()->GetId(), target->IsInWorld() ? 1 : 0, target->IsDuringRemoveFromWorld() ? 1 : 0, (target->ToPlayer() && target->ToPlayer()->IsBeingTeleported() ? 1 : 0), target->isBeingLoaded() ? 1 : 0);
}
m_mover->m_movedByPlayer = nullptr;
if (m_mover->GetTypeId() == TYPEID_UNIT)
m_mover->GetMotionMaster()->Initialize();
m_mover = target;
m_mover->m_movedByPlayer = this;
if (m_mover->GetTypeId() == TYPEID_UNIT)
m_mover->GetMotionMaster()->Initialize();
}
uint32 Player::GetCorpseReclaimDelay(bool pvp) const

View File

@@ -289,8 +289,8 @@ typedef std::list<PlayerCreateInfoItem> PlayerCreateInfoItems;
struct PlayerClassLevelInfo
{
PlayerClassLevelInfo() = default;
uint16 basehealth{0};
uint16 basemana{0};
uint32 basehealth{0};
uint32 basemana{0};
};
struct PlayerClassInfo
@@ -302,9 +302,12 @@ struct PlayerClassInfo
struct PlayerLevelInfo
{
PlayerLevelInfo() { for (unsigned char & stat : stats) stat = 0; }
PlayerLevelInfo()
{
stats.fill(0);
}
uint8 stats[MAX_STATS];
std::array<uint32, MAX_STATS> stats = { };
};
typedef std::list<uint32> PlayerCreateInfoSpells;
@@ -2732,7 +2735,7 @@ public:
ActionButtonList m_actionButtons;
float m_auraBaseMod[BASEMOD_END][MOD_END];
int16 m_baseRatingValue[MAX_COMBAT_RATING];
int32 m_baseRatingValue[MAX_COMBAT_RATING];
uint32 m_baseSpellPower;
uint32 m_baseFeralAP;
uint32 m_baseManaRegen;

View File

@@ -108,12 +108,11 @@ void Player::_SavePlayerSettings(CharacterDatabaseTransaction trans)
void Player::UpdatePlayerSetting(std::string source, uint8 index, uint32 value)
{
auto itr = m_charSettingsMap.find(source);
uint8 size = index + 1;
if (itr == m_charSettingsMap.end())
{
// Settings not found, initialize a new entry.
uint8 size = index ? index : index + 1;
PlayerSettingVector setting;
setting.resize(size);
@@ -129,6 +128,10 @@ void Player::UpdatePlayerSetting(std::string source, uint8 index, uint32 value)
}
else
{
if (size > itr->second.size())
{
itr->second.resize(size);
}
itr->second[index].value = value;
}
}

View File

@@ -34,20 +34,13 @@ Totem::Totem(SummonPropertiesEntry const* properties, ObjectGuid owner) : Minion
void Totem::Update(uint32 time)
{
Unit* owner = GetOwner();
if (!owner || !owner->IsAlive() || !IsAlive())
if (!owner || !owner->IsAlive() || !IsAlive() || m_duration <= time)
{
UnSummon(); // remove self
return;
}
if (m_duration <= time)
{
UnSummon(); // remove self
return;
}
else
m_duration -= time;
m_duration -= time;
Creature::Update(time);
}

Some files were not shown because too many files have changed in this diff Show More