aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/updates/world/master/2025_10_20_00_world.sql403
-rw-r--r--src/common/Collision/BoundingIntervalHierarchyWrapper.h77
-rw-r--r--src/common/Collision/DynamicTree.cpp4
-rw-r--r--src/server/game/Entities/Player/Player.h1
-rw-r--r--src/server/game/Handlers/TokenHandler.cpp9
-rw-r--r--src/server/game/Miscellaneous/SharedDefines.h21
-rw-r--r--src/server/game/Server/Packets/TokenPackets.cpp6
-rw-r--r--src/server/game/Server/Packets/TokenPackets.h8
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp52
-rw-r--r--src/server/game/Server/Protocol/Opcodes.h3
-rw-r--r--src/server/game/Server/WorldSession.cpp2
-rw-r--r--src/server/scripts/Battlegrounds/HookPoint/arena_hook_point.cpp384
-rw-r--r--src/server/scripts/Battlegrounds/battlegrounds_script_loader.cpp2
13 files changed, 882 insertions, 90 deletions
diff --git a/sql/updates/world/master/2025_10_20_00_world.sql b/sql/updates/world/master/2025_10_20_00_world.sql
new file mode 100644
index 00000000000..d6cf821f8fa
--- /dev/null
+++ b/sql/updates/world/master/2025_10_20_00_world.sql
@@ -0,0 +1,403 @@
+SET @CGUID := 7003715;
+SET @OGUID := 7000701;
+SET @SPAWN_GROUP := 1277;
+
+DELETE FROM `battleground_scripts` WHERE `MapId` = 1825 AND `BattlemasterListId` = 0;
+INSERT INTO `battleground_scripts` (`MapId`, `BattlemasterListId`, `ScriptName`) VALUES
+(1825, 0, 'arena_hook_point');
+
+DELETE FROM `battleground_template` WHERE `ID` = 897;
+INSERT INTO `battleground_template` (`ID`, `AllianceStartLoc`, `HordeStartLoc`, `StartMaxDist`, `Weight`, `Comment`) VALUES
+(897, 6276, 6277, 0, 1, 'Hook Point');
+
+DELETE FROM `conversation_actors` WHERE (`ConversationId`=9450 AND `Idx`=0);
+INSERT INTO `conversation_actors` (`ConversationId`, `ConversationActorId`, `ConversationActorGuid`, `Idx`, `CreatureId`, `CreatureDisplayInfoId`, `NoActorObject`, `ActivePlayerObject`, `VerifiedBuild`) VALUES
+(9450, 65852, @CGUID+15, 0, 0, 0, 0, 0, 63305); -- Full: 0x203CD0E420864E80000FF100005001DA Creature/0 R3892/S4081 Map: 1825 (Hook Point) Entry: 137530 (Daniel Poole) Low: 5243354
+
+DELETE FROM `conversation_template` WHERE `Id`=9450;
+INSERT INTO `conversation_template` (`Id`, `FirstLineID`, `TextureKitId`, `VerifiedBuild`) VALUES
+(9450, 21373, 0, 63305);
+
+DELETE FROM `creature` WHERE `guid` BETWEEN @CGUID+0 AND @CGUID+29;
+INSERT INTO `creature` (`guid`, `id`, `map`, `zoneId`, `areaId`, `spawnDifficulties`, `PhaseId`, `PhaseGroup`, `modelid`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `wander_distance`, `currentwaypoint`, `MovementType`, `npcflag`, `unit_flags`, `unit_flags2`, `unit_flags3`, `VerifiedBuild`) VALUES
+(@CGUID+0, 134955, 1825, 9279, 9279, '0', '0', 0, 0, 0, 1055.9114990234375, -329.954864501953125, 4.589642047882080078, 3.730200052261352539, 7200, 10, 0, 1, NULL, NULL, NULL, NULL, 63305), -- Chicken (Area: Hook Point - Difficulty: 0) CreateObject1
+(@CGUID+1, 134955, 1825, 9279, 9279, '0', '0', 0, 0, 0, 1048.223876953125, -327.40704345703125, 0.673026502132415771, 0.417364656925201416, 7200, 10, 0, 1, NULL, NULL, NULL, NULL, 63305), -- Chicken (Area: Hook Point - Difficulty: 0) CreateObject1
+(@CGUID+2, 134955, 1825, 9279, 9279, '0', '0', 0, 0, 0, 1040.6112060546875, -342.994293212890625, 1.437951445579528808, 6.221436023712158203, 7200, 10, 0, 1, NULL, NULL, NULL, NULL, 63305), -- Chicken (Area: Hook Point - Difficulty: 0) CreateObject1
+(@CGUID+3, 143134, 1825, 9279, 9279, '0', '0', 0, 0, 0, 1046.3021240234375, -314.461822509765625, 2.330190658569335937, 3.882303953170776367, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Brian Holinka (Area: Hook Point - Difficulty: 0) CreateObject1
+(@CGUID+4, 134955, 1825, 9279, 9279, '0', '0', 0, 0, 0, 1058.015625, -335.732635498046875, 3.994848489761352539, 3.651679515838623046, 7200, 10, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Chicken (Area: Hook Point - Difficulty: 0) CreateObject1 (Auras: 152765 - Mod Scale 135-150%)
+(@CGUID+5, 115087, 1825, 9279, 9279, '0', '0', 0, 0, 0, 972.47515869140625, -325.302032470703125, 0.676339328289031982, 0.20080345869064331, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Rat (Area: Hook Point - Difficulty: 0) CreateObject1
+(@CGUID+6, 143133, 1825, 9279, 9279, '0', '0', 0, 0, 0, 1025.2783203125, -375.282012939453125, 8.534680366516113281, 1.570411920547485351, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Disgusting Rat (Area: Hook Point - Difficulty: 0) CreateObject1
+(@CGUID+7, 143245, 1825, 9279, 9279, '0', '0', 0, 0, 0, 970.734375, -298.1632080078125, 3.351326465606689453, 2.264124631881713867, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Bouncer (Area: Hook Point - Difficulty: 0) CreateObject1
+(@CGUID+8, 143245, 1825, 9279, 9279, '0', '0', 0, 0, 0, 1050.62158203125, -357.223968505859375, 2.02806854248046875, 5.506673336029052734, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Bouncer (Area: Hook Point - Difficulty: 0) CreateObject1
+(@CGUID+9, 134955, 1825, 9279, 9279, '0', '0', 0, 0, 0, 1057.920166015625, -335.44964599609375, 5.155292510986328125, 3.763328790664672851, 7200, 10, 0, 1, NULL, NULL, NULL, NULL, 63305), -- Chicken (Area: Hook Point - Difficulty: 0) CreateObject1
+(@CGUID+10, 134955, 1825, 9279, 9279, '0', '0', 0, 0, 0, 1043.3782958984375, -338.28369140625, 0.744661152362823486, 4.770718097686767578, 7200, 10, 0, 1, NULL, NULL, NULL, NULL, 63305), -- Chicken (Area: Hook Point - Difficulty: 0) CreateObject1
+(@CGUID+11, 134955, 1825, 9279, 9279, '0', '0', 0, 0, 0, 1054.408447265625, -338.9747314453125, 0.875749409198760986, 4.756616115570068359, 7200, 10, 0, 1, NULL, NULL, NULL, NULL, 63305), -- Chicken (Area: Hook Point - Difficulty: 0) CreateObject1
+(@CGUID+12, 115087, 1825, 9279, 9279, '0', '0', 0, 0, 0, 1042.40087890625, -368.8843994140625, 1.727668046951293945, 1.458274602890014648, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Rat (Area: Hook Point - Difficulty: 0) CreateObject1
+(@CGUID+13, 139068, 1825, 9279, 9279, '0', '0', 0, 0, 0, 1020.59783935546875, -285.5479736328125, 9.021422386169433593, 2.950590133666992187, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Boralus Civilian (Area: Hook Point - Difficulty: 0) CreateObject1
+(@CGUID+14, 139060, 1825, 9279, 9279, '0', '0', 0, 0, 0, 981.1336669921875, -283.196197509765625, 3.327446699142456054, 2.183746337890625, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Boralus Worker (Area: Hook Point - Difficulty: 0) CreateObject1 (Auras: 244863 - 8.0 Carry Barrel New Anim)
+(@CGUID+15, 137530, 1825, 9279, 9279, '0', '0', 0, 0, 1, 1001.96697998046875, -314.97222900390625, 6.313004970550537109, 3.266660451889038085, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Daniel Poole (Area: Hook Point - Difficulty: 0) CreateObject1 (Auras: )
+(@CGUID+16, 138894, 1825, 9279, 9279, '0', '0', 0, 0, 0, 1051.1129150390625, -319.619781494140625, 3.766951560974121093, 3.732582807540893554, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Chef Robinson (Area: Hook Point - Difficulty: 0) CreateObject1
+(@CGUID+17, 115087, 1825, 9279, 9279, '0', '0', 0, 0, 0, 985.70068359375, -360.980010986328125, 0.816299378871917724, 4.237788677215576171, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Rat (Area: Hook Point - Difficulty: 0) CreateObject1
+(@CGUID+18, 138899, 1825, 9279, 9279, '0', '0', 0, 0, 0, 1033.3992919921875, -296.838531494140625, 0.654040932655334472, 4.215125083923339843, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Companion (Area: Hook Point - Difficulty: 0) CreateObject1
+(@CGUID+19, 139068, 1825, 9279, 9279, '0', '0', 0, 0, 0, 1036.438720703125, -295.1119384765625, 0.8553619384765625, 3.244702100753784179, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Boralus Civilian (Area: Hook Point - Difficulty: 0) CreateObject1
+(@CGUID+20, 141184, 1825, 9279, 9279, '0', '0', 0, 0, 0, 1057.609375, -359.517364501953125, 1.919618844985961914, 2.679828166961669921, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Boralus Civilian (Area: Hook Point - Difficulty: 0) CreateObject1
+(@CGUID+21, 139068, 1825, 9279, 9279, '0', '0', 0, 0, 0, 1021.13018798828125, -286.71527099609375, 9.035974502563476562, 4.909348964691162109, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Boralus Civilian (Area: Hook Point - Difficulty: 0) CreateObject1
+(@CGUID+22, 134955, 1825, 9279, 9279, '0', '0', 0, 0, 0, 1054.1669921875, -342.708984375, 1.413500547409057617, 1.787346601486206054, 7200, 10, 0, 1, NULL, NULL, NULL, NULL, 63305), -- Chicken (Area: Hook Point - Difficulty: 0) CreateObject1 (Auras: 152765 - Mod Scale 135-150%)
+(@CGUID+23, 134955, 1825, 9279, 9279, '0', '0', 0, 0, 0, 1027.39892578125, -333.947998046875, 0.555386483669281005, 1.086550831794738769, 7200, 10, 0, 1, NULL, NULL, NULL, NULL, 63305), -- Chicken (Area: Hook Point - Difficulty: 0) CreateObject1 (Auras: 152765 - Mod Scale 135-150%)
+(@CGUID+24, 134955, 1825, 9279, 9279, '0', '0', 0, 0, 0, 1051.02294921875, -332.5289306640625, 0.744661152362823486, 0.603641748428344726, 7200, 10, 0, 1, NULL, NULL, NULL, NULL, 63305), -- Chicken (Area: Hook Point - Difficulty: 0) CreateObject1 (Auras: 152765 - Mod Scale 135-150%)
+(@CGUID+25, 143245, 1825, 9279, 9279, '0', '0', 0, 0, 0, 1048.5086669921875, -358.185760498046875, 1.956497669219970703, 5.506673336029052734, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Bouncer (Area: Hook Point - Difficulty: 0) CreateObject1
+(@CGUID+26, 143122, 1825, 9279, 9279, '0', '0', 0, 0, 0, 966.6319580078125, -283.078125, 3.367653608322143554, 5.36810302734375, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Jay the Tavern Bard (Area: Hook Point - Difficulty: 0) CreateObject1
+(@CGUID+27, 143245, 1825, 9279, 9279, '0', '0', 0, 0, 0, 968.95660400390625, -298.59027099609375, 3.384720325469970703, 2.266976356506347656, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Bouncer (Area: Hook Point - Difficulty: 0) CreateObject1
+(@CGUID+28, 143121, 1825, 9279, 9279, '0', '0', 0, 0, 0, 966.24652099609375, -285.06597900390625, 3.742449045181274414, 1.501461982727050781, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305), -- Penny (Area: Hook Point - Difficulty: 0) CreateObject1
+(@CGUID+29, 143126, 1825, 9279, 9279, '0', '0', 0, 0, 0, 1056.920166015625, -333.536468505859375, 3.753514528274536132, 3.870003938674926757, 7200, 0, 0, 0, NULL, NULL, NULL, NULL, 63305); -- Col. Tenders (Area: Hook Point - Difficulty: 0) CreateObject1
+
+UPDATE `creature` SET `StringId` = 'hook_point_bouncer_1' WHERE `guid` = @CGUID+25;
+UPDATE `creature` SET `StringId` = 'hook_point_bouncer_2' WHERE `guid` = @CGUID+8;
+UPDATE `creature` SET `StringId` = 'hook_point_bouncer_3' WHERE `guid` = @CGUID+7;
+UPDATE `creature` SET `StringId` = 'hook_point_bouncer_4' WHERE `guid` = @CGUID+27;
+
+DELETE FROM `creature_addon` WHERE `guid` BETWEEN @CGUID+0 AND @CGUID+29;
+
+DELETE FROM `gameobject` WHERE `guid` BETWEEN @OGUID+0 AND @OGUID+24;
+INSERT INTO `gameobject` (`guid`, `id`, `map`, `zoneId`, `areaId`, `spawnDifficulties`, `PhaseId`, `PhaseGroup`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`, `VerifiedBuild`) VALUES
+(@OGUID+0, 295778, 1825, 9279, 9279, '0', '0', 0, 915.38800048828125, -290.0887451171875, 5.440062522888183593, 1.235011458396911621, 0, 0, 0.579003334045410156, 0.815325140953063964, 7200, 255, 1, 63305), -- Fire (Area: Hook Point - Difficulty: 0) CreateObject1
+(@OGUID+1, 297144, 1825, 9279, 9279, '0', '0', 0, 1051.5054931640625, -355.92987060546875, 1.993935108184814453, 1.980946660041809082, 0, 0, 0.836285591125488281, 0.5482940673828125, 7200, 255, 1, 63305), -- Doodad_8HU_KulTiras_SlideDoor001 (Area: Hook Point - Difficulty: 0) CreateObject1
+(@OGUID+2, 299251, 1825, 9279, 9279, '0', '0', 0, 1189.9893798828125, -580.01959228515625, 31.51054573059082031, 1.96468353271484375, 0.000000476837158203, -0.0000009536743164, 0.831799507141113281, 0.555076181888580322, 7200, 255, 1, 63305), -- Chair (Area: Hook Point - Difficulty: 0) CreateObject1
+(@OGUID+3, 299250, 1825, 9279, 9279, '0', '0', 0, 1188.0447998046875, -577.60223388671875, 31.50738525390625, 0.094519510865211486, 0.000000953674316406, 0, 0.047242164611816406, 0.998883485794067382, 7200, 255, 1, 63305), -- Chair (Area: Hook Point - Difficulty: 0) CreateObject1
+(@OGUID+4, 299255, 1825, 9279, 9279, '0', '0', 0, 1183.1292724609375, -581.32568359375, 31.51056671142578125, 3.773211479187011718, 0, 0.000000953674316406, -0.95054531097412109, 0.310585945844650268, 7200, 255, 1, 63305), -- Chair (Area: Hook Point - Difficulty: 0) CreateObject1
+(@OGUID+5, 299254, 1825, 9279, 9279, '0', '0', 0, 1180.421630859375, -584.139404296875, 31.49713897705078125, 1.322223186492919921, 0.000000476837158203, -0.0000009536743164, 0.613994598388671875, 0.789310216903686523, 7200, 255, 1, 63305), -- Chair (Area: Hook Point - Difficulty: 0) CreateObject1
+(@OGUID+6, 299253, 1825, 9279, 9279, '0', '0', 0, 1192.1790771484375, -576.419921875, 31.51056671142578125, 3.372272014617919921, 0, 0.000000953674316406, -0.99335575103759765, 0.11508401483297348, 7200, 255, 1, 63305), -- Chair (Area: Hook Point - Difficulty: 0) CreateObject1
+(@OGUID+7, 299252, 1825, 9279, 9279, '0', '0', 0, 1188.703369140625, -575.6353759765625, 31.50739860534667968, 5.4872894287109375, 0.000000953674316406, 0, -0.3875274658203125, 0.921858131885528564, 7200, 255, 1, 63305), -- Chair (Area: Hook Point - Difficulty: 0) CreateObject1
+(@OGUID+8, 299259, 1825, 9279, 9279, '0', '0', 0, 1066.8653564453125, -488.93096923828125, 9.716356277465820312, 4.711831092834472656, 0.000000476837158203, -0.0000009536743164, -0.70730400085449218, 0.706909477710723876, 7200, 255, 1, 63305), -- Chair (Area: Hook Point - Difficulty: 0) CreateObject1
+(@OGUID+9, 299258, 1825, 9279, 9279, '0', '0', 0, 1068.9713134765625, -489.8668212890625, 9.71636199951171875, 3.821414947509765625, 0.000000953674316406, 0, -0.94278430938720703, 0.333403319120407104, 7200, 255, 1, 63305), -- Chair (Area: Hook Point - Difficulty: 0) CreateObject1
+(@OGUID+10, 299257, 1825, 9279, 9279, '0', '0', 0, 1073.980224609375, -477.45977783203125, 9.744752883911132812, 4.703663349151611328, 0.000000476837158203, -0.0000009536743164, -0.71018505096435546, 0.704015016555786132, 7200, 255, 1, 63305), -- Chair (Area: Hook Point - Difficulty: 0) CreateObject1
+(@OGUID+11, 299256, 1825, 9279, 9279, '0', '0', 0, 1178.89111328125, -581.27447509765625, 31.51056671142578125, 5.735074996948242187, 0.000000953674316406, 0, -0.27063751220703125, 0.962681293487548828, 7200, 255, 1, 63305), -- Chair (Area: Hook Point - Difficulty: 0) CreateObject1
+(@OGUID+12, 299263, 1825, 9279, 9279, '0', '0', 0, 1131.3326416015625, -620.092041015625, 17.52761459350585937, 2.07492685317993164, 0.000000953674316406, 0, 0.861117362976074218, 0.508406221866607666, 7200, 255, 1, 63305), -- Chair (Area: Hook Point - Difficulty: 0) CreateObject1
+(@OGUID+13, 299262, 1825, 9279, 9279, '0', '0', 0, 1135.1541748046875, -540.5263671875, 17.69433021545410156, 3.759715080261230468, 0, -0.0000009536743164, -0.95261955261230468, 0.304164439439773559, 7200, 255, 1, 63305), -- Chair (Area: Hook Point - Difficulty: 0) CreateObject1
+(@OGUID+14, 299261, 1825, 9279, 9279, '0', '0', 0, 1130.87744140625, -514.7745361328125, 17.62218475341796875, 4.632379055023193359, 0.000000476837158203, -0.0000009536743164, -0.73482131958007812, 0.678260743618011474, 7200, 255, 1, 63305), -- Chair (Area: Hook Point - Difficulty: 0) CreateObject1
+(@OGUID+15, 299260, 1825, 9279, 9279, '0', '0', 0, 1070.61376953125, -493.22552490234375, 9.719885826110839843, 1.346005439758300781, -0.0000009536743164, 0, 0.6233367919921875, 0.781953513622283935, 7200, 255, 1, 63305), -- Chair (Area: Hook Point - Difficulty: 0) CreateObject1
+(@OGUID+16, 299343, 1825, 9279, 9279, '0', '0', 0, 1121.4482421875, -613.8233642578125, 18.18774604797363281, 4.83634042739868164, 0, 0, -0.66195392608642578, 0.749544501304626464, 7200, 255, 1, 63305), -- Guild Vault (Area: Hook Point - Difficulty: 0) CreateObject1
+(@OGUID+17, 299342, 1825, 9279, 9279, '0', '0', 0, 1078.0794677734375, -488.1197509765625, 9.677967071533203125, 2.871063947677612304, 0, 0, 0.990865707397460937, 0.134852290153503417, 7200, 255, 1, 63305), -- Fire (Area: Hook Point - Difficulty: 0) CreateObject1
+(@OGUID+18, 299344, 1825, 9279, 9279, '0', '0', 0, 1190.2392578125, -586.1121826171875, 31.48215103149414062, 2.966146230697631835, 0, 0, 0.99615478515625, 0.087610773742198944, 7200, 255, 1, 63305), -- Fire (Area: Hook Point - Difficulty: 0) CreateObject1
+(@OGUID+19, 296728, 1825, 9279, 9279, '0', '0', 0, 1049.1458740234375, -357.236114501953125, 1.892428040504455566, 5.140336990356445312, 0, 0, -0.54083061218261718, 0.841131508350372314, 7200, 255, 1, 63305), -- Kul Tiras Arena Invis Wall (Bouncers) (Area: Hook Point - Difficulty: 0) CreateObject1
+(@OGUID+20, 296728, 1825, 9279, 9279, '0', '0', 0, 970.201416015625, -298.84722900390625, 3.153641939163208007, 5.133892536163330078, 0, 0, -0.54353809356689453, 0.839384496212005615, 7200, 255, 1, 63305), -- Kul Tiras Arena Invis Wall (Bouncers) (Area: Hook Point - Difficulty: 0) CreateObject1
+(@OGUID+21, 299265, 1825, 9279, 9279, '0', '0', 0, 1129.332275390625, -618.3427734375, 17.51376152038574218, 0.021999802440404891, 0, -0.0000009536743164, 0.010999679565429687, 0.999939501285552978, 7200, 255, 1, 63305), -- Chair (Area: Hook Point - Difficulty: 0) CreateObject1
+(@OGUID+22, 299264, 1825, 9279, 9279, '0', '0', 0, 1131.2296142578125, -617.977783203125, 17.51376152038574218, 4.238804340362548828, -0.0000009536743164, 0, -0.85325241088867187, 0.521498143672943115, 7200, 255, 1, 63305), -- Chair (Area: Hook Point - Difficulty: 0) CreateObject1
+(@OGUID+23, 184663, 1825, 9279, 9279, '0', '0', 0, 1001.9617919921875, -367.802093505859375, 2.291595697402954101, 2.460912704467773437, 0, 0, 0.942641258239746093, 0.333807557821273803, 360, 255, 1, 63305), -- Shadow Sight (Area: Hook Point - Difficulty: 0) CreateObject2
+(@OGUID+24, 184664, 1825, 9279, 9279, '0', '0', 0, 963.842041015625, -309.107635498046875, 1.149727106094360351, 3.316144466400146484, 0, 0, -0.99619388580322265, 0.087165042757987976, 360, 255, 1, 63305); -- Shadow Sight (Area: Hook Point - Difficulty: 0) CreateObject2
+
+DELETE FROM `gameobject_addon` WHERE `guid` BETWEEN @OGUID+0 AND @OGUID+24;
+INSERT INTO `gameobject_addon` (`guid`, `parent_rotation0`, `parent_rotation1`, `parent_rotation2`, `parent_rotation3`, `WorldEffectID`, `AIAnimKitID`) VALUES
+(@OGUID+0, 0, 0, -0.59832048416137695, 0.801256895065307617, 0, 0), -- Fire
+(@OGUID+1, 0, 0, 1, -0.00000004371138828, 0, 0), -- Doodad_8HU_KulTiras_SlideDoor001
+(@OGUID+2, 0, 0, 0.999990463256835937, -0.00436332821846008, 0, 0), -- Chair
+(@OGUID+3, 0, 0, 0.999990463256835937, -0.00436332821846008, 0, 0), -- Chair
+(@OGUID+4, 0, 0, 0.999990463256835937, -0.00436332821846008, 0, 0), -- Chair
+(@OGUID+5, 0, 0, 0.999990463256835937, -0.00436332821846008, 0, 0), -- Chair
+(@OGUID+6, 0, 0, 0.999990463256835937, -0.00436332821846008, 0, 0), -- Chair
+(@OGUID+7, 0, 0, 0.999990463256835937, -0.00436332821846008, 0, 0), -- Chair
+(@OGUID+8, 0, 0, 0.999990463256835937, -0.00436332821846008, 0, 0), -- Chair
+(@OGUID+9, 0, 0, 0.999990463256835937, -0.00436332821846008, 0, 0), -- Chair
+(@OGUID+10, 0, 0, 0.999990463256835937, -0.00436332821846008, 0, 0), -- Chair
+(@OGUID+11, 0, 0, 0.999990463256835937, -0.00436332821846008, 0, 0), -- Chair
+(@OGUID+12, 0, 0, 0.999990463256835937, -0.00436332821846008, 0, 0), -- Chair
+(@OGUID+13, 0, 0, 0.999990463256835937, -0.00436332821846008, 0, 0), -- Chair
+(@OGUID+14, 0, 0, 0.999990463256835937, -0.00436332821846008, 0, 0), -- Chair
+(@OGUID+15, 0, 0, 0.999990463256835937, -0.00436332821846008, 0, 0), -- Chair
+(@OGUID+16, 0, 0, 0.999990463256835937, -0.00436332821846008, 0, 0), -- Guild Vault
+(@OGUID+17, 0, 0, 0.999990463256835937, -0.00436332821846008, 0, 0), -- Fire
+(@OGUID+18, 0, 0, 0.999990463256835937, -0.00436332821846008, 0, 0), -- Fire
+(@OGUID+21, 0, 0, 0.999990463256835937, -0.00436332821846008, 0, 0), -- Chair
+(@OGUID+22, 0, 0, 0.999990463256835937, -0.00436332821846008, 0, 0); -- Chair
+
+DELETE FROM `creature_template_addon` WHERE `entry` IN (143126 /*143126 (Col. Tenders)*/, 143121 /*143121 (Penny)*/, 143122 /*143122 (Jay the Tavern Bard)*/, 141184 /*141184 (Boralus Civilian)*/, 138899 /*138899 (Companion)*/, 139060 /*139060 (Boralus Worker) - 8.0 Carry Barrel New Anim*/, 143245 /*143245 (Bouncer)*/, 134955 /*134955 (Chicken) - Mod Scale 135-150%*/, 143134 /*143134 (Brian Holinka)*/);
+INSERT INTO `creature_template_addon` (`entry`, `PathId`, `mount`, `StandState`, `AnimTier`, `VisFlags`, `SheathState`, `PvpFlags`, `emote`, `aiAnimKit`, `movementAnimKit`, `meleeAnimKit`, `visibilityDistanceType`, `auras`) VALUES
+(143126, 0, 0, 0, 3, 0, 1, 1, 0, 16395, 0, 0, 0, ''), -- 143126 (Col. Tenders)
+(143121, 0, 0, 0, 0, 0, 1, 0, 0, 1535, 0, 0, 0, ''), -- 143121 (Penny)
+(143122, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, ''), -- 143122 (Jay the Tavern Bard)
+(141184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ''), -- 141184 (Boralus Civilian)
+(138899, 0, 0, 0, 0, 0, 1, 0, 0, 13903, 0, 0, 0, ''), -- 138899 (Companion)
+(139060, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, '244863'), -- 139060 (Boralus Worker) - 8.0 Carry Barrel New Anim
+(143245, 0, 0, 0, 0, 0, 1, 0, 0, 15348, 0, 0, 0, ''), -- 143245 (Bouncer)
+(134955, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, '152765'), -- 134955 (Chicken) - Mod Scale 135-150%
+(143134, 0, 0, 0, 0, 0, 0, 1, 0, 16396, 0, 0, 0, ''); -- 143134 (Brian Holinka)
+
+UPDATE `creature_template_difficulty` SET `StaticFlags1`=0x30000000, `VerifiedBuild`=63305 WHERE (`Entry`=143126 AND `DifficultyID`=0); -- 143126 (Col. Tenders) - CanSwim, Floating
+UPDATE `creature_template_difficulty` SET `StaticFlags1`=0x10000000, `VerifiedBuild`=63305 WHERE (`Entry`=143121 AND `DifficultyID`=0); -- 143121 (Penny) - CanSwim
+UPDATE `creature_template_difficulty` SET `StaticFlags1`=0x10000000, `VerifiedBuild`=63305 WHERE (`Entry`=143122 AND `DifficultyID`=0); -- 143122 (Jay the Tavern Bard) - CanSwim
+UPDATE `creature_template_difficulty` SET `StaticFlags1`=0x10000000, `VerifiedBuild`=63305 WHERE (`Entry`=141184 AND `DifficultyID`=0); -- 141184 (vtrsyBoralus Civilian) - CanSwim
+UPDATE `creature_template_difficulty` SET `StaticFlags1`=0x10000000, `VerifiedBuild`=63305 WHERE (`Entry`=138899 AND `DifficultyID`=0); -- 138899 (Companion) - CanSwim
+UPDATE `creature_template_difficulty` SET `StaticFlags1`=0x10000000, `VerifiedBuild`=63305 WHERE (`Entry`=138894 AND `DifficultyID`=0); -- 138894 (Chef Robinson) - CanSwim
+UPDATE `creature_template_difficulty` SET `StaticFlags1`=0x20000100, `VerifiedBuild`=63305 WHERE (`Entry`=137530 AND `DifficultyID`=0); -- 137530 (Daniel Poole) - Sessile, Floating
+UPDATE `creature_template_difficulty` SET `StaticFlags1`=0x10000000, `VerifiedBuild`=63305 WHERE (`Entry`=139060 AND `DifficultyID`=0); -- 139060 (Boralus Worker) - CanSwim
+UPDATE `creature_template_difficulty` SET `StaticFlags1`=0x10000000, `VerifiedBuild`=63305 WHERE (`Entry`=139068 AND `DifficultyID`=0); -- 139068 (Boralus Civilian) - CanSwim
+UPDATE `creature_template_difficulty` SET `StaticFlags1`=0x10000000, `VerifiedBuild`=63305 WHERE (`Entry`=143245 AND `DifficultyID`=0); -- 143245 (Bouncer) - CanSwim
+UPDATE `creature_template_difficulty` SET `StaticFlags1`=0x10000000, `VerifiedBuild`=63305 WHERE (`Entry`=143133 AND `DifficultyID`=0); -- 143133 (Disgusting Rat) - CanSwim
+UPDATE `creature_template_difficulty` SET `StaticFlags1`=0x10000000, `VerifiedBuild`=63305 WHERE (`Entry`=143134 AND `DifficultyID`=0); -- 143134 (Brian Holinka) - CanSwim
+UPDATE `creature_template_difficulty` SET `StaticFlags1`=0x10000000, `VerifiedBuild`=63305 WHERE (`Entry`=134955 AND `DifficultyID`=0); -- 134955 (Chicken) - CanSwim
+
+UPDATE `creature_model_info` SET `BoundingRadius`=0.305999994277954101, `CombatReach`=1.5, `VerifiedBuild`=63305 WHERE `DisplayID`=85348;
+
+UPDATE `creature_template` SET `unit_flags`=0x2000000, `unit_flags3`=0x1000000 WHERE `entry`=143126; -- Col. Tenders
+UPDATE `creature_template` SET `unit_flags`=0x2000100 WHERE `entry`=143121; -- Penny
+
+UPDATE `creature_template` SET `unit_flags3`=0x1000000 WHERE `entry`=141184; -- Boralus Civilian
+UPDATE `creature_template` SET `unit_flags`=0x2000100, `unit_flags3`=0x1000000 WHERE `entry`=138899; -- Companion
+UPDATE `creature_template` SET `unit_flags`=0x2000300, `unit_flags3`=0x1000001 WHERE `entry`=138894; -- Chef Robinson
+UPDATE `creature_template` SET `unit_flags`=0x2000200, `unit_flags3`=0x41000000 WHERE `entry`=137530; -- Daniel Poole
+UPDATE `creature_template` SET `unit_flags`=0x2000000, `unit_flags3`=0x1000000 WHERE `entry`=139060; -- Boralus Worker
+UPDATE `creature_template` SET `unit_flags`=0x2000000 WHERE `entry`=139068; -- Boralus Civilian
+UPDATE `creature_template` SET `unit_flags3`=0x1000000 WHERE `entry`=143245; -- Bouncer
+UPDATE `creature_template` SET `unit_flags`=0x2000000, `unit_flags3`=0x1000000 WHERE `entry`=143133; -- Disgusting Rat
+UPDATE `creature_template` SET `unit_flags`=0x2000000 WHERE `entry`=115087; -- Rat
+UPDATE `creature_template` SET `unit_flags`=0x2000000, `unit_flags3`=0x1000000 WHERE `entry`=143134; -- Brian Holinka
+UPDATE `creature_template` SET `unit_flags`=0x2000100 WHERE `entry`=134955; -- Chicken
+
+DELETE FROM `creature_text` WHERE `CreatureID` IN (137530);
+INSERT INTO `creature_text` (`CreatureID`, `GroupID`, `ID`, `Text`, `Type`, `Language`, `Probability`, `Emote`, `Duration`, `Sound`, `BroadcastTextId`, `TextRange`, `comment`) VALUES
+(137530, 0, 0, 'This is a night for Kul Tiras!', 12, 0, 100, 1, 0, 104433, 153439, 3, 'Daniel Poole'),
+(137530, 1, 0, 'No, no, no. Good save, good save.', 12, 0, 100, 1, 0, 104442, 153442, 3, 'Daniel Poole to Player'),
+(137530, 1, 1, 'Now now, there will be blood! Have patience.', 12, 0, 100, 1, 0, 104441, 153444, 3, 'Daniel Poole to Player'),
+(137530, 2, 0, 'Oopsie-daisy!', 12, 0, 100, 1, 0, 104438, 153440, 3, 'Daniel Poole to Player'),
+(137530, 2, 1, 'You die... but not as a true Kul Tiran.', 12, 0, 100, 1, 0, 104439, 153441, 3, 'Daniel Poole to Player');
+
+DELETE FROM `spawn_group_template` WHERE `groupId` BETWEEN @SPAWN_GROUP+0 AND @SPAWN_GROUP+0;
+INSERT INTO `spawn_group_template` (`groupId`, `groupName`, `groupFlags`) VALUES
+(@SPAWN_GROUP+0, 'Hook Point - Shadow sight', 0x20);
+
+DELETE FROM `spawn_group` WHERE `groupId` BETWEEN @SPAWN_GROUP+0 AND @SPAWN_GROUP+0;
+INSERT INTO `spawn_group` (`groupId`, `spawnType`, `spawnId`) VALUES
+(@SPAWN_GROUP, 1, @OGUID+23),
+(@SPAWN_GROUP, 1, @OGUID+24);
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` = 33 AND `SourceEntry` BETWEEN @SPAWN_GROUP+0 AND @SPAWN_GROUP+0;
+INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceEntry`, `SourceGroup`, `ConditionTypeOrReference`, `ConditionValue1`, `ScriptName`) VALUES
+(33, @SPAWN_GROUP, 0, 0, 0, 'condition_is_shadow_sight_enabled');
+
+DELETE FROM `spell_proc` WHERE `SpellId` IN (278776);
+INSERT INTO `spell_proc` (`SpellId`,`SchoolMask`,`SpellFamilyName`,`SpellFamilyMask0`,`SpellFamilyMask1`,`SpellFamilyMask2`,`SpellFamilyMask3`,`ProcFlags`,`ProcFlags2`,`SpellTypeMask`,`SpellPhaseMask`,`HitMask`,`AttributesMask`,`DisableEffectsMask`,`ProcsPerMinute`,`Chance`,`Cooldown`,`Charges`) VALUES
+(278776,0x00,0,0x00000000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0,0,0,0); -- Arena Reaction Trigger
+
+DELETE FROM `spell_script_names` WHERE `ScriptName` IN ('spell_arena_reaction_trigger_low_health', 'spell_arena_reaction_trigger', 'spell_arena_low_health_dying_trigger');
+INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
+(278776, 'spell_arena_reaction_trigger'),
+(278775, 'spell_arena_reaction_trigger_low_health'),
+(279047, 'spell_arena_low_health_dying_trigger');
+
+SET @ENTRY := 143121;
+SET @PATHOFFSET := 0;
+SET @PATH := @ENTRY * 100 + @PATHOFFSET;
+DELETE FROM `waypoint_path` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path` (`PathId`, `MoveType`, `Flags`, `Velocity`, `Comment`) VALUES
+(@PATH, 1, 0x0, 7.0, 'Penny - On Arena Start');
+
+DELETE FROM `waypoint_path_node` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path_node` (`PathId`, `NodeId`, `PositionX`, `PositionY`, `PositionZ`, `Orientation`, `Delay`) VALUES
+(@PATH, 0, 1002.6268, -329.17535, -0.05121885, NULL, 0);
+
+SET @ENTRY := 143121;
+SET @PATHOFFSET := 1;
+SET @PATH := @ENTRY * 100 + @PATHOFFSET;
+DELETE FROM `waypoint_path` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path` (`PathId`, `MoveType`, `Flags`, `Velocity`, `Comment`) VALUES
+(@PATH, 1, 0x0, 7.0, 'Penny - Idle');
+
+DELETE FROM `waypoint_path_node` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path_node` (`PathId`, `NodeId`, `PositionX`, `PositionY`, `PositionZ`, `Orientation`, `Delay`) VALUES
+(@PATH, 0, 1018.8993, -350.7066, 1.8962542, NULL, 0),
+(@PATH, 1, 1043.9427, -335.64932, 0.74466115, NULL, 0),
+(@PATH, 2, 1033.0139, -315.99478, 0.31332558, NULL, 0),
+(@PATH, 3, 1004.9827, -304.06076, -0.52707595, NULL, 0),
+(@PATH, 4, 988.11804, -323.31076, 0.24062353, NULL, 0),
+(@PATH, 5, 999.5833, -338.9479, -0.07570532, NULL, 0);
+
+SET @MOVERGUID := @CGUID+19;
+SET @ENTRY := 139068;
+SET @PATHOFFSET := 0;
+SET @PATH := @ENTRY * 100 + @PATHOFFSET;
+DELETE FROM `waypoint_path` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path` (`PathId`, `MoveType`, `Flags`, `Velocity`, `Comment`) VALUES
+(@PATH, 0, 0x0, NULL, 'Boralus Civilian - Idle');
+
+DELETE FROM `waypoint_path_node` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path_node` (`PathId`, `NodeId`, `PositionX`, `PositionY`, `PositionZ`, `Orientation`, `Delay`) VALUES
+(@PATH, 0, 1036.8496, -295.45276, 0.85536194, NULL, 0),
+(@PATH, 1, 1036.2559, -295.13086, 0.85536194, NULL, 0),
+(@PATH, 2, 1035.6621, -294.80896, 0.85536194, NULL, 0),
+(@PATH, 3, 1033.4913, -293.63202, 0.85536194, NULL, 0),
+(@PATH, 4, 1032.6459, -293.1736, 0.8901193, NULL, 0),
+(@PATH, 5, 1029.1041, -293.6059, 1.0361143, NULL, 0),
+(@PATH, 6, 1022.875, -290.9271, 1.108589, NULL, 0),
+(@PATH, 7, 1018.5399, -288.98264, 0.8182485, NULL, 0),
+(@PATH, 8, 1013.1771, -290.1354, 0.89820075, NULL, 0),
+(@PATH, 9, 1011.191, -289.06946, 0.968675, NULL, 0),
+(@PATH, 10, 1011.8559, -286.24478, 1.8783445, NULL, 0),
+(@PATH, 11, 1013.5027, -283.42355, 1.4491118, NULL, 0),
+(@PATH, 12, 1017.2726, -283.8854, 1.4036883, NULL, 0);
+
+UPDATE `creature` SET `position_x`=1036.8496, `position_y`=-295.45276, `position_z`=0.85536194, `orientation`=0, `wander_distance`=0, `MovementType`=2 WHERE `guid`=@MOVERGUID;
+DELETE FROM `creature_addon` WHERE `guid`=@MOVERGUID;
+INSERT INTO `creature_addon` (`guid`, `PathId`, `SheathState`) VALUES
+(@MOVERGUID, @PATH, 1);
+
+SET @MOVERGUID := @CGUID+14;
+SET @ENTRY := 139060;
+SET @PATHOFFSET := 0;
+SET @PATH := @ENTRY * 100 + @PATHOFFSET;
+DELETE FROM `waypoint_path` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path` (`PathId`, `MoveType`, `Flags`, `Velocity`, `Comment`) VALUES
+(@PATH, 0, 0x0, NULL, 'Boralus Worker - Idle');
+
+DELETE FROM `waypoint_path_node` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path_node` (`PathId`, `NodeId`, `PositionX`, `PositionY`, `PositionZ`, `Orientation`, `Delay`) VALUES
+(@PATH, 0, 988.19965, -283.2309, 3.1939359, NULL, 0),
+(@PATH, 1, 991.59375, -275.80728, 3.1649206, NULL, 0),
+(@PATH, 2, 996.6649, -269.13196, 3.2029614, NULL, 0),
+(@PATH, 3, 1008.0764, -262.5, 3.193937, NULL, 8266),
+(@PATH, 4, 993.441, -273.1979, 3.189241, NULL, 0),
+(@PATH, 5, 987.9219, -277.43228, 3.1842632, NULL, 0),
+(@PATH, 6, 987.75867, -281.50174, 3.1939352, NULL, 0),
+(@PATH, 7, 981.6042, -285.86807, 3.2330961, NULL, 0),
+(@PATH, 8, 980.74133, -282.85764, 3.255417, NULL, 6974);
+
+UPDATE `creature` SET `position_x`=988.19965, `position_y`=-283.2309, `position_z`=3.1939359, `orientation`=0, `wander_distance`=0, `MovementType`=2 WHERE `guid`=@MOVERGUID;
+DELETE FROM `creature_addon` WHERE `guid`=@MOVERGUID;
+INSERT INTO `creature_addon` (`guid`, `PathId`, `SheathState`) VALUES
+(@MOVERGUID, @PATH, 1);
+
+SET @MOVERGUID := @CGUID+20;
+SET @ENTRY := 139068;
+SET @PATHOFFSET := 0;
+SET @PATH := @ENTRY * 100 + @PATHOFFSET;
+DELETE FROM `waypoint_path` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path` (`PathId`, `MoveType`, `Flags`, `Velocity`, `Comment`) VALUES
+(@PATH, 0, 0x0, NULL, 'Boralus Civilian - Idle');
+
+DELETE FROM `waypoint_path_node` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path_node` (`PathId`, `NodeId`, `PositionX`, `PositionY`, `PositionZ`, `Orientation`, `Delay`) VALUES
+(@PATH, 0, 1036.8496, -295.45276, 0.85536194, NULL, 0),
+(@PATH, 1, 1036.2559, -295.13086, 0.85536194, NULL, 0),
+(@PATH, 2, 1035.6621, -294.80896, 0.85536194, NULL, 0),
+(@PATH, 3, 1033.4913, -293.63202, 0.85536194, NULL, 0),
+(@PATH, 4, 1032.6459, -293.1736, 0.8901193, NULL, 0),
+(@PATH, 5, 1029.1041, -293.6059, 1.0361143, NULL, 0),
+(@PATH, 6, 1022.875, -290.9271, 1.108589, NULL, 0),
+(@PATH, 7, 1018.5399, -288.98264, 0.8182485, NULL, 0),
+(@PATH, 8, 1013.1771, -290.1354, 0.89820075, NULL, 0),
+(@PATH, 9, 1011.191, -289.06946, 0.968675, NULL, 0),
+(@PATH, 10, 1011.8559, -286.24478, 1.8783445, NULL, 0),
+(@PATH, 11, 1013.5027, -283.42355, 1.4491118, NULL, 0),
+(@PATH, 12, 1017.2726, -283.8854, 1.4036883, NULL, 0);
+
+UPDATE `creature` SET `position_x`=1036.8496, `position_y`=-295.45276, `position_z`=0.85536194, `orientation`=0, `wander_distance`=0, `MovementType`=2 WHERE `guid`=@MOVERGUID;
+DELETE FROM `creature_addon` WHERE `guid`=@MOVERGUID;
+INSERT INTO `creature_addon` (`guid`, `PathId`, `SheathState`) VALUES
+(@MOVERGUID, @PATH, 1);
+
+SET @MOVERGUID := @CGUID+21;
+SET @ENTRY := 139068;
+SET @PATHOFFSET := 0;
+SET @PATH := @ENTRY * 100 + @PATHOFFSET;
+DELETE FROM `waypoint_path` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path` (`PathId`, `MoveType`, `Flags`, `Velocity`, `Comment`) VALUES
+(@PATH, 0, 0x0, NULL, 'Boralus Civilian - Idle');
+
+DELETE FROM `waypoint_path_node` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path_node` (`PathId`, `NodeId`, `PositionX`, `PositionY`, `PositionZ`, `Orientation`, `Delay`) VALUES
+(@PATH, 0, 1011.4462, -283.67188, 8.977495, NULL, 0),
+(@PATH, 1, 1008.8958, -283.1146, 9.058487, NULL, 13007),
+(@PATH, 2, 1017.0538, -284.80728, 9.058487, NULL, 0),
+(@PATH, 3, 1020.3698, -285.39932, 9.058487, NULL, 0),
+(@PATH, 4, 1020.8663, -287.8229, 9.355321, NULL, 12581),
+(@PATH, 5, 1021.1302, -286.71527, 9.111922, NULL, 15364);
+
+UPDATE `creature` SET `position_x`=1011.4462, `position_y`=-283.67188, `position_z`=8.977495, `orientation`=0, `wander_distance`=0, `MovementType`=2 WHERE `guid`=@MOVERGUID;
+DELETE FROM `creature_addon` WHERE `guid`=@MOVERGUID;
+INSERT INTO `creature_addon` (`guid`, `PathId`, `SheathState`) VALUES
+(@MOVERGUID, @PATH, 1);
+
+SET @MOVERGUID := @CGUID+25;
+SET @ENTRY := 143245;
+SET @PATHOFFSET := 0;
+SET @PATH := @ENTRY * 100 + @PATHOFFSET;
+DELETE FROM `waypoint_path` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path` (`PathId`, `MoveType`, `Flags`, `Velocity`, `Comment`) VALUES
+(@PATH, 0, 0x0, NULL, 'Bouncer - Idle');
+
+DELETE FROM `waypoint_path_node` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path_node` (`PathId`, `NodeId`, `PositionX`, `PositionY`, `PositionZ`, `Orientation`, `Delay`) VALUES
+(@PATH, 0, 1045.2786, -352.85156, 2.5022535, NULL, 0),
+(@PATH, 1, 1042.0286, -349.10156, 2.2522535, NULL, 0),
+(@PATH, 2, 1022.52856, -354.35156, 2.5022535, NULL, 0),
+(@PATH, 3, 1007.27856, -363.35156, 2.5022535, NULL, 0),
+(@PATH, 4, 1003.5486, -371.01736, 2.5480092, NULL, 0);
+
+SET @MOVERGUID := @CGUID+7;
+SET @ENTRY := 143245;
+SET @PATHOFFSET := 2; -- 1
+SET @PATH := @ENTRY * 100 + @PATHOFFSET;
+DELETE FROM `waypoint_path` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path` (`PathId`, `MoveType`, `Flags`, `Velocity`, `Comment`) VALUES
+(@PATH, 0, 0x0, NULL, 'Bouncer - Idle');
+
+DELETE FROM `waypoint_path_node` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path_node` (`PathId`, `NodeId`, `PositionX`, `PositionY`, `PositionZ`, `Orientation`, `Delay`) VALUES
+(@PATH, 0, 977.1727, -301.1363, 0.8325119, NULL, 0),
+(@PATH, 1, 984.4227, -305.1363, 0.3325119, NULL, 0),
+(@PATH, 2, 997.6727, -304.1363, -0.1674881, NULL, 0),
+(@PATH, 3, 1009.6727, -292.3863, 0.8325119, NULL, 0),
+(@PATH, 4, 1013.4227, -283.6363, 1.8325119, NULL, 0),
+(@PATH, 5, 1018.1111, -284.10938, 1.3136975, NULL, 0);
+
+SET @MOVERGUID := @CGUID+27;
+SET @ENTRY := 143245;
+SET @PATHOFFSET := 3;
+SET @PATH := @ENTRY * 100 + @PATHOFFSET;
+DELETE FROM `waypoint_path` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path` (`PathId`, `MoveType`, `Flags`, `Velocity`, `Comment`) VALUES
+(@PATH, 0, 0x0, NULL, 'Bouncer - Idle');
+
+DELETE FROM `waypoint_path_node` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path_node` (`PathId`, `NodeId`, `PositionX`, `PositionY`, `PositionZ`, `Orientation`, `Delay`) VALUES
+(@PATH, 0, 980.68317, -304.7292, 0.09912133, NULL, 0),
+(@PATH, 1, 987.93317, -308.7292, 0.34912133, NULL, 0),
+(@PATH, 2, 998.68317, -302.4792, -0.15087867, NULL, 0),
+(@PATH, 3, 1009.93317, -292.7292, 0.84912133, NULL, 0),
+(@PATH, 4, 1013.18317, -283.4792, 1.8491213, NULL, 0),
+(@PATH, 5, 1018.9097, -283.86807, 1.3135223, NULL, 0);
+
+SET @MOVERGUID := @CGUID+8;
+SET @ENTRY := 143245;
+SET @PATHOFFSET := 1;
+SET @PATH := @ENTRY * 100 + @PATHOFFSET;
+DELETE FROM `waypoint_path` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path` (`PathId`, `MoveType`, `Flags`, `Velocity`, `Comment`) VALUES
+(@PATH, 0, 0x0, NULL, 'Bouncer - Idle');
+
+DELETE FROM `waypoint_path_node` WHERE `PathId`= @PATH;
+INSERT INTO `waypoint_path_node` (`PathId`, `NodeId`, `PositionX`, `PositionY`, `PositionZ`, `Orientation`, `Delay`) VALUES
+(@PATH, 0, 1041.0739, -351.52954, 2.2203364, NULL, 0),
+(@PATH, 1, 1037.5739, -353.27954, 2.7203364, NULL, 0),
+(@PATH, 2, 1032.0739, -355.52954, 2.7203364, NULL, 0),
+(@PATH, 3, 1021.32385, -360.02954, 2.7203364, NULL, 0),
+(@PATH, 4, 1013.32385, -365.52954, 2.4703364, NULL, 0),
+(@PATH, 5, 1009.5261, -368.33508, 2.412604, NULL, 0);
+
+ -- Bouncer smart ai
+SET @ENTRY := 143245;
+UPDATE `creature_template` SET `AIName` = 'SmartAI', `ScriptName` = '' WHERE `entry` = @ENTRY;
+DELETE FROM `smart_scripts` WHERE `source_type` = 0 AND `entryOrGuid` = @ENTRY;
+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`, `action_param7`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`, `Difficulties`) VALUES
+(@ENTRY, 0, 0, 0, 58, 0, 100, 0, 0xFFFFFFFF, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'On any waypoint of any path ended - Self: Despawn instantly', '');
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` = 22 AND `SourceEntry` = 143245 AND `SourceId` = 0;
+
+ -- Penny smart ai
+SET @ENTRY := 143121;
+UPDATE `creature_template` SET `AIName` = 'SmartAI', `ScriptName` = '' WHERE `entry` = @ENTRY;
+DELETE FROM `smart_scripts` WHERE `source_type` = 0 AND `entryOrGuid` = @ENTRY;
+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`, `action_param7`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`, `Difficulties`) VALUES
+(@ENTRY, 0, 0, 0, 58, 0, 100, 0, 0, 14312100, 0, 0, 0, 53, 1, 14312101, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'On any waypoint of path 14312100 ended - Self: Start path #14312101, run, repeat, Passive', ''),
+(@ENTRY, 0, 1, 0, 72, 0, 100, 0, 4, 0, 0, 0, 0, 53, 0, 14312100, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 'On action[4] - Self: Start path #14312100, run, do not repeat, Passive', '');
+
+DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` = 22 AND `SourceEntry` = 143121 AND `SourceId` = 0;
diff --git a/src/common/Collision/BoundingIntervalHierarchyWrapper.h b/src/common/Collision/BoundingIntervalHierarchyWrapper.h
index 30ff03733eb..85048da58bc 100644
--- a/src/common/Collision/BoundingIntervalHierarchyWrapper.h
+++ b/src/common/Collision/BoundingIntervalHierarchyWrapper.h
@@ -15,13 +15,11 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef _BIH_WRAP
-#define _BIH_WRAP
+#ifndef TRINITYCORE_BOUNDING_INTERVAL_HIERARCHY_WRAPPER_H
+#define TRINITYCORE_BOUNDING_INTERVAL_HIERARCHY_WRAPPER_H
#include "BoundingIntervalHierarchy.h"
-#include <G3D/Table.h>
-#include <G3D/Array.h>
-#include <G3D/Set.h>
+#include <unordered_map>
template<class T, class BoundsFunc = BoundsTrait<T> >
class BIHWrap
@@ -29,58 +27,68 @@ class BIHWrap
template<class RayCallback>
struct MDLCallback
{
- const T* const* objects;
+ std::size_t objects_size;
+ T const* const* objects;
RayCallback& _callback;
- uint32 objects_size;
- MDLCallback(RayCallback& callback, const T* const* objects_array, uint32 objects_size ) : objects(objects_array), _callback(callback), objects_size(objects_size) { }
+ MDLCallback(RayCallback& callback, T const* const* objects_array, std::size_t objects_size ) : objects_size(objects_size), objects(objects_array), _callback(callback) { }
/// Intersect ray
- bool operator() (const G3D::Ray& ray, uint32 idx, float& maxDist, bool /*stopAtFirst*/)
+ bool operator() (G3D::Ray const& ray, std::size_t idx, float& maxDist, bool /*stopAtFirst*/)
{
if (idx >= objects_size)
return false;
- if (const T* obj = objects[idx])
+ if (T const* obj = objects[idx])
return _callback(ray, *obj, maxDist/*, stopAtFirst*/);
return false;
}
/// Intersect point
- void operator() (const G3D::Vector3& p, uint32 idx)
+ void operator() (G3D::Vector3 const& p, std::size_t idx)
{
if (idx >= objects_size)
return;
- if (const T* obj = objects[idx])
+ if (T const* obj = objects[idx])
_callback(p, *obj);
}
};
- typedef G3D::Array<const T*> ObjArray;
-
BIH m_tree;
- ObjArray m_objects;
- G3D::Table<const T*, uint32> m_obj2Idx;
- G3D::Set<const T*> m_objects_to_push;
+ std::vector<T const*> m_objects;
+ std::unordered_map<T const*, std::size_t> m_obj2Idx;
int unbalanced_times;
public:
BIHWrap() : unbalanced_times(0) { }
- void insert(const T& obj)
+ void insert(T const& obj)
{
+ auto [itr, isNew] = m_obj2Idx.try_emplace(&obj, m_objects.size());
+ if (!isNew)
+ return;
+
+ m_objects.push_back(itr->first);
++unbalanced_times;
- m_objects_to_push.insert(&obj);
}
- void remove(const T& obj)
+ void remove(T const& obj)
{
+ auto node = m_obj2Idx.extract(&obj);
+ if (!node)
+ return;
+
+ if (node.key() != m_objects.back())
+ {
+ // update index of last element (will be swapped with removed one)
+ m_obj2Idx.find(m_objects.back())->second = node.mapped();
+
+ // move last into removed element slot
+ m_objects[node.mapped()] = m_objects.back();
+ }
+
+ m_objects.pop_back();
+
++unbalanced_times;
- uint32 Idx = 0;
- const T * temp;
- if (m_obj2Idx.getRemove(&obj, temp, Idx))
- m_objects[Idx] = nullptr;
- else
- m_objects_to_push.remove(&obj);
}
void balance()
@@ -88,30 +96,25 @@ public:
if (unbalanced_times == 0)
return;
- unbalanced_times = 0;
- m_objects.fastClear();
- m_obj2Idx.getKeys(m_objects);
- m_objects_to_push.getMembers(m_objects);
- //assert that m_obj2Idx has all the keys
-
m_tree.build(m_objects, BoundsFunc());
+ unbalanced_times = 0;
}
template<typename RayCallback>
- void intersectRay(const G3D::Ray& ray, RayCallback& intersectCallback, float& maxDist)
+ void intersectRay(G3D::Ray const& ray, RayCallback& intersectCallback, float& maxDist)
{
balance();
- MDLCallback<RayCallback> temp_cb(intersectCallback, m_objects.getCArray(), m_objects.size());
+ MDLCallback<RayCallback> temp_cb(intersectCallback, m_objects.data(), m_objects.size());
m_tree.intersectRay(ray, temp_cb, maxDist, true);
}
template<typename IsectCallback>
- void intersectPoint(const G3D::Vector3& point, IsectCallback& intersectCallback)
+ void intersectPoint(G3D::Vector3 const& point, IsectCallback& intersectCallback)
{
balance();
- MDLCallback<IsectCallback> callback(intersectCallback, m_objects.getCArray(), m_objects.size());
+ MDLCallback<IsectCallback> callback(intersectCallback, m_objects.data(), m_objects.size());
m_tree.intersectPoint(point, callback);
}
};
-#endif // _BIH_WRAP
+#endif // TRINITYCORE_BOUNDING_INTERVAL_HIERARCHY_WRAPPER_H
diff --git a/src/common/Collision/DynamicTree.cpp b/src/common/Collision/DynamicTree.cpp
index 1f5875fac0a..073e317e4ae 100644
--- a/src/common/Collision/DynamicTree.cpp
+++ b/src/common/Collision/DynamicTree.cpp
@@ -35,10 +35,6 @@ int CHECK_TREE_PERIOD = 200;
} // namespace
-template<> struct HashTrait< GameObjectModel>{
- static size_t hashCode(GameObjectModel const& g) { return (size_t)(void*)&g; }
-};
-
template<> struct PositionTrait< GameObjectModel> {
static void getPosition(GameObjectModel const& g, G3D::Vector3& p) { p = g.getPosition(); }
};
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h
index d6abd1c4104..28ba159b228 100644
--- a/src/server/game/Entities/Player/Player.h
+++ b/src/server/game/Entities/Player/Player.h
@@ -518,6 +518,7 @@ enum PlayerFlagsEx
PLAYER_FLAGS_EX_REAGENT_BANK_UNLOCKED = 0x0001,
PLAYER_FLAGS_EX_MERCENARY_MODE = 0x0002,
PLAYER_FLAGS_EX_ARTIFACT_FORGE_CHEAT = 0x0004,
+ PLAYER_FLAGS_EX_ITEM_LEVEL_SQUISH = 0x0020, // Uses ItemLevelSquish gametable
PLAYER_FLAGS_EX_IN_PVP_COMBAT = 0x0040, // Forbids /follow
PLAYER_FLAGS_EX_MENTOR = 0x0080,
PLAYER_FLAGS_EX_NEWCOMER = 0x0100,
diff --git a/src/server/game/Handlers/TokenHandler.cpp b/src/server/game/Handlers/TokenHandler.cpp
index de58aac4905..dae2aec41b2 100644
--- a/src/server/game/Handlers/TokenHandler.cpp
+++ b/src/server/game/Handlers/TokenHandler.cpp
@@ -22,9 +22,8 @@ void WorldSession::HandleCommerceTokenGetLog(WorldPackets::Token::CommerceTokenG
{
WorldPackets::Token::CommerceTokenGetLogResponse response;
- /// @todo: 6.x fix implementation
response.ClientToken = commerceTokenGetLog.ClientToken;
- response.Result = TOKEN_RESULT_SUCCESS;
+ response.Result = TOKEN_RESULT_ERROR_DISABLED;
SendPacket(response.Write());
}
@@ -33,11 +32,9 @@ void WorldSession::HandleCommerceTokenGetMarketPrice(WorldPackets::Token::Commer
{
WorldPackets::Token::CommerceTokenGetMarketPriceResponse response;
- /// @todo: 6.x fix implementation
- response.PriceGuarantee = 300000000;
+ response.Price = 0;
response.ClientToken = commerceTokenGetMarketPrice.ClientToken;
- response.ServerToken = TOKEN_RESULT_SUCCESS;
- //packet.ReadUInt32("UnkInt32");
+ response.Result = TOKEN_RESULT_ERROR_DISABLED;
SendPacket(response.Write());
}
diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h
index 26dcc9f7fdc..5695f70a322 100644
--- a/src/server/game/Miscellaneous/SharedDefines.h
+++ b/src/server/game/Miscellaneous/SharedDefines.h
@@ -7280,15 +7280,18 @@ enum LineOfSightChecks : uint8
enum TokenResult
{
- TOKEN_RESULT_SUCCESS = 0,
- TOKEN_RESULT_ERROR_DISABLED = 1,
- TOKEN_RESULT_ERROR_OTHER = 2,
- TOKEN_RESULT_ERROR_NONE_FOR_SALE = 3,
- TOKEN_RESULT_ERROR_TOO_MANY_TOKENS = 4,
- TOKEN_RESULT_SUCCESS_NO = 5,
- TOKEN_RESULT_ERROR_TRANSACTION_IN_PROGRESS = 6,
- TOKEN_RESULT_ERROR_AUCTIONABLE_TOKEN_OWNED = 7,
- TOKEN_RESULT_ERROR_TRIAL_RESTRICTED = 8
+ TOKEN_RESULT_SUCCESS = 0,
+ TOKEN_RESULT_ERROR_DISABLED = 1,
+ TOKEN_RESULT_ERROR_OTHER = 2,
+ TOKEN_RESULT_ERROR_NONE_FOR_SALE = 3,
+ TOKEN_RESULT_ERROR_TOO_MANY_TOKENS = 4,
+ TOKEN_RESULT_SUCCESS_NO = 5,
+ TOKEN_RESULT_ERROR_TRANSACTION_IN_PROGRESS = 6,
+ TOKEN_RESULT_ERROR_AUCTIONABLE_TOKEN_OWNED = 7,
+ TOKEN_RESULT_ERROR_TRIAL_RESTRICTED = 8,
+ TOKEN_RESULT_ERROR_BALANCE_NEAR_CAP = 9,
+ TOKEN_RESULT_ERROR_NOT_ENOUGH_PURCHASED_GAME_TIME = 10,
+ TOKEN_RESULT_ERROR_THROTTLE_TOKENS = 11
};
enum TutorialAction : uint8
diff --git a/src/server/game/Server/Packets/TokenPackets.cpp b/src/server/game/Server/Packets/TokenPackets.cpp
index db0b35c9ea6..2d94b849421 100644
--- a/src/server/game/Server/Packets/TokenPackets.cpp
+++ b/src/server/game/Server/Packets/TokenPackets.cpp
@@ -50,9 +50,9 @@ void CommerceTokenGetMarketPrice::Read()
WorldPacket const* CommerceTokenGetMarketPriceResponse::Write()
{
_worldPacket << ClientToken;
- _worldPacket << ServerToken;
- _worldPacket << PriceGuarantee;
- _worldPacket << PriceLockDurationSeconds;
+ _worldPacket << Result;
+ _worldPacket << Price;
+ _worldPacket << ExpectedSecondsUntilSold;
return &_worldPacket;
}
diff --git a/src/server/game/Server/Packets/TokenPackets.h b/src/server/game/Server/Packets/TokenPackets.h
index d6844d37bb2..0a1c8dbfc13 100644
--- a/src/server/game/Server/Packets/TokenPackets.h
+++ b/src/server/game/Server/Packets/TokenPackets.h
@@ -73,10 +73,10 @@ namespace WorldPackets
WorldPacket const* Write() override;
- uint32 ClientToken = 0;
- uint32 ServerToken = 0;
- uint64 PriceGuarantee = 0;
- uint32 PriceLockDurationSeconds = 0; // preset auction duration enum
+ uint32 ClientToken = 0;
+ int32 Result = 0;
+ uint64 Price = 0;
+ uint32 ExpectedSecondsUntilSold = 0;
};
}
}
diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp
index ba343184245..df54c7f484a 100644
--- a/src/server/game/Server/Protocol/Opcodes.cpp
+++ b/src/server/game/Server/Protocol/Opcodes.cpp
@@ -174,8 +174,8 @@ void OpcodeTable::InitializeClientOpcodes()
DEFINE_HANDLER(CMSG_ASSIGN_EQUIPMENT_SET_SPEC, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_ATTACK_STOP, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleAttackStopOpcode);
DEFINE_HANDLER(CMSG_ATTACK_SWING, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleAttackSwingOpcode);
- DEFINE_HANDLER(CMSG_AUCTIONABLE_TOKEN_SELL, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
- DEFINE_HANDLER(CMSG_AUCTIONABLE_TOKEN_SELL_AT_MARKET_PRICE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
+ DEFINE_HANDLER(CMSG_AUCTIONABLE_TOKEN_SELL, STATUS_IGNORED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
+ DEFINE_HANDLER(CMSG_AUCTIONABLE_TOKEN_SELL_AT_MARKET_PRICE, STATUS_IGNORED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_AUCTION_BROWSE_QUERY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleAuctionBrowseQuery);
DEFINE_HANDLER(CMSG_AUCTION_CANCEL_COMMODITIES_PURCHASE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleAuctionCancelCommoditiesPurchase);
DEFINE_HANDLER(CMSG_AUCTION_CONFIRM_COMMODITIES_PURCHASE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleAuctionConfirmCommoditiesPurchase);
@@ -220,17 +220,17 @@ void OpcodeTable::InitializeClientOpcodes()
DEFINE_HANDLER(CMSG_BATTLEMASTER_JOIN_SKIRMISH, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_BATTLENET_CHALLENGE_RESPONSE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_BATTLENET_REQUEST, STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleBattlenetRequest);
- DEFINE_HANDLER(CMSG_BATTLE_PAY_ACK_FAILED_RESPONSE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
- DEFINE_HANDLER(CMSG_BATTLE_PAY_CANCEL_OPEN_CHECKOUT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
- DEFINE_HANDLER(CMSG_BATTLE_PAY_CONFIRM_PURCHASE_RESPONSE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
- DEFINE_HANDLER(CMSG_BATTLE_PAY_DISTRIBUTION_ASSIGN_TO_TARGET, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
- DEFINE_HANDLER(CMSG_BATTLE_PAY_DISTRIBUTION_ASSIGN_VAS, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
- DEFINE_HANDLER(CMSG_BATTLE_PAY_GET_PRODUCT_LIST, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
- DEFINE_HANDLER(CMSG_BATTLE_PAY_GET_PURCHASE_LIST, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
- DEFINE_HANDLER(CMSG_BATTLE_PAY_OPEN_CHECKOUT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
- DEFINE_HANDLER(CMSG_BATTLE_PAY_REQUEST_PRICE_INFO, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
- DEFINE_HANDLER(CMSG_BATTLE_PAY_START_PURCHASE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
- DEFINE_HANDLER(CMSG_BATTLE_PAY_START_VAS_PURCHASE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
+ DEFINE_HANDLER(CMSG_BATTLE_PAY_ACK_FAILED_RESPONSE, STATUS_IGNORED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
+ DEFINE_HANDLER(CMSG_BATTLE_PAY_CANCEL_OPEN_CHECKOUT, STATUS_IGNORED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
+ DEFINE_HANDLER(CMSG_BATTLE_PAY_CONFIRM_PURCHASE_RESPONSE, STATUS_IGNORED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
+ DEFINE_HANDLER(CMSG_BATTLE_PAY_DISTRIBUTION_ASSIGN_TO_TARGET, STATUS_IGNORED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
+ DEFINE_HANDLER(CMSG_BATTLE_PAY_DISTRIBUTION_ASSIGN_VAS, STATUS_IGNORED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
+ DEFINE_HANDLER(CMSG_BATTLE_PAY_GET_PRODUCT_LIST, STATUS_IGNORED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
+ DEFINE_HANDLER(CMSG_BATTLE_PAY_GET_PURCHASE_LIST, STATUS_IGNORED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
+ DEFINE_HANDLER(CMSG_BATTLE_PAY_OPEN_CHECKOUT, STATUS_IGNORED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
+ DEFINE_HANDLER(CMSG_BATTLE_PAY_REQUEST_PRICE_INFO, STATUS_IGNORED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
+ DEFINE_HANDLER(CMSG_BATTLE_PAY_START_PURCHASE, STATUS_IGNORED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
+ DEFINE_HANDLER(CMSG_BATTLE_PAY_START_VAS_PURCHASE, STATUS_IGNORED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_BATTLE_PET_CLEAR_FANFARE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBattlePetClearFanfare);
DEFINE_HANDLER(CMSG_BATTLE_PET_DELETE_PET, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBattlePetDeletePet);
DEFINE_HANDLER(CMSG_BATTLE_PET_DELETE_PET_CHEAT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
@@ -281,7 +281,7 @@ void OpcodeTable::InitializeClientOpcodes()
DEFINE_HANDLER(CMSG_CANCEL_TEMP_ENCHANTMENT, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleCancelTempEnchantmentOpcode);
DEFINE_HANDLER(CMSG_CANCEL_TRADE, STATUS_LOGGEDIN_OR_RECENTLY_LOGGOUT, PROCESS_THREADUNSAFE, &WorldSession::HandleCancelTradeOpcode);
DEFINE_HANDLER(CMSG_CAN_DUEL, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleCanDuel);
- DEFINE_HANDLER(CMSG_CAN_REDEEM_TOKEN_FOR_BALANCE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
+ DEFINE_HANDLER(CMSG_CAN_REDEEM_TOKEN_FOR_BALANCE, STATUS_IGNORED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_CAST_SPELL, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleCastSpellOpcode);
DEFINE_HANDLER(CMSG_CHALLENGE_MODE_REQUEST_LEADERS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_CHANGE_BAG_SLOT_FLAG, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleChangeBagSlotFlag);
@@ -379,7 +379,7 @@ void OpcodeTable::InitializeClientOpcodes()
DEFINE_HANDLER(CMSG_COMMENTATOR_GET_PLAYER_COOLDOWNS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_COMMENTATOR_GET_PLAYER_INFO, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_COMMENTATOR_START_WARGAME, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
- DEFINE_HANDLER(CMSG_COMMERCE_TOKEN_GET_COUNT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
+ DEFINE_HANDLER(CMSG_COMMERCE_TOKEN_GET_COUNT, STATUS_IGNORED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_COMMERCE_TOKEN_GET_LOG, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleCommerceTokenGetLog);
DEFINE_HANDLER(CMSG_COMMERCE_TOKEN_GET_MARKET_PRICE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleCommerceTokenGetMarketPrice);
DEFINE_HANDLER(CMSG_COMPLAINT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleComplaint);
@@ -389,11 +389,11 @@ void OpcodeTable::InitializeClientOpcodes()
DEFINE_HANDLER(CMSG_CONFIRM_PROFESSION_RESPEC, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_CONFIRM_RESPEC_WIPE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleConfirmRespecWipeOpcode);
DEFINE_HANDLER(CMSG_CONNECT_TO_FAILED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_EarlyProccess);
- DEFINE_HANDLER(CMSG_CONSUMABLE_TOKEN_BUY, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
- DEFINE_HANDLER(CMSG_CONSUMABLE_TOKEN_BUY_AT_MARKET_PRICE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
- DEFINE_HANDLER(CMSG_CONSUMABLE_TOKEN_CAN_VETERAN_BUY, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
- DEFINE_HANDLER(CMSG_CONSUMABLE_TOKEN_REDEEM, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
- DEFINE_HANDLER(CMSG_CONSUMABLE_TOKEN_REDEEM_CONFIRMATION, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
+ DEFINE_HANDLER(CMSG_CONSUMABLE_TOKEN_BUY, STATUS_IGNORED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
+ DEFINE_HANDLER(CMSG_CONSUMABLE_TOKEN_BUY_AT_MARKET_PRICE, STATUS_IGNORED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
+ DEFINE_HANDLER(CMSG_CONSUMABLE_TOKEN_CAN_VETERAN_BUY, STATUS_IGNORED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
+ DEFINE_HANDLER(CMSG_CONSUMABLE_TOKEN_REDEEM, STATUS_IGNORED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
+ DEFINE_HANDLER(CMSG_CONSUMABLE_TOKEN_REDEEM_CONFIRMATION, STATUS_IGNORED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_CONTENT_TRACKING_START_TRACKING, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_CONTENT_TRACKING_STOP_TRACKING, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_CONTRIBUTION_CONTRIBUTE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
@@ -494,8 +494,8 @@ void OpcodeTable::InitializeClientOpcodes()
DEFINE_HANDLER(CMSG_GET_REMAINING_GAME_TIME, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_GET_TROPHY_LIST, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_GET_UNDELETE_CHARACTER_COOLDOWN_STATUS, STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleGetUndeleteCooldownStatus);
- DEFINE_HANDLER(CMSG_GET_VAS_ACCOUNT_CHARACTER_LIST, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
- DEFINE_HANDLER(CMSG_GET_VAS_TRANSFER_TARGET_REALM_LIST, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
+ DEFINE_HANDLER(CMSG_GET_VAS_ACCOUNT_CHARACTER_LIST, STATUS_IGNORED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
+ DEFINE_HANDLER(CMSG_GET_VAS_TRANSFER_TARGET_REALM_LIST, STATUS_IGNORED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_GM_TICKET_ACKNOWLEDGE_SURVEY, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_GM_TICKET_GET_CASE_STATUS, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleGMTicketGetCaseStatusOpcode);
DEFINE_HANDLER(CMSG_GM_TICKET_GET_SYSTEM_STATUS, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleGMTicketSystemStatusOpcode);
@@ -1016,7 +1016,7 @@ void OpcodeTable::InitializeClientOpcodes()
DEFINE_HANDLER(CMSG_UPDATE_MISSILE_TRAJECTORY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleUpdateMissileTrajectory);
DEFINE_HANDLER(CMSG_UPDATE_RAID_TARGET, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleUpdateRaidTargetOpcode);
DEFINE_HANDLER(CMSG_UPDATE_SPELL_VISUAL, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleUpdateAuraVisual);
- DEFINE_HANDLER(CMSG_UPDATE_VAS_PURCHASE_STATES, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
+ DEFINE_HANDLER(CMSG_UPDATE_VAS_PURCHASE_STATES, STATUS_IGNORED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_UPGRADE_GARRISON, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_UPGRADE_RUNEFORGE_LEGENDARY, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_USED_FOLLOW, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL);
@@ -1024,9 +1024,9 @@ void OpcodeTable::InitializeClientOpcodes()
DEFINE_HANDLER(CMSG_USE_EQUIPMENT_SET, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleUseEquipmentSet);
DEFINE_HANDLER(CMSG_USE_ITEM, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleUseItemOpcode);
DEFINE_HANDLER(CMSG_USE_TOY, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleUseToy);
- DEFINE_HANDLER(CMSG_VAS_CHECK_TRANSFER_OK, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
- DEFINE_HANDLER(CMSG_VAS_GET_QUEUE_MINUTES, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
- DEFINE_HANDLER(CMSG_VAS_GET_SERVICE_STATUS, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
+ DEFINE_HANDLER(CMSG_VAS_CHECK_TRANSFER_OK, STATUS_IGNORED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
+ DEFINE_HANDLER(CMSG_VAS_GET_QUEUE_MINUTES, STATUS_IGNORED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
+ DEFINE_HANDLER(CMSG_VAS_GET_SERVICE_STATUS, STATUS_IGNORED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_VIOLENCE_LEVEL, STATUS_AUTHED, PROCESS_INPLACE, &WorldSession::HandleViolenceLevel);
DEFINE_HANDLER(CMSG_VOICE_CHANNEL_STT_TOKEN_REQUEST, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_VOICE_CHAT_JOIN_CHANNEL, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL);
diff --git a/src/server/game/Server/Protocol/Opcodes.h b/src/server/game/Server/Protocol/Opcodes.h
index a4da8df05f8..a385c379ab1 100644
--- a/src/server/game/Server/Protocol/Opcodes.h
+++ b/src/server/game/Server/Protocol/Opcodes.h
@@ -2262,7 +2262,8 @@ enum SessionStatus
STATUS_TRANSFER, // Player transferring to another map (_player != NULL, m_GUID == _player->GetGUID(), !inWorld())
STATUS_LOGGEDIN_OR_RECENTLY_LOGGOUT, // _player != NULL or _player == NULL && m_playerRecentlyLogout && m_playerLogout, m_GUID store last _player guid)
STATUS_NEVER, // Opcode not accepted from client (deprecated or server side only)
- STATUS_UNHANDLED // Opcode not handled yet
+ STATUS_UNHANDLED, // Opcode not handled yet
+ STATUS_IGNORED // Opcode not handled - and no plans to handle it
};
enum PacketProcessing
diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp
index e0daa6751d5..652d912ca15 100644
--- a/src/server/game/Server/WorldSession.cpp
+++ b/src/server/game/Server/WorldSession.cpp
@@ -452,6 +452,8 @@ bool WorldSession::Update(uint32 diff, PacketFilter& updater)
TC_LOG_ERROR("network.opcode", "Received not handled opcode {} from {}", GetOpcodeNameForLogging(static_cast<OpcodeClient>(packet->GetOpcode()))
, GetPlayerInfo());
break;
+ case STATUS_IGNORED:
+ break;
}
}
catch (WorldPackets::InvalidHyperlinkException const& ihe)
diff --git a/src/server/scripts/Battlegrounds/HookPoint/arena_hook_point.cpp b/src/server/scripts/Battlegrounds/HookPoint/arena_hook_point.cpp
new file mode 100644
index 00000000000..bc30f3eb8b6
--- /dev/null
+++ b/src/server/scripts/Battlegrounds/HookPoint/arena_hook_point.cpp
@@ -0,0 +1,384 @@
+/*
+ * This file is part of the TrinityCore 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 General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "Battleground.h"
+#include "BattlegroundScript.h"
+#include "Conversation.h"
+#include "Creature.h"
+#include "CreatureAI.h"
+#include "GameObject.h"
+#include "Map.h"
+#include "MotionMaster.h"
+#include "Player.h"
+#include "ScriptMgr.h"
+#include "SpellScript.h"
+#include "TaskScheduler.h"
+
+namespace HookPoint
+{
+ namespace Actions
+ {
+ static constexpr uint32 ReactionTrigger = 1;
+ static constexpr uint32 ReactionDead = 2;
+ static constexpr uint32 ReactionCheer = 3;
+ static constexpr uint32 PennyMove = 4;
+ }
+
+ namespace BouncerPaths
+ {
+ static constexpr uint64 Path1 = 14324500;
+ static constexpr uint64 Path2 = 14324501;
+ static constexpr uint64 Path3 = 14324502;
+ static constexpr uint64 Path4 = 14324503;
+ }
+
+ namespace Conversations
+ {
+ static constexpr uint32 Prepare = 9450;
+ }
+
+ namespace Creatures
+ {
+ static constexpr uint32 DanielPoole = 137530;
+ static constexpr uint32 Bouncer = 143245;
+ static constexpr uint32 Penny = 143121;
+ }
+
+ namespace GameObjects
+ {
+ static constexpr uint32 InvisWall = 296728;
+ static constexpr uint32 SlideDoor = 297144;
+ }
+
+ namespace MapIds
+ {
+ static constexpr uint32 HookPoint = 1825;
+ }
+
+ namespace Spells
+ {
+ static constexpr uint32 KulTirasArenaVOCooldownAura = 275002;
+ static constexpr uint32 ArenaReactionTrigger = 278776;
+ static constexpr uint32 KulTirasArenaCrowdCheers = 278937;
+ static constexpr uint32 ArenaLowHealthDyingTrigger = 279047;
+ static constexpr uint32 KulTirasArenaCrowdBoos = 278926;
+ }
+
+ namespace StringIds
+ {
+ static constexpr std::string_view Bouncer1 = "hook_point_bouncer_1"sv;
+ static constexpr std::string_view Bouncer2 = "hook_point_bouncer_2"sv;
+ static constexpr std::string_view Bouncer3 = "hook_point_bouncer_3"sv;
+ static constexpr std::string_view Bouncer4 = "hook_point_bouncer_4"sv;
+ }
+
+ namespace Texts
+ {
+ namespace DanielPoole
+ {
+ static constexpr uint8 Start = 0;
+ static constexpr uint8 ReactionLowHealth = 1;
+ static constexpr uint8 ReactionKill = 2;
+ }
+ }
+}
+
+struct arena_hook_point : ArenaScript
+{
+ explicit arena_hook_point(BattlegroundMap* map) : ArenaScript(map) { }
+
+ void OnStart() override
+ {
+ for (ObjectGuid const& guid : _doorGUIDs)
+ {
+ if (GameObject* door = battlegroundMap->GetGameObject(guid))
+ {
+ door->UseDoorOrButton();
+ door->DespawnOrUnsummon(5s);
+ }
+ }
+
+ if (Creature const* creature = battlegroundMap->GetCreature(_danielPooleGUID))
+ creature->AI()->Talk(HookPoint::Texts::DanielPoole::Start);
+
+ for (ObjectGuid const& guid : _bouncerGUIDs)
+ {
+ if (Creature* bouncer = battlegroundMap->GetCreature(guid))
+ {
+ bouncer->SetAIAnimKitId(0);
+ if (bouncer->HasStringId(HookPoint::StringIds::Bouncer1))
+ bouncer->GetMotionMaster()->MovePath(HookPoint::BouncerPaths::Path1, false, {}, {}, MovementWalkRunSpeedSelectionMode::Default, {}, {}, {}, true, false);
+ else if (bouncer->HasStringId(HookPoint::StringIds::Bouncer2))
+ {
+ bouncer->m_Events.AddEventAtOffset([bouncer]()
+ {
+ bouncer->GetMotionMaster()->MovePath(HookPoint::BouncerPaths::Path2, false, {}, {}, MovementWalkRunSpeedSelectionMode::Default, {}, {}, {}, true, false);
+ }, 500ms);
+ }
+ else if (bouncer->HasStringId(HookPoint::StringIds::Bouncer3))
+ bouncer->GetMotionMaster()->MovePath(HookPoint::BouncerPaths::Path3, false, {}, {}, MovementWalkRunSpeedSelectionMode::Default, {}, {}, {}, true, false);
+ else if (bouncer->HasStringId(HookPoint::StringIds::Bouncer4))
+ {
+ bouncer->m_Events.AddEventAtOffset([bouncer]()
+ {
+ bouncer->GetMotionMaster()->MovePath(HookPoint::BouncerPaths::Path4, false, {}, {}, MovementWalkRunSpeedSelectionMode::Default, {}, {}, {}, true, false);
+ }, 500ms);
+ }
+ }
+ }
+
+ if (Creature* creature = battlegroundMap->GetCreature(_pennyGUID))
+ {
+ creature->SetAIAnimKitId(0);
+ creature->AI()->DoAction(HookPoint::Actions::PennyMove);
+ }
+ }
+
+ void OnUpdate(uint32 diff) override
+ {
+ _scheduler.Update(diff);
+ }
+
+ void OnPrepareStage1() override
+ {
+ _scheduler.Schedule(20s, [&](TaskContext)
+ {
+ if (GameObject* slideDoor = battlegroundMap->GetGameObject(_slideDoorGUID))
+ slideDoor->UseDoorOrButton();
+
+ if (Creature* creature = battlegroundMap->GetCreature(_danielPooleGUID))
+ Conversation::CreateConversation(HookPoint::Conversations::Prepare, creature, creature->GetPosition(), ObjectGuid::Empty);
+ });
+ }
+
+ void DoAction(uint32 actionId, WorldObject* source, WorldObject* target) override
+ {
+ switch (actionId)
+ {
+ case HookPoint::Actions::ReactionTrigger:
+ HandleReactionLowHealth(Object::ToPlayer(source));
+ break;
+ case HookPoint::Actions::ReactionCheer:
+ HandleReactionCheer(Object::ToPlayer(source));
+ break;
+ case HookPoint::Actions::ReactionDead:
+ HandleKill(Object::ToPlayer(target));
+ break;
+ default:
+ break;
+ }
+ }
+
+ void OnCreatureCreate(Creature* creature) override
+ {
+ switch (creature->GetEntry())
+ {
+ case HookPoint::Creatures::DanielPoole:
+ _danielPooleGUID = creature->GetGUID();
+ break;
+ case HookPoint::Creatures::Bouncer:
+ _bouncerGUIDs.emplace_back(creature->GetGUID());
+ break;
+ case HookPoint::Creatures::Penny:
+ _pennyGUID = creature->GetGUID();
+ break;
+ default:
+ break;
+ }
+ }
+
+ void OnGameObjectCreate(GameObject* gameobject) override
+ {
+ switch (gameobject->GetEntry())
+ {
+ case HookPoint::GameObjects::InvisWall:
+ _doorGUIDs.emplace_back(gameobject->GetGUID());
+ break;
+ case HookPoint::GameObjects::SlideDoor:
+ _slideDoorGUID = gameobject->GetGUID();
+ break;
+ default:
+ break;
+ }
+ }
+
+ void OnPlayerJoined(Player* player, bool /*inBattleground*/) override
+ {
+ player->CastSpell(nullptr, HookPoint::Spells::ArenaReactionTrigger, CastSpellExtraArgsInit{
+ .TriggerFlags = TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR
+ });
+ }
+
+ void HandleKill(Player const* victim) const
+ {
+ if (!victim)
+ return;
+
+ if (Creature* creature = battlegroundMap->GetCreature(_danielPooleGUID))
+ {
+ if (creature->HasAura(HookPoint::Spells::KulTirasArenaVOCooldownAura))
+ return;
+
+ creature->AI()->Talk(HookPoint::Texts::DanielPoole::ReactionKill, victim);
+
+ creature->CastSpell(nullptr, HookPoint::Spells::KulTirasArenaVOCooldownAura, CastSpellExtraArgsInit{
+ .TriggerFlags = TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR
+ });
+ }
+ }
+
+ void HandleReactionCheer(Player const* victim) const
+ {
+ if (!victim)
+ return;
+
+ Team const otherTeam = GetOtherTeam(victim->GetBGTeam());
+
+ battlegroundMap->DoOnPlayers([&](Player* player)
+ {
+ if (player->GetBGTeam() == otherTeam)
+ {
+ player->CastSpell(nullptr, HookPoint::Spells::KulTirasArenaCrowdCheers, CastSpellExtraArgsInit{
+ .TriggerFlags = TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR
+ });
+ }
+ });
+ }
+
+ void HandleReactionLowHealth(Player const* victim) const
+ {
+ if (!victim)
+ return;
+
+ Team const victimTeam = victim->GetBGTeam();
+ battlegroundMap->DoOnPlayers([&](Player* player)
+ {
+ if (player->GetBGTeam() == victimTeam)
+ {
+ player->CastSpell(nullptr, HookPoint::Spells::KulTirasArenaCrowdBoos, CastSpellExtraArgsInit{
+ .TriggerFlags = TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR
+ });
+ }
+ });
+
+ if (Creature* creature = battlegroundMap->GetCreature(_danielPooleGUID))
+ {
+ if (creature->HasAura(HookPoint::Spells::KulTirasArenaVOCooldownAura))
+ return;
+
+ creature->AI()->Talk(HookPoint::Texts::DanielPoole::ReactionLowHealth, victim);
+
+ creature->CastSpell(nullptr, HookPoint::Spells::KulTirasArenaVOCooldownAura, CastSpellExtraArgsInit{
+ .TriggerFlags = TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR
+ });
+ }
+ }
+
+private:
+ GuidVector _doorGUIDs;
+ GuidVector _bouncerGUIDs;
+ ObjectGuid _slideDoorGUID;
+ ObjectGuid _danielPooleGUID;
+ ObjectGuid _pennyGUID;
+
+ TaskScheduler _scheduler;
+};
+
+// 278775 - Arena Reaction Trigger - Low Health
+class spell_arena_reaction_trigger_low_health : public SpellScript
+{
+ bool Load() override
+ {
+ return GetCaster()->GetMapId() == HookPoint::MapIds::HookPoint;
+ }
+
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo({ HookPoint::Spells::ArenaLowHealthDyingTrigger });
+ }
+
+ void HandleHit(SpellEffIndex /*effIndex*/) const
+ {
+ Unit* target = GetHitUnit();
+ target->CastSpell(nullptr, HookPoint::Spells::ArenaLowHealthDyingTrigger, CastSpellExtraArgsInit{
+ .TriggerFlags = TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR
+ });
+
+ if (ZoneScript* zoneScript = target->FindZoneScript())
+ zoneScript->DoAction(HookPoint::Actions::ReactionCheer, GetCaster(), target);
+ }
+
+ void Register() override
+ {
+ OnEffectHitTarget += SpellEffectFn(spell_arena_reaction_trigger_low_health::HandleHit, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
+ }
+};
+
+// 278776 - Arena Reaction Trigger
+class spell_arena_reaction_trigger : public AuraScript
+{
+ bool Load() override
+ {
+ return GetOwner()->GetMapId() == HookPoint::MapIds::HookPoint;
+ }
+
+ void HandleProc(ProcEventInfo const& eventInfo) const
+ {
+ if (ZoneScript* zonescript = GetTarget()->FindZoneScript())
+ zonescript->DoAction(HookPoint::Actions::ReactionDead, eventInfo.GetActor(), eventInfo.GetProcTarget());
+ }
+
+ void Register() override
+ {
+ OnProc += AuraProcFn(spell_arena_reaction_trigger::HandleProc);
+ }
+};
+
+// 279047 - Arena Low Health Dying Trigger
+class spell_arena_low_health_dying_trigger : public AuraScript
+{
+ bool Load() override
+ {
+ return GetOwner()->GetMapId() == HookPoint::MapIds::HookPoint;
+ }
+
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo({HookPoint::Spells::ArenaLowHealthDyingTrigger });
+ }
+
+ void HandleRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) const
+ {
+ Unit* target = GetTarget();
+
+ if (ZoneScript* zoneScript = target->FindZoneScript())
+ zoneScript->DoAction(HookPoint::Actions::ReactionTrigger, GetCaster(), target);
+ }
+
+ void Register() override
+ {
+ AfterEffectRemove += AuraEffectRemoveFn(spell_arena_low_health_dying_trigger::HandleRemove, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY, AURA_EFFECT_HANDLE_REAL);
+ }
+};
+
+void AddSC_arena_hook_point()
+{
+ RegisterBattlegroundMapScript(arena_hook_point, HookPoint::MapIds::HookPoint);
+ RegisterSpellScript(spell_arena_reaction_trigger_low_health);
+ RegisterSpellScript(spell_arena_reaction_trigger);
+ RegisterSpellScript(spell_arena_low_health_dying_trigger);
+}
diff --git a/src/server/scripts/Battlegrounds/battlegrounds_script_loader.cpp b/src/server/scripts/Battlegrounds/battlegrounds_script_loader.cpp
index 1e84e622ffc..56a61a43c71 100644
--- a/src/server/scripts/Battlegrounds/battlegrounds_script_loader.cpp
+++ b/src/server/scripts/Battlegrounds/battlegrounds_script_loader.cpp
@@ -66,6 +66,7 @@ void AddSC_battleground_deephaul_ravine();
void AddSC_arena_blades_edge_legion();
void AddSC_arena_mugambala();
+void AddSC_arena_hook_point();
void AddSC_arena_the_robodrome();
void AddSC_arena_maldraxxus_coliseum();
@@ -126,6 +127,7 @@ void AddBattlegroundsScripts()
AddSC_arena_blades_edge_legion();
AddSC_arena_mugambala();
+ AddSC_arena_hook_point();
AddSC_arena_the_robodrome();
AddSC_arena_maldraxxus_coliseum();