AQ war effort progression (#864)

The AQ war effort is now completable and required.
This commit is contained in:
Grimfeather
2025-11-18 18:44:03 +01:00
committed by GitHub
parent 02647cd191
commit b5b34f8f82
6 changed files with 553 additions and 59 deletions

View File

@@ -107,14 +107,14 @@ INSERT INTO `pool_creature` (`guid`, `pool_entry`, `chance`, `description`) VALU
(@CGUID+133, 15813, 0, 'AQ War Event Silithus Boss');
-- add Resonating Crystal Formations to Silithus and Darkshore
DELETE FROM `gameobject` WHERE `guid` IN (@OGUID+11, @OGUID+12, @OGUID+13, @OGUID+14, @OGUID+15, @OGUID+16);
DELETE FROM `gameobject` WHERE `guid` BETWEEN @OGUID+101 AND @OGUID+106;
INSERT INTO `gameobject` (`guid`, `id`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`, `ScriptName`, `VerifiedBuild`) VALUES
(@OGUID+11, 180810, 1, 0, 0, 1, 1, 6431.208496, 7.873897, 25.929821, 6.005887, 0, 0, 0, 0, 3600, 255, 1, 'gobject_ipp_aqwar', 0),
(@OGUID+12, 180810, 1, 0, 0, 1, 1, 5070.317383, 106.293625, 42.326523, 3.869612, 0, 0, 0, 0, 3600, 255, 1, 'gobject_ipp_aqwar', 0),
(@OGUID+13, 180810, 1, 0, 0, 1, 1, 4370.228027, 540.763245, 59.281170, 6.165329, 0, 0, 0, 0, 3600, 255, 1, 'gobject_ipp_aqwar', 0),
(@OGUID+14, 180810, 1, 0, 0, 1, 1, -7648.079590, 1426.084717, 2.876715, 3.538846, 0, 0, 0, 0, 3600, 255, 1, 'gobject_ipp_aqwar', 0),
(@OGUID+15, 180810, 1, 0, 0, 1, 1, -7831.400879, 857.148376, -4.281037, 1.477178, 0, 0, 0, 0, 3600, 255, 1, 'gobject_ipp_aqwar', 0),
(@OGUID+16, 180810, 1, 0, 0, 1, 1, -6317.880371, 738.097473, 9.361129, 2.939591, 0, 0, 0, 0, 3600, 255, 1, 'gobject_ipp_aqwar', 0);
(@OGUID+101, 180810, 1, 0, 0, 1, 1, 6431.208496, 7.873897, 25.929821, 6.005887, 0, 0, 0, 0, 3600, 255, 1, 'gobject_ipp_aqwar', 0),
(@OGUID+102, 180810, 1, 0, 0, 1, 1, 5070.317383, 106.293625, 42.326523, 3.869612, 0, 0, 0, 0, 3600, 255, 1, 'gobject_ipp_aqwar', 0),
(@OGUID+103, 180810, 1, 0, 0, 1, 1, 4370.228027, 540.763245, 59.281170, 6.165329, 0, 0, 0, 0, 3600, 255, 1, 'gobject_ipp_aqwar', 0),
(@OGUID+104, 180810, 1, 0, 0, 1, 1, -7648.079590, 1426.084717, 2.876715, 3.538846, 0, 0, 0, 0, 3600, 255, 1, 'gobject_ipp_aqwar', 0),
(@OGUID+105, 180810, 1, 0, 0, 1, 1, -7831.400879, 857.148376, -4.281037, 1.477178, 0, 0, 0, 0, 3600, 255, 1, 'gobject_ipp_aqwar', 0),
(@OGUID+106, 180810, 1, 0, 0, 1, 1, -6317.880371, 738.097473, 9.361129, 2.939591, 0, 0, 0, 0, 3600, 255, 1, 'gobject_ipp_aqwar', 0);
-- set Resonating Crystal Formations to 'Not selectable'
UPDATE `gameobject_template_addon` SET `flags` = 16 WHERE `entry` = 180810;

View File

@@ -9,7 +9,7 @@ INSERT INTO `creature` (`guid`, `id1`, `id2`, `id3`, `map`, `zoneId`, `areaId`,
(@CGUID+2,15431,0,0,0,0,0,1,1,1,-4915.32,-1220.84,501.658,4.07551,300,0,0,14355,0,0,0,0,0,'',0),
(@CGUID+3,15432,0,0,0,0,0,1,1,0,-4913.26,-1222.67,501.654,4.02445,300,0,0,15260,0,0,0,0,0,'',0),
(@CGUID+4,15434,0,0,0,0,0,1,1,1,-4946.99,-1281.73,501.675,0.977894,300,0,0,13495,0,0,0,0,0,'',0),
(@CGUID+5,15437,0,0,0,0,0,1,1,1,-4942.68,-1284.58,501.674,1.52846,300,0,0,14355,0,0,0,0,0,'',0),
(@CGUID+5,15437,0,0,0,0,0,1,1,1,-4940.91,-1282.46,501.672,1.63836,300,0,0,14355,0,0,0,0,0,'',0),
(@CGUID+6,15445,0,0,0,0,0,1,1,1,-4944.6,-1283.01,501.674,1.29677,300,0,0,15260,0,0,0,0,0,'',0),
(@CGUID+7,15446,0,0,0,0,0,1,1,1,-4959.54,-1176.73,501.66,3.66733,300,0,0,13495,0,0,0,0,0,'',0),
(@CGUID+8,15448,0,0,0,0,0,1,1,1,-4960.88,-1175.1,501.66,3.82756,300,0,0,14355,0,0,0,0,0,'',0),
@@ -45,13 +45,13 @@ INSERT INTO `creature` (`guid`, `id1`, `id2`, `id3`, `map`, `zoneId`, `areaId`,
(@CGUID+32,15733,0,0,0,0,0,1,1,0,-4936.65,-1209.73,501.658,3.95796,300,0,0,2614,0,0,0,0,0,'npc_ipp_we',0),
(@CGUID+33,15734,0,0,0,0,0,1,1,0,-4943.13,-1204.78,501.658,4.62712,300,0,0,2614,0,0,0,0,0,'npc_ipp_we',0),
(@CGUID+34,15735,0,0,0,0,0,1,1,0,-4936.06,-1214.82,501.639,3.21465,300,0,0,2614,0,0,0,0,0,'npc_ipp_we',0),
(@CGUID+35,21969,0,0,0,0,0,1,1,0,-4946.71,-1206.24,501.658,5.19933,300,0,0,2614,0,0,0,0,0,'npc_ipp_we',0),
-- (@CGUID+35,21969,0,0,0,0,0,1,1,0,-4946.71,-1206.24,501.658,5.19933,300,0,0,2614,0,0,0,0,0,'npc_ipp_we',0), -- Exodar Commendation Officer
-- Horde Commendation Npcs
(@CGUID+36,15736,0,0,1,0,0,1,1,0,1592.17,-4097.91,34.9759,6.25645,300,0,0,2614,0,0,0,0,0,'npc_ipp_we',0),
(@CGUID+37,15737,0,0,1,0,0,1,1,0,1595.6,-4091.94,35.8097,5.20323,300,0,0,2614,0,0,0,0,0,'npc_ipp_we',0),
(@CGUID+38,15738,0,0,1,0,0,1,1,0,1598.27,-4090.5,35.8736,5.13568,300,0,0,2614,0,0,0,0,0,'npc_ipp_we',0),
(@CGUID+39,15739,0,0,1,0,0,1,1,0,1592.84,-4094.01,35.6404,5.82527,300,0,0,2614,0,0,0,0,0,'npc_ipp_we',0),
(@CGUID+40,21968,0,0,1,0,0,1,1,0,1601.01,-4091.87,35.5195,4.52778,300,0,0,2614,0,0,0,0,0,'npc_ipp_we',0),
(@CGUID+40,21968,0,0,1,0,0,1,1,0,1601.01,-4091.87,35.5195,4.52778,300,0,0,2614,0,0,0,0,0,'npc_ipp_we',0), -- Silvermoon City Commendation Officer
-- After AQ phase, the commendation Npcs move to their respective cities until the end of WotLK expansion, allows players to use up their marks if they have any after AQ
-- Post AQ Alliance Commendation Npcs
(@CGUID+41,15731,0,0,1,0,0,1,1,0,9949.44,2497.12,1317.629,4.7139,300,0,0,2614,0,0,0,0,0,'npc_ipp_naxx40',0),
@@ -149,20 +149,109 @@ UPDATE `creature_template` SET `ScriptName` = 'npc_ipp_we' WHERE `entry` IN
15528, 15529, 15532, 15533, 15534, 15535, 15700, 15701, 15702, 15703, 15704, 15707, 15708, 15709, 21155, 21156);
-- Phase AQ War Effort Objects
DELETE FROM `gameobject` WHERE `guid` BETWEEN @OGUID+1 AND @OGUID+9;
DELETE FROM `gameobject` WHERE `guid` BETWEEN @OGUID+1 AND @OGUID+20;
INSERT INTO `gameobject` (`guid`, `id`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`,
`rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`, `ScriptName`, `VerifiedBuild`, `Comment`) VALUES
-- Horde
(@OGUID+1, 180812, 1, 0, 0, 1, 1, 1590.82, -4155.33, 36.2926, 3.7001, 0, 0, -0.961261, 0.27564, 180, 100, 1, 'gobject_ipp_we', 0, NULL), -- skins
(@OGUID+2, 180818, 1, 0, 0, 1, 1, 1637.11, -4147.21, 36.0414, 3.73501, 0, 0, -0.956305, 0.292372, 180, 100, 1, 'gobject_ipp_we', 0, NULL), -- herbs
(@OGUID+3, 180826, 1, 0, 0, 1, 1, 1579.35, -4109.25, 34.5417, 3.75246, 0, 0, -0.953716, 0.300708, 180, 100, 1, 'gobject_ipp_we', 0, NULL), -- bandages
(@OGUID+4, 180832, 1, 0, 0, 1, 1, 1619.83, -4092.43, 34.5107, 3.7001, 0, 0, -0.961261, 0.27564, 180, 100, 1, 'gobject_ipp_we', 0, NULL), -- cooking
(@OGUID+5, 180838, 1, 0, 0, 1, 1, 1683.11, -4134.35, 39.5419, 3.71755, 0, 0, -0.958819, 0.284016, 180, 100, 1, 'gobject_ipp_we', 0, NULL), -- bars
(@OGUID+1, 180812, 1, 0, 0, 1, 1, 1590.82, -4155.33, 36.2926, 3.7001, 0, 0, -0.961261, 0.27564, 180, 100, 1, 'gobject_ipp_leather_stage_0', 0, NULL),
(@OGUID+2, 180818, 1, 0, 0, 1, 1, 1637.11, -4147.21, 36.0414, 3.73501, 0, 0, -0.956305, 0.292372, 180, 100, 1, 'gobject_ipp_herbs_stage_0', 0, NULL),
(@OGUID+3, 180826, 1, 0, 0, 1, 1, 1579.35, -4109.25, 34.5417, 3.75246, 0, 0, -0.953716, 0.300708, 180, 100, 1, 'gobject_ipp_bandages_stage_0', 0, NULL),
(@OGUID+4, 180832, 1, 0, 0, 1, 1, 1619.83, -4092.43, 34.5107, 3.7001, 0, 0, -0.961261, 0.27564, 180, 100, 1, 'gobject_ipp_food_stage_0', 0, NULL),
(@OGUID+5, 180838, 1, 0, 0, 1, 1, 1683.11, -4134.35, 39.5419, 3.71755, 0, 0, -0.958819, 0.284016, 180, 100, 1, 'gobject_ipp_bars_stage_0', 0, NULL),
(@OGUID+6, 180813, 1, 0, 0, 1, 1, 1590.88, -4155.33, 36.298, 3.68265, 0, 0, -0.961261, 0.27564, 180, 100, 1, 'gobject_ipp_leather_stage_1', 0, NULL),
(@OGUID+7, 180819, 1, 0, 0, 1, 1, 1637.1, -4147.25, 36.0531, 3.73501, 0, 0, -0.956305, 0.292372, 180, 100, 1, 'gobject_ipp_herbs_stage_1', 0, NULL),
(@OGUID+8, 180827, 1, 0, 0, 1, 1, 1579.33, -4109.25, 34.5487, 3.71755, 0, 0, -0.953716, 0.300708, 180, 100, 1, 'gobject_ipp_bandages_stage_1', 0, NULL),
(@OGUID+9, 180833, 1, 0, 0, 1, 1, 1619.8, -4092.53, 34.4888, 3.7001, 0, 0, -0.961261, 0.27564, 180, 100, 1, 'gobject_ipp_food_stage_1', 0, NULL),
(@OGUID+10, 180839, 1, 0, 0, 1, 1, 1683.1, -4134.31, 39.539, 3.73501, 0, 0, -0.958819, 0.284016, 180, 100, 1, 'gobject_ipp_bars_stage_1', 0, NULL),
-- Alliance
(@OGUID+6, 180598, 0, 0, 0, 1, 1, -4971.55, -1148.57, 501.648, 2.28638, 0, 0, 0.909961, 0.414693, 180, 100, 1, 'gobject_ipp_we', 0, NULL), -- bandages
(@OGUID+7, 180681, 0, 0, 0, 1, 1, -4958.51, -1179.32, 501.659, 2.26893, 0, 0, 0.906308, 0.422618, 180, 100, 1, 'gobject_ipp_we', 0, NULL), -- skins
(@OGUID+8, 180680, 0, 0, 0, 1, 1, -4913.85, -1226, 501.651, 2.25148, 0, 0, 0.902585, 0.430511, 180, 100, 1, 'gobject_ipp_we', 0, NULL), -- bars
(@OGUID+9, 180679, 0, 0, 0, 1, 1, -4937.29, -1282.74, 501.672, 2.26893, 0, 0, 0.906308, 0.422618, 180, 100, 1, 'gobject_ipp_we', 0, NULL); -- cooking and herbs
(@OGUID+11, 180598, 0, 0, 0, 1, 1, -4971.55, -1148.57, 501.648, 2.28638, 0, 0, 0.909961, 0.414693, 180, 100, 1, 'gobject_ipp_bandages_stage_0', 0, NULL),
(@OGUID+12, 180681, 0, 0, 0, 1, 1, -4958.51, -1179.32, 501.659, 2.26893, 0, 0, 0.906308, 0.422618, 180, 100, 1, 'gobject_ipp_leather_stage_0', 0, NULL),
(@OGUID+13, 180680, 0, 0, 0, 1, 1, -4913.85, -1226, 501.651, 2.25148, 0, 0, 0.902585, 0.430511, 180, 100, 1, 'gobject_ipp_bars_stage_0', 0, NULL),
(@OGUID+14, 180679, 0, 0, 0, 1, 1, -4937.29, -1282.74, 501.672, 2.26893, 0, 0, 0.906308, 0.422618, 180, 100, 1, 'gobject_ipp_food_stage_0', 0, NULL),
(@OGUID+16, 180674, 0, 0, 0, 1, 1, -4968.33, -1152.89, 501.925, 2.26893, 0, 0, 0.909961, 0.414693, 180, 100, 1, 'gobject_ipp_bandages_stage_1', 0, NULL),
(@OGUID+17, 180692, 0, 0, 0, 1, 1, -4958.51, -1179.32, 501.659, 2.26893, 0, 0, 0.906308, 0.422618, 180, 100, 1, 'gobject_ipp_leather_stage_1', 0, NULL),
(@OGUID+18, 180780, 0, 0, 0, 1, 1, -4913.73, -1225.95, 501.651, 2.26893, 0, 0, 0.902585, 0.430511, 180, 100, 1, 'gobject_ipp_bars_stage_1', 0, NULL),
(@OGUID+19, 180800, 0, 0, 0, 1, 1, -4937.28, -1282.87, 501.672, 2.25147, 0, 0, 0.906308, 0.422618, 180, 100, 1, 'gobject_ipp_food_stage_1', 0, NULL),
(@OGUID+20, 180801, 0, 0, 0, 1, 1, -4935.58, -1284.82, 501.671, 2.25147, 0, 0, 0.906308, 0.422618, 180, 100, 1, 'gobject_ipp_herbs_stage_1', 0, NULL);
-- New 'Complete the War Effort' quest.
DELETE FROM `quest_template` WHERE `ID` IN (108850, 108855);
INSERT INTO `quest_template` (`ID`, `QuestType`, `QuestLevel`, `MinLevel`, `QuestSortID`, `QuestInfoID`, `SuggestedGroupNum`, `RequiredFactionId1`, `RequiredFactionId2`, `RequiredFactionValue1`, `RequiredFactionValue2`, `RewardNextQuest`, `RewardXPDifficulty`, `RewardMoney`, `RewardMoneyDifficulty`, `RewardDisplaySpell`, `RewardSpell`, `RewardHonor`, `RewardKillHonor`,
`StartItem`, `Flags`, `RequiredPlayerKills`, `RewardItem1`, `RewardAmount1`, `RewardItem2`, `RewardAmount2`, `RewardItem3`, `RewardAmount3`, `RewardItem4`, `RewardAmount4`, `ItemDrop1`, `ItemDropQuantity1`, `ItemDrop2`, `ItemDropQuantity2`, `ItemDrop3`, `ItemDropQuantity3`, `ItemDrop4`, `ItemDropQuantity4`,
`RewardChoiceItemID1`, `RewardChoiceItemQuantity1`, `RewardChoiceItemID2`, `RewardChoiceItemQuantity2`, `RewardChoiceItemID3`, `RewardChoiceItemQuantity3`, `RewardChoiceItemID4`, `RewardChoiceItemQuantity4`, `RewardChoiceItemID5`, `RewardChoiceItemQuantity5`, `RewardChoiceItemID6`, `RewardChoiceItemQuantity6`,
`POIContinent`, `POIx`, `POIy`, `POIPriority`, `RewardTitle`, `RewardTalents`, `RewardArenaPoints`, `RewardFactionID1`, `RewardFactionValue1`, `RewardFactionOverride1`, `RewardFactionID2`, `RewardFactionValue2`, `RewardFactionOverride2`, `RewardFactionID3`, `RewardFactionValue3`, `RewardFactionOverride3`, `RewardFactionID4`, `RewardFactionValue4`, `RewardFactionOverride4`, `RewardFactionID5`, `RewardFactionValue5`, `RewardFactionOverride5`,
`TimeAllowed`, `AllowableRaces`, `LogTitle`, `LogDescription`, `QuestDescription`, `AreaDescription`, `QuestCompletionLog`, `RequiredNpcOrGo1`, `RequiredNpcOrGo2`, `RequiredNpcOrGo3`, `RequiredNpcOrGo4`, `RequiredNpcOrGoCount1`, `RequiredNpcOrGoCount2`, `RequiredNpcOrGoCount3`, `RequiredNpcOrGoCount4`, `RequiredItemId1`, `RequiredItemId2`, `RequiredItemId3`, `RequiredItemId4`, `RequiredItemId5`, `RequiredItemId6`,
`RequiredItemCount1`, `RequiredItemCount2`, `RequiredItemCount3`, `RequiredItemCount4`, `RequiredItemCount5`, `RequiredItemCount6`, `Unknown0`, `ObjectiveText1`, `ObjectiveText2`, `ObjectiveText3`, `ObjectiveText4`, `VerifiedBuild`) VALUES
--
(108850, 0, 60, 50, -365, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21513, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1101, 'Complete the War Effort', '', '', NULL, 'Return to Field Marshal Snowfall in Ironforge.', 0, 0, 0, 0, 0, 0, 0, 0, 21436, 0, 0, 0, 0, 0, 1000, 0, 0, 0, 0, 0, 0, '', '', '', '', 0),
(108855, 0, 60, 50, -365, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21513, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 690, 'Complete the War Effort', '', '', NULL, 'Return to Warlord Gorchuk in Orgrimmar.', 0, 0, 0, 0, 0, 0, 0, 0, 21438, 0, 0, 0, 0, 0, 1000, 0, 0, 0, 0, 0, 0, '', '', '', '', 0);
DELETE FROM `quest_offer_reward` WHERE `ID` IN (108850, 108855);
INSERT INTO `quest_offer_reward` (`ID`, `Emote1`, `Emote2`, `Emote3`, `Emote4`, `EmoteDelay1`, `EmoteDelay2`, `EmoteDelay3`, `EmoteDelay4`, `RewardText`, `VerifiedBuild`) VALUES
(108850, 0, 0, 0, 0, 0, 0, 0, 0, 'You are such a selfless person. Thank you very much for your contribution to the war effort. It\'s people like you that are going to make the difference between success and failure at Ahn\'Qiraj. I just hope that all of this will be enough.$B$BThanks again, $N.', 0),
(108855, 0, 0, 0, 0, 0, 0, 0, 0, 'You are such a selfless person. Thank you very much for your contribution to the war effort. It\'s people like you that are going to make the difference between success and failure at Ahn\'Qiraj. I just hope that all of this will be enough.$B$BThanks again, $N.', 0);
DELETE FROM `quest_template_addon` WHERE `ID` IN (108850, 108855);
INSERT INTO `quest_template_addon` (`ID`, `MaxLevel`, `AllowableClasses`, `SourceSpellID`, `PrevQuestID`, `NextQuestID`, `ExclusiveGroup`, `RewardMailTemplateID`, `RewardMailDelay`,
`RequiredSkillID`, `RequiredSkillPoints`, `RequiredMinRepFaction`, `RequiredMaxRepFaction`, `RequiredMinRepValue`, `RequiredMaxRepValue`, `ProvidedItemCount`, `SpecialFlags`) VALUES
(108850, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
(108855, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
DELETE FROM `creature_queststarter` WHERE `id` = 15700 AND `quest` = 108855;
DELETE FROM `creature_queststarter` WHERE `id` = 15701 AND `quest` = 108850;
INSERT INTO `creature_queststarter` (`id`, `quest`) VALUES
(15700, 108855),
(15701, 108850);
DELETE FROM `creature_questender` WHERE `id` = 15700 AND `quest` = 108855;
DELETE FROM `creature_questender` WHERE `id` = 15701 AND `quest` = 108850;
INSERT INTO `creature_questender` (`id`, `quest`) VALUES
(15700, 108855),
(15701, 108850);
-- Hide 'Complete the War Effort' quests until the player has completed all collection quests at least once
DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` = 19 AND `ConditionTypeOrReference` = 8 AND `SourceEntry` IN (8286, 108743, 108850, 108855);
INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`,
`ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES
--
(19, 0, 108743, 0, 0, 8, 0, 108850, 0, 0, 0, 0, 0, '', 'Quest \'Simply Bang a Gong!\' requires the \'Complete the War Effort\' quest to be completed'),
(19, 0, 108743, 0, 1, 8, 0, 108855, 0, 0, 0, 0, 0, '', 'Quest \'Simply Bang a Gong!\' requires the \'Complete the War Effort\' quest to be completed'),
(19, 0, 8286, 0, 0, 8, 0, 108850, 0, 0, 0, 0, 0, '', 'Quest \'What Tomorrow Brings\' requires the \'Complete the War Effort\' quest to be completed'),
(19, 0, 8286, 0, 1, 8, 0, 108855, 0, 0, 0, 0, 0, '', 'Quest \'What Tomorrow Brings\' requires the \'Complete the War Effort\' quest to be completed'),
-- Alliance
(19, 0, 108850, 0, 0, 8, 0, 8492, 0, 0, 0, 0, 0, '', 'Quest \'Complete the War Effort\' requires QUEST_COPPER_BARS_A'),
(19, 0, 108850, 0, 0, 8, 0, 8494, 0, 0, 0, 0, 0, '', 'Quest \'Complete the War Effort\' requires QUEST_IRON_BARS'),
(19, 0, 108850, 0, 0, 8, 0, 8499, 0, 0, 0, 0, 0, '', 'Quest \'Complete the War Effort\' requires QUEST_THORIUM_BARS'),
(19, 0, 108850, 0, 0, 8, 0, 8503, 0, 0, 0, 0, 0, '', 'Quest \'Complete the War Effort\' requires QUEST_STRANGLEKELP'),
(19, 0, 108850, 0, 0, 8, 0, 8505, 0, 0, 0, 0, 0, '', 'Quest \'Complete the War Effort\' requires QUEST_PURPLE_LOTUS_A'),
(19, 0, 108850, 0, 0, 8, 0, 8509, 0, 0, 0, 0, 0, '', 'Quest \'Complete the War Effort\' requires QUEST_ARTHAS_TEARS'),
(19, 0, 108850, 0, 0, 8, 0, 8511, 0, 0, 0, 0, 0, '', 'Quest \'Complete the War Effort\' requires QUEST_LIGHT_LEATHER'),
(19, 0, 108850, 0, 0, 8, 0, 8513, 0, 0, 0, 0, 0, '', 'Quest \'Complete the War Effort\' requires QUEST_MEDIUM_LEATHER'),
(19, 0, 108850, 0, 0, 8, 0, 8515, 0, 0, 0, 0, 0, '', 'Quest \'Complete the War Effort\' requires QUEST_THICK_LEATHER_A'),
(19, 0, 108850, 0, 0, 8, 0, 8517, 0, 0, 0, 0, 0, '', 'Quest \'Complete the War Effort\' requires QUEST_LINEN_BANDAGES'),
(19, 0, 108850, 0, 0, 8, 0, 8520, 0, 0, 0, 0, 0, '', 'Quest \'Complete the War Effort\' requires QUEST_SILK_BANDAGES'),
(19, 0, 108850, 0, 0, 8, 0, 8522, 0, 0, 0, 0, 0, '', 'Quest \'Complete the War Effort\' requires QUEST_RUNECLOTH_BANDAGES_A'),
(19, 0, 108850, 0, 0, 8, 0, 8524, 0, 0, 0, 0, 0, '', 'Quest \'Complete the War Effort\' requires QUEST_RAINBOW_FIN'),
(19, 0, 108850, 0, 0, 8, 0, 8526, 0, 0, 0, 0, 0, '', 'Quest \'Complete the War Effort\' requires QUEST_ROAST_RAPTOR'),
(19, 0, 108850, 0, 0, 8, 0, 8528, 0, 0, 0, 0, 0, '', 'Quest \'Complete the War Effort\' requires QUEST_SPOTTED_YELLOWTAIL_A'),
-- Horde
(19, 0, 108855, 0, 0, 8, 0, 8532, 0, 0, 0, 0, 0, '', 'Quest \'Complete the War Effort\' requires QUEST_COPPER_BARS_H'),
(19, 0, 108855, 0, 0, 8, 0, 8542, 0, 0, 0, 0, 0, '', 'Quest \'Complete the War Effort\' requires QUEST_TIN_BARS'),
(19, 0, 108855, 0, 0, 8, 0, 8545, 0, 0, 0, 0, 0, '', 'Quest \'Complete the War Effort\' requires QUEST_MITHRIL_BARS'),
(19, 0, 108855, 0, 0, 8, 0, 8549, 0, 0, 0, 0, 0, '', 'Quest \'Complete the War Effort\' requires QUEST_PEACEBLOOM'),
(19, 0, 108855, 0, 0, 8, 0, 8580, 0, 0, 0, 0, 0, '', 'Quest \'Complete the War Effort\' requires QUEST_FIREBLOOM'),
(19, 0, 108855, 0, 0, 8, 0, 8582, 0, 0, 0, 0, 0, '', 'Quest \'Complete the War Effort\' requires QUEST_PURPLE_LOTUS_H'),
(19, 0, 108855, 0, 0, 8, 0, 8588, 0, 0, 0, 0, 0, '', 'Quest \'Complete the War Effort\' requires QUEST_HEAVY_LEATHER'),
(19, 0, 108855, 0, 0, 8, 0, 8590, 0, 0, 0, 0, 0, '', 'Quest \'Complete the War Effort\' requires QUEST_THICK_LEATHER_H'),
(19, 0, 108855, 0, 0, 8, 0, 8600, 0, 0, 0, 0, 0, '', 'Quest \'Complete the War Effort\' requires QUEST_RUGGED_LEATHER'),
(19, 0, 108855, 0, 0, 8, 0, 8604, 0, 0, 0, 0, 0, '', 'Quest \'Complete the War Effort\' requires QUEST_WOOL_BANDAGES'),
(19, 0, 108855, 0, 0, 8, 0, 8607, 0, 0, 0, 0, 0, '', 'Quest \'Complete the War Effort\' requires QUEST_MAGEWEAVE_BANDAGES'),
(19, 0, 108855, 0, 0, 8, 0, 8609, 0, 0, 0, 0, 0, '', 'Quest \'Complete the War Effort\' requires QUEST_RUNECLOTH_BANDAGES_H'),
(19, 0, 108855, 0, 0, 8, 0, 8611, 0, 0, 0, 0, 0, '', 'Quest \'Complete the War Effort\' requires QUEST_LEAN_WOLF_STEAK'),
(19, 0, 108855, 0, 0, 8, 0, 8613, 0, 0, 0, 0, 0, '', 'Quest \'Complete the War Effort\' requires QUEST_SPOTTED_YELLOWTAIL_H'),
(19, 0, 108855, 0, 0, 8, 0, 8615, 0, 0, 0, 0, 0, '', 'Quest \'Complete the War Effort\' requires QUEST_BAKED_SALMON');
-- Alliance CompletionText fixes
UPDATE `quest_request_items` SET `CompletionText` = 'I do so hope that you have been successful in gathering the thorium bars that we spoke of earlier.' WHERE `ID` = 8499;

View File

@@ -47,7 +47,7 @@ enum ProgressionBossIDs
LICH_KING = 36597,
HALION = 39863,
RHAHK_ZOR = 644,
SNEED = 643,
SNEED = 643,
GILNID = 1763
};
@@ -77,6 +77,42 @@ enum ProgressionQuestIDs
CHAOS_AND_DESTRUCTION = 108744
};
enum WarEffortQuestIDs
{
// alliance
QUEST_COPPER_BARS_A = 8492,
QUEST_IRON_BARS = 8494,
QUEST_THORIUM_BARS = 8499,
QUEST_STRANGLEKELP = 8503,
QUEST_PURPLE_LOTUS_A = 8505,
QUEST_ARTHAS_TEARS = 8509,
QUEST_LIGHT_LEATHER = 8511,
QUEST_MEDIUM_LEATHER = 8513,
QUEST_THICK_LEATHER_A = 8515,
QUEST_LINEN_BANDAGES = 8517,
QUEST_SILK_BANDAGES = 8520,
QUEST_RUNECLOTH_BANDAGES_A = 8522,
QUEST_RAINBOW_FIN = 8524,
QUEST_ROAST_RAPTOR = 8526,
QUEST_SPOTTED_YELLOWTAIL_A = 8528,
// horde
QUEST_COPPER_BARS_H = 8532,
QUEST_TIN_BARS = 8542,
QUEST_MITHRIL_BARS = 8545,
QUEST_PEACEBLOOM = 8549,
QUEST_FIREBLOOM = 8580,
QUEST_PURPLE_LOTUS_H = 8582,
QUEST_HEAVY_LEATHER = 8588,
QUEST_THICK_LEATHER_H = 8590,
QUEST_RUGGED_LEATHER = 8600,
QUEST_WOOL_BANDAGES = 8604,
QUEST_MAGEWEAVE_BANDAGES = 8607,
QUEST_RUNECLOTH_BANDAGES_H = 8609,
QUEST_LEAN_WOLF_STEAK = 8611,
QUEST_SPOTTED_YELLOWTAIL_H = 8613,
QUEST_BAKED_SALMON = 8615
};
enum ProgressionAchievements
{
KEL_THUZAD_40_KILL = 533,
@@ -368,7 +404,7 @@ public:
void AwardEarnedVanillaPvpTitles(Player* player);
static void LoadCustomProgressionEntries(const std::string& customProgressionString);
static void RemovePlayerAchievement(uint16 playerGUID, uint16 achievementId);
static void AdjustStats(Player* player, float computedPowerAdjustment, float computedHealthAdjustment);
static void AdjustStats(Player* player, float computedPowerAdjustment, float computedHealthAdjustment);
static float ComputeVanillaAdjustment(uint8 playerLevel, float configAdjustmentValue);
static uint8 GetAccountProgression(uint32 accountId);
};

View File

@@ -27,41 +27,6 @@ public:
}
};
class gobject_ipp_we : public GameObjectScript
{
public:
gobject_ipp_we() : GameObjectScript("gobject_ipp_we") { }
struct gobject_ipp_weAI: GameObjectAI
{
explicit gobject_ipp_weAI(GameObject* object) : GameObjectAI(object) { };
bool CanBeSeen(Player const* player) override
{
if (player->IsGameMaster() || !sIndividualProgression->enabled)
{
return true;
}
Player* target = ObjectAccessor::FindConnectedPlayer(player->GetGUID());
if (sIndividualProgression->hasPassedProgression(target, PROGRESSION_PRE_AQ))
{
return sIndividualProgression->isBeforeProgression(target, PROGRESSION_PRE_AQ);
}
else
{
return sIndividualProgression->hasPassedProgression(target, PROGRESSION_BLACKWING_LAIR);
}
}
};
GameObjectAI* GetAI(GameObject* object) const override
{
return new gobject_ipp_weAI(object);
}
};
class gobject_ipp_aqwar : public GameObjectScript
{
public:
@@ -73,7 +38,7 @@ public:
bool CanBeSeen(Player const* player) override
{
if (player->IsGameMaster() || !sIndividualProgression->enabled)
if (player->IsGameMaster())
{
return true;
}
@@ -777,7 +742,6 @@ public:
void AddSC_mod_individual_progression_awareness()
{
new gobject_ipp_preaq(); // Wanted poster Cenarion Hold
new gobject_ipp_we(); // War Effort supplies in cities
new gobject_ipp_aqwar(); // AQ war crystals
new gobject_ipp_si(); // Scourge Invasion
new gobject_ipp_naxx40();

View File

@@ -36,6 +36,7 @@ void AddSC_custom_gameobjects_40();
void AddSC_custom_scripts_40();
void AddSC_Ipp_Wotlk_Modded_Scripts();
void AddSC_aq_scripts();
void AddSC_aq_we_scripts();
void AddSC_cot_scripts();
void AddSC_misc_scripts();
void AddSC_ipp_spell_scripts();
@@ -82,6 +83,7 @@ void Addmod_individual_progressionScripts()
AddSC_custom_scripts_40();
AddSC_Ipp_Wotlk_Modded_Scripts();
AddSC_aq_scripts();
AddSC_aq_we_scripts();
AddSC_cot_scripts();
AddSC_misc_scripts();
AddSC_ipp_spell_scripts();

View File

@@ -0,0 +1,403 @@
#include "IndividualProgression.h"
#include "WorldState.h"
class gobject_ipp_leather_stage_0 : public GameObjectScript
{
public:
gobject_ipp_leather_stage_0() : GameObjectScript("gobject_ipp_leather_stage_0") { }
struct gobject_ipp_leather_stage_0AI: GameObjectAI
{
explicit gobject_ipp_leather_stage_0AI(GameObject* object) : GameObjectAI(object) { };
bool CanBeSeen(Player const* player) override
{
Player* target = ObjectAccessor::FindConnectedPlayer(player->GetGUID());
if (sIndividualProgression->hasPassedProgression(target, PROGRESSION_PRE_AQ))
{
return false;
}
else if (sIndividualProgression->hasPassedProgression(target, PROGRESSION_BLACKWING_LAIR))
{
return true;
}
return false;
}
};
GameObjectAI* GetAI(GameObject* object) const override
{
return new gobject_ipp_leather_stage_0AI(object);
}
};
class gobject_ipp_leather_stage_1 : public GameObjectScript
{
public:
gobject_ipp_leather_stage_1() : GameObjectScript("gobject_ipp_leather_stage_1") { }
struct gobject_ipp_leather_stage_1AI: GameObjectAI
{
explicit gobject_ipp_leather_stage_1AI(GameObject* object) : GameObjectAI(object) { };
bool CanBeSeen(Player const* player) override
{
Player* target = ObjectAccessor::FindConnectedPlayer(player->GetGUID());
if (sIndividualProgression->hasPassedProgression(target, PROGRESSION_PRE_AQ))
{
return false;
}
else if (sIndividualProgression->hasPassedProgression(target, PROGRESSION_BLACKWING_LAIR))
{
uint8 leatherQuests = 0;
if (((player->GetQuestStatus(QUEST_LIGHT_LEATHER) == QUEST_STATUS_REWARDED) &&
(player->GetQuestStatus(QUEST_MEDIUM_LEATHER) == QUEST_STATUS_REWARDED) &&
(player->GetQuestStatus(QUEST_THICK_LEATHER_A) == QUEST_STATUS_REWARDED)) ||
((player->GetQuestStatus(QUEST_THICK_LEATHER_H) == QUEST_STATUS_REWARDED) &&
(player->GetQuestStatus(QUEST_RUGGED_LEATHER) == QUEST_STATUS_REWARDED) &&
(player->GetQuestStatus(QUEST_HEAVY_LEATHER) == QUEST_STATUS_REWARDED)))
{
leatherQuests = 1;
}
if (leatherQuests == 1)
return true;
}
return false;
}
};
GameObjectAI* GetAI(GameObject* object) const override
{
return new gobject_ipp_leather_stage_1AI(object);
}
};
class gobject_ipp_herbs_stage_0 : public GameObjectScript
{
public:
gobject_ipp_herbs_stage_0() : GameObjectScript("gobject_ipp_herbs_stage_0") { }
struct gobject_ipp_herbs_stage_0AI: GameObjectAI
{
explicit gobject_ipp_herbs_stage_0AI(GameObject* object) : GameObjectAI(object) { };
bool CanBeSeen(Player const* player) override
{
Player* target = ObjectAccessor::FindConnectedPlayer(player->GetGUID());
if (sIndividualProgression->hasPassedProgression(target, PROGRESSION_PRE_AQ))
{
return false;
}
else if (sIndividualProgression->hasPassedProgression(target, PROGRESSION_BLACKWING_LAIR))
{
return true;
}
return false;
}
};
GameObjectAI* GetAI(GameObject* object) const override
{
return new gobject_ipp_herbs_stage_0AI(object);
}
};
class gobject_ipp_herbs_stage_1 : public GameObjectScript
{
public:
gobject_ipp_herbs_stage_1() : GameObjectScript("gobject_ipp_herbs_stage_1") { }
struct gobject_ipp_herbs_stage_1AI: GameObjectAI
{
explicit gobject_ipp_herbs_stage_1AI(GameObject* object) : GameObjectAI(object) { };
bool CanBeSeen(Player const* player) override
{
Player* target = ObjectAccessor::FindConnectedPlayer(player->GetGUID());
if (sIndividualProgression->hasPassedProgression(target, PROGRESSION_PRE_AQ))
{
return false;
}
else if (sIndividualProgression->hasPassedProgression(target, PROGRESSION_BLACKWING_LAIR))
{
uint8 herbQuests = 0;
if (((player->GetQuestStatus(QUEST_STRANGLEKELP) == QUEST_STATUS_REWARDED) &&
(player->GetQuestStatus(QUEST_ARTHAS_TEARS) == QUEST_STATUS_REWARDED) &&
(player->GetQuestStatus(QUEST_PURPLE_LOTUS_A) == QUEST_STATUS_REWARDED)) ||
((player->GetQuestStatus(QUEST_PEACEBLOOM) == QUEST_STATUS_REWARDED) &&
(player->GetQuestStatus(QUEST_FIREBLOOM) == QUEST_STATUS_REWARDED) &&
(player->GetQuestStatus(QUEST_PURPLE_LOTUS_H) == QUEST_STATUS_REWARDED)))
{
herbQuests = 1;
}
if (herbQuests == 1)
return true;
}
return false;
}
};
GameObjectAI* GetAI(GameObject* object) const override
{
return new gobject_ipp_herbs_stage_1AI(object);
}
};
class gobject_ipp_bars_stage_0 : public GameObjectScript
{
public:
gobject_ipp_bars_stage_0() : GameObjectScript("gobject_ipp_bars_stage_0") { }
struct gobject_ipp_bars_stage_0AI: GameObjectAI
{
explicit gobject_ipp_bars_stage_0AI(GameObject* object) : GameObjectAI(object) { };
bool CanBeSeen(Player const* player) override
{
Player* target = ObjectAccessor::FindConnectedPlayer(player->GetGUID());
if (sIndividualProgression->hasPassedProgression(target, PROGRESSION_PRE_AQ))
{
return false;
}
else if (sIndividualProgression->hasPassedProgression(target, PROGRESSION_BLACKWING_LAIR))
{
return true;
}
return false;
}
};
GameObjectAI* GetAI(GameObject* object) const override
{
return new gobject_ipp_bars_stage_0AI(object);
}
};
class gobject_ipp_bars_stage_1 : public GameObjectScript
{
public:
gobject_ipp_bars_stage_1() : GameObjectScript("gobject_ipp_bars_stage_1") { }
struct gobject_ipp_bars_stage_1AI: GameObjectAI
{
explicit gobject_ipp_bars_stage_1AI(GameObject* object) : GameObjectAI(object) { };
bool CanBeSeen(Player const* player) override
{
Player* target = ObjectAccessor::FindConnectedPlayer(player->GetGUID());
if (sIndividualProgression->hasPassedProgression(target, PROGRESSION_PRE_AQ))
{
return false;
}
else if (sIndividualProgression->hasPassedProgression(target, PROGRESSION_BLACKWING_LAIR))
{
uint8 barQuests = 0;
if (((player->GetQuestStatus(QUEST_COPPER_BARS_A) == QUEST_STATUS_REWARDED) &&
(player->GetQuestStatus(QUEST_IRON_BARS) == QUEST_STATUS_REWARDED) &&
(player->GetQuestStatus(QUEST_THORIUM_BARS) == QUEST_STATUS_REWARDED)) ||
((player->GetQuestStatus(QUEST_COPPER_BARS_H) == QUEST_STATUS_REWARDED) &&
(player->GetQuestStatus(QUEST_TIN_BARS) == QUEST_STATUS_REWARDED) &&
(player->GetQuestStatus(QUEST_MITHRIL_BARS) == QUEST_STATUS_REWARDED)))
{
barQuests = 1;
}
if (barQuests == 1)
return true;
}
return false;
}
};
GameObjectAI* GetAI(GameObject* object) const override
{
return new gobject_ipp_bars_stage_1AI(object);
}
};
class gobject_ipp_food_stage_0 : public GameObjectScript
{
public:
gobject_ipp_food_stage_0() : GameObjectScript("gobject_ipp_food_stage_0") { }
struct gobject_ipp_food_stage_0AI: GameObjectAI
{
explicit gobject_ipp_food_stage_0AI(GameObject* object) : GameObjectAI(object) { };
bool CanBeSeen(Player const* player) override
{
Player* target = ObjectAccessor::FindConnectedPlayer(player->GetGUID());
if (sIndividualProgression->hasPassedProgression(target, PROGRESSION_PRE_AQ))
{
return false;
}
else if (sIndividualProgression->hasPassedProgression(target, PROGRESSION_BLACKWING_LAIR))
{
return true;
}
return false;
}
};
GameObjectAI* GetAI(GameObject* object) const override
{
return new gobject_ipp_food_stage_0AI(object);
}
};
class gobject_ipp_food_stage_1 : public GameObjectScript
{
public:
gobject_ipp_food_stage_1() : GameObjectScript("gobject_ipp_food_stage_1") { }
struct gobject_ipp_food_stage_1AI: GameObjectAI
{
explicit gobject_ipp_food_stage_1AI(GameObject* object) : GameObjectAI(object) { };
bool CanBeSeen(Player const* player) override
{
Player* target = ObjectAccessor::FindConnectedPlayer(player->GetGUID());
if (sIndividualProgression->hasPassedProgression(target, PROGRESSION_PRE_AQ))
{
return false;
}
else if (sIndividualProgression->hasPassedProgression(target, PROGRESSION_BLACKWING_LAIR))
{
uint8 foodQuests = 0;
if (((player->GetQuestStatus(QUEST_RAINBOW_FIN) == QUEST_STATUS_REWARDED) &&
(player->GetQuestStatus(QUEST_ROAST_RAPTOR) == QUEST_STATUS_REWARDED) &&
(player->GetQuestStatus(QUEST_SPOTTED_YELLOWTAIL_A) == QUEST_STATUS_REWARDED)) ||
((player->GetQuestStatus(QUEST_LEAN_WOLF_STEAK) == QUEST_STATUS_REWARDED) &&
(player->GetQuestStatus(QUEST_SPOTTED_YELLOWTAIL_H) == QUEST_STATUS_REWARDED) &&
(player->GetQuestStatus(QUEST_BAKED_SALMON) == QUEST_STATUS_REWARDED)))
{
foodQuests = 1;
}
if (foodQuests == 1)
return true;
}
return false;
}
};
GameObjectAI* GetAI(GameObject* object) const override
{
return new gobject_ipp_food_stage_1AI(object);
}
};
class gobject_ipp_bandages_stage_0 : public GameObjectScript
{
public:
gobject_ipp_bandages_stage_0() : GameObjectScript("gobject_ipp_bandages_stage_0") { }
struct gobject_ipp_bandages_stage_0AI: GameObjectAI
{
explicit gobject_ipp_bandages_stage_0AI(GameObject* object) : GameObjectAI(object) { };
bool CanBeSeen(Player const* player) override
{
Player* target = ObjectAccessor::FindConnectedPlayer(player->GetGUID());
if (sIndividualProgression->hasPassedProgression(target, PROGRESSION_PRE_AQ))
{
return false;
}
else if (sIndividualProgression->hasPassedProgression(target, PROGRESSION_BLACKWING_LAIR))
{
return true;
}
return false;
}
};
GameObjectAI* GetAI(GameObject* object) const override
{
return new gobject_ipp_bandages_stage_0AI(object);
}
};
class gobject_ipp_bandages_stage_1 : public GameObjectScript
{
public:
gobject_ipp_bandages_stage_1() : GameObjectScript("gobject_ipp_bandages_stage_1") { }
struct gobject_ipp_bandages_stage_1AI: GameObjectAI
{
explicit gobject_ipp_bandages_stage_1AI(GameObject* object) : GameObjectAI(object) { };
bool CanBeSeen(Player const* player) override
{
Player* target = ObjectAccessor::FindConnectedPlayer(player->GetGUID());
if (sIndividualProgression->hasPassedProgression(target, PROGRESSION_PRE_AQ))
{
return false;
}
else if (sIndividualProgression->hasPassedProgression(target, PROGRESSION_BLACKWING_LAIR))
{
uint8 bandagesQuests = 0;
if (((player->GetQuestStatus(QUEST_LINEN_BANDAGES) == QUEST_STATUS_REWARDED) &&
(player->GetQuestStatus(QUEST_SILK_BANDAGES) == QUEST_STATUS_REWARDED) &&
(player->GetQuestStatus(QUEST_RUNECLOTH_BANDAGES_A) == QUEST_STATUS_REWARDED)) ||
((player->GetQuestStatus(QUEST_WOOL_BANDAGES) == QUEST_STATUS_REWARDED) &&
(player->GetQuestStatus(QUEST_MAGEWEAVE_BANDAGES) == QUEST_STATUS_REWARDED) &&
(player->GetQuestStatus(QUEST_RUNECLOTH_BANDAGES_H) == QUEST_STATUS_REWARDED)))
{
bandagesQuests = 1;
}
if (bandagesQuests == 1)
return true;
}
return false;
}
};
GameObjectAI* GetAI(GameObject* object) const override
{
return new gobject_ipp_bandages_stage_1AI(object);
}
};
void AddSC_aq_we_scripts()
{
new gobject_ipp_leather_stage_0();
new gobject_ipp_leather_stage_1();
new gobject_ipp_herbs_stage_0();
new gobject_ipp_herbs_stage_1();
new gobject_ipp_bars_stage_0();
new gobject_ipp_bars_stage_1();
new gobject_ipp_food_stage_0();
new gobject_ipp_food_stage_1();
new gobject_ipp_bandages_stage_0();
new gobject_ipp_bandages_stage_1();
}