
For when Jaeger isn't interesting enough
THIS MOD DOES NOTHING BY ITSELF AND THERE ARE CURRENTLY NO TRADERS THAT USE THIS. YOU DO NOT NEED THIS MOD UNLESS YOU ARE DEVELOPING QUESTS WITH QE.
Quests Extended is a client mod, originally authored by CJ, that expands the list of conditions that can be used within quests, with the goal of allowing for more unique / interesting quest designs. There are currently32 additional conditions, including things like activating power switches, restoring health, and searching containers.
Please install this mod before installing a trader that utilizes this mod.
I will create a proper wiki on GitHub eventually, but for now, here’s a speedrun of the absolute basics:
When creating a quest. create a CounterCreator condition that looks something like the following (expand image):
What’s most important is that the condition itself is impossible to complete; in this case, you are required to kill a pmc from 5555 meters away. This prevents accidental progress on quests. The bottom ‘value’ just under the ‘type’ is important, however, as that will determine how many times your custom condition needs to be met. For example, if you want the player to heal 300 health, set that value to 300.
Keep the id that’s highlighted in mind when we go to the next step. The id in that spot (and only that spot, of the three ids that exist per counter creator) is important.
Create a new .json file and place it in ../BepInEx/plugins/QuestsExtended/Quests. If this new json is anywhere else, it will not be registered. Within this .json, you want something akin to this for each quest (expand image):
The id outside the brackets and the id next to “QuestId” should be the same, and are the id of the quest itself. For each CounterCreator task you have in your quest, create the condition like you see in the image. Remember that highlighted id I mentioned earlier? Place it in the “ConditionId” spot. Check the “Conditions List” tab to see a full list of all custom conditions currently in the mod. The “Locations” can be multiple locations; if you want to have a quest that tracks on Interchange and Customs, but nowhere else, that will work.
Certain quest conditions have additional features. For example, most of the health-related quests can utilize “IncludeBodyParts” (See image below)
When you are creating a release of your mod, I highly recommend you pre-include the .json in its correct path in your download, as that will minimize work on the end user and should prevent complications if the end user downloads your mod first and this one second.
The following is a list of conditions currently in a mod. Some extra comments might be on conditions if they need more explaining. They are separated into multiple catagories for sorting purposes, but implementing any of them is the exact same: Simply copy the Exact Spelling And Capitalization into the “ConditionType”.
General:
EncumberedTimeInSeconds //If the weight indicator in the inventory is yellow or orange, this will increase.
OverEncumberedTimeInSeconds //If the weight indicator in the inventory is red, this will increase.
MoveDistance //None of the “MoveDistance” tasks are mutually exclusive. If the player is moving quietly while crouched, all three of the conditions will increase
MoveDistanceWhileRunning
MoveDistanceWhileCrouched
MoveDistanceWhileProne
MoveDistanceWhileSilent //‘Moving Silently’ means the player is moving slow enough to gain CovertMovement experience. Roughly speaking, if the sound icon in the bottom left is in the left third of the bar, this should increase.
SearchContainer
LootItem
ActivatePowerSwitch
CompleteWorkout//WILL BE ADDED IN 2.0.3
CompleteOptionals //See the dedicated “Quests with optional tasks” tab
Combat:
DamageWithAny
DamageWithAR
DamageWithDMR
DamageWithGL
DamageWithLMG
DamageWithMelee
DamageWithPistols
DamageWithRevolvers
DamageWithShotguns
DamageWithSMG
DamageWithSnipers
DamageWithThrowables
DamageToArmour //This tracks the amount of durability lost on the enemy armour.
DestroyEnemyBodyParts //Blacking any body part, including the head or thorax.
KillsWhileADS
KillsWhileCrouched
KillsWhileProne
KillsWhileMounted
KillsWhileSilent //See comment on “MoveDistanceWhileSilent”
KillsWhileBlindFiring
MountedKillsWithLMG
DestroyLegsWithSMG
RevolverKillsWithoutADS //AKA hipfire kills with Revolvers
DamageToArmourWithShotguns
TotalShotDistanceWithSnipers //Every time damage with a sniper rifle is dealt, the distance between the player and the target will be added to this condition. If I hit one bot at 30m and a second at 50m, this condition will be at 80/x. If I then hit someone at 65 m next raid, this task will be at 145/x.
Medical:
FixLightBleed
FixHeavyBleed
FixAnyBleed
FixFracture
HealthLoss
HealthGain
DestroyBodyPart //This means the PLAYER gets a blacked limb, this is not a “destroy limbs on the enemy”. That is in Combat
RestoreBodyPart //Fun fact: A ‘UseItem’ task set to trigger on the use of either surgical kit will accomplish the same thing.
1.7.5 introduces the “CompleteOptionals” condition, which allows you to create a list of ‘optional’ conditions under one main condition and have the player complete X amount of the ‘optional’s. To create an optional task , you simply add the id of the parent condition to the “parentId” spot when creating the ‘optional’ condition (this is a vanilla feature in Tarkov). The optional tasks may be vanilla conditions or QE conditions, both work. When the player completes an optional objective, only the quest that the completed optional objective is in will increase. In the future, I might add a “CompleteAnyOptionals”, but for now it is only per-quest.
While I have tested this condition a fair amount, it is still experimental. Use with caution.
Create an impossible “AvailableForStart” task (similar to creating an impossible “AvailableForFinish” condition). I recommend a simple “level 99” condition:
Within your custom conditions json, you will need to add some things (click to enlarge):
You will notice that this quest has an extra line defined BEFORE the “condition:[]”: “IsMultipleChoiceStarter”: true. You only need this line if the quest is actually an MCS, it’s assumed false for other quests. Additionally, *most* conditions have an additional thing: “QuestsToStart”: [““]. You made add one or more QUEST Ids to this list, and those quests will automatically be started as soon as the quest is finished (happens before the quest is technically turned in, btw). You will notice that the “CompleteOptionals” itself doesn’t have a QuestsToStart; this is because that condition will always be completed, so any ids you might put there will always be triggered (so if you want a certain quest after this one no matter what, have it unlock normally upon quest completion.) You need to place every condition in a quest that is marked as “IsMultipleChoiceStarter” into this .json. If a specific condition does not start a task, leave QuestsToStart empty for that condition.
You will additionally notice that there is an “EmptyWithQuestStarter” condition type. Use “EmptyWithQuestStarter” if the task is a vanilla condition, and not a QE condition. The reason you need to include the condition in the json is so that your multiple choice quest will actually work.
SPT 3.11.3
145 Downloads
“Completed the mod, only small updates from now on!” Pfft, yeah. Sure, past Light. Sure.
Welcome to the overhaul, buckos. Errors? Haven’t heard of them. Works in main menu? Absolutely. Overly complicated code? Exclusively. Hotel? Trivago.
…Alright, actual patch notes now:
-Quests extended should no longer throw any errors, especially those related to bots freezing in place after death. If you find an error, report it to me immediately so I can terminate it.
-Quests extended now functions properly in the main menu. Alongside this, there are now conditions for various things in the hideout as well as trading. See the respective tabs for more information (IF YOU ARE SEEING THIS IT IS NOT YET WRITTEN)
-General conditions:
-Added a “MoveDistanceWhileRunning” condition (I now realize I didn’t test this one )
Added THREE new categories of quest conditions: “Hideout”, “Trading”, and “Misc”
Hideout:
The following conditions have been added:
-CraftItem
-CraftCyclicItem (Water collector, booze generator, bitcoin farm)
-CollectScavCase
-CollectCultistOffering
-CompleteWorkout
Both the CraftItem and CraftCyclicItem can be specified with the optional Workstations[] field in the .json file, simply enter the name of the workstation(s) you wish to require. I.E., if I want a quest where you craft two items at the workbench or the medstation, I could do Workstations[“Workbench”, “Medstation”]. These conditions are incremented when you COLLECT the item, not when you start crafting them!!!
Trading:
The following conditions have been added:
-CompleteAnyTransaction
-SpendMoneyOnTransaction (Purchase items from a trader)
-EarnMoneyOnTransaction (Sell items to a trader)
All three of these conditions can be specified with two optional fields: TraderIds[], and CurrencyTypes[]. If you wish for specific traders to be used, simply paste their id into TraderIds (You can find the trader ids somewhere, I believe in you!). For CurrencyTypes, please type “RUB”, “EUR”, and / or “USD” for roubles, euros, and dollars, respectively. Both fields can be used at the same time, you can create a quest where you spend Euros at Mechanic specifically, so you’d want TraderIds[“5a7c2eca46aef81a7ca2145d”], CurrencyTypes[“EUR”].
-If you do not specify a CurrencyType, it will be assumed that you are wanting a total sum of money, so euros and dollars will be converted to the equivalent rouble amount in terms of quest progression (1 Euro = 153 Roubles, 1 Dollar = 139 Roubles. Both values are what you purchase them for at traders).
(P.S. This works with custom traders as well! You can use your own trader’s ID for these conditions)
Misc:
The following conditions have been added:
-FixAnyMalfunction
-FixARMalfunction
-FixDMRMalfunction
-FixLMGMalfunction
-FixPistolMalfunction
-FixShotgunMalfunction
-FixSMGMalfunction
-FixSniperMalfunction
I will probably consider consolidating these into one function, and having an optional field similar to TraderIds and Workstations, but at the moment they are separate. These probably increment when you fix a weapon malfunction. I’ll be completely honest, I spent so much time working on hideout and trading that I never tested these. Have fun!
SPT 3.11.3
804 Downloads
This is an incredibly small QOL update for quest creators. You do not need this version unless you are using this mod to create quests and want the single thing it adds.
-Added “QuestName” as a field for the .json files (It isn’t used by anything, it’s merely there for ease of looking at larger files)
SPT 3.11.3
168 Downloads
Critical bug fixes related to the end of raids, especially for hideout instances
SPT 3.11.3
159 Downloads
^^^Please download 2.0.1
This mod is officially completed in my eyes. I will still maintain it, make some new conditions here and there, fix bugs, but as far as massive changes go, this is it. I want to give a massive thanks to:
Cj -Original creator of this mod, and put up with me as I worked on it, as well as assisting me on rare occasion. This mod would not even be here if he did not allow me to maintain. Thank you, CJ.
DrakiaXYZ, Apex Predator (Jehree), AcidPhantasm -All three of them helped me time and time again as I suffered through learning server modding, learning about BSG’s… interesting quest code. I truly do not think this mod would be in this state (at least this soon) if even one of you weren’t there for me. Thank you Drakia, Jehree, and Acid!
----------------------------------------------------------------------------------------------
-Added “Multiple Choice Quests”. You may now create quests with any number of conditions that each start any amount of quests when you complete them, creating true branching paths. See the “Multiple choice quests” tab for more information.
SPT 3.11.3
317 Downloads
Penultimate update that I have planned for QuestsExtended. That does NOT mean I am just dropping QE off a cliff after the next massive update, it simply means that my vision for this mod will be “complete” and update will become smaller and less frequent.
-Added ‘CompleteOptionals’ condition (see the “Quests with optional objectives” tab). This means that, in short, you can create quests in which the player only has to complete a certain number of conditions on that quest, instead of needing to complete ALL conditions on that task.
The above is a standalone feature, but is also a framework for the “last” update, which is to add multiple choice quests. I do not know how long this will take to implement, I have some framework stuff already.
SPT 3.11.3
523 Downloads
Added the following quest conditions:
DestroyEnemyBodyParts
KillsWhileADS
KillsWhileCrouched
KillsWhileProne
KillsWhileMounted
KillsWhileSilent
KillsWhileBlindFiring
MountedKillsWithLMG
DestroyLegsWithSMG
RevolverKillsWithoutADS
Not quite yet...