Merge branch 'master' of github.com:TrinityCore/TrinityCore
Conflicts: src/server/game/DataStores/DBCStores.cpp src/server/game/DataStores/DBCfmt.h src/server/game/Server/Protocol/Opcodes.cpp
This commit is contained in:
@@ -0,0 +1,11 @@
|
|||||||
|
UPDATE `creature_template` SET `lootid`=0 WHERE `entry`=11054;
|
||||||
|
UPDATE `conditions` SET `SourceTypeOrReferenceId`=17 WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=47305 AND `ConditionTypeOrReference`=20;
|
||||||
|
UPDATE `conditions` SET `SourceTypeOrReferenceId`=18, `SourceEntry`=36732, `ConditionTypeOrReference`=24 WHERE `SourceTypeOrReferenceId`=13 AND `SourceEntry`=47305 AND `ConditionTypeOrReference`=18;
|
||||||
|
UPDATE `smart_scripts` SET `target_param1`=35 WHERE `entryorguid`=2275 AND `source_type`=0 AND `id`=0;
|
||||||
|
UPDATE `smart_scripts` SET `target_param1`=35 WHERE `entryorguid`=1806901 AND `source_type`=9 AND `id`=3;
|
||||||
|
|
||||||
|
DELETE FROM `db_script_string` WHERE `entry` IN (2000000102, 2000000103, 2000000104);
|
||||||
|
INSERT INTO `db_script_string` (`entry`, `content_default`, `content_loc1`, `content_loc2`, `content_loc3`, `content_loc4`, `content_loc5`, `content_loc6`, `content_loc7`, `content_loc8`) VALUES
|
||||||
|
(2000000102,'Oh, darn...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
|
||||||
|
(2000000103,'Ok, let''s get started!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
|
||||||
|
(2000000104,'... oops.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
UPDATE `achievement_reward` SET `item`=44810, `sender`=28951, `subject`='A Gobbler not yet Gobbled', `text` = 'Can you believe this Plump Turkey made it through November alive?$B$BSince all this friends have been served up on Bountiful Tables with sides of Cranberry Chutney and Spice Bread Stuffing and... ooo... I''m getting hungry. But anyhow! He''s all alone, now, so I was hoping you might be willing to take care of him. There simply isn''t enough room left in my shop!$B$BJust keep him away from cooking fires, please. He gets this strange look in his eyes around them...' WHERE `entry` IN (3478,3656); -- Pilgrim achievement (A/H)
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
-- Achievement: Turkey Lurkey
|
||||||
|
DELETE FROM `achievement_criteria_data` WHERE `type`=2 AND `criteria_id` IN (11158,11159,11160,11161,11162,11163,11164,11165);
|
||||||
|
INSERT INTO `achievement_criteria_data` (`criteria_id`, `type`, `value1`, `value2`) VALUES
|
||||||
|
(11158, 2, 4, 1), -- Human Rogue
|
||||||
|
(11159, 2, 4, 4), -- Night Elf Rogue
|
||||||
|
(11160, 2, 4, 2), -- Orc Rogue
|
||||||
|
(11161, 2, 4, 8), -- Troll Rogue
|
||||||
|
(11162, 2, 4, 5), -- Undead Rogue
|
||||||
|
(11163, 2, 4, 10), -- Blood Elf Rogue
|
||||||
|
(11164, 2, 4, 3), -- Dwarf Rogue
|
||||||
|
(11165, 2, 4, 7); -- Gnome Rogue
|
||||||
@@ -0,0 +1,145 @@
|
|||||||
|
-- Misc stuffz
|
||||||
|
UPDATE `npc_text` SET `WDBVerified`=12340 WHERE `ID`=14648; -- "A Bountiful Table is laid out..."
|
||||||
|
|
||||||
|
-- Template updates
|
||||||
|
UPDATE `creature_template` SET `faction_A`=714,`faction_H`=714,`baseattacktime`=2000,`npcflag`=3, `unit_flags`=33536 WHERE `entry`=34654; -- Bountiful Feast Hostess
|
||||||
|
UPDATE `creature_template` SET `faction_A`=714,`faction_H`=714,`baseattacktime`=2000,`unit_flags`=33536 WHERE `entry`=34678; -- Dokin Farplain
|
||||||
|
UPDATE `creature_template` SET `faction_A`=714,`faction_H`=714,`baseattacktime`=2000,`npcflag`=640,`unit_flags`=33536 WHERE `entry`=34684; -- Laha Farplain
|
||||||
|
UPDATE `creature_template` SET `faction_A`=714,`faction_H`=714,`baseattacktime`=2000,`npcflag`=640,`speed_run`=1 WHERE `entry`=35343; -- Bountiful Barrel
|
||||||
|
UPDATE `creature_template` SET `faction_A`=714,`faction_H`=714,`baseattacktime`=2000,`npcflag`=640,`unit_flags`=33536 WHERE `entry`=34685; -- Dalni Tallgrass
|
||||||
|
UPDATE `creature_template` SET `faction_A`=714,`faction_H`=714,`baseattacktime`=2000,`npcflag`=640,`speed_run`=1 WHERE `entry`=35342; -- Bountiful Barrel
|
||||||
|
UPDATE `creature_template` SET `faction_A`=714,`faction_H`=714,`baseattacktime`=2000,`npcflag`=83,`unit_flags`=33536 WHERE `entry`=34713; -- Ondani Greatmill
|
||||||
|
UPDATE `creature_template` SET `faction_A`=714,`faction_H`=714,`baseattacktime`=2000,`npcflag`=640,`unit_flags`=33536 WHERE `entry`=34787; -- John Rigsdale
|
||||||
|
UPDATE `creature_template` SET `faction_A`=714,`faction_H`=714,`baseattacktime`=2000,`npcflag`=83,`unit_flags`=33536 WHERE `entry`=34786; -- Alice Rigsdale
|
||||||
|
UPDATE `creature_template` SET `faction_A`=714,`faction_H`=714,`baseattacktime`=2000,`unit_flags`=33536 WHERE `entry`=34677; -- Miles Standish
|
||||||
|
UPDATE `creature_template` SET `faction_A`=714,`faction_H`=714,`baseattacktime`=2000,`npcflag`=83,`unit_flags`=33536 WHERE `entry`=34712; -- Roberta Carter
|
||||||
|
UPDATE `creature_template` SET `faction_A`=714,`faction_H`=714,`baseattacktime`=2000,`npcflag`=640,`unit_flags`=33536 WHERE `entry`=34683; -- Rose Standish
|
||||||
|
UPDATE `creature_template` SET `faction_A`=714,`faction_H`=714,`baseattacktime`=2000,`npcflag`=640,`speed_run`=1 WHERE `entry`=35341; -- Bountiful Barrel
|
||||||
|
|
||||||
|
UPDATE `creature_template` SET `baseattacktime`=2000,`npcflag`=16777216,`unit_flags`=16384,`speed_run`=1.57143,`VehicleId`=321 WHERE `entry`=34819; -- The Stuffing Chair
|
||||||
|
UPDATE `creature_template` SET `baseattacktime`=2000,`npcflag`=16777216,`unit_flags`=16384,`speed_run`=1.57143,`VehicleId`=321 WHERE `entry`=34824; -- The Sweet Potato Chair
|
||||||
|
UPDATE `creature_template` SET `baseattacktime`=2000,`npcflag`=16777216,`unit_flags`=16384,`speed_run`=1.57143,`VehicleId`=321 WHERE `entry`=34823; -- The Cranberry Chair
|
||||||
|
UPDATE `creature_template` SET `baseattacktime`=2000,`npcflag`=16777216,`unit_flags`=16384,`speed_run`=1.57143,`VehicleId`=321 WHERE `entry`=34812; -- The Turkey Chair
|
||||||
|
UPDATE `creature_template` SET `baseattacktime`=2000,`npcflag`=16777216,`unit_flags`=16384,`speed_run`=1.57143,`VehicleId`=321 WHERE `entry`=34822; -- The Pie Chair
|
||||||
|
|
||||||
|
UPDATE `creature_model_info` SET `bounding_radius`=0.8725,`combat_reach`=3.75,`gender`=1 WHERE `modelid`=29330; -- Bountiful Feast Hostess
|
||||||
|
UPDATE `creature_model_info` SET `bounding_radius`=0.9747,`combat_reach`=4.05,`gender`=0 WHERE `modelid`=29339; -- Dokin Farplain
|
||||||
|
UPDATE `creature_model_info` SET `bounding_radius`=1,`combat_reach`=0,`gender`=0 WHERE `modelid`=29775; -- Bountiful Barrel
|
||||||
|
UPDATE `creature_model_info` SET `bounding_radius`=0.8725,`combat_reach`=3.75,`gender`=1 WHERE `modelid`=29342; -- Laha Farplain
|
||||||
|
UPDATE `creature_model_info` SET `bounding_radius`=1.6,`combat_reach`=0,`gender`=2 WHERE `modelid`=29205; -- Chairs
|
||||||
|
UPDATE `creature_model_info` SET `bounding_radius`=0.8725,`combat_reach`=3.75,`gender`=1 WHERE `modelid`=29397; -- Dalni Tallgrass
|
||||||
|
UPDATE `creature_model_info` SET `bounding_radius`=0.8725,`combat_reach`=3.75,`gender`=1 WHERE `modelid`=29401; -- Ondani Greatmill
|
||||||
|
UPDATE `creature_model_info` SET `bounding_radius`=0.383,`combat_reach`=1.5,`gender`=0 WHERE `modelid`=29428; -- John Rigsdale
|
||||||
|
UPDATE `creature_model_info` SET `bounding_radius`=0.383,`combat_reach`=1.5,`gender`=1 WHERE `modelid`=29427; -- Alice Rigsdale
|
||||||
|
UPDATE `creature_model_info` SET `bounding_radius`=0.383,`combat_reach`=1.5,`gender`=0 WHERE `modelid`=29338; -- Miles Standish
|
||||||
|
UPDATE `creature_model_info` SET `bounding_radius`=0.383,`combat_reach`=1.5,`gender`=1 WHERE `modelid`=29365; -- Roberta Carter
|
||||||
|
UPDATE `creature_model_info` SET `bounding_radius`=0.383,`combat_reach`=1.5,`gender`=1 WHERE `modelid`=29340; -- Rose Standish
|
||||||
|
|
||||||
|
DELETE FROM `creature_template_addon` WHERE `entry` IN (34654,34678,35343,34684,34819,34824,34823,34812,34822,34685,35342,34713,34787,34786,34677,34712,34683,35341);
|
||||||
|
INSERT INTO `creature_template_addon` (`entry`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES
|
||||||
|
(34654,0,0,1,0, NULL), -- Bountiful Feast Hostess
|
||||||
|
(34678,0,0,2,0, NULL), -- Dokin Farplain
|
||||||
|
(35343,0,0,1,0, NULL), -- Bountiful Barrel (TB)
|
||||||
|
(34684,0,0,1,0, NULL), -- Laha Farplain
|
||||||
|
(34685,0,0,1,0, NULL), -- Dalni Tallgrass
|
||||||
|
(35342,0,0,1,0, NULL), -- Bountiful Barrel (OG)
|
||||||
|
(34713,0,0,2,0, NULL), -- Ondani Greatmill
|
||||||
|
(34787,0,0,1,0, NULL), -- John Rigsdale
|
||||||
|
(34786,0,0,2,0, NULL), -- Alice Rigsdale
|
||||||
|
(34677,0,0,2,0, NULL), -- Miles Standish
|
||||||
|
(34712,0,0,2,0, NULL), -- Roberta Carter
|
||||||
|
(34683,0,0,1,0, NULL), -- Rose Standish
|
||||||
|
(35341,0,0,1,0, NULL), -- Bountiful Barrel
|
||||||
|
(34819,0,0,1,0, '61795'), -- The Stuffing Chair (Stuffing Server)
|
||||||
|
(34824,0,0,1,0, '61797'), -- The Sweet Potato Chair (Sweet Potatoes Server)
|
||||||
|
(34823,0,0,1,0, '61793'), -- The Cranberry Chair (Cranberry Server)
|
||||||
|
(34812,0,0,1,0, '61796'), -- The Turkey Chair (Turkey Server)
|
||||||
|
(34822,0,0,1,0, '61794'); -- The Pie Chair (Pie Server)
|
||||||
|
|
||||||
|
-- Vehicles
|
||||||
|
DELETE FROM `npc_spellclick_spells` WHERE `npc_entry` IN (34819,34824,34823,34812,34822);
|
||||||
|
INSERT INTO `npc_spellclick_spells` (`npc_entry`, `spell_id`, `quest_start`, `quest_start_active`, `quest_end`, `cast_flags`, `aura_required`, `aura_forbidden`, `user_type`) VALUES
|
||||||
|
(34819, 65403, 0, 0, 0, 1, 0, 0, 0), -- The Stuffing Chair (Ride Vehicle)
|
||||||
|
(34824, 65403, 0, 0, 0, 1, 0, 0, 0), -- The Sweet Potato Chair (Ride Vehicle)
|
||||||
|
(34823, 65403, 0, 0, 0, 1, 0, 0, 0), -- The Cranberry Chair (Ride Vehicle)
|
||||||
|
(34812, 65403, 0, 0, 0, 1, 0, 0, 0), -- The Turkey Chair (Ride Vehicle)
|
||||||
|
(34822, 65403, 0, 0, 0, 1, 0, 0, 0); -- The Pie Chair (Ride Vehicle)
|
||||||
|
|
||||||
|
-- Gossips
|
||||||
|
UPDATE `creature_template` SET `gossip_menu_id`=10575 WHERE `entry`=34654; -- Bountiful Feast Hostess
|
||||||
|
DELETE FROM `gossip_menu` WHERE `entry`=10575 AND `text_id`=14633;
|
||||||
|
DELETE FROM `gossip_menu` WHERE `entry`=10589 AND `text_id`=14648;
|
||||||
|
INSERT INTO `gossip_menu` (`entry`, `text_id`) VALUES
|
||||||
|
(10575, 14633),
|
||||||
|
(10589, 14648);
|
||||||
|
|
||||||
|
DELETE FROM `gossip_menu_option` WHERE `menu_id`=10575 AND `id`=0;
|
||||||
|
INSERT INTO `gossip_menu_option` (`menu_id`, `id`, `option_icon`, `option_text`, `option_id`, `npc_option_npcflag`, `action_menu_id`, `action_poi_id`, `box_coded`, `box_money`, `box_text`) VALUES
|
||||||
|
(10575, 0, 0, 'How do the Bountiful Tables work?', 1, 1, 10589, 0, 0, 0, NULL);
|
||||||
|
|
||||||
|
-- Vendor tables
|
||||||
|
UPDATE `item_template` SET `BuyCount`=5 WHERE `entry` IN (44835,44853,46797,46793,46796); -- Autumnal Herbs, Honey, Mulgore Sweet Potato, Tangy Southfury Cranberries, Ripe Tirisfal Pumpkin
|
||||||
|
DELETE FROM `npc_vendor` WHERE `entry` IN (35343,34684,35342,34685,34787,35341,34683);
|
||||||
|
INSERT INTO `npc_vendor` (`entry`, `slot`, `item`, `maxcount`, `ExtendedCost`) VALUES
|
||||||
|
-- 35343 (Bountiful Barrel)
|
||||||
|
(35343, 1, 46810, 0, 0), -- Bountiful Cookbook
|
||||||
|
(35343, 2, 46797, 0, 0), -- Mulgore Sweet Potato
|
||||||
|
(35343, 3, 44835, 0, 0), -- Autumnal Herbs
|
||||||
|
(35343, 4, 44853, 0, 0), -- Honey
|
||||||
|
(35343, 5, 159, 0, 0), -- Refreshing Spring Water
|
||||||
|
(35343, 6, 2678, 0, 0), -- Mild Spices
|
||||||
|
(35343, 7, 30817, 0, 0), -- Simple Flour
|
||||||
|
(35343, 8, 46888, 0, 0), -- Bountiful Basket
|
||||||
|
-- 34684 (Laha Farplain)
|
||||||
|
(34684, 1, 46810, 0, 0), -- Bountiful Cookbook
|
||||||
|
(34684, 2, 46797, 0, 0), -- Mulgore Sweet Potato
|
||||||
|
(34684, 3, 44835, 0, 0), -- Autumnal Herbs
|
||||||
|
(34684, 4, 44853, 0, 0), -- Honey
|
||||||
|
(34684, 5, 159, 0, 0), -- Refreshing Spring Water
|
||||||
|
(34684, 6, 2678, 0, 0), -- Mild Spices
|
||||||
|
(34684, 7, 30817, 0, 0), -- Simple Flour
|
||||||
|
(34684, 8, 46888, 0, 0), -- Bountiful Basket
|
||||||
|
-- 35342 (Bountiful Barrel)
|
||||||
|
(35342, 1, 46810, 0, 0), -- Bountiful Cookbook
|
||||||
|
(35342, 2, 46793, 0, 0), -- Tangy Southfury Cranberries
|
||||||
|
(35342, 3, 44835, 0, 0), -- Autumnal Herbs
|
||||||
|
(35342, 4, 44853, 0, 0), -- Honey
|
||||||
|
(35342, 5, 159, 0, 0), -- Refreshing Spring Water
|
||||||
|
(35342, 6, 2678, 0, 0), -- Mild Spices
|
||||||
|
(35342, 7, 30817, 0, 0), -- Simple Flour
|
||||||
|
(35342, 8, 46888, 0, 0), -- Bountiful Basket
|
||||||
|
-- 34685 (Dalni Tallgrass)
|
||||||
|
(34685, 1, 46810, 0, 0), -- Bountiful Cookbook
|
||||||
|
(34685, 2, 46793, 0, 0), -- Tangy Southfury Cranberries
|
||||||
|
(34685, 3, 44835, 0, 0), -- Autumnal Herbs
|
||||||
|
(34685, 4, 44853, 0, 0), -- Honey
|
||||||
|
(34685, 5, 159, 0, 0), -- Refreshing Spring Water
|
||||||
|
(34685, 6, 2678, 0, 0), -- Mild Spices
|
||||||
|
(34685, 7, 30817, 0, 0), -- Simple Flour
|
||||||
|
(34685, 8, 46888, 0, 0), -- Bountiful Basket
|
||||||
|
-- 34787 (John Rigsdale)
|
||||||
|
(34787, 1, 46810, 0, 0), -- Bountiful Cookbook
|
||||||
|
(34787, 2, 44835, 0, 0), -- Autumnal Herbs
|
||||||
|
(34787, 3, 44853, 0, 0), -- Honey
|
||||||
|
(34787, 4, 159, 0, 0), -- Refreshing Spring Water
|
||||||
|
(34787, 5, 2678, 0, 0), -- Mild Spices
|
||||||
|
(34787, 6, 30817, 0, 0), -- Simple Flour
|
||||||
|
(34787, 7, 46888, 0, 0), -- Bountiful Basket
|
||||||
|
-- 35341 (Bountiful Barrel)
|
||||||
|
(35341, 1, 46810, 0, 0), -- Bountiful Cookbook
|
||||||
|
(35341, 2, 46796, 0, 0), -- Ripe Tirisfal Pumpkin
|
||||||
|
(35341, 3, 44835, 0, 0), -- Autumnal Herbs
|
||||||
|
(35341, 4, 44853, 0, 0), -- Honey
|
||||||
|
(35341, 5, 159, 0, 0), -- Refreshing Spring Water
|
||||||
|
(35341, 6, 2678, 0, 0), -- Mild Spices
|
||||||
|
(35341, 7, 30817, 0, 0), -- Simple Flour
|
||||||
|
(35341, 8, 46888, 0, 0), -- Bountiful Basket
|
||||||
|
-- 34683 (Rose Standish)
|
||||||
|
(34683, 1, 46810, 0, 0), -- Bountiful Cookbook
|
||||||
|
(34683, 2, 46796, 0, 0), -- Ripe Tirisfal Pumpkin
|
||||||
|
(34683, 3, 44835, 0, 0), -- Autumnal Herbs
|
||||||
|
(34683, 4, 44853, 0, 0), -- Honey
|
||||||
|
(34683, 5, 159, 0, 0), -- Refreshing Spring Water
|
||||||
|
(34683, 6, 2678, 0, 0), -- Mild Spices
|
||||||
|
(34683, 7, 30817, 0, 0), -- Simple Flour
|
||||||
|
(34683, 8, 46888, 0, 0); -- Bountiful Basket
|
||||||
@@ -0,0 +1,109 @@
|
|||||||
|
DELETE FROM `creature_template_addon` WHERE `entry` IN (32823,34645,34783,34682,35337,35338,35340,34711,34676,34708,34644,34744,34710,34675);
|
||||||
|
INSERT INTO `creature_template_addon` (`entry`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES
|
||||||
|
(32823,0,0,1,0, NULL), -- Bountiful Table
|
||||||
|
(34645,0,0,1,0, NULL), -- Elizabeth Barker Winslow
|
||||||
|
(34783,0,0,1,0, NULL), -- Ranisa Whitebough
|
||||||
|
(34682,0,0,1,0, NULL), -- Wilmina Holbeck
|
||||||
|
(35337,0,0,1,0, NULL), -- Bountiful Barrel
|
||||||
|
(35338,0,0,1,0, NULL), -- Bountiful Barrel
|
||||||
|
(35340,0,0,1,0, NULL), -- Bountiful Barrel
|
||||||
|
(34711,0,0,2,0, NULL), -- Mary Allerton
|
||||||
|
(34676,0,0,2,0, NULL), -- Isaac Allerton
|
||||||
|
(34708,0,0,2,0, NULL), -- Caitrin Ironkettle
|
||||||
|
(34644,0,0,2,0, NULL), -- Edward Winslow
|
||||||
|
(34744,0,0,1,0, NULL), -- Jasper Moore
|
||||||
|
(34710,0,0,1,0, NULL), -- Ellen Moore
|
||||||
|
(34675,0,0,2,0, NULL); -- Gregory Tabor
|
||||||
|
|
||||||
|
UPDATE `creature_template` SET `faction_A`=534,`faction_H`=534,`baseattacktime`=2000,`npcflag`=640,`unit_flags`=33536 WHERE `entry`=34783; -- Ranisa Whitebough
|
||||||
|
UPDATE `creature_template` SET `faction_A`=534,`faction_H`=534,`baseattacktime`=2000,`npcflag`=640,`unit_flags`=33536 WHERE `entry`=34645; -- Elizabeth Barker Winslow
|
||||||
|
UPDATE `creature_template` SET `faction_A`=534,`faction_H`=534,`baseattacktime`=2000,`npcflag`=640,`unit_flags`=33536 WHERE `entry`=34681; -- Ikaneba Summerset
|
||||||
|
UPDATE `creature_template` SET `faction_A`=534,`faction_H`=534,`baseattacktime`=2000,`npcflag`=640,`unit_flags`=33536 WHERE `entry`=34682; -- Wilmina Holbeck
|
||||||
|
UPDATE `creature_template` SET `faction_A`=534,`faction_H`=534,`baseattacktime`=2000,`npcflag`=640,`speed_run`=1 WHERE `entry`=35337; -- Bountiful Barrel
|
||||||
|
UPDATE `creature_template` SET `faction_A`=534,`faction_H`=534,`baseattacktime`=2000,`npcflag`=640,`speed_run`=1 WHERE `entry`=35338; -- Bountiful Barrel
|
||||||
|
UPDATE `creature_template` SET `faction_A`=534,`faction_H`=534,`baseattacktime`=2000,`npcflag`=640,`speed_run`=1 WHERE `entry`=35340; -- Bountiful Barrel
|
||||||
|
UPDATE `creature_template` SET `faction_A`=534,`faction_H`=534,`baseattacktime`=2000,`npcflag`=83,`unit_flags`=33536 WHERE `entry`=34711; -- Mary Allerton
|
||||||
|
UPDATE `creature_template` SET `faction_A`=534,`faction_H`=534,`baseattacktime`=2000,`unit_flags`=33536 WHERE `entry`=34676; -- Isaac Allerton
|
||||||
|
UPDATE `creature_template` SET `faction_A`=534,`faction_H`=534,`baseattacktime`=2000,`npcflag`=83,`unit_flags`=33536 WHERE `entry`=34708; -- Caitrin Ironkettle
|
||||||
|
UPDATE `creature_template` SET `faction_A`=534,`faction_H`=534,`baseattacktime`=2000,`unit_flags`=33536 WHERE `entry`=34644; -- Edward Winslow
|
||||||
|
UPDATE `creature_template` SET `faction_A`=534,`faction_H`=534,`baseattacktime`=2000,`npcflag`=3,`unit_flags`=33536 WHERE `entry`=34744; -- Jasper Moore
|
||||||
|
UPDATE `creature_template` SET `faction_A`=534,`faction_H`=534,`baseattacktime`=2000,`npcflag`=83,`unit_flags`=33536 WHERE `entry`=34710; -- Ellen Moore
|
||||||
|
UPDATE `creature_template` SET `faction_A`=534,`faction_H`=534,`baseattacktime`=2000,`unit_flags`=33536 WHERE `entry`=34675; -- Gregory Tabor
|
||||||
|
|
||||||
|
UPDATE `creature_model_info` SET `bounding_radius`=0.208,`combat_reach`=1.5,`gender`=1 WHERE `modelid`=29394; -- Elizabeth Barker Winslow
|
||||||
|
UPDATE `creature_model_info` SET `bounding_radius`=0.306,`combat_reach`=1.5,`gender`=1 WHERE `modelid`=29430; -- Ranisa Whitebough
|
||||||
|
UPDATE `creature_model_info` SET `bounding_radius`=0.208,`combat_reach`=1.5,`gender`=1 WHERE `modelid`=29393; -- Ikaneba Summerset
|
||||||
|
UPDATE `creature_model_info` SET `bounding_radius`=0.208,`combat_reach`=1.5,`gender`=1 WHERE `modelid`=29329; -- Wilmina Holbeck
|
||||||
|
UPDATE `creature_model_info` SET `bounding_radius`=0.208,`combat_reach`=1.5,`gender`=1 WHERE `modelid`=29388; -- Mary Allerton
|
||||||
|
UPDATE `creature_model_info` SET `bounding_radius`=0.306,`combat_reach`=1.5,`gender`=0 WHERE `modelid`=29391; -- Isaac Allerton
|
||||||
|
UPDATE `creature_model_info` SET `bounding_radius`=0.347,`combat_reach`=1.5,`gender`=1 WHERE `modelid`=29324; -- Caitrin Ironkettle
|
||||||
|
UPDATE `creature_model_info` SET `bounding_radius`=0.306,`combat_reach`=1.5,`gender`=0 WHERE `modelid`=29392; -- Edward Winslow
|
||||||
|
UPDATE `creature_model_info` SET `bounding_radius`=0.306,`combat_reach`=1.5,`gender`=0 WHERE `modelid`=29444; -- Jasper Moore
|
||||||
|
UPDATE `creature_model_info` SET `bounding_radius`=0.208,`combat_reach`=1.5,`gender`=1 WHERE `modelid`=29400; -- Ellen Moore
|
||||||
|
UPDATE `creature_model_info` SET `bounding_radius`=0.306,`combat_reach`=1.5,`gender`=0 WHERE `modelid`=29337; -- Gregory Tabor
|
||||||
|
|
||||||
|
UPDATE `item_template` SET `BuyCount`=5 WHERE `entry` IN (44854,46784,44855);
|
||||||
|
DELETE FROM `npc_vendor` WHERE `entry` IN (34645, 34783, 35337, 35338, 35340, 34681, 34682);
|
||||||
|
INSERT INTO `npc_vendor` (`entry`, `slot`, `item`, `maxcount`, `ExtendedCost`) VALUES
|
||||||
|
-- 34645 (Elizabeth Barker Winslow)
|
||||||
|
(34645, 1, 46809, 0, 0), -- Bountiful Cookbook
|
||||||
|
(34645, 2, 44854, 0, 0), -- Tangy Wetland Cranberries
|
||||||
|
(34645, 3, 44835, 0, 0), -- Autumnal Herbs
|
||||||
|
(34645, 4, 44853, 0, 0), -- Honey
|
||||||
|
(34645, 5, 159, 0, 0), -- Refreshing Spring Water
|
||||||
|
(34645, 6, 2678, 0, 0), -- Mild Spices
|
||||||
|
(34645, 7, 30817, 0, 0), -- Simple Flour
|
||||||
|
(34645, 8, 46888, 0, 0), -- Bountiful Basket
|
||||||
|
-- 34783 (Ranisa Whitebough)
|
||||||
|
(34783, 1, 46809, 0, 0), -- Bountiful Cookbook
|
||||||
|
(34783, 2, 44835, 0, 0), -- Autumnal Herbs
|
||||||
|
(34783, 3, 44853, 0, 0), -- Honey
|
||||||
|
(34783, 4, 159, 0, 0), -- Refreshing Spring Water
|
||||||
|
(34783, 5, 2678, 0, 0), -- Mild Spices
|
||||||
|
(34783, 6, 30817, 0, 0), -- Simple Flour
|
||||||
|
(34783, 7, 46888, 0, 0), -- Bountiful Basket
|
||||||
|
-- 35337 (Bountiful Barrel)
|
||||||
|
(35337, 1, 46809, 0, 0), -- Bountiful Cookbook
|
||||||
|
(35337, 2, 46784, 0, 0), -- Ripe Elwynn Pumpkin
|
||||||
|
(35337, 3, 44835, 0, 0), -- Autumnal Herbs
|
||||||
|
(35337, 4, 44853, 0, 0), -- Honey
|
||||||
|
(35337, 5, 159, 0, 0), -- Refreshing Spring Water
|
||||||
|
(35337, 6, 2678, 0, 0), -- Mild Spices
|
||||||
|
(35337, 7, 30817, 0, 0), -- Simple Flour
|
||||||
|
(35337, 8, 46888, 0, 0), -- Bountiful Basket
|
||||||
|
-- 35338 (Bountiful Barrel)
|
||||||
|
(35338, 1, 46809, 0, 0), -- Bountiful Cookbook
|
||||||
|
(35338, 2, 44855, 0, 0), -- Teldrassil Sweet Potato
|
||||||
|
(35338, 3, 44835, 0, 0), -- Autumnal Herbs
|
||||||
|
(35338, 4, 44853, 0, 0), -- Honey
|
||||||
|
(35338, 5, 159, 0, 0), -- Refreshing Spring Water
|
||||||
|
(35338, 6, 2678, 0, 0), -- Mild Spices
|
||||||
|
(35338, 7, 30817, 0, 0), -- Simple Flour
|
||||||
|
(35338, 8, 46888, 0, 0), -- Bountiful Basket
|
||||||
|
-- 35340 (Bountiful Barrel)
|
||||||
|
(35340, 1, 46809, 0, 0), -- Bountiful Cookbook
|
||||||
|
(35340, 2, 44854, 0, 0), -- Tangy Wetland Cranberries
|
||||||
|
(35340, 3, 44835, 0, 0), -- Autumnal Herbs
|
||||||
|
(35340, 4, 44853, 0, 0), -- Honey
|
||||||
|
(35340, 5, 159, 0, 0), -- Refreshing Spring Water
|
||||||
|
(35340, 6, 2678, 0, 0), -- Mild Spices
|
||||||
|
(35340, 7, 30817, 0, 0), -- Simple Flour
|
||||||
|
(35340, 8, 46888, 0, 0), -- Bountiful Basket
|
||||||
|
-- 34681 (Ikaneba Summerset)
|
||||||
|
(34681, 1, 46809, 0, 0), -- Bountiful Cookbook
|
||||||
|
(34681, 2, 44855, 0, 0), -- Teldrassil Sweet Potato
|
||||||
|
(34681, 3, 44835, 0, 0), -- Autumnal Herbs
|
||||||
|
(34681, 4, 44853, 0, 0), -- Honey
|
||||||
|
(34681, 5, 159, 0, 0), -- Refreshing Spring Water
|
||||||
|
(34681, 6, 2678, 0, 0), -- Mild Spices
|
||||||
|
(34681, 7, 30817, 0, 0), -- Simple Flour
|
||||||
|
(34681, 8, 46888, 0, 0), -- Bountiful Basket
|
||||||
|
-- 34682 (Wilmina Holbeck)
|
||||||
|
(34682, 1, 46809, 0, 0), -- Bountiful Cookbook
|
||||||
|
(34682, 2, 46784, 0, 0), -- Ripe Elwynn Pumpkin
|
||||||
|
(34682, 3, 44835, 0, 0), -- Autumnal Herbs
|
||||||
|
(34682, 4, 44853, 0, 0), -- Honey
|
||||||
|
(34682, 5, 159, 0, 0), -- Refreshing Spring Water
|
||||||
|
(34682, 6, 2678, 0, 0), -- Mild Spices
|
||||||
|
(34682, 7, 30817, 0, 0), -- Simple Flour
|
||||||
|
(34682, 8, 46888, 0, 0); -- Bountiful Basket
|
||||||
@@ -0,0 +1,52 @@
|
|||||||
|
UPDATE `creature_template` SET `unit_flags`=33555200,`VehicleId`=323 WHERE `entry`=32830; -- Food Holder
|
||||||
|
UPDATE `creature_template` SET `unit_flags`=33555200,`VehicleId`=325 WHERE `entry`=32840; -- Plate Holder
|
||||||
|
UPDATE `creature_template` SET `unit_flags`=33554432,`speed_run`=1,`VehicleId`=320 WHERE `entry`=32823; -- Bountiful Table
|
||||||
|
UPDATE `creature_template` SET `unit_flags`=33554432,`speed_run`=1 WHERE `entry`=32839; -- Sturdy Plate
|
||||||
|
UPDATE `creature_template` SET `unit_flags`=33554432 WHERE `entry`=32824; -- [PH] Pilgrim's Bounty Table - Turkey
|
||||||
|
UPDATE `creature_template` SET `unit_flags`=33554432 WHERE `entry`=32827; -- [PH] Pilgrim's Bounty Table - Cranberry Sauce
|
||||||
|
UPDATE `creature_template` SET `unit_flags`=33554432 WHERE `entry`=32831; -- [PH] Pilgrim's Bounty Table - Stuffing
|
||||||
|
UPDATE `creature_template` SET `unit_flags`=33554432 WHERE `entry`=32825; -- [PH] Pilgrim's Bounty Table - Yams
|
||||||
|
UPDATE `creature_template` SET `unit_flags`=33554432 WHERE `entry`=32829; -- [PH] Pilgrim's Bounty Table - Pie
|
||||||
|
|
||||||
|
UPDATE `creature_model_info` SET `bounding_radius`=1.8,`combat_reach`=0,`gender`=2 WHERE `modelid`=28293; -- Bountiful Table
|
||||||
|
UPDATE `creature_model_info` SET `bounding_radius`=1.75,`combat_reach`=0,`gender`=2 WHERE `modelid`=28310; -- Sturdy Plate
|
||||||
|
UPDATE `creature_model_info` SET `bounding_radius`=0.125,`combat_reach`=0.25,`gender`=2 WHERE `modelid`=17188; -- [PH] Pilgrim's Bounty Table - X
|
||||||
|
|
||||||
|
DELETE FROM `creature_template_addon` WHERE `entry` IN (32830,32840,32839,32824,32827,32831,32829,32825);
|
||||||
|
INSERT INTO `creature_template_addon` (`entry`,`mount`,`bytes1`,`bytes2`,`emote`,`auras`) VALUES
|
||||||
|
(32830,0,0,1,0, NULL), -- Food Holder
|
||||||
|
(32840,0,0,1,0, NULL), -- Plate Holder
|
||||||
|
(32839,0,0,1,0, NULL), -- Sturdy Plate
|
||||||
|
(32824,0,0,1,0, NULL), -- [PH] Pilgrim's Bounty Table - Turkey
|
||||||
|
(32827,0,0,1,0, NULL), -- [PH] Pilgrim's Bounty Table - Cranberry Sauce
|
||||||
|
(32831,0,0,1,0, NULL), -- [PH] Pilgrim's Bounty Table - Stuffing
|
||||||
|
(32825,0,0,1,0, NULL), -- [PH] Pilgrim's Bounty Table - Yams
|
||||||
|
(32829,0,0,1,0, NULL); -- [PH] Pilgrim's Bounty Table - Pie
|
||||||
|
|
||||||
|
DELETE FROM `npc_spellclick_spells` WHERE `npc_entry` IN (32823,32830,32840);
|
||||||
|
INSERT INTO `npc_spellclick_spells` (`npc_entry`, `spell_id`, `quest_start`, `quest_start_active`, `quest_end`, `cast_flags`, `aura_required`, `aura_forbidden`, `user_type`) VALUES
|
||||||
|
(32823, 46598, 0, 0, 0, 1, 0, 0, 0), -- Bountiful Table (Ride Vehicle Hardcoded)
|
||||||
|
(32830, 46598, 0, 0, 0, 1, 0, 0, 0), -- Food Holder (Ride Vehicle Hardcoded)
|
||||||
|
(32840, 46598, 0, 0, 0, 1, 0, 0, 0); -- Plate Holder (Ride Vehicle Hardcoded)
|
||||||
|
|
||||||
|
DELETE FROM `vehicle_template_accessory` WHERE `entry` IN (32823,32830,32840);
|
||||||
|
INSERT INTO `vehicle_template_accessory` (`entry`, `accessory_entry`, `seat_id`, `minion`, `description`, `summontype`, `summontimer`) VALUES
|
||||||
|
(32823, 34812, 0, 1, 'Bountiful Table - The Turkey Chair', 8, 0),
|
||||||
|
(32823, 34823, 1, 1, 'Bountiful Table - The Cranberry Chair', 8, 0),
|
||||||
|
(32823, 34819, 2, 1, 'Bountiful Table - The Stuffing Chair', 8, 0),
|
||||||
|
(32823, 34824, 3, 1, 'Bountiful Table - The Sweet Potato Chair', 8, 0),
|
||||||
|
(32823, 34822, 4, 1, 'Bountiful Table - The Pie Chair', 8, 0),
|
||||||
|
(32823, 32830, 5, 1, 'Bountiful Table - Food Holder', 8, 0),
|
||||||
|
(32823, 32840, 6, 1, 'Bountiful Table - Plate Holder', 8, 0),
|
||||||
|
--
|
||||||
|
(32830, 32824, 0, 1, 'Food Holder - [PH] Pilgrim''s Bounty Table - Turkey', 8, 0),
|
||||||
|
(32830, 32827, 1, 1, 'Food Holder - [PH] Pilgrim''s Bounty Table - Cranberry Sauce', 8, 0),
|
||||||
|
(32830, 32831, 2, 1, 'Food Holder - [PH] Pilgrim''s Bounty Table - Stuffing', 8, 0),
|
||||||
|
(32830, 32825, 3, 1, 'Food Holder - [PH] Pilgrim''s Bounty Table - Yams', 8, 0),
|
||||||
|
(32830, 32829, 4, 1, 'Food Holder - [PH] Pilgrim''s Bounty Table - Pie', 8, 0),
|
||||||
|
--
|
||||||
|
(32840, 32839, 0, 1, 'Plate Holder - Sturdy Plate', 8, 0),
|
||||||
|
(32840, 32839, 1, 1, 'Plate Holder - Sturdy Plate', 8, 0),
|
||||||
|
(32840, 32839, 2, 1, 'Plate Holder - Sturdy Plate', 8, 0),
|
||||||
|
(32840, 32839, 3, 1, 'Plate Holder - Sturdy Plate', 8, 0),
|
||||||
|
(32840, 32839, 4, 1, 'Plate Holder - Sturdy Plate', 8, 0);
|
||||||
@@ -500,10 +500,10 @@ namespace VMAP
|
|||||||
{
|
{
|
||||||
model.setGroupModels(groupsArray);
|
model.setGroupModels(groupsArray);
|
||||||
|
|
||||||
std::string filename(iSrcDir);
|
std::string worldModelFileName(iSrcDir);
|
||||||
filename.push_back('/');
|
worldModelFileName.push_back('/');
|
||||||
filename.append(pModelFilename).append(".vmo");
|
worldModelFileName.append(pModelFilename).append(".vmo");
|
||||||
success = model.writeFile(filename);
|
success = model.writeFile(worldModelFileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
//std::cout << "readRawFile2: '" << pModelFilename << "' tris: " << nElements << " nodes: " << nNodes << std::endl;
|
//std::cout << "readRawFile2: '" << pModelFilename << "' tris: " << nElements << " nodes: " << nNodes << std::endl;
|
||||||
|
|||||||
@@ -59,8 +59,8 @@ void CreatureAI::DoZoneInCombat(Creature* creature /*= NULL*/, float maxRangeToN
|
|||||||
|
|
||||||
if (!creature->HasReactState(REACT_PASSIVE) && !creature->getVictim())
|
if (!creature->HasReactState(REACT_PASSIVE) && !creature->getVictim())
|
||||||
{
|
{
|
||||||
if (Unit* target = creature->SelectNearestTarget(maxRangeToNearestTarget))
|
if (Unit* nearTarget = creature->SelectNearestTarget(maxRangeToNearestTarget))
|
||||||
creature->AI()->AttackStart(target);
|
creature->AI()->AttackStart(nearTarget);
|
||||||
else if (creature->isSummon())
|
else if (creature->isSummon())
|
||||||
{
|
{
|
||||||
if (Unit* summoner = creature->ToTempSummon()->GetSummoner())
|
if (Unit* summoner = creature->ToTempSummon()->GetSummoner())
|
||||||
|
|||||||
@@ -1490,9 +1490,9 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
|
|||||||
if (IsSmart(target))
|
if (IsSmart(target))
|
||||||
CAST_AI(SmartAI, target->AI())->SetScript9(e, e.action.timedActionList.id, GetLastInvoker());
|
CAST_AI(SmartAI, target->AI())->SetScript9(e, e.action.timedActionList.id, GetLastInvoker());
|
||||||
}
|
}
|
||||||
else if (GameObject* target = (*itr)->ToGameObject())
|
else if (GameObject* goTarget = (*itr)->ToGameObject())
|
||||||
{
|
{
|
||||||
if (IsSmartGO(target))
|
if (IsSmartGO(goTarget))
|
||||||
CAST_AI(SmartGameObjectAI, target->AI())->SetScript9(e, e.action.timedActionList.id, GetLastInvoker());
|
CAST_AI(SmartGameObjectAI, target->AI())->SetScript9(e, e.action.timedActionList.id, GetLastInvoker());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1607,9 +1607,9 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
|
|||||||
if (IsSmart(target))
|
if (IsSmart(target))
|
||||||
CAST_AI(SmartAI, target->AI())->SetScript9(e, id, GetLastInvoker());
|
CAST_AI(SmartAI, target->AI())->SetScript9(e, id, GetLastInvoker());
|
||||||
}
|
}
|
||||||
else if (GameObject* target = (*itr)->ToGameObject())
|
else if (GameObject* goTarget = (*itr)->ToGameObject())
|
||||||
{
|
{
|
||||||
if (IsSmartGO(target))
|
if (IsSmartGO(goTarget))
|
||||||
CAST_AI(SmartGameObjectAI, target->AI())->SetScript9(e, id, GetLastInvoker());
|
CAST_AI(SmartGameObjectAI, target->AI())->SetScript9(e, id, GetLastInvoker());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1637,9 +1637,9 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
|
|||||||
if (IsSmart(target))
|
if (IsSmart(target))
|
||||||
CAST_AI(SmartAI, target->AI())->SetScript9(e, id, GetLastInvoker());
|
CAST_AI(SmartAI, target->AI())->SetScript9(e, id, GetLastInvoker());
|
||||||
}
|
}
|
||||||
else if (GameObject* target = (*itr)->ToGameObject())
|
else if (GameObject* goTarget = (*itr)->ToGameObject())
|
||||||
{
|
{
|
||||||
if (IsSmartGO(target))
|
if (IsSmartGO(goTarget))
|
||||||
CAST_AI(SmartGameObjectAI, target->AI())->SetScript9(e, id, GetLastInvoker());
|
CAST_AI(SmartGameObjectAI, target->AI())->SetScript9(e, id, GetLastInvoker());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2298,10 +2298,10 @@ void SmartScript::ProcessEvent(SmartScriptHolder& e, Unit* unit, uint32 var0, ui
|
|||||||
if (!me || !me->isInCombat())
|
if (!me || !me->isInCombat())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Unit* unit = DoSelectLowestHpFriendly((float)e.event.friendlyHealt.radius, e.event.friendlyHealt.hpDeficit);
|
Unit* target = DoSelectLowestHpFriendly((float)e.event.friendlyHealt.radius, e.event.friendlyHealt.hpDeficit);
|
||||||
if (!unit)
|
if (!target)
|
||||||
return;
|
return;
|
||||||
ProcessAction(e, unit);
|
ProcessAction(e, target);
|
||||||
RecalcTimer(e, e.event.friendlyHealt.repeatMin, e.event.friendlyHealt.repeatMax);
|
RecalcTimer(e, e.event.friendlyHealt.repeatMin, e.event.friendlyHealt.repeatMax);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1759,12 +1759,12 @@ void Battleground::HandleKillPlayer(Player* player, Player* killer)
|
|||||||
|
|
||||||
for (BattlegroundPlayerMap::const_iterator itr = m_Players.begin(); itr != m_Players.end(); ++itr)
|
for (BattlegroundPlayerMap::const_iterator itr = m_Players.begin(); itr != m_Players.end(); ++itr)
|
||||||
{
|
{
|
||||||
Player* player = ObjectAccessor::FindPlayer(itr->first);
|
Player* creditedPlayer = ObjectAccessor::FindPlayer(itr->first);
|
||||||
if (!player || player == killer)
|
if (!creditedPlayer || creditedPlayer == killer)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (player->GetTeam() == killer->GetTeam() && player->IsAtGroupRewardDistance(player))
|
if (creditedPlayer->GetTeam() == killer->GetTeam() && creditedPlayer->IsAtGroupRewardDistance(player))
|
||||||
UpdatePlayerScore(player, SCORE_HONORABLE_KILLS, 1);
|
UpdatePlayerScore(creditedPlayer, SCORE_HONORABLE_KILLS, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -918,15 +918,15 @@ void BattlegroundQueue::BattlegroundQueueUpdate(uint32 diff, BattlegroundTypeId
|
|||||||
for (uint8 i = BG_QUEUE_PREMADE_ALLIANCE; i < BG_QUEUE_NORMAL_ALLIANCE; i++)
|
for (uint8 i = BG_QUEUE_PREMADE_ALLIANCE; i < BG_QUEUE_NORMAL_ALLIANCE; i++)
|
||||||
{
|
{
|
||||||
// take the group that joined first
|
// take the group that joined first
|
||||||
GroupsQueueType::iterator itr = m_QueuedGroups[bracket_id][i].begin();
|
GroupsQueueType::iterator itr2 = m_QueuedGroups[bracket_id][i].begin();
|
||||||
for (; itr != m_QueuedGroups[bracket_id][i].end(); ++itr)
|
for (; itr2 != m_QueuedGroups[bracket_id][i].end(); ++itr2)
|
||||||
{
|
{
|
||||||
// if group match conditions, then add it to pool
|
// if group match conditions, then add it to pool
|
||||||
if (!(*itr)->IsInvitedToBGInstanceGUID
|
if (!(*itr2)->IsInvitedToBGInstanceGUID
|
||||||
&& (((*itr)->ArenaMatchmakerRating >= arenaMinRating && (*itr)->ArenaMatchmakerRating <= arenaMaxRating)
|
&& (((*itr2)->ArenaMatchmakerRating >= arenaMinRating && (*itr2)->ArenaMatchmakerRating <= arenaMaxRating)
|
||||||
|| (*itr)->JoinTime < discardTime))
|
|| (*itr2)->JoinTime < discardTime))
|
||||||
{
|
{
|
||||||
itr_teams[found++] = itr;
|
itr_teams[found++] = itr2;
|
||||||
team = i;
|
team = i;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -938,14 +938,14 @@ void BattlegroundQueue::BattlegroundQueueUpdate(uint32 diff, BattlegroundTypeId
|
|||||||
|
|
||||||
if (found == 1)
|
if (found == 1)
|
||||||
{
|
{
|
||||||
for (GroupsQueueType::iterator itr = itr_teams[0]; itr != m_QueuedGroups[bracket_id][team].end(); ++itr)
|
for (GroupsQueueType::iterator itr3 = itr_teams[0]; itr3 != m_QueuedGroups[bracket_id][team].end(); ++itr3)
|
||||||
{
|
{
|
||||||
if (!(*itr)->IsInvitedToBGInstanceGUID
|
if (!(*itr3)->IsInvitedToBGInstanceGUID
|
||||||
&& (((*itr)->ArenaMatchmakerRating >= arenaMinRating && (*itr)->ArenaMatchmakerRating <= arenaMaxRating)
|
&& (((*itr3)->ArenaMatchmakerRating >= arenaMinRating && (*itr3)->ArenaMatchmakerRating <= arenaMaxRating)
|
||||||
|| (*itr)->JoinTime < discardTime)
|
|| (*itr3)->JoinTime < discardTime)
|
||||||
&& (*itr_teams[0])->ArenaTeamId != (*itr)->ArenaTeamId)
|
&& (*itr_teams[0])->ArenaTeamId != (*itr3)->ArenaTeamId)
|
||||||
{
|
{
|
||||||
itr_teams[found++] = itr;
|
itr_teams[found++] = itr3;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1348,23 +1348,23 @@ bool BattlegroundAV::SetupBattleground()
|
|||||||
|
|
||||||
//creatures
|
//creatures
|
||||||
sLog->outDebug(LOG_FILTER_BATTLEGROUND, "BG_AV start poputlating nodes");
|
sLog->outDebug(LOG_FILTER_BATTLEGROUND, "BG_AV start poputlating nodes");
|
||||||
for (BG_AV_Nodes i = BG_AV_NODES_FIRSTAID_STATION; i < BG_AV_NODES_MAX; ++i)
|
for (i = BG_AV_NODES_FIRSTAID_STATION; i < BG_AV_NODES_MAX; ++i)
|
||||||
{
|
{
|
||||||
if (m_Nodes[i].Owner)
|
if (m_Nodes[i].Owner)
|
||||||
PopulateNode(i);
|
PopulateNode(BG_AV_Nodes(i));
|
||||||
}
|
}
|
||||||
//all creatures which don't get despawned through the script are static
|
//all creatures which don't get despawned through the script are static
|
||||||
sLog->outDebug(LOG_FILTER_BATTLEGROUND, "BG_AV: start spawning static creatures");
|
sLog->outDebug(LOG_FILTER_BATTLEGROUND, "BG_AV: start spawning static creatures");
|
||||||
for (i=0; i < AV_STATICCPLACE_MAX; i++)
|
for (i = 0; i < AV_STATICCPLACE_MAX; i++)
|
||||||
AddAVCreature(0, i+AV_CPLACE_MAX);
|
AddAVCreature(0, i + AV_CPLACE_MAX);
|
||||||
//mainspiritguides:
|
//mainspiritguides:
|
||||||
sLog->outDebug(LOG_FILTER_BATTLEGROUND, "BG_AV: start spawning spiritguides creatures");
|
sLog->outDebug(LOG_FILTER_BATTLEGROUND, "BG_AV: start spawning spiritguides creatures");
|
||||||
AddSpiritGuide(7, BG_AV_CreaturePos[7][0], BG_AV_CreaturePos[7][1], BG_AV_CreaturePos[7][2], BG_AV_CreaturePos[7][3], ALLIANCE);
|
AddSpiritGuide(7, BG_AV_CreaturePos[7][0], BG_AV_CreaturePos[7][1], BG_AV_CreaturePos[7][2], BG_AV_CreaturePos[7][3], ALLIANCE);
|
||||||
AddSpiritGuide(8, BG_AV_CreaturePos[8][0], BG_AV_CreaturePos[8][1], BG_AV_CreaturePos[8][2], BG_AV_CreaturePos[8][3], HORDE);
|
AddSpiritGuide(8, BG_AV_CreaturePos[8][0], BG_AV_CreaturePos[8][1], BG_AV_CreaturePos[8][2], BG_AV_CreaturePos[8][3], HORDE);
|
||||||
//spawn the marshals (those who get deleted, if a tower gets destroyed)
|
//spawn the marshals (those who get deleted, if a tower gets destroyed)
|
||||||
sLog->outDebug(LOG_FILTER_BATTLEGROUND, "BG_AV: start spawning marshal creatures");
|
sLog->outDebug(LOG_FILTER_BATTLEGROUND, "BG_AV: start spawning marshal creatures");
|
||||||
for (i=AV_NPC_A_MARSHAL_SOUTH; i <= AV_NPC_H_MARSHAL_WTOWER; i++)
|
for (i = AV_NPC_A_MARSHAL_SOUTH; i <= AV_NPC_H_MARSHAL_WTOWER; i++)
|
||||||
AddAVCreature(i, AV_CPLACE_A_MARSHAL_SOUTH+(i-AV_NPC_A_MARSHAL_SOUTH));
|
AddAVCreature(i, AV_CPLACE_A_MARSHAL_SOUTH + (i - AV_NPC_A_MARSHAL_SOUTH));
|
||||||
AddAVCreature(AV_NPC_HERALD, AV_CPLACE_HERALD);
|
AddAVCreature(AV_NPC_HERALD, AV_CPLACE_HERALD);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -85,7 +85,7 @@ Channel::Channel(const std::string& name, uint32 channel_id, uint32 Team)
|
|||||||
}
|
}
|
||||||
else // save
|
else // save
|
||||||
{
|
{
|
||||||
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_ADD_CHANNEL);
|
stmt = CharacterDatabase.GetPreparedStatement(CHAR_ADD_CHANNEL);
|
||||||
stmt->setString(0, name);
|
stmt->setString(0, name);
|
||||||
stmt->setUInt32(1, m_Team);
|
stmt->setUInt32(1, m_Team);
|
||||||
CharacterDatabase.Execute(stmt);
|
CharacterDatabase.Execute(stmt);
|
||||||
@@ -563,12 +563,12 @@ void Channel::List(Player* player)
|
|||||||
uint32 count = 0;
|
uint32 count = 0;
|
||||||
for (PlayerList::const_iterator i = players.begin(); i != players.end(); ++i)
|
for (PlayerList::const_iterator i = players.begin(); i != players.end(); ++i)
|
||||||
{
|
{
|
||||||
Player* player = ObjectAccessor::FindPlayer(i->first);
|
Player* member = ObjectAccessor::FindPlayer(i->first);
|
||||||
|
|
||||||
// PLAYER can't see MODERATOR, GAME MASTER, ADMINISTRATOR characters
|
// PLAYER can't see MODERATOR, GAME MASTER, ADMINISTRATOR characters
|
||||||
// MODERATOR, GAME MASTER, ADMINISTRATOR can see all
|
// MODERATOR, GAME MASTER, ADMINISTRATOR can see all
|
||||||
if (player && (!AccountMgr::IsPlayerAccount(player->GetSession()->GetSecurity()) || player->GetSession()->GetSecurity() <= AccountTypes(gmLevelInWhoList)) &&
|
if (member && (!AccountMgr::IsPlayerAccount(player->GetSession()->GetSecurity()) || member->GetSession()->GetSecurity() <= AccountTypes(gmLevelInWhoList)) &&
|
||||||
player->IsVisibleGloballyFor(player))
|
member->IsVisibleGloballyFor(player))
|
||||||
{
|
{
|
||||||
data << uint64(i->first);
|
data << uint64(i->first);
|
||||||
data << uint8(i->second.flags); // flags seems to be changed...
|
data << uint8(i->second.flags); // flags seems to be changed...
|
||||||
|
|||||||
@@ -349,18 +349,18 @@ bool ChatHandler::HandlePInfoCommand(const char* args)
|
|||||||
|
|
||||||
std::string bannedby = "unknown";
|
std::string bannedby = "unknown";
|
||||||
std::string banreason = "";
|
std::string banreason = "";
|
||||||
if (QueryResult result = LoginDatabase.PQuery("SELECT unbandate, bandate = unbandate, bannedby, banreason FROM account_banned "
|
if (QueryResult result2 = LoginDatabase.PQuery("SELECT unbandate, bandate = unbandate, bannedby, banreason FROM account_banned "
|
||||||
"WHERE id = '%u' AND active ORDER BY bandate ASC LIMIT 1", accId))
|
"WHERE id = '%u' AND active ORDER BY bandate ASC LIMIT 1", accId))
|
||||||
{
|
{
|
||||||
Field* fields = result->Fetch();
|
Field* fields = result2->Fetch();
|
||||||
banTime = fields[1].GetBool() ? 0 : fields[0].GetUInt64();
|
banTime = fields[1].GetBool() ? 0 : fields[0].GetUInt64();
|
||||||
bannedby = fields[2].GetString();
|
bannedby = fields[2].GetString();
|
||||||
banreason = fields[3].GetString();
|
banreason = fields[3].GetString();
|
||||||
}
|
}
|
||||||
else if (QueryResult result = CharacterDatabase.PQuery("SELECT unbandate, bandate = unbandate, bannedby, banreason FROM character_banned "
|
else if (QueryResult result3 = CharacterDatabase.PQuery("SELECT unbandate, bandate = unbandate, bannedby, banreason FROM character_banned "
|
||||||
"WHERE guid = '%u' AND active ORDER BY bandate ASC LIMIT 1", GUID_LOPART(target_guid)))
|
"WHERE guid = '%u' AND active ORDER BY bandate ASC LIMIT 1", GUID_LOPART(target_guid)))
|
||||||
{
|
{
|
||||||
Field* fields = result->Fetch();
|
Field* fields = result3->Fetch();
|
||||||
banTime = fields[1].GetBool() ? 0 : fields[0].GetUInt64();
|
banTime = fields[1].GetBool() ? 0 : fields[0].GetUInt64();
|
||||||
bannedby = fields[2].GetString();
|
bannedby = fields[2].GetString();
|
||||||
banreason = fields[3].GetString();
|
banreason = fields[3].GetString();
|
||||||
|
|||||||
@@ -277,12 +277,12 @@ bool IsDisabledFor(DisableType type, uint32 entry, Unit const* unit, uint8 flags
|
|||||||
{
|
{
|
||||||
case DISABLE_TYPE_SPELL:
|
case DISABLE_TYPE_SPELL:
|
||||||
{
|
{
|
||||||
uint8 flags = itr->second.flags;
|
uint8 spellFlags = itr->second.flags;
|
||||||
if (unit)
|
if (unit)
|
||||||
{
|
{
|
||||||
|
|
||||||
if ((flags & SPELL_DISABLE_PLAYER && unit->GetTypeId() == TYPEID_PLAYER) ||
|
if ((spellFlags & SPELL_DISABLE_PLAYER && unit->GetTypeId() == TYPEID_PLAYER) ||
|
||||||
(unit->GetTypeId() == TYPEID_UNIT && ((unit->ToCreature()->isPet() && flags & SPELL_DISABLE_PET) || flags & SPELL_DISABLE_CREATURE)))
|
(unit->GetTypeId() == TYPEID_UNIT && ((unit->ToCreature()->isPet() && spellFlags & SPELL_DISABLE_PET) || spellFlags & SPELL_DISABLE_CREATURE)))
|
||||||
{
|
{
|
||||||
if (flags & SPELL_DISABLE_MAP)
|
if (flags & SPELL_DISABLE_MAP)
|
||||||
{
|
{
|
||||||
@@ -290,13 +290,13 @@ bool IsDisabledFor(DisableType type, uint32 entry, Unit const* unit, uint8 flags
|
|||||||
if (mapIds.find(unit->GetMapId()) != mapIds.end())
|
if (mapIds.find(unit->GetMapId()) != mapIds.end())
|
||||||
return true; // Spell is disabled on current map
|
return true; // Spell is disabled on current map
|
||||||
|
|
||||||
if (!(flags & SPELL_DISABLE_AREA))
|
if (!(spellFlags & SPELL_DISABLE_AREA))
|
||||||
return false; // Spell is disabled on another map, but not this one, return false
|
return false; // Spell is disabled on another map, but not this one, return false
|
||||||
|
|
||||||
// Spell is disabled in an area, but not explicitly our current mapId. Continue processing.
|
// Spell is disabled in an area, but not explicitly our current mapId. Continue processing.
|
||||||
}
|
}
|
||||||
|
|
||||||
if (flags & SPELL_DISABLE_AREA)
|
if (spellFlags & SPELL_DISABLE_AREA)
|
||||||
{
|
{
|
||||||
std::set<uint32> const& areaIds = itr->second.params[1];
|
std::set<uint32> const& areaIds = itr->second.params[1];
|
||||||
if (areaIds.find(unit->GetAreaId()) != areaIds.end())
|
if (areaIds.find(unit->GetAreaId()) != areaIds.end())
|
||||||
|
|||||||
@@ -73,6 +73,7 @@ DBCStorage <ChrPowerTypesEntry> sChrPowerTypesStore(ChrClassesXPowerTypesfmt);
|
|||||||
DBCStorage <CinematicSequencesEntry> sCinematicSequencesStore(CinematicSequencesEntryfmt);
|
DBCStorage <CinematicSequencesEntry> sCinematicSequencesStore(CinematicSequencesEntryfmt);
|
||||||
DBCStorage <CreatureDisplayInfoEntry> sCreatureDisplayInfoStore(CreatureDisplayInfofmt);
|
DBCStorage <CreatureDisplayInfoEntry> sCreatureDisplayInfoStore(CreatureDisplayInfofmt);
|
||||||
DBCStorage <CreatureFamilyEntry> sCreatureFamilyStore(CreatureFamilyfmt);
|
DBCStorage <CreatureFamilyEntry> sCreatureFamilyStore(CreatureFamilyfmt);
|
||||||
|
DBCStorage <CreatureModelDataEntry> sCreatureModelDataStore(CreatureModelDatafmt);
|
||||||
DBCStorage <CreatureSpellDataEntry> sCreatureSpellDataStore(CreatureSpellDatafmt);
|
DBCStorage <CreatureSpellDataEntry> sCreatureSpellDataStore(CreatureSpellDatafmt);
|
||||||
DBCStorage <CreatureTypeEntry> sCreatureTypeStore(CreatureTypefmt);
|
DBCStorage <CreatureTypeEntry> sCreatureTypeStore(CreatureTypefmt);
|
||||||
DBCStorage <CurrencyTypesEntry> sCurrencyTypesStore(CurrencyTypesfmt);
|
DBCStorage <CurrencyTypesEntry> sCurrencyTypesStore(CurrencyTypesfmt);
|
||||||
|
|||||||
@@ -86,6 +86,7 @@ extern DBCStorage <ChrPowerTypesEntry> sChrPowerTypesStore;
|
|||||||
extern DBCStorage <CinematicSequencesEntry> sCinematicSequencesStore;
|
extern DBCStorage <CinematicSequencesEntry> sCinematicSequencesStore;
|
||||||
extern DBCStorage <CreatureDisplayInfoEntry> sCreatureDisplayInfoStore;
|
extern DBCStorage <CreatureDisplayInfoEntry> sCreatureDisplayInfoStore;
|
||||||
extern DBCStorage <CreatureFamilyEntry> sCreatureFamilyStore;
|
extern DBCStorage <CreatureFamilyEntry> sCreatureFamilyStore;
|
||||||
|
extern DBCStorage <CreatureModelDataEntry> sCreatureModelDataStore;
|
||||||
extern DBCStorage <CreatureSpellDataEntry> sCreatureSpellDataStore;
|
extern DBCStorage <CreatureSpellDataEntry> sCreatureSpellDataStore;
|
||||||
extern DBCStorage <CreatureTypeEntry> sCreatureTypeStore;
|
extern DBCStorage <CreatureTypeEntry> sCreatureTypeStore;
|
||||||
extern DBCStorage <CurrencyTypesEntry> sCurrencyTypesStore;
|
extern DBCStorage <CurrencyTypesEntry> sCurrencyTypesStore;
|
||||||
|
|||||||
@@ -751,7 +751,7 @@ struct CinematicSequencesEntry
|
|||||||
struct CreatureDisplayInfoEntry
|
struct CreatureDisplayInfoEntry
|
||||||
{
|
{
|
||||||
uint32 Displayid; // 0 m_ID
|
uint32 Displayid; // 0 m_ID
|
||||||
// 1 m_modelID
|
uint32 ModelId; // 1 m_modelID
|
||||||
// 2 m_soundID
|
// 2 m_soundID
|
||||||
// 3 m_extendedDisplayInfoID
|
// 3 m_extendedDisplayInfoID
|
||||||
float scale; // 4 m_creatureModelScale
|
float scale; // 4 m_creatureModelScale
|
||||||
@@ -782,6 +782,28 @@ struct CreatureFamilyEntry
|
|||||||
// 11 m_iconFile
|
// 11 m_iconFile
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct CreatureModelDataEntry
|
||||||
|
{
|
||||||
|
uint32 Id;
|
||||||
|
//uint32 Flags;
|
||||||
|
//char* ModelPath[16]
|
||||||
|
//uint32 Unk1;
|
||||||
|
float Scale; // Used in calculation of unit collision data
|
||||||
|
//int32 Unk2
|
||||||
|
//int32 Unk3
|
||||||
|
//uint32 Unk4
|
||||||
|
//uint32 Unk5
|
||||||
|
//float Unk6
|
||||||
|
//uint32 Unk7
|
||||||
|
//float Unk8
|
||||||
|
//uint32 Unk9
|
||||||
|
//uint32 Unk10
|
||||||
|
//float CollisionWidth;
|
||||||
|
float CollisionHeight;
|
||||||
|
float MountHeight; // Used in calculation of unit collision data when mounted
|
||||||
|
//float Unks[11]
|
||||||
|
};
|
||||||
|
|
||||||
#define MAX_CREATURE_SPELL_DATA_SLOT 4
|
#define MAX_CREATURE_SPELL_DATA_SLOT 4
|
||||||
|
|
||||||
struct CreatureSpellDataEntry
|
struct CreatureSpellDataEntry
|
||||||
|
|||||||
@@ -41,7 +41,8 @@ const char ChrRacesEntryfmt[]="nxixiixixxxxixsxxxxxixxx";
|
|||||||
const char ChrClassesXPowerTypesfmt[]="nii";
|
const char ChrClassesXPowerTypesfmt[]="nii";
|
||||||
|
|
||||||
const char CinematicSequencesEntryfmt[]="nxxxxxxxxx";
|
const char CinematicSequencesEntryfmt[]="nxxxxxxxxx";
|
||||||
const char CreatureDisplayInfofmt[]="nxxxfxxxxxxxxxxxx";
|
const char CreatureDisplayInfofmt[]="nixxfxxxxxxxxxxxx";
|
||||||
|
const char CreatureModelDatafmt[]="nxxxxxxxxxxxxxffxxxxxxxxxxxx";
|
||||||
const char CreatureFamilyfmt[]="nfifiiiiixsx";
|
const char CreatureFamilyfmt[]="nfifiiiiixsx";
|
||||||
const char CreatureSpellDatafmt[]="niiiixxxx";
|
const char CreatureSpellDatafmt[]="niiiixxxx";
|
||||||
const char CreatureTypefmt[]="nxx";
|
const char CreatureTypefmt[]="nxx";
|
||||||
|
|||||||
@@ -254,7 +254,7 @@ void LFGMgr::Update(uint32 diff)
|
|||||||
if (m_QueueTimer > LFG_QUEUEUPDATE_INTERVAL)
|
if (m_QueueTimer > LFG_QUEUEUPDATE_INTERVAL)
|
||||||
{
|
{
|
||||||
m_QueueTimer = 0;
|
m_QueueTimer = 0;
|
||||||
time_t currTime = time(NULL);
|
currTime = time(NULL);
|
||||||
for (LfgQueueInfoMap::const_iterator itQueue = m_QueueInfoMap.begin(); itQueue != m_QueueInfoMap.end(); ++itQueue)
|
for (LfgQueueInfoMap::const_iterator itQueue = m_QueueInfoMap.begin(); itQueue != m_QueueInfoMap.end(); ++itQueue)
|
||||||
{
|
{
|
||||||
LfgQueueInfo* queue = itQueue->second;
|
LfgQueueInfo* queue = itQueue->second;
|
||||||
@@ -689,10 +689,9 @@ void LFGMgr::Leave(Player* player, Group* grp /* = NULL*/)
|
|||||||
{
|
{
|
||||||
// Remove from Proposals
|
// Remove from Proposals
|
||||||
LfgProposalMap::iterator it = m_Proposals.begin();
|
LfgProposalMap::iterator it = m_Proposals.begin();
|
||||||
uint64 guid = player ? player->GetGUID() : grp->GetLeaderGUID();
|
|
||||||
while (it != m_Proposals.end())
|
while (it != m_Proposals.end())
|
||||||
{
|
{
|
||||||
LfgProposalPlayerMap::iterator itPlayer = it->second->players.find(guid);
|
LfgProposalPlayerMap::iterator itPlayer = it->second->players.find(player ? player->GetGUID() : grp->GetLeaderGUID());
|
||||||
if (itPlayer != it->second->players.end())
|
if (itPlayer != it->second->players.end())
|
||||||
{
|
{
|
||||||
// Mark the player/leader of group who left as didn't accept the proposal
|
// Mark the player/leader of group who left as didn't accept the proposal
|
||||||
@@ -1069,10 +1068,10 @@ void LFGMgr::UpdateRoleCheck(uint64 gguid, uint64 guid /* = 0 */, uint8 roles /*
|
|||||||
// Set queue roles needed - As we are using check_roles will not have more that 1 tank, 1 healer, 3 dps
|
// Set queue roles needed - As we are using check_roles will not have more that 1 tank, 1 healer, 3 dps
|
||||||
for (LfgRolesMap::const_iterator it = check_roles.begin(); it != check_roles.end(); ++it)
|
for (LfgRolesMap::const_iterator it = check_roles.begin(); it != check_roles.end(); ++it)
|
||||||
{
|
{
|
||||||
uint8 roles = it->second;
|
uint8 roles2 = it->second;
|
||||||
if (roles & ROLE_TANK)
|
if (roles2 & ROLE_TANK)
|
||||||
--pqInfo->tanks;
|
--pqInfo->tanks;
|
||||||
else if (roles & ROLE_HEALER)
|
else if (roles2 & ROLE_HEALER)
|
||||||
--pqInfo->healers;
|
--pqInfo->healers;
|
||||||
else
|
else
|
||||||
--pqInfo->dps;
|
--pqInfo->dps;
|
||||||
@@ -1152,14 +1151,14 @@ void LFGMgr::GetCompatibleDungeons(LfgDungeonSet& dungeons, const PlayerSet& pla
|
|||||||
{
|
{
|
||||||
uint64 guid = (*it)->GetGUID();
|
uint64 guid = (*it)->GetGUID();
|
||||||
LfgLockMap cachedLockMap = GetLockedDungeons(guid);
|
LfgLockMap cachedLockMap = GetLockedDungeons(guid);
|
||||||
for (LfgLockMap::const_iterator it = cachedLockMap.begin(); it != cachedLockMap.end() && dungeons.size(); ++it)
|
for (LfgLockMap::const_iterator it2 = cachedLockMap.begin(); it2 != cachedLockMap.end() && dungeons.size(); ++it2)
|
||||||
{
|
{
|
||||||
uint32 dungeonId = (it->first & 0x00FFFFFF); // Compare dungeon ids
|
uint32 dungeonId = (it2->first & 0x00FFFFFF); // Compare dungeon ids
|
||||||
LfgDungeonSet::iterator itDungeon = dungeons.find(dungeonId);
|
LfgDungeonSet::iterator itDungeon = dungeons.find(dungeonId);
|
||||||
if (itDungeon != dungeons.end())
|
if (itDungeon != dungeons.end())
|
||||||
{
|
{
|
||||||
dungeons.erase(itDungeon);
|
dungeons.erase(itDungeon);
|
||||||
lockMap[guid][dungeonId] = it->second;
|
lockMap[guid][dungeonId] = it2->second;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1313,8 +1312,8 @@ void LFGMgr::UpdateProposal(uint32 proposalId, uint64 guid, bool accept)
|
|||||||
if (player->groupLowGuid != lowgroupguid)
|
if (player->groupLowGuid != lowgroupguid)
|
||||||
sLog->outError("LFGMgr::UpdateProposal: [" UI64FMTD "] group mismatch: actual (%u) - queued (%u)", (*it)->GetGUID(), lowgroupguid, player->groupLowGuid);
|
sLog->outError("LFGMgr::UpdateProposal: [" UI64FMTD "] group mismatch: actual (%u) - queued (%u)", (*it)->GetGUID(), lowgroupguid, player->groupLowGuid);
|
||||||
|
|
||||||
uint64 guid = player->groupLowGuid ? MAKE_NEW_GUID(player->groupLowGuid, 0, HIGHGUID_GROUP) : (*it)->GetGUID();
|
uint64 guid2 = player->groupLowGuid ? MAKE_NEW_GUID(player->groupLowGuid, 0, HIGHGUID_GROUP) : (*it)->GetGUID();
|
||||||
LfgQueueInfoMap::iterator itQueue = m_QueueInfoMap.find(guid);
|
LfgQueueInfoMap::iterator itQueue = m_QueueInfoMap.find(guid2);
|
||||||
if (itQueue == m_QueueInfoMap.end())
|
if (itQueue == m_QueueInfoMap.end())
|
||||||
{
|
{
|
||||||
sLog->outError("LFGMgr::UpdateProposal: Queue info for guid [" UI64FMTD "] not found!", guid);
|
sLog->outError("LFGMgr::UpdateProposal: Queue info for guid [" UI64FMTD "] not found!", guid);
|
||||||
@@ -1399,10 +1398,7 @@ void LFGMgr::UpdateProposal(uint32 proposalId, uint64 guid, bool accept)
|
|||||||
|
|
||||||
// Remove players/groups from Queue
|
// Remove players/groups from Queue
|
||||||
for (LfgGuidList::const_iterator it = pProposal->queues.begin(); it != pProposal->queues.end(); ++it)
|
for (LfgGuidList::const_iterator it = pProposal->queues.begin(); it != pProposal->queues.end(); ++it)
|
||||||
{
|
RemoveFromQueue(*it);
|
||||||
uint64 guid = (*it);
|
|
||||||
RemoveFromQueue(guid);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Teleport Player
|
// Teleport Player
|
||||||
for (LfgPlayerList::const_iterator it = playersToTeleport.begin(); it != playersToTeleport.end(); ++it)
|
for (LfgPlayerList::const_iterator it = playersToTeleport.begin(); it != playersToTeleport.end(); ++it)
|
||||||
|
|||||||
@@ -292,6 +292,7 @@ class LFGMgr
|
|||||||
LfgState GetState(uint64 guid);
|
LfgState GetState(uint64 guid);
|
||||||
const LfgDungeonSet& GetSelectedDungeons(uint64 guid);
|
const LfgDungeonSet& GetSelectedDungeons(uint64 guid);
|
||||||
uint32 GetDungeon(uint64 guid, bool asId = true);
|
uint32 GetDungeon(uint64 guid, bool asId = true);
|
||||||
|
void SetState(uint64 guid, LfgState state);
|
||||||
void ClearState(uint64 guid);
|
void ClearState(uint64 guid);
|
||||||
void RemovePlayerData(uint64 guid);
|
void RemovePlayerData(uint64 guid);
|
||||||
void RemoveGroupData(uint64 guid);
|
void RemoveGroupData(uint64 guid);
|
||||||
@@ -304,7 +305,6 @@ class LFGMgr
|
|||||||
uint8 GetRoles(uint64 guid);
|
uint8 GetRoles(uint64 guid);
|
||||||
const std::string& GetComment(uint64 gguid);
|
const std::string& GetComment(uint64 gguid);
|
||||||
void RestoreState(uint64 guid);
|
void RestoreState(uint64 guid);
|
||||||
void SetState(uint64 guid, LfgState state);
|
|
||||||
void SetDungeon(uint64 guid, uint32 dungeon);
|
void SetDungeon(uint64 guid, uint32 dungeon);
|
||||||
void SetSelectedDungeons(uint64 guid, const LfgDungeonSet& dungeons);
|
void SetSelectedDungeons(uint64 guid, const LfgDungeonSet& dungeons);
|
||||||
void SetLockedDungeons(uint64 guid, const LfgLockMap& lock);
|
void SetLockedDungeons(uint64 guid, const LfgLockMap& lock);
|
||||||
|
|||||||
@@ -82,6 +82,7 @@ void LFGScripts::OnRemoveMember(Group* group, uint64 guid, RemoveMethod method,
|
|||||||
}
|
}
|
||||||
|
|
||||||
sLFGMgr->ClearState(guid);
|
sLFGMgr->ClearState(guid);
|
||||||
|
sLFGMgr->SetState(guid, LFG_STATE_NONE);
|
||||||
if (Player* player = ObjectAccessor::FindPlayer(guid))
|
if (Player* player = ObjectAccessor::FindPlayer(guid))
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -382,29 +382,29 @@ void Pet::SavePetToDB(PetSaveMode mode)
|
|||||||
// current/stable/not_in_slot
|
// current/stable/not_in_slot
|
||||||
if (mode >= PET_SAVE_AS_CURRENT)
|
if (mode >= PET_SAVE_AS_CURRENT)
|
||||||
{
|
{
|
||||||
uint32 owner = GUID_LOPART(GetOwnerGUID());
|
uint32 ownerLowGUID = GUID_LOPART(GetOwnerGUID());
|
||||||
std::string name = m_name;
|
std::string name = m_name;
|
||||||
CharacterDatabase.EscapeString(name);
|
CharacterDatabase.EscapeString(name);
|
||||||
SQLTransaction trans = CharacterDatabase.BeginTransaction();
|
trans = CharacterDatabase.BeginTransaction();
|
||||||
// remove current data
|
// remove current data
|
||||||
trans->PAppend("DELETE FROM character_pet WHERE owner = '%u' AND id = '%u'", owner, m_charmInfo->GetPetNumber());
|
trans->PAppend("DELETE FROM character_pet WHERE owner = '%u' AND id = '%u'", owner, m_charmInfo->GetPetNumber());
|
||||||
|
|
||||||
// prevent duplicate using slot (except PET_SAVE_NOT_IN_SLOT)
|
// prevent duplicate using slot (except PET_SAVE_NOT_IN_SLOT)
|
||||||
if (mode <= PET_SAVE_LAST_STABLE_SLOT)
|
if (mode <= PET_SAVE_LAST_STABLE_SLOT)
|
||||||
trans->PAppend("UPDATE character_pet SET slot = '%u' WHERE owner = '%u' AND slot = '%u'",
|
trans->PAppend("UPDATE character_pet SET slot = '%u' WHERE owner = '%u' AND slot = '%u'",
|
||||||
PET_SAVE_NOT_IN_SLOT, owner, uint32(mode));
|
PET_SAVE_NOT_IN_SLOT, ownerLowGUID, uint32(mode));
|
||||||
|
|
||||||
// prevent existence another hunter pet in PET_SAVE_AS_CURRENT and PET_SAVE_NOT_IN_SLOT
|
// prevent existence another hunter pet in PET_SAVE_AS_CURRENT and PET_SAVE_NOT_IN_SLOT
|
||||||
if (getPetType() == HUNTER_PET && (mode == PET_SAVE_AS_CURRENT||mode > PET_SAVE_LAST_STABLE_SLOT))
|
if (getPetType() == HUNTER_PET && (mode == PET_SAVE_AS_CURRENT || mode > PET_SAVE_LAST_STABLE_SLOT))
|
||||||
trans->PAppend("DELETE FROM character_pet WHERE owner = '%u' AND (slot = '%u' OR slot > '%u')",
|
trans->PAppend("DELETE FROM character_pet WHERE owner = '%u' AND (slot = '%u' OR slot > '%u')",
|
||||||
owner, PET_SAVE_AS_CURRENT, PET_SAVE_LAST_STABLE_SLOT);
|
ownerLowGUID, PET_SAVE_AS_CURRENT, PET_SAVE_LAST_STABLE_SLOT);
|
||||||
// save pet
|
// save pet
|
||||||
std::ostringstream ss;
|
std::ostringstream ss;
|
||||||
ss << "INSERT INTO character_pet (id, entry, owner, modelid, level, exp, Reactstate, slot, name, renamed, curhealth, curmana, curhappiness, abdata, savetime, CreatedBySpell, PetType) "
|
ss << "INSERT INTO character_pet (id, entry, owner, modelid, level, exp, Reactstate, slot, name, renamed, curhealth, curmana, curhappiness, abdata, savetime, CreatedBySpell, PetType) "
|
||||||
<< "VALUES ("
|
<< "VALUES ("
|
||||||
<< m_charmInfo->GetPetNumber() << ','
|
<< m_charmInfo->GetPetNumber() << ','
|
||||||
<< GetEntry() << ','
|
<< GetEntry() << ','
|
||||||
<< owner << ','
|
<< ownerLowGUID << ','
|
||||||
<< GetNativeDisplayId() << ','
|
<< GetNativeDisplayId() << ','
|
||||||
<< uint32(getLevel()) << ','
|
<< uint32(getLevel()) << ','
|
||||||
<< GetUInt32Value(UNIT_FIELD_PETEXPERIENCE) << ','
|
<< GetUInt32Value(UNIT_FIELD_PETEXPERIENCE) << ','
|
||||||
|
|||||||
@@ -941,7 +941,7 @@ bool Player::Create(uint32 guidlow, CharacterCreateInfo* createInfo)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
SetMap(sMapMgr->CreateMap(info->mapId, this, 0));
|
SetMap(sMapMgr->CreateMap(info->mapId, this));
|
||||||
|
|
||||||
uint8 powertype = cEntry->powerType;
|
uint8 powertype = cEntry->powerType;
|
||||||
|
|
||||||
@@ -2244,7 +2244,9 @@ bool Player::TeleportTo(uint32 mapid, float x, float y, float z, float orientati
|
|||||||
if (!sMapMgr->CanPlayerEnter(mapid, this, false))
|
if (!sMapMgr->CanPlayerEnter(mapid, this, false))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
Map* map = sMapMgr->CreateMap(mapid, this, 0);
|
// If the map is not created, assume it is possible to enter it.
|
||||||
|
// It will be created in the WorldPortAck.
|
||||||
|
Map* map = sMapMgr->FindBaseMap(mapid);
|
||||||
if (!map || map->CanEnter(this))
|
if (!map || map->CanEnter(this))
|
||||||
{
|
{
|
||||||
//lets reset near teleport flag if it wasn't reset during chained teleports
|
//lets reset near teleport flag if it wasn't reset during chained teleports
|
||||||
@@ -5126,8 +5128,6 @@ void Player::ResurrectPlayer(float restore_percent, bool applySickness)
|
|||||||
if (GetSession()->IsARecruiter() || (GetSession()->GetRecruiterId() != 0))
|
if (GetSession()->IsARecruiter() || (GetSession()->GetRecruiterId() != 0))
|
||||||
SetFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_REFER_A_FRIEND);
|
SetFlag(UNIT_DYNAMIC_FLAGS, UNIT_DYNFLAG_REFER_A_FRIEND);
|
||||||
|
|
||||||
setDeathState(ALIVE);
|
|
||||||
|
|
||||||
SetMovement(MOVE_LAND_WALK);
|
SetMovement(MOVE_LAND_WALK);
|
||||||
SetMovement(MOVE_UNROOT);
|
SetMovement(MOVE_UNROOT);
|
||||||
|
|
||||||
@@ -5157,6 +5157,8 @@ void Player::ResurrectPlayer(float restore_percent, bool applySickness)
|
|||||||
// update visibility
|
// update visibility
|
||||||
UpdateObjectVisibility();
|
UpdateObjectVisibility();
|
||||||
|
|
||||||
|
setDeathState(ALIVE);
|
||||||
|
|
||||||
if (!applySickness)
|
if (!applySickness)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@@ -16972,7 +16974,7 @@ bool Player::LoadFromDB(uint32 guid, SQLQueryHolder *holder)
|
|||||||
|
|
||||||
// NOW player must have valid map
|
// NOW player must have valid map
|
||||||
// load the player's map here if it's not already loaded
|
// load the player's map here if it's not already loaded
|
||||||
Map* map = sMapMgr->CreateMap(mapId, this, instanceId);
|
Map* map = sMapMgr->CreateMap(mapId, this);
|
||||||
|
|
||||||
if (!map)
|
if (!map)
|
||||||
{
|
{
|
||||||
@@ -16990,14 +16992,14 @@ bool Player::LoadFromDB(uint32 guid, SQLQueryHolder *holder)
|
|||||||
RelocateToHomebind();
|
RelocateToHomebind();
|
||||||
}
|
}
|
||||||
|
|
||||||
map = sMapMgr->CreateMap(mapId, this, 0);
|
map = sMapMgr->CreateMap(mapId, this);
|
||||||
if (!map)
|
if (!map)
|
||||||
{
|
{
|
||||||
PlayerInfo const* info = sObjectMgr->GetPlayerInfo(getRace(), getClass());
|
PlayerInfo const* info = sObjectMgr->GetPlayerInfo(getRace(), getClass());
|
||||||
mapId = info->mapId;
|
mapId = info->mapId;
|
||||||
Relocate(info->positionX, info->positionY, info->positionZ, 0.0f);
|
Relocate(info->positionX, info->positionY, info->positionZ, 0.0f);
|
||||||
sLog->outError("Player (guidlow %d) have invalid coordinates (X: %f Y: %f Z: %f O: %f). Teleport to default race/class locations.", guid, GetPositionX(), GetPositionY(), GetPositionZ(), GetOrientation());
|
sLog->outError("Player (guidlow %d) have invalid coordinates (X: %f Y: %f Z: %f O: %f). Teleport to default race/class locations.", guid, GetPositionX(), GetPositionY(), GetPositionZ(), GetOrientation());
|
||||||
map = sMapMgr->CreateMap(mapId, this, 0);
|
map = sMapMgr->CreateMap(mapId, this);
|
||||||
if (!map)
|
if (!map)
|
||||||
{
|
{
|
||||||
sLog->outError("Player (guidlow %d) has invalid default map coordinates (X: %f Y: %f Z: %f O: %f). or instance couldn't be created", guid, GetPositionX(), GetPositionY(), GetPositionZ(), GetOrientation());
|
sLog->outError("Player (guidlow %d) has invalid default map coordinates (X: %f Y: %f Z: %f O: %f). or instance couldn't be created", guid, GetPositionX(), GetPositionY(), GetPositionZ(), GetOrientation());
|
||||||
|
|||||||
@@ -2516,6 +2516,41 @@ class Player : public Unit, public GridObject<Player>
|
|||||||
void AddWhisperWhiteList(uint64 guid) { WhisperList.push_back(guid); }
|
void AddWhisperWhiteList(uint64 guid) { WhisperList.push_back(guid); }
|
||||||
bool IsInWhisperWhiteList(uint64 guid);
|
bool IsInWhisperWhiteList(uint64 guid);
|
||||||
|
|
||||||
|
//! Return collision height sent to client
|
||||||
|
float GetCollisionHeight(bool mounted)
|
||||||
|
{
|
||||||
|
if (mounted)
|
||||||
|
{
|
||||||
|
CreatureDisplayInfoEntry const* mountDisplayInfo = sCreatureDisplayInfoStore.LookupEntry(GetUInt32Value(UNIT_FIELD_MOUNTDISPLAYID));
|
||||||
|
if (!mountDisplayInfo)
|
||||||
|
return GetCollisionHeight(false);
|
||||||
|
|
||||||
|
CreatureModelDataEntry const* mountModelData = sCreatureModelDataStore.LookupEntry(mountDisplayInfo->ModelId);
|
||||||
|
if (!mountModelData)
|
||||||
|
return GetCollisionHeight(false);
|
||||||
|
|
||||||
|
CreatureDisplayInfoEntry const* displayInfo = sCreatureDisplayInfoStore.LookupEntry(GetNativeDisplayId());
|
||||||
|
ASSERT(displayInfo);
|
||||||
|
CreatureModelDataEntry const* modelData = sCreatureModelDataStore.LookupEntry(displayInfo->ModelId);
|
||||||
|
ASSERT(modelData);
|
||||||
|
|
||||||
|
float scaleMod = GetFloatValue(OBJECT_FIELD_SCALE_X); // 99% sure about this
|
||||||
|
|
||||||
|
return scaleMod * mountModelData->MountHeight + modelData->CollisionHeight * 0.5f;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//! Dismounting case - use basic default model data
|
||||||
|
CreatureDisplayInfoEntry const* displayInfo = sCreatureDisplayInfoStore.LookupEntry(GetNativeDisplayId());
|
||||||
|
ASSERT(displayInfo);
|
||||||
|
CreatureModelDataEntry const* modelData = sCreatureModelDataStore.LookupEntry(displayInfo->ModelId);
|
||||||
|
ASSERT(modelData);
|
||||||
|
|
||||||
|
return modelData->CollisionHeight;
|
||||||
|
}
|
||||||
|
//! TODO: Need a proper calculation for collision height when mounted
|
||||||
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// Gamemaster whisper whitelist
|
// Gamemaster whisper whitelist
|
||||||
WhisperListContainer WhisperList;
|
WhisperListContainer WhisperList;
|
||||||
|
|||||||
@@ -98,7 +98,7 @@ void MapManager::LoadTransports()
|
|||||||
m_TransportsByMap[*i].insert(t);
|
m_TransportsByMap[*i].insert(t);
|
||||||
|
|
||||||
//If we someday decide to use the grid to track transports, here:
|
//If we someday decide to use the grid to track transports, here:
|
||||||
t->SetMap(sMapMgr->CreateMap(mapid, t, 0));
|
t->SetMap(sMapMgr->CreateBaseMap(mapid));
|
||||||
t->AddToWorld();
|
t->AddToWorld();
|
||||||
|
|
||||||
++count;
|
++count;
|
||||||
@@ -365,9 +365,9 @@ bool Transport::GenerateWaypoints(uint32 pathid, std::set<uint32> &mapids)
|
|||||||
if (keyFrames[keyFrames.size() - 1].node->mapid != keyFrames[0].node->mapid)
|
if (keyFrames[keyFrames.size() - 1].node->mapid != keyFrames[0].node->mapid)
|
||||||
teleport = true;
|
teleport = true;
|
||||||
|
|
||||||
WayPoint pos(keyFrames[0].node->mapid, keyFrames[0].node->x, keyFrames[0].node->y, keyFrames[0].node->z, teleport, 0,
|
m_WayPoints[0] = WayPoint(keyFrames[0].node->mapid, keyFrames[0].node->x, keyFrames[0].node->y, keyFrames[0].node->z, teleport, 0,
|
||||||
keyFrames[0].node->arrivalEventID, keyFrames[0].node->departureEventID);
|
keyFrames[0].node->arrivalEventID, keyFrames[0].node->departureEventID);
|
||||||
m_WayPoints[0] = pos;
|
|
||||||
t += keyFrames[0].node->delay * 1000;
|
t += keyFrames[0].node->delay * 1000;
|
||||||
|
|
||||||
uint32 cM = keyFrames[0].node->mapid;
|
uint32 cM = keyFrames[0].node->mapid;
|
||||||
@@ -387,12 +387,11 @@ bool Transport::GenerateWaypoints(uint32 pathid, std::set<uint32> &mapids)
|
|||||||
|
|
||||||
if (d > 0)
|
if (d > 0)
|
||||||
{
|
{
|
||||||
float newX, newY, newZ;
|
float newX = keyFrames[i].node->x + (keyFrames[i + 1].node->x - keyFrames[i].node->x) * d / keyFrames[i + 1].distFromPrev;
|
||||||
newX = keyFrames[i].node->x + (keyFrames[i + 1].node->x - keyFrames[i].node->x) * d / keyFrames[i + 1].distFromPrev;
|
float newY = keyFrames[i].node->y + (keyFrames[i + 1].node->y - keyFrames[i].node->y) * d / keyFrames[i + 1].distFromPrev;
|
||||||
newY = keyFrames[i].node->y + (keyFrames[i + 1].node->y - keyFrames[i].node->y) * d / keyFrames[i + 1].distFromPrev;
|
float newZ = keyFrames[i].node->z + (keyFrames[i + 1].node->z - keyFrames[i].node->z) * d / keyFrames[i + 1].distFromPrev;
|
||||||
newZ = keyFrames[i].node->z + (keyFrames[i + 1].node->z - keyFrames[i].node->z) * d / keyFrames[i + 1].distFromPrev;
|
|
||||||
|
|
||||||
bool teleport = false;
|
teleport = false;
|
||||||
if (keyFrames[i].node->mapid != cM)
|
if (keyFrames[i].node->mapid != cM)
|
||||||
{
|
{
|
||||||
teleport = true;
|
teleport = true;
|
||||||
@@ -400,9 +399,8 @@ bool Transport::GenerateWaypoints(uint32 pathid, std::set<uint32> &mapids)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// sLog->outString("T: %d, D: %f, x: %f, y: %f, z: %f", t, d, newX, newY, newZ);
|
// sLog->outString("T: %d, D: %f, x: %f, y: %f, z: %f", t, d, newX, newY, newZ);
|
||||||
WayPoint pos(keyFrames[i].node->mapid, newX, newY, newZ, teleport, 0);
|
|
||||||
if (teleport)
|
if (teleport)
|
||||||
m_WayPoints[t] = pos;
|
m_WayPoints[t] = WayPoint(keyFrames[i].node->mapid, newX, newY, newZ, teleport, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tFrom < tTo) // caught in tFrom dock's "gravitational pull"
|
if (tFrom < tTo) // caught in tFrom dock's "gravitational pull"
|
||||||
@@ -439,25 +437,18 @@ bool Transport::GenerateWaypoints(uint32 pathid, std::set<uint32> &mapids)
|
|||||||
else
|
else
|
||||||
t += (long)keyFrames[i + 1].tTo % 100;
|
t += (long)keyFrames[i + 1].tTo % 100;
|
||||||
|
|
||||||
bool teleport = false;
|
teleport = false;
|
||||||
if ((keyFrames[i + 1].node->actionFlag == 1) || (keyFrames[i + 1].node->mapid != keyFrames[i].node->mapid))
|
if ((keyFrames[i + 1].node->actionFlag == 1) || (keyFrames[i + 1].node->mapid != keyFrames[i].node->mapid))
|
||||||
{
|
{
|
||||||
teleport = true;
|
teleport = true;
|
||||||
cM = keyFrames[i + 1].node->mapid;
|
cM = keyFrames[i + 1].node->mapid;
|
||||||
}
|
}
|
||||||
|
|
||||||
WayPoint pos(keyFrames[i + 1].node->mapid, keyFrames[i + 1].node->x, keyFrames[i + 1].node->y, keyFrames[i + 1].node->z, teleport,
|
m_WayPoints[t] = WayPoint(keyFrames[i + 1].node->mapid, keyFrames[i + 1].node->x, keyFrames[i + 1].node->y, keyFrames[i + 1].node->z, teleport,
|
||||||
0, keyFrames[i + 1].node->arrivalEventID, keyFrames[i + 1].node->departureEventID);
|
0, keyFrames[i + 1].node->arrivalEventID, keyFrames[i + 1].node->departureEventID);
|
||||||
// sLog->outString("T: %d, x: %f, y: %f, z: %f, t:%d", t, pos.x, pos.y, pos.z, teleport);
|
// sLog->outString("T: %d, x: %f, y: %f, z: %f, t:%d", t, pos.x, pos.y, pos.z, teleport);
|
||||||
/*
|
|
||||||
if (keyFrames[i+1].delay > 5)
|
|
||||||
pos.delayed = true;
|
|
||||||
*/
|
|
||||||
//if (teleport)
|
|
||||||
m_WayPoints[t] = pos;
|
|
||||||
|
|
||||||
t += keyFrames[i + 1].node->delay * 1000;
|
t += keyFrames[i + 1].node->delay * 1000;
|
||||||
// sLog->outString("------");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32 timer = t;
|
uint32 timer = t;
|
||||||
@@ -503,7 +494,7 @@ void Transport::TeleportTransport(uint32 newMapid, float x, float y, float z)
|
|||||||
|
|
||||||
RemoveFromWorld();
|
RemoveFromWorld();
|
||||||
ResetMap();
|
ResetMap();
|
||||||
Map* newMap = sMapMgr->CreateMap(newMapid, this, 0);
|
Map* newMap = sMapMgr->CreateBaseMap(newMapid);
|
||||||
SetMap(newMap);
|
SetMap(newMap);
|
||||||
ASSERT (GetMap());
|
ASSERT (GetMap());
|
||||||
AddToWorld();
|
AddToWorld();
|
||||||
|
|||||||
@@ -5242,6 +5242,7 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere
|
|||||||
break;
|
break;
|
||||||
case CLASS_ROGUE: // 39511, 40997, 40998, 41002, 41005, 41011
|
case CLASS_ROGUE: // 39511, 40997, 40998, 41002, 41005, 41011
|
||||||
case CLASS_WARRIOR: // 39511, 40997, 40998, 41002, 41005, 41011
|
case CLASS_WARRIOR: // 39511, 40997, 40998, 41002, 41005, 41011
|
||||||
|
case CLASS_DEATH_KNIGHT:
|
||||||
triggered_spell_id = RAND(39511, 40997, 40998, 41002, 41005, 41011);
|
triggered_spell_id = RAND(39511, 40997, 40998, 41002, 41005, 41011);
|
||||||
cooldown_spell_id = 39511;
|
cooldown_spell_id = 39511;
|
||||||
break;
|
break;
|
||||||
@@ -11933,6 +11934,12 @@ void Unit::Mount(uint32 mount, uint32 VehicleId, uint32 creatureEntry)
|
|||||||
else
|
else
|
||||||
player->UnsummonPetTemporaryIfAny();
|
player->UnsummonPetTemporaryIfAny();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
WorldPacket data(SMSG_MOVE_SET_COLLISION_HGT, GetPackGUID().size() + 4 + 4);
|
||||||
|
data.append(GetPackGUID());
|
||||||
|
data << uint32(sWorld->GetGameTime()); // Packet counter
|
||||||
|
data << player->GetCollisionHeight(true);
|
||||||
|
player->GetSession()->SendPacket(&data);
|
||||||
}
|
}
|
||||||
|
|
||||||
RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_MOUNT);
|
RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_MOUNT);
|
||||||
@@ -11946,6 +11953,15 @@ void Unit::Unmount()
|
|||||||
SetUInt32Value(UNIT_FIELD_MOUNTDISPLAYID, 0);
|
SetUInt32Value(UNIT_FIELD_MOUNTDISPLAYID, 0);
|
||||||
RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_MOUNT);
|
RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_MOUNT);
|
||||||
|
|
||||||
|
if (Player* thisPlayer = ToPlayer())
|
||||||
|
{
|
||||||
|
WorldPacket data(SMSG_MOVE_SET_COLLISION_HGT, GetPackGUID().size() + 4 + 4);
|
||||||
|
data.append(GetPackGUID());
|
||||||
|
data << uint32(sWorld->GetGameTime()); // Packet counter
|
||||||
|
data << thisPlayer->GetCollisionHeight(false);
|
||||||
|
thisPlayer->GetSession()->SendPacket(&data);
|
||||||
|
}
|
||||||
|
|
||||||
WorldPacket data(SMSG_DISMOUNT, 8);
|
WorldPacket data(SMSG_DISMOUNT, 8);
|
||||||
data.appendPackGUID(GetGUID());
|
data.appendPackGUID(GetGUID());
|
||||||
SendMessageToSet(&data, true);
|
SendMessageToSet(&data, true);
|
||||||
|
|||||||
@@ -1170,7 +1170,7 @@ void GameEventMgr::GameEventSpawn(int16 event_id)
|
|||||||
sObjectMgr->AddCreatureToGrid(*itr, data);
|
sObjectMgr->AddCreatureToGrid(*itr, data);
|
||||||
|
|
||||||
// Spawn if necessary (loaded grids only)
|
// Spawn if necessary (loaded grids only)
|
||||||
Map* map = const_cast<Map*>(sMapMgr->CreateBaseMap(data->mapid));
|
Map* map = sMapMgr->CreateBaseMap(data->mapid);
|
||||||
// We use spawn coords to spawn
|
// We use spawn coords to spawn
|
||||||
if (!map->Instanceable() && map->IsGridLoaded(data->posX, data->posY))
|
if (!map->Instanceable() && map->IsGridLoaded(data->posX, data->posY))
|
||||||
{
|
{
|
||||||
@@ -1199,7 +1199,7 @@ void GameEventMgr::GameEventSpawn(int16 event_id)
|
|||||||
sObjectMgr->AddGameobjectToGrid(*itr, data);
|
sObjectMgr->AddGameobjectToGrid(*itr, data);
|
||||||
// Spawn if necessary (loaded grids only)
|
// Spawn if necessary (loaded grids only)
|
||||||
// this base map checked as non-instanced and then only existed
|
// this base map checked as non-instanced and then only existed
|
||||||
Map* map = const_cast<Map*>(sMapMgr->CreateBaseMap(data->mapid));
|
Map* map = sMapMgr->CreateBaseMap(data->mapid);
|
||||||
// We use current coords to unspawn, not spawn coords since creature can have changed grid
|
// We use current coords to unspawn, not spawn coords since creature can have changed grid
|
||||||
if (!map->Instanceable() && map->IsGridLoaded(data->posX, data->posY))
|
if (!map->Instanceable() && map->IsGridLoaded(data->posX, data->posY))
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1601,7 +1601,7 @@ uint32 ObjectMgr::AddGOData(uint32 entry, uint32 mapId, float x, float y, float
|
|||||||
if (!goinfo)
|
if (!goinfo)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
Map* map = const_cast<Map*>(sMapMgr->CreateBaseMap(mapId));
|
Map* map = sMapMgr->CreateBaseMap(mapId);
|
||||||
if (!map)
|
if (!map)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
@@ -1662,7 +1662,7 @@ bool ObjectMgr::MoveCreData(uint32 guid, uint32 mapId, Position pos)
|
|||||||
AddCreatureToGrid(guid, &data);
|
AddCreatureToGrid(guid, &data);
|
||||||
|
|
||||||
// Spawn if necessary (loaded grids only)
|
// Spawn if necessary (loaded grids only)
|
||||||
if (Map* map = const_cast<Map*>(sMapMgr->CreateBaseMap(mapId)))
|
if (Map* map = sMapMgr->CreateBaseMap(mapId))
|
||||||
{
|
{
|
||||||
// We use spawn coords to spawn
|
// We use spawn coords to spawn
|
||||||
if (!map->Instanceable() && map->IsGridLoaded(data.posX, data.posY))
|
if (!map->Instanceable() && map->IsGridLoaded(data.posX, data.posY))
|
||||||
@@ -1715,7 +1715,7 @@ uint32 ObjectMgr::AddCreData(uint32 entry, uint32 /*team*/, uint32 mapId, float
|
|||||||
AddCreatureToGrid(guid, &data);
|
AddCreatureToGrid(guid, &data);
|
||||||
|
|
||||||
// Spawn if necessary (loaded grids only)
|
// Spawn if necessary (loaded grids only)
|
||||||
if (Map* map = const_cast<Map*>(sMapMgr->CreateBaseMap(mapId)))
|
if (Map* map = sMapMgr->CreateBaseMap(mapId))
|
||||||
{
|
{
|
||||||
// We use spawn coords to spawn
|
// We use spawn coords to spawn
|
||||||
if (!map->Instanceable() && !map->IsRemovalGrid(x, y))
|
if (!map->Instanceable() && !map->IsRemovalGrid(x, y))
|
||||||
|
|||||||
@@ -511,7 +511,7 @@ void InstanceSaveManager::_ResetSave(InstanceSaveHashMap::iterator &itr)
|
|||||||
void InstanceSaveManager::_ResetInstance(uint32 mapid, uint32 instanceId)
|
void InstanceSaveManager::_ResetInstance(uint32 mapid, uint32 instanceId)
|
||||||
{
|
{
|
||||||
sLog->outDebug(LOG_FILTER_MAPS, "InstanceSaveMgr::_ResetInstance %u, %u", mapid, instanceId);
|
sLog->outDebug(LOG_FILTER_MAPS, "InstanceSaveMgr::_ResetInstance %u, %u", mapid, instanceId);
|
||||||
Map* map = (MapInstanced*)sMapMgr->CreateBaseMap(mapid);
|
Map const* map = sMapMgr->CreateBaseMap(mapid);
|
||||||
if (!map->Instanceable())
|
if (!map->Instanceable())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@@ -521,7 +521,7 @@ void InstanceSaveManager::_ResetInstance(uint32 mapid, uint32 instanceId)
|
|||||||
|
|
||||||
DeleteInstanceFromDB(instanceId); // even if save not loaded
|
DeleteInstanceFromDB(instanceId); // even if save not loaded
|
||||||
|
|
||||||
Map* iMap = ((MapInstanced*)map)->FindMap(instanceId);
|
Map* iMap = ((MapInstanced*)map)->FindInstanceMap(instanceId);
|
||||||
|
|
||||||
if (iMap && iMap->IsDungeon())
|
if (iMap && iMap->IsDungeon())
|
||||||
((InstanceMap*)iMap)->Reset(INSTANCE_RESET_RESPAWN_DELAY);
|
((InstanceMap*)iMap)->Reset(INSTANCE_RESET_RESPAWN_DELAY);
|
||||||
|
|||||||
@@ -110,7 +110,7 @@ void MapInstanced::UnloadAll()
|
|||||||
- create the instance if it's not created already
|
- create the instance if it's not created already
|
||||||
- the player is not actually added to the instance (only in InstanceMap::Add)
|
- the player is not actually added to the instance (only in InstanceMap::Add)
|
||||||
*/
|
*/
|
||||||
Map* MapInstanced::CreateInstance(const uint32 mapId, Player* player)
|
Map* MapInstanced::CreateInstanceForPlayer(const uint32 mapId, Player* player)
|
||||||
{
|
{
|
||||||
if (GetId() != mapId || !player)
|
if (GetId() != mapId || !player)
|
||||||
return NULL;
|
return NULL;
|
||||||
@@ -124,7 +124,7 @@ Map* MapInstanced::CreateInstance(const uint32 mapId, Player* player)
|
|||||||
// the instance id is set in battlegroundid
|
// the instance id is set in battlegroundid
|
||||||
NewInstanceId = player->GetBattlegroundId();
|
NewInstanceId = player->GetBattlegroundId();
|
||||||
if (!NewInstanceId) return NULL;
|
if (!NewInstanceId) return NULL;
|
||||||
map = _FindMap(NewInstanceId);
|
map = FindInstanceMap(NewInstanceId);
|
||||||
if (!map)
|
if (!map)
|
||||||
map = CreateBattleground(NewInstanceId, player->GetBattleground());
|
map = CreateBattleground(NewInstanceId, player->GetBattleground());
|
||||||
}
|
}
|
||||||
@@ -151,7 +151,7 @@ Map* MapInstanced::CreateInstance(const uint32 mapId, Player* player)
|
|||||||
{
|
{
|
||||||
// solo/perm/group
|
// solo/perm/group
|
||||||
NewInstanceId = pSave->GetInstanceId();
|
NewInstanceId = pSave->GetInstanceId();
|
||||||
map = _FindMap(NewInstanceId);
|
map = FindInstanceMap(NewInstanceId);
|
||||||
// it is possible that the save exists but the map doesn't
|
// it is possible that the save exists but the map doesn't
|
||||||
if (!map)
|
if (!map)
|
||||||
map = CreateInstance(NewInstanceId, pSave, pSave->GetDifficulty());
|
map = CreateInstance(NewInstanceId, pSave, pSave->GetDifficulty());
|
||||||
@@ -163,7 +163,11 @@ Map* MapInstanced::CreateInstance(const uint32 mapId, Player* player)
|
|||||||
NewInstanceId = sMapMgr->GenerateInstanceId();
|
NewInstanceId = sMapMgr->GenerateInstanceId();
|
||||||
|
|
||||||
Difficulty diff = player->GetGroup() ? player->GetGroup()->GetDifficulty(IsRaid()) : player->GetDifficulty(IsRaid());
|
Difficulty diff = player->GetGroup() ? player->GetGroup()->GetDifficulty(IsRaid()) : player->GetDifficulty(IsRaid());
|
||||||
map = CreateInstance(NewInstanceId, NULL, diff);
|
//Seems it is now possible, but I do not know if it should be allowed
|
||||||
|
//ASSERT(!FindInstanceMap(NewInstanceId));
|
||||||
|
map = FindInstanceMap(NewInstanceId);
|
||||||
|
if (!map)
|
||||||
|
map = CreateInstance(NewInstanceId, NULL, diff);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -39,8 +39,12 @@ class MapInstanced : public Map
|
|||||||
void UnloadAll();
|
void UnloadAll();
|
||||||
bool CanEnter(Player* player);
|
bool CanEnter(Player* player);
|
||||||
|
|
||||||
Map* CreateInstance(const uint32 mapId, Player* player);
|
Map* CreateInstanceForPlayer(const uint32 mapId, Player* player);
|
||||||
Map* FindMap(uint32 InstanceId) const { return _FindMap(InstanceId); }
|
Map* FindInstanceMap(uint32 instanceId) const
|
||||||
|
{
|
||||||
|
InstancedMaps::const_iterator i = m_InstancedMaps.find(instanceId);
|
||||||
|
return(i == m_InstancedMaps.end() ? NULL : i->second);
|
||||||
|
}
|
||||||
bool DestroyInstance(InstancedMaps::iterator &itr);
|
bool DestroyInstance(InstancedMaps::iterator &itr);
|
||||||
|
|
||||||
void AddGridMapReference(const GridCoord &p)
|
void AddGridMapReference(const GridCoord &p)
|
||||||
@@ -60,18 +64,11 @@ class MapInstanced : public Map
|
|||||||
virtual void InitVisibilityDistance();
|
virtual void InitVisibilityDistance();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
InstanceMap* CreateInstance(uint32 InstanceId, InstanceSave* save, Difficulty difficulty);
|
InstanceMap* CreateInstance(uint32 InstanceId, InstanceSave* save, Difficulty difficulty);
|
||||||
BattlegroundMap* CreateBattleground(uint32 InstanceId, Battleground* bg);
|
BattlegroundMap* CreateBattleground(uint32 InstanceId, Battleground* bg);
|
||||||
|
|
||||||
InstancedMaps m_InstancedMaps;
|
InstancedMaps m_InstancedMaps;
|
||||||
|
|
||||||
Map* _FindMap(uint32 InstanceId) const
|
|
||||||
{
|
|
||||||
InstancedMaps::const_iterator i = m_InstancedMaps.find(InstanceId);
|
|
||||||
return(i == m_InstancedMaps.end() ? NULL : i->second);
|
|
||||||
}
|
|
||||||
|
|
||||||
uint16 GridMapReference[MAX_NUMBER_OF_GRIDS][MAX_NUMBER_OF_GRIDS];
|
uint16 GridMapReference[MAX_NUMBER_OF_GRIDS][MAX_NUMBER_OF_GRIDS];
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -95,9 +95,9 @@ void MapManager::checkAndCorrectGridStatesArray()
|
|||||||
++i_GridStateErrorCount;
|
++i_GridStateErrorCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
Map* MapManager::_createBaseMap(uint32 id)
|
Map* MapManager::CreateBaseMap(uint32 id)
|
||||||
{
|
{
|
||||||
Map* m = _findMap(id);
|
Map* m = FindBaseMap(id);
|
||||||
|
|
||||||
if (m == NULL)
|
if (m == NULL)
|
||||||
{
|
{
|
||||||
@@ -119,27 +119,26 @@ Map* MapManager::_createBaseMap(uint32 id)
|
|||||||
return m;
|
return m;
|
||||||
}
|
}
|
||||||
|
|
||||||
Map* MapManager::CreateMap(uint32 id, const WorldObject* obj, uint32 /*instanceId*/)
|
Map* MapManager::CreateMap(uint32 id, Player* player)
|
||||||
{
|
{
|
||||||
ASSERT(obj);
|
Map* m = CreateBaseMap(id);
|
||||||
//if (!obj->IsInWorld()) sLog->outError("GetMap: called for map %d with object (typeid %d, guid %d, mapid %d, instanceid %d) who is not in world!", id, obj->GetTypeId(), obj->GetGUIDLow(), obj->GetMapId(), obj->GetInstanceId());
|
|
||||||
Map* m = _createBaseMap(id);
|
|
||||||
|
|
||||||
if (m && (obj->GetTypeId() == TYPEID_PLAYER) && m->Instanceable()) m = ((MapInstanced*)m)->CreateInstance(id, (Player*)obj);
|
if (m && m->Instanceable())
|
||||||
|
m = ((MapInstanced*)m)->CreateInstanceForPlayer(id, player);
|
||||||
|
|
||||||
return m;
|
return m;
|
||||||
}
|
}
|
||||||
|
|
||||||
Map* MapManager::FindMap(uint32 mapid, uint32 instanceId) const
|
Map* MapManager::FindMap(uint32 mapid, uint32 instanceId) const
|
||||||
{
|
{
|
||||||
Map* map = _findMap(mapid);
|
Map* map = FindBaseMap(mapid);
|
||||||
if (!map)
|
if (!map)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if (!map->Instanceable())
|
if (!map->Instanceable())
|
||||||
return instanceId == 0 ? map : NULL;
|
return instanceId == 0 ? map : NULL;
|
||||||
|
|
||||||
return ((MapInstanced*)map)->FindMap(instanceId);
|
return ((MapInstanced*)map)->FindInstanceMap(instanceId);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MapManager::CanPlayerEnter(uint32 mapid, Player* player, bool loginCheck)
|
bool MapManager::CanPlayerEnter(uint32 mapid, Player* player, bool loginCheck)
|
||||||
@@ -248,7 +247,7 @@ bool MapManager::CanPlayerEnter(uint32 mapid, Player* player, bool loginCheck)
|
|||||||
instaceIdToCheck = save->GetInstanceId();
|
instaceIdToCheck = save->GetInstanceId();
|
||||||
|
|
||||||
// instanceId can never be 0 - will not be found
|
// instanceId can never be 0 - will not be found
|
||||||
if (!player->CheckInstanceCount(instaceIdToCheck))
|
if (!player->CheckInstanceCount(instaceIdToCheck) && !player->isDead())
|
||||||
{
|
{
|
||||||
player->SendTransferAborted(mapid, TRANSFER_ABORT_TOO_MANY_INSTANCES);
|
player->SendTransferAborted(mapid, TRANSFER_ABORT_TOO_MANY_INSTANCES);
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -35,14 +35,18 @@ class MapManager
|
|||||||
friend class ACE_Singleton<MapManager, ACE_Thread_Mutex>;
|
friend class ACE_Singleton<MapManager, ACE_Thread_Mutex>;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
Map* CreateBaseMap(uint32 mapId);
|
||||||
Map* CreateMap(uint32, const WorldObject* obj, uint32 instanceId);
|
Map* FindBaseMap(uint32 mapId) const
|
||||||
Map const* CreateBaseMap(uint32 id) const { return const_cast<MapManager*>(this)->_createBaseMap(id); }
|
{
|
||||||
Map* FindMap(uint32 mapid, uint32 instanceId = 0) const;
|
MapMapType::const_iterator iter = i_maps.find(mapId);
|
||||||
|
return (iter == i_maps.end() ? NULL : iter->second);
|
||||||
|
}
|
||||||
|
Map* CreateMap(uint32 mapId, Player* player);
|
||||||
|
Map* FindMap(uint32 mapId, uint32 instanceId) const;
|
||||||
|
|
||||||
uint16 GetAreaFlag(uint32 mapid, float x, float y, float z) const
|
uint16 GetAreaFlag(uint32 mapid, float x, float y, float z) const
|
||||||
{
|
{
|
||||||
Map const* m = CreateBaseMap(mapid);
|
Map const* m = const_cast<MapManager*>(this)->CreateBaseMap(mapid);
|
||||||
return m->GetAreaFlag(x, y, z);
|
return m->GetAreaFlag(x, y, z);
|
||||||
}
|
}
|
||||||
uint32 GetAreaId(uint32 mapid, float x, float y, float z) const
|
uint32 GetAreaId(uint32 mapid, float x, float y, float z) const
|
||||||
@@ -163,13 +167,6 @@ class MapManager
|
|||||||
MapManager(const MapManager &);
|
MapManager(const MapManager &);
|
||||||
MapManager& operator=(const MapManager &);
|
MapManager& operator=(const MapManager &);
|
||||||
|
|
||||||
Map* _createBaseMap(uint32 id);
|
|
||||||
Map* _findMap(uint32 id) const
|
|
||||||
{
|
|
||||||
MapMapType::const_iterator iter = i_maps.find(id);
|
|
||||||
return (iter == i_maps.end() ? NULL : iter->second);
|
|
||||||
}
|
|
||||||
|
|
||||||
ACE_Thread_Mutex Lock;
|
ACE_Thread_Mutex Lock;
|
||||||
uint32 i_gridCleanUpDelay;
|
uint32 i_gridCleanUpDelay;
|
||||||
MapMapType i_maps;
|
MapMapType i_maps;
|
||||||
|
|||||||
@@ -351,7 +351,7 @@ void FlightPathMovementGenerator::InitEndGridInfo()
|
|||||||
void FlightPathMovementGenerator::PreloadEndGrid()
|
void FlightPathMovementGenerator::PreloadEndGrid()
|
||||||
{
|
{
|
||||||
// used to preload the final grid where the flightmaster is
|
// used to preload the final grid where the flightmaster is
|
||||||
Map* endMap = sMapMgr->FindMap(m_endMapId);
|
Map* endMap = sMapMgr->FindBaseMap(m_endMapId);
|
||||||
|
|
||||||
// Load the grid
|
// Load the grid
|
||||||
if (endMap)
|
if (endMap)
|
||||||
|
|||||||
@@ -359,7 +359,7 @@ void PoolGroup<Creature>::Spawn1Object(PoolObject* obj)
|
|||||||
sObjectMgr->AddCreatureToGrid(obj->guid, data);
|
sObjectMgr->AddCreatureToGrid(obj->guid, data);
|
||||||
|
|
||||||
// Spawn if necessary (loaded grids only)
|
// Spawn if necessary (loaded grids only)
|
||||||
Map* map = const_cast<Map*>(sMapMgr->CreateBaseMap(data->mapid));
|
Map* map = sMapMgr->CreateBaseMap(data->mapid);
|
||||||
// We use spawn coords to spawn
|
// We use spawn coords to spawn
|
||||||
if (!map->Instanceable() && map->IsGridLoaded(data->posX, data->posY))
|
if (!map->Instanceable() && map->IsGridLoaded(data->posX, data->posY))
|
||||||
{
|
{
|
||||||
@@ -385,7 +385,7 @@ void PoolGroup<GameObject>::Spawn1Object(PoolObject* obj)
|
|||||||
sObjectMgr->AddGameobjectToGrid(obj->guid, data);
|
sObjectMgr->AddGameobjectToGrid(obj->guid, data);
|
||||||
// Spawn if necessary (loaded grids only)
|
// Spawn if necessary (loaded grids only)
|
||||||
// this base map checked as non-instanced and then only existed
|
// this base map checked as non-instanced and then only existed
|
||||||
Map* map = const_cast<Map*>(sMapMgr->CreateBaseMap(data->mapid));
|
Map* map = sMapMgr->CreateBaseMap(data->mapid);
|
||||||
// We use current coords to unspawn, not spawn coords since creature can have changed grid
|
// We use current coords to unspawn, not spawn coords since creature can have changed grid
|
||||||
if (!map->Instanceable() && map->IsGridLoaded(data->posX, data->posY))
|
if (!map->Instanceable() && map->IsGridLoaded(data->posX, data->posY))
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ void WorldSession::HandleMoveWorldportAckOpcode()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// relocate the player to the teleport destination
|
// relocate the player to the teleport destination
|
||||||
Map* newMap = sMapMgr->CreateMap(loc.GetMapId(), GetPlayer(), 0);
|
Map* newMap = sMapMgr->CreateMap(loc.GetMapId(), GetPlayer());
|
||||||
// the CanEnter checks are done in TeleporTo but conditions may change
|
// the CanEnter checks are done in TeleporTo but conditions may change
|
||||||
// while the player is in transit, for example the map may get full
|
// while the player is in transit, for example the map may get full
|
||||||
if (!newMap || !newMap->CanEnter(GetPlayer()))
|
if (!newMap || !newMap->CanEnter(GetPlayer()))
|
||||||
|
|||||||
@@ -1016,6 +1016,9 @@ enum Opcodes
|
|||||||
SMSG_OVERRIDE_LIGHT = 0x00, //
|
SMSG_OVERRIDE_LIGHT = 0x00, //
|
||||||
CMSG_RANDOMIZE_CHAR_NAME = 35481, // 14545 byte unk, byte race
|
CMSG_RANDOMIZE_CHAR_NAME = 35481, // 14545 byte unk, byte race
|
||||||
SMSG_RANDOMIZE_CHAR_NAME = 61660, // 14545 byte unk(0x80), string name
|
SMSG_RANDOMIZE_CHAR_NAME = 61660, // 14545 byte unk(0x80), string name
|
||||||
|
|
||||||
|
CMSG_MOVE_SET_COLLISION_HGT = 0, //
|
||||||
|
SMSG_MOVE_SET_COLLISION_HGT = 0, //
|
||||||
};
|
};
|
||||||
|
|
||||||
/// Player state
|
/// Player state
|
||||||
|
|||||||
@@ -7028,7 +7028,7 @@ bool Spell::CallScriptEffectHandlers(SpellEffIndex effIndex, SpellEffectHandleMo
|
|||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
ASSERT(false);
|
ASSERT(false);
|
||||||
break;
|
return false;
|
||||||
}
|
}
|
||||||
(*scritr)->_PrepareScriptCall(hookType);
|
(*scritr)->_PrepareScriptCall(hookType);
|
||||||
for (; effItr != effEndItr ; ++effItr)
|
for (; effItr != effEndItr ; ++effItr)
|
||||||
|
|||||||
@@ -443,9 +443,10 @@ DumpReturn PlayerDumpReader::LoadDump(const std::string& file, uint32 account, s
|
|||||||
typedef PetIds::value_type PetIdsPair;
|
typedef PetIds::value_type PetIdsPair;
|
||||||
PetIds petids;
|
PetIds petids;
|
||||||
|
|
||||||
uint8 gender;
|
uint8 gender = GENDER_NONE;
|
||||||
uint8 race;
|
uint8 race = RACE_NONE;
|
||||||
uint8 playerClass;
|
uint8 playerClass = 0;
|
||||||
|
|
||||||
SQLTransaction trans = CharacterDatabase.BeginTransaction();
|
SQLTransaction trans = CharacterDatabase.BeginTransaction();
|
||||||
while (!feof(fin))
|
while (!feof(fin))
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -136,9 +136,9 @@ public:
|
|||||||
{
|
{
|
||||||
uint8 r = rand()%4;
|
uint8 r = rand()%4;
|
||||||
uint8 pos[3];
|
uint8 pos[3];
|
||||||
pos[RED_PORTAL] = (r%2 ? (r>1 ? 2: 1): 0);
|
pos[RED_PORTAL] = ((r % 2) ? (r > 1 ? 2 : 1) : 0);
|
||||||
pos[GREEN_PORTAL] = (r%2 ? 0: (r>1 ? 2: 1));
|
pos[GREEN_PORTAL] = ((r % 2) ? 0 : (r > 1 ? 2 : 1));
|
||||||
pos[BLUE_PORTAL] = (r>1 ? 1: 2); // Blue Portal not on the left side (0)
|
pos[BLUE_PORTAL] = (r > 1 ? 1 : 2); // Blue Portal not on the left side (0)
|
||||||
|
|
||||||
for (int i=0; i<3; ++i)
|
for (int i=0; i<3; ++i)
|
||||||
if (Creature* portal = me->SummonCreature(PortalID[i], PortalCoord[pos[i]][0], PortalCoord[pos[i]][1], PortalCoord[pos[i]][2], 0, TEMPSUMMON_TIMED_DESPAWN, 60000))
|
if (Creature* portal = me->SummonCreature(PortalID[i], PortalCoord[pos[i]][0], PortalCoord[pos[i]][1], PortalCoord[pos[i]][2], 0, TEMPSUMMON_TIMED_DESPAWN, 60000))
|
||||||
|
|||||||
@@ -110,7 +110,7 @@ class boss_ragnaros : public CreatureScript
|
|||||||
|
|
||||||
void KilledUnit(Unit* /*victim*/)
|
void KilledUnit(Unit* /*victim*/)
|
||||||
{
|
{
|
||||||
if (urand(0, 99 < 25))
|
if (urand(0, 99) < 25)
|
||||||
DoScriptText(SAY_KILL, me);
|
DoScriptText(SAY_KILL, me);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -102,7 +102,7 @@ public:
|
|||||||
{
|
{
|
||||||
if (m_instance)
|
if (m_instance)
|
||||||
{
|
{
|
||||||
if (m_instance->GetData(TYPE_MOGRAINE_AND_WHITE_EVENT != NOT_STARTED))
|
if (m_instance->GetData(TYPE_MOGRAINE_AND_WHITE_EVENT) != NOT_STARTED)
|
||||||
m_instance->SetData(TYPE_MOGRAINE_AND_WHITE_EVENT, FAIL);
|
m_instance->SetData(TYPE_MOGRAINE_AND_WHITE_EVENT, FAIL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1335,7 +1335,7 @@ class npc_shambling_horror_icc : public CreatureScript
|
|||||||
|
|
||||||
void DamageTaken(Unit* /*attacker*/, uint32& damage)
|
void DamageTaken(Unit* /*attacker*/, uint32& damage)
|
||||||
{
|
{
|
||||||
if (IsHeroic() && me->HealthBelowPctDamaged(20, damage))
|
if (!_frenzied && IsHeroic() && me->HealthBelowPctDamaged(20, damage))
|
||||||
{
|
{
|
||||||
_frenzied = true;
|
_frenzied = true;
|
||||||
DoCast(me, SPELL_FRENZY, true);
|
DoCast(me, SPELL_FRENZY, true);
|
||||||
|
|||||||
@@ -91,7 +91,7 @@ public:
|
|||||||
_EnterCombat();
|
_EnterCombat();
|
||||||
Enraged = false;
|
Enraged = false;
|
||||||
DoScriptText(RAND(SAY_AGGRO_1, SAY_AGGRO_2), me);
|
DoScriptText(RAND(SAY_AGGRO_1, SAY_AGGRO_2), me);
|
||||||
events.ScheduleEvent(EVENT_HATEFUL, 1200);
|
events.ScheduleEvent(EVENT_HATEFUL, 1000);
|
||||||
events.ScheduleEvent(EVENT_BERSERK, 360000);
|
events.ScheduleEvent(EVENT_BERSERK, 360000);
|
||||||
|
|
||||||
if (instance)
|
if (instance)
|
||||||
@@ -131,7 +131,7 @@ public:
|
|||||||
|
|
||||||
DoCast(pMostHPTarget, RAID_MODE(SPELL_HATEFUL_STRIKE, H_SPELL_HATEFUL_STRIKE), true);
|
DoCast(pMostHPTarget, RAID_MODE(SPELL_HATEFUL_STRIKE, H_SPELL_HATEFUL_STRIKE), true);
|
||||||
|
|
||||||
events.ScheduleEvent(EVENT_HATEFUL, 1200);
|
events.ScheduleEvent(EVENT_HATEFUL, 1000);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case EVENT_BERSERK:
|
case EVENT_BERSERK:
|
||||||
@@ -140,7 +140,7 @@ public:
|
|||||||
events.ScheduleEvent(EVENT_SLIME, 2000);
|
events.ScheduleEvent(EVENT_SLIME, 2000);
|
||||||
break;
|
break;
|
||||||
case EVENT_SLIME:
|
case EVENT_SLIME:
|
||||||
DoCast(me->getVictim(), SPELL_SLIME_BOLT);
|
DoCast(me->getVictim(), SPELL_SLIME_BOLT, true);
|
||||||
events.ScheduleEvent(EVENT_SLIME, 2000);
|
events.ScheduleEvent(EVENT_SLIME, 2000);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -94,7 +94,7 @@ public:
|
|||||||
|
|
||||||
void KilledUnit(Unit* /*victim*/)
|
void KilledUnit(Unit* /*victim*/)
|
||||||
{
|
{
|
||||||
DoScriptText(rand()%2 ? SAY_SLAY1 : SAY_SLAY2, me);
|
DoScriptText(urand(0, 1) ? SAY_SLAY1 : SAY_SLAY2, me);
|
||||||
events.DelayEvents(5000, GCD_YELL);
|
events.DelayEvents(5000, GCD_YELL);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -175,7 +175,7 @@ public:
|
|||||||
SpineTargetGUID = target->GetGUID();
|
SpineTargetGUID = target->GetGUID();
|
||||||
//must let target summon, otherwise you cannot click the spine
|
//must let target summon, otherwise you cannot click the spine
|
||||||
target->SummonGameObject(GOBJECT_SPINE, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), me->GetOrientation(), 0, 0, 0, 0, 30);
|
target->SummonGameObject(GOBJECT_SPINE, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), me->GetOrientation(), 0, 0, 0, 0, 30);
|
||||||
DoScriptText(rand()%2 ? SAY_NEEDLE1 : SAY_NEEDLE2, me);
|
DoScriptText(urand(0, 1) ? SAY_NEEDLE1 : SAY_NEEDLE2, me);
|
||||||
events.DelayEvents(1500, GCD_CAST);
|
events.DelayEvents(1500, GCD_CAST);
|
||||||
events.DelayEvents(15000, GCD_YELL);
|
events.DelayEvents(15000, GCD_YELL);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -234,7 +234,7 @@ public:
|
|||||||
{
|
{
|
||||||
me->MonsterTextEmote(EMOTE_SPOUT, 0, true);
|
me->MonsterTextEmote(EMOTE_SPOUT, 0, true);
|
||||||
me->SetReactState(REACT_PASSIVE);
|
me->SetReactState(REACT_PASSIVE);
|
||||||
me->GetMotionMaster()->MoveRotate(20000, rand()%2 ? ROTATE_DIRECTION_LEFT : ROTATE_DIRECTION_RIGHT);
|
me->GetMotionMaster()->MoveRotate(20000, urand(0, 1) ? ROTATE_DIRECTION_LEFT : ROTATE_DIRECTION_RIGHT);
|
||||||
SpoutTimer = 45000;
|
SpoutTimer = 45000;
|
||||||
WhirlTimer = 20000;//whirl directly after spout
|
WhirlTimer = 20000;//whirl directly after spout
|
||||||
RotTimer = 20000;
|
RotTimer = 20000;
|
||||||
|
|||||||
@@ -556,10 +556,10 @@ void Log::outSQLDriver(const char* str, ...)
|
|||||||
{
|
{
|
||||||
outTimestamp(sqlLogFile);
|
outTimestamp(sqlLogFile);
|
||||||
|
|
||||||
va_list ap;
|
va_list apSQL;
|
||||||
va_start(ap, str);
|
va_start(apSQL, str);
|
||||||
vfprintf(sqlLogFile, str, ap);
|
vfprintf(sqlLogFile, str, apSQL);
|
||||||
va_end(ap);
|
va_end(apSQL);
|
||||||
|
|
||||||
fprintf(sqlLogFile, "\n");
|
fprintf(sqlLogFile, "\n");
|
||||||
fflush(sqlLogFile);
|
fflush(sqlLogFile);
|
||||||
@@ -646,11 +646,11 @@ void Log::outBasic(const char * str, ...)
|
|||||||
if (logfile)
|
if (logfile)
|
||||||
{
|
{
|
||||||
outTimestamp(logfile);
|
outTimestamp(logfile);
|
||||||
va_list ap;
|
va_list ap2;
|
||||||
va_start(ap, str);
|
va_start(ap2, str);
|
||||||
vfprintf(logfile, str, ap);
|
vfprintf(logfile, str, ap2);
|
||||||
fprintf(logfile, "\n" );
|
fprintf(logfile, "\n" );
|
||||||
va_end(ap);
|
va_end(ap2);
|
||||||
fflush(logfile);
|
fflush(logfile);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -690,10 +690,10 @@ void Log::outDetail(const char * str, ...)
|
|||||||
if (logfile)
|
if (logfile)
|
||||||
{
|
{
|
||||||
outTimestamp(logfile);
|
outTimestamp(logfile);
|
||||||
va_list ap;
|
va_list ap2;
|
||||||
va_start(ap, str);
|
va_start(ap2, str);
|
||||||
vfprintf(logfile, str, ap);
|
vfprintf(logfile, str, ap2);
|
||||||
va_end(ap);
|
va_end(ap2);
|
||||||
|
|
||||||
fprintf(logfile, "\n");
|
fprintf(logfile, "\n");
|
||||||
fflush(logfile);
|
fflush(logfile);
|
||||||
@@ -720,10 +720,10 @@ void Log::outDebugInLine(const char * str, ...)
|
|||||||
|
|
||||||
if (logfile)
|
if (logfile)
|
||||||
{
|
{
|
||||||
va_list ap;
|
va_list ap2;
|
||||||
va_start(ap, str);
|
va_start(ap2, str);
|
||||||
vfprintf(logfile, str, ap);
|
vfprintf(logfile, str, ap2);
|
||||||
va_end(ap);
|
va_end(ap2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -742,10 +742,10 @@ void Log::outSQLDev(const char* str, ...)
|
|||||||
|
|
||||||
if (sqlDevLogFile)
|
if (sqlDevLogFile)
|
||||||
{
|
{
|
||||||
va_list ap;
|
va_list ap2;
|
||||||
va_start(ap, str);
|
va_start(ap2, str);
|
||||||
vfprintf(sqlDevLogFile, str, ap);
|
vfprintf(sqlDevLogFile, str, ap2);
|
||||||
va_end(ap);
|
va_end(ap2);
|
||||||
|
|
||||||
fprintf(sqlDevLogFile, "\n");
|
fprintf(sqlDevLogFile, "\n");
|
||||||
fflush(sqlDevLogFile);
|
fflush(sqlDevLogFile);
|
||||||
@@ -790,10 +790,10 @@ void Log::outDebug(DebugLogFilters f, const char * str, ...)
|
|||||||
if (logfile)
|
if (logfile)
|
||||||
{
|
{
|
||||||
outTimestamp(logfile);
|
outTimestamp(logfile);
|
||||||
va_list ap;
|
va_list ap2;
|
||||||
va_start(ap, str);
|
va_start(ap2, str);
|
||||||
vfprintf(logfile, str, ap);
|
vfprintf(logfile, str, ap2);
|
||||||
va_end(ap);
|
va_end(ap2);
|
||||||
|
|
||||||
fprintf(logfile, "\n" );
|
fprintf(logfile, "\n" );
|
||||||
fflush(logfile);
|
fflush(logfile);
|
||||||
@@ -835,10 +835,10 @@ void Log::outStaticDebug(const char * str, ...)
|
|||||||
if (logfile)
|
if (logfile)
|
||||||
{
|
{
|
||||||
outTimestamp(logfile);
|
outTimestamp(logfile);
|
||||||
va_list ap;
|
va_list ap2;
|
||||||
va_start(ap, str);
|
va_start(ap2, str);
|
||||||
vfprintf(logfile, str, ap);
|
vfprintf(logfile, str, ap2);
|
||||||
va_end(ap);
|
va_end(ap2);
|
||||||
|
|
||||||
fprintf(logfile, "\n" );
|
fprintf(logfile, "\n" );
|
||||||
fflush(logfile);
|
fflush(logfile);
|
||||||
@@ -900,11 +900,11 @@ void Log::outCommand(uint32 account, const char * str, ...)
|
|||||||
if (logfile)
|
if (logfile)
|
||||||
{
|
{
|
||||||
outTimestamp(logfile);
|
outTimestamp(logfile);
|
||||||
va_list ap;
|
va_list ap2;
|
||||||
va_start(ap, str);
|
va_start(ap2, str);
|
||||||
vfprintf(logfile, str, ap);
|
vfprintf(logfile, str, ap2);
|
||||||
fprintf(logfile, "\n" );
|
fprintf(logfile, "\n" );
|
||||||
va_end(ap);
|
va_end(ap2);
|
||||||
fflush(logfile);
|
fflush(logfile);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user