diff options
-rw-r--r-- | sql/updates/world/master/2025_10_20_00_world.sql | 403 | ||||
-rw-r--r-- | src/common/Collision/BoundingIntervalHierarchyWrapper.h | 77 | ||||
-rw-r--r-- | src/common/Collision/DynamicTree.cpp | 4 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.h | 1 | ||||
-rw-r--r-- | src/server/game/Handlers/TokenHandler.cpp | 9 | ||||
-rw-r--r-- | src/server/game/Miscellaneous/SharedDefines.h | 21 | ||||
-rw-r--r-- | src/server/game/Server/Packets/TokenPackets.cpp | 6 | ||||
-rw-r--r-- | src/server/game/Server/Packets/TokenPackets.h | 8 | ||||
-rw-r--r-- | src/server/game/Server/Protocol/Opcodes.cpp | 52 | ||||
-rw-r--r-- | src/server/game/Server/Protocol/Opcodes.h | 3 | ||||
-rw-r--r-- | src/server/game/Server/WorldSession.cpp | 2 | ||||
-rw-r--r-- | src/server/scripts/Battlegrounds/HookPoint/arena_hook_point.cpp | 384 | ||||
-rw-r--r-- | src/server/scripts/Battlegrounds/battlegrounds_script_loader.cpp | 2 |
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(); |