From 50a2b29fee0f7e4737955cac53baf6cc21ea2bec Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Thu, 5 Sep 2024 15:56:29 +0200 Subject: [PATCH] Add ShB tank role quests --- .../3243_The Man with Too Many Scars.json | 152 ++++++++++- .../Tank/3244_Shaped by Tragedy.json | 108 ++++++++ .../Tank/3245_Defined by Loss.json | 250 ++++++++++++++++++ .../3246_The Princess and Her Knight.json | 183 +++++++++++++ .../Tank/3247_The Hardened Heart.json | 69 +++++ .../Tank/3248_To Have Loved and Lost.json | 102 +++++++ .../Controller/Steps/Interactions/Interact.cs | 3 + .../Controller/Steps/Interactions/UseItem.cs | 7 +- .../QuestComponents/CreationUtilsComponent.cs | 10 +- 9 files changed, 879 insertions(+), 5 deletions(-) create mode 100644 QuestPaths/5.x - Shadowbringers/Role Quests/Tank/3244_Shaped by Tragedy.json create mode 100644 QuestPaths/5.x - Shadowbringers/Role Quests/Tank/3245_Defined by Loss.json create mode 100644 QuestPaths/5.x - Shadowbringers/Role Quests/Tank/3246_The Princess and Her Knight.json create mode 100644 QuestPaths/5.x - Shadowbringers/Role Quests/Tank/3247_The Hardened Heart.json create mode 100644 QuestPaths/5.x - Shadowbringers/Role Quests/Tank/3248_To Have Loved and Lost.json diff --git a/QuestPaths/5.x - Shadowbringers/Role Quests/Tank/3243_The Man with Too Many Scars.json b/QuestPaths/5.x - Shadowbringers/Role Quests/Tank/3243_The Man with Too Many Scars.json index 02adab4a2..e91554f78 100644 --- a/QuestPaths/5.x - Shadowbringers/Role Quests/Tank/3243_The Man with Too Many Scars.json +++ b/QuestPaths/5.x - Shadowbringers/Role Quests/Tank/3243_The Man with Too Many Scars.json @@ -1,7 +1,6 @@ { "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", "Author": "liza", - "Disabled": true, "QuestSequence": [ { "Sequence": 0, @@ -18,7 +17,7 @@ "AetheryteShortcut": "Crystarium", "AethernetShortcut": [ "[Crystarium] Aetheryte Plaza", - "[Crystarium] Musica Universalis Markets" + "[Crystarium] The Pendants" ], "SkipConditions": { "AetheryteShortcutIf": { @@ -27,6 +26,155 @@ } } ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1029890, + "Position": { + "X": 738.796, + "Y": 22.936495, + "Z": 406.21033 + }, + "TerritoryId": 813, + "InteractionType": "Interact", + "AethernetShortcut": [ + "[Crystarium] The Pendants", + "[Crystarium] Tessellation (Lakeland)" + ], + "Fly": true + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "Position": { + "X": 447.0961, + "Y": 13.008003, + "Z": 210.91484 + }, + "StopDistance": 0.25, + "TerritoryId": 813, + "InteractionType": "Jump", + "JumpDestination": { + "Position": { + "X": 448.69727, + "Y": 13.393556, + "Z": 205.00368 + } + }, + "SkipConditions": { + "StepIf": { + "Flying": "Unlocked" + } + } + }, + { + "DataId": 2009942, + "Position": { + "X": 453.4828, + "Y": 13.626221, + "Z": 189.44067 + }, + "TerritoryId": 813, + "InteractionType": "Combat", + "EnemySpawnType": "AfterInteraction", + "KillEnemyDataIds": [ + 10853 + ], + "Fly": true + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 1029891, + "Position": { + "X": 445.27344, + "Y": 13.409448, + "Z": 204.42505 + }, + "TerritoryId": 813, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 4, + "Steps": [ + { + "Position": { + "X": 412.249, + "Y": 7.472949, + "Z": 187.34154 + }, + "TerritoryId": 813, + "InteractionType": "WalkTo", + "DisableNavmesh": true, + "Mount": true, + "SkipConditions": { + "StepIf": { + "Flying": "Unlocked" + } + } + }, + { + "DataId": 2009943, + "Position": { + "X": 633.6614, + "Y": 21.377869, + "Z": -267.93323 + }, + "TerritoryId": 813, + "InteractionType": "Combat", + "EnemySpawnType": "AfterInteraction", + "KillEnemyDataIds": [ + 10854 + ], + "Fly": true + } + ] + }, + { + "Sequence": 5, + "Steps": [ + { + "DataId": 1029892, + "Position": { + "X": 635.1262, + "Y": 20.257477, + "Z": -249.22565 + }, + "TerritoryId": 813, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1029889, + "Position": { + "X": -35.385742, + "Y": 3.9998174, + "Z": 251.75854 + }, + "TerritoryId": 819, + "InteractionType": "CompleteQuest", + "AetheryteShortcut": "Crystarium", + "AethernetShortcut": [ + "[Crystarium] Aetheryte Plaza", + "[Crystarium] The Pendants" + ], + "NextQuestId": 3244 + } + ] } ] } diff --git a/QuestPaths/5.x - Shadowbringers/Role Quests/Tank/3244_Shaped by Tragedy.json b/QuestPaths/5.x - Shadowbringers/Role Quests/Tank/3244_Shaped by Tragedy.json new file mode 100644 index 000000000..a77ac9b28 --- /dev/null +++ b/QuestPaths/5.x - Shadowbringers/Role Quests/Tank/3244_Shaped by Tragedy.json @@ -0,0 +1,108 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1029889, + "Position": { + "X": -35.385742, + "Y": 3.9998174, + "Z": 251.75854 + }, + "TerritoryId": 819, + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Crystarium", + "AethernetShortcut": [ + "[Crystarium] Aetheryte Plaza", + "[Crystarium] The Pendants" + ], + "SkipConditions": { + "AetheryteShortcutIf": { + "InSameTerritory": true + } + } + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1029893, + "Position": { + "X": -248.34064, + "Y": 21.086334, + "Z": 346.0287 + }, + "TerritoryId": 814, + "InteractionType": "Interact", + "AetheryteShortcut": "Kholusia - Wright" + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1029895, + "Position": { + "X": -317.43347, + "Y": 19.407524, + "Z": 404.3794 + }, + "TerritoryId": 814, + "InteractionType": "Interact", + "Fly": true, + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + }, + { + "DataId": 1029896, + "Position": { + "X": -311.57397, + "Y": 17.772081, + "Z": 443.8086 + }, + "TerritoryId": 814, + "InteractionType": "Interact", + "Fly": true, + "Mount": true, + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1029893, + "Position": { + "X": -248.34064, + "Y": 21.086334, + "Z": 346.0287 + }, + "TerritoryId": 814, + "InteractionType": "CompleteQuest", + "Fly": true, + "NextQuestId": 3245 + } + ] + } + ] +} diff --git a/QuestPaths/5.x - Shadowbringers/Role Quests/Tank/3245_Defined by Loss.json b/QuestPaths/5.x - Shadowbringers/Role Quests/Tank/3245_Defined by Loss.json new file mode 100644 index 000000000..9c6840838 --- /dev/null +++ b/QuestPaths/5.x - Shadowbringers/Role Quests/Tank/3245_Defined by Loss.json @@ -0,0 +1,250 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1029893, + "Position": { + "X": -248.34064, + "Y": 21.086334, + "Z": 346.0287 + }, + "TerritoryId": 814, + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Kholusia - Wright", + "SkipConditions": { + "AetheryteShortcutIf": { + "NearPosition": { + "Position": { + "X": -248.34064, + "Y": 21.086334, + "Z": 346.0287 + }, + "TerritoryId": 814, + "MaximumDistance": 100 + } + } + } + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "Position": { + "X": 173.40976, + "Y": 58.977684, + "Z": 883.3417 + }, + "TerritoryId": 814, + "InteractionType": "WalkTo", + "Fly": true, + "SkipConditions": { + "StepIf": { + "AetheryteUnlocked": "Eulmore", + "InTerritory": [ + 820 + ] + } + } + }, + { + "DataId": 1029899, + "Position": { + "X": 34.561646, + "Y": 83.001076, + "Z": -67.00244 + }, + "TerritoryId": 820, + "InteractionType": "Interact", + "AetheryteShortcut": "Eulmore", + "SkipConditions": { + "AetheryteShortcutIf": { + "AetheryteLocked": "Eulmore" + } + } + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1029893, + "Position": { + "X": -248.34064, + "Y": 21.086334, + "Z": 346.0287 + }, + "TerritoryId": 814, + "InteractionType": "Interact", + "AetheryteShortcut": "Kholusia - Wright" + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "Position": { + "X": 271.6878, + "Y": 7.1558237, + "Z": -197.58272 + }, + "TerritoryId": 815, + "InteractionType": "WalkTo" + }, + { + "DataId": 1029898, + "Position": { + "X": 270.37463, + "Y": 7.1558247, + "Z": -196.30737 + }, + "TerritoryId": 815, + "InteractionType": "Interact", + "AetheryteShortcut": "Amh Araeng - Mord Souq" + } + ] + }, + { + "Sequence": 4, + "Steps": [ + { + "DataId": 1027876, + "Position": { + "X": 314.16797, + "Y": 1.4912677, + "Z": -255.60394 + }, + "TerritoryId": 815, + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] + }, + { + "DataId": 1029951, + "Position": { + "X": 303.82227, + "Y": 1.4685826, + "Z": -292.89697 + }, + "TerritoryId": 815, + "InteractionType": "Interact", + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + } + ] + }, + { + "Sequence": 5, + "Steps": [ + { + "DataId": 1029953, + "Position": { + "X": 241.19922, + "Y": 4.0297, + "Z": -289.601 + }, + "TerritoryId": 815, + "InteractionType": "Interact" + } + ] + }, + { + "Sequence": 6, + "Steps": [ + { + "DataId": 2009944, + "Position": { + "X": 476.18823, + "Y": -44.87683, + "Z": 229.96863 + }, + "TerritoryId": 815, + "InteractionType": "Interact", + "AetheryteShortcut": "Amh Araeng - Inn at Journey's Head", + "Fly": true + } + ] + }, + { + "Sequence": 7, + "Steps": [ + { + "Position": { + "X": 555.85315, + "Y": -50.899147, + "Z": 322.2599 + }, + "StopDistance": 0.25, + "TerritoryId": 815, + "InteractionType": "Combat", + "EnemySpawnType": "AutoOnEnterArea", + "KillEnemyDataIds": [ + 10855 + ] + } + ] + }, + { + "Sequence": 8, + "Steps": [ + { + "DataId": 1029957, + "Position": { + "X": 293.04944, + "Y": -42.796906, + "Z": 251.75854 + }, + "TerritoryId": 815, + "InteractionType": "Interact", + "Fly": true + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "Position": { + "X": 296.43002, + "Y": 1.4685829, + "Z": -289.11447 + }, + "TerritoryId": 815, + "InteractionType": "WalkTo", + "Fly": true, + "AetheryteShortcut": "Amh Araeng - Mord Souq" + }, + { + "DataId": 1029959, + "Position": { + "X": 295.27722, + "Y": 1.4685827, + "Z": -290.18085 + }, + "TerritoryId": 815, + "InteractionType": "CompleteQuest", + "NextQuestId": 3246 + } + ] + } + ] +} diff --git a/QuestPaths/5.x - Shadowbringers/Role Quests/Tank/3246_The Princess and Her Knight.json b/QuestPaths/5.x - Shadowbringers/Role Quests/Tank/3246_The Princess and Her Knight.json new file mode 100644 index 000000000..a11643db0 --- /dev/null +++ b/QuestPaths/5.x - Shadowbringers/Role Quests/Tank/3246_The Princess and Her Knight.json @@ -0,0 +1,183 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "Position": { + "X": 296.43002, + "Y": 1.4685829, + "Z": -289.11447 + }, + "TerritoryId": 815, + "InteractionType": "WalkTo", + "AetheryteShortcut": "Amh Araeng - Mord Souq", + "Fly": true, + "SkipConditions": { + "AetheryteShortcutIf": { + "NearPosition": { + "Position": { + "X": 296.43002, + "Y": 1.4685829, + "Z": -289.11447 + }, + "TerritoryId": 815, + "MaximumDistance": 100 + } + } + } + }, + { + "DataId": 1029959, + "Position": { + "X": 295.27722, + "Y": 1.4685827, + "Z": -290.18085 + }, + "TerritoryId": 815, + "InteractionType": "AcceptQuest" + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1029960, + "Position": { + "X": -393.66754, + "Y": 52.333755, + "Z": 497.15417 + }, + "TerritoryId": 816, + "InteractionType": "Interact", + "AetheryteShortcut": "Il Mheg - Lydha Lran", + "DialogueChoices": [ + { + "Type": "List", + "Prompt": "TEXT_LUCKBA131_03246_Q2_000_000", + "Answer": "TEXT_LUCKBA131_03246_A2_000_001" + } + ] + } + ] + }, + { + "Sequence": 2, + "Steps": [ + { + "DataId": 1027671, + "Position": { + "X": -33.12738, + "Y": 105.68533, + "Z": -879.9115 + }, + "TerritoryId": 816, + "InteractionType": "Interact", + "AetheryteShortcut": "Il Mheg - Pla Enni", + "Fly": true, + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 64 + ] + }, + { + "DataId": 1027670, + "Position": { + "X": 32.028687, + "Y": 101.900696, + "Z": -857.87744 + }, + "TerritoryId": 816, + "InteractionType": "Interact", + "Fly": true, + "CompletionQuestVariablesFlags": [ + null, + null, + null, + null, + null, + 128 + ] + } + ] + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 1029961, + "Position": { + "X": -93.736206, + "Y": 101.44155, + "Z": -834.9279 + }, + "TerritoryId": 816, + "InteractionType": "Interact", + "Fly": true + } + ] + }, + { + "Sequence": 4, + "Steps": [ + { + "DataId": 1029963, + "Position": { + "X": 61.020752, + "Y": 100.95007, + "Z": -872.4651 + }, + "TerritoryId": 816, + "InteractionType": "Interact", + "Fly": true + } + ] + }, + { + "Sequence": 5, + "Steps": [ + { + "DataId": 2009946, + "Position": { + "X": 395.16284, + "Y": 62.05847, + "Z": -516.22797 + }, + "TerritoryId": 816, + "InteractionType": "Combat", + "EnemySpawnType": "AfterInteraction", + "KillEnemyDataIds": [ + 10856 + ], + "AetheryteShortcut": "Il Mheg - Wolekdorf", + "Fly": true + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1029963, + "Position": { + "X": 61.020752, + "Y": 100.95007, + "Z": -872.4651 + }, + "TerritoryId": 816, + "InteractionType": "CompleteQuest", + "AetheryteShortcut": "Il Mheg - Pla Enni", + "Fly": true, + "NextQuestId": 3247 + } + ] + } + ] +} diff --git a/QuestPaths/5.x - Shadowbringers/Role Quests/Tank/3247_The Hardened Heart.json b/QuestPaths/5.x - Shadowbringers/Role Quests/Tank/3247_The Hardened Heart.json new file mode 100644 index 000000000..515eb0137 --- /dev/null +++ b/QuestPaths/5.x - Shadowbringers/Role Quests/Tank/3247_The Hardened Heart.json @@ -0,0 +1,69 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1029963, + "Position": { + "X": 61.020752, + "Y": 100.95007, + "Z": -872.4651 + }, + "TerritoryId": 816, + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Il Mheg - Pla Enni", + "SkipConditions": { + "AetheryteShortcutIf": { + "NearPosition": { + "Position": { + "X": 61.020752, + "Y": 100.95007, + "Z": -872.4651 + }, + "TerritoryId": 816, + "MaximumDistance": 100 + } + } + }, + "Fly": true + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "DataId": 1029967, + "Position": { + "X": -68.40625, + "Y": 105.29414, + "Z": -251.88074 + }, + "TerritoryId": 816, + "InteractionType": "SinglePlayerDuty", + "Fly": true + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1029963, + "Position": { + "X": 61.020752, + "Y": 100.95007, + "Z": -872.4651 + }, + "TerritoryId": 816, + "InteractionType": "CompleteQuest", + "AetheryteShortcut": "Il Mheg - Pla Enni", + "Fly": true + } + ] + } + ] +} diff --git a/QuestPaths/5.x - Shadowbringers/Role Quests/Tank/3248_To Have Loved and Lost.json b/QuestPaths/5.x - Shadowbringers/Role Quests/Tank/3248_To Have Loved and Lost.json new file mode 100644 index 000000000..9758c825f --- /dev/null +++ b/QuestPaths/5.x - Shadowbringers/Role Quests/Tank/3248_To Have Loved and Lost.json @@ -0,0 +1,102 @@ +{ + "$schema": "https://git.carvel.li/liza/Questionable/raw/branch/master/QuestPaths/quest-v1.json", + "Author": "liza", + "QuestSequence": [ + { + "Sequence": 0, + "Steps": [ + { + "DataId": 1029963, + "Position": { + "X": 61.020752, + "Y": 100.95007, + "Z": -872.4651 + }, + "TerritoryId": 816, + "InteractionType": "AcceptQuest", + "AetheryteShortcut": "Il Mheg - Pla Enni", + "SkipConditions": { + "AetheryteShortcutIf": { + "NearPosition": { + "Position": { + "X": 61.020752, + "Y": 100.95007, + "Z": -872.4651 + }, + "TerritoryId": 816, + "MaximumDistance": 100 + } + } + }, + "Fly": true + } + ] + }, + { + "Sequence": 1, + "Steps": [ + { + "Position": { + "X": -823.0134, + "Y": 22.900805, + "Z": -55.223766 + }, + "TerritoryId": 816, + "InteractionType": "WalkTo", + "Fly": true + }, + { + "DataId": 2009948, + "Position": { + "X": -824.88745, + "Y": 23.11737, + "Z": -56.443176 + }, + "TerritoryId": 816, + "InteractionType": "SinglePlayerDuty", + "ItemId": 2002569 + } + ] + }, + { + "Sequence": 2 + }, + { + "Sequence": 3, + "Steps": [ + { + "DataId": 1029963, + "Position": { + "X": 61.020752, + "Y": 100.95007, + "Z": -872.4651 + }, + "TerritoryId": 816, + "InteractionType": "Interact", + "AetheryteShortcut": "Il Mheg - Pla Enni", + "Fly": true + } + ] + }, + { + "Sequence": 255, + "Steps": [ + { + "DataId": 1029889, + "Position": { + "X": -35.385742, + "Y": 3.9998174, + "Z": 251.75854 + }, + "TerritoryId": 819, + "InteractionType": "CompleteQuest", + "AetheryteShortcut": "Crystarium", + "AethernetShortcut": [ + "[Crystarium] Aetheryte Plaza", + "[Crystarium] The Pendants" + ] + } + ] + } + ] +} diff --git a/Questionable/Controller/Steps/Interactions/Interact.cs b/Questionable/Controller/Steps/Interactions/Interact.cs index b79fa9047..8d6b67faf 100644 --- a/Questionable/Controller/Steps/Interactions/Interact.cs +++ b/Questionable/Controller/Steps/Interactions/Interact.cs @@ -31,6 +31,9 @@ internal static class Interact if (step.ChatMessage != null) yield break; + if (step.ItemId != null) + yield break; + if (step.DataId == null) yield break; } diff --git a/Questionable/Controller/Steps/Interactions/UseItem.cs b/Questionable/Controller/Steps/Interactions/UseItem.cs index 1e5d51bd3..1891e5b1b 100644 --- a/Questionable/Controller/Steps/Interactions/UseItem.cs +++ b/Questionable/Controller/Steps/Interactions/UseItem.cs @@ -40,7 +40,12 @@ internal static class UseItem { public IEnumerable CreateAllTasks(Quest quest, QuestSequence sequence, QuestStep step) { - if (step.InteractionType != EInteractionType.UseItem) + if (step.InteractionType is EInteractionType.SinglePlayerDuty) + { + if (step.ItemId == null) + return []; + } + else if (step.InteractionType != EInteractionType.UseItem) return []; ArgumentNullException.ThrowIfNull(step.ItemId); diff --git a/Questionable/Windows/QuestComponents/CreationUtilsComponent.cs b/Questionable/Windows/QuestComponents/CreationUtilsComponent.cs index ab73c25d5..dd095f900 100644 --- a/Questionable/Windows/QuestComponents/CreationUtilsComponent.cs +++ b/Questionable/Windows/QuestComponents/CreationUtilsComponent.cs @@ -38,6 +38,7 @@ internal sealed class CreationUtilsComponent private readonly ITargetManager _targetManager; private readonly ICondition _condition; private readonly IGameGui _gameGui; + private readonly Configuration _configuration; private readonly ILogger _logger; public CreationUtilsComponent( @@ -51,6 +52,7 @@ internal sealed class CreationUtilsComponent ITargetManager targetManager, ICondition condition, IGameGui gameGui, + Configuration configuration, ILogger logger) { _movementController = movementController; @@ -63,6 +65,7 @@ internal sealed class CreationUtilsComponent _targetManager = targetManager; _condition = condition; _gameGui = gameGui; + _configuration = configuration; _logger = logger; } @@ -79,8 +82,11 @@ internal sealed class CreationUtilsComponent ImGui.Text(SeIconChar.BotanistSprout.ToIconString()); } - var q = _questFunctions.GetCurrentQuest(); - ImGui.Text($"Current Quest: {q.CurrentQuest} → {q.Sequence}"); + if (_configuration.Advanced.AdditionalStatusInformation) + { + var q = _questFunctions.GetCurrentQuest(); + ImGui.Text($"Current Quest: {q.CurrentQuest} → {q.Sequence}"); + } #if false var questManager = QuestManager.Instance();