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:
Rat
2011-11-23 20:23:04 +01:00
48 changed files with 600 additions and 204 deletions
@@ -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);
+4 -4
View File
@@ -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;
+2 -2
View File
@@ -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,10 +1348,10 @@ 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");
+4 -4
View File
@@ -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...
+4 -4
View File
@@ -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();
+5 -5
View File
@@ -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())
+1
View File
@@ -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);
+1
View File
@@ -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;
+23 -1
View File
@@ -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
+2 -1
View File
@@ -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";
+11 -15
View File
@@ -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)
+1 -1
View File
@@ -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))
{ {
/* /*
+5 -5
View File
@@ -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) << ','
+9 -7
View File
@@ -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());
+35
View File
@@ -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();
+16
View File
@@ -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);
+2 -2
View File
@@ -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))
{ {
+3 -3
View File
@@ -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);
+7 -3
View File
@@ -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,6 +163,10 @@ 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());
//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); map = CreateInstance(NewInstanceId, NULL, diff);
} }
} }
+6 -9
View File
@@ -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
+9 -10
View File
@@ -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;
+9 -12
View File
@@ -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)
+2 -2
View File
@@ -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
+1 -1
View File
@@ -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)
+4 -3
View File
@@ -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,8 +136,8 @@ 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)
@@ -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;
+32 -32
View File
@@ -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);
} }
} }