About this mod
F4SE-console based mod that allows you to program simple quests.
- Requirements
- Permissions and credits
An F4SE based mod that contains a set of custom console commands to make simple quests in-game.
The quests, their objectives can be named (renamed) and can also be programmed to track NPCs and objects (location, death, 3D load, 3D unload, bleedout enter events). Adding, hiding, completing, uncompleting objecties are supported as well.
Features in keywords:
- Create quests (up to 3 concurrent custom quests)
- Rename quests
- Add objectives (up to 5 for each custom quest)
- Track the location of NPCs and objects with objectives
- Listen to events sent by objective tracked NPCs or objects (death, 3D load, 3D unload and bleedout enter events)
- Rename objectives (to anything, including to the tracked object directly)
- Remove objectives
- Complete the quest
- Manually
- Or by an event (e.g., a tracked NPC whose event the quest was listening for dies)
- Complete the objective
- manually
- Or by an event
- Retarget NPC/object tracking and event registration
- Find NPC/Objects by RefID and Names
- (e.g., you can start a "Kill a Bad Guy" kind of quest only by looking for a random NPC named "Raider Veteran")
- Find NPC/Objects by hardcoded NPC-types
- (e.g., search for hostile robots, leveled or wealthy humans, closest dead NPC, etc.)
- Force shut down, reset mod functions
- Logging, feedback notifications and messages (all are optional)
Quest functions:
[CQF PlayersQuestHandler CreateNewQuest QuestName ObjectiveName NamedObjectName AutoRenameObjectiveToNamedObject]
CreateNewQuest: function that creates a new quest
QuestName: parameter that defines the quest's name
ObjectiveName: name of the first objective
NamedObjectName: optional, name of the NPC/Object (or hardcoded object-type, see below) to be tracked with the objective
AutoRenameObjectiveToNamedObject: optional, can be 1 or 0 (equivalent to True or False). Renames the objective to the tracked object regardless of ObjectiveName (which still must be specified, only its actual name doesn't matter)
[Explanation]
CQF = call quest function
PlayersQuestHandler = quest that contains the function (this is the mod's handler quest)
CreateNewQuest = the function to be called
ObjectiveName, NamedObjectName, AutoRenameObjectiveToNamedObject: function parameters
[Example]:
[CQF PlayersQuestHandler CreateNewQuest "Where are you?" "Current Companion" "Piper" False]
==> this would create a new quest named "Where are you?" with one single objective "Current Companion" that would point to Piper but since the auto-rename parameter is set to 'False', it wouldn't rename the objective to 'Piper'. Note: don't forget the use double quotes before the function parameters that end with 'Name', as shown in the example.
[CQF PlayersQuestHandler RenameTheQuest QuestName NewQuestName]
RenameTheQuest: renames the quest
QuestName: name of the quest to be renamed
NewQuestName: new name of the quest
[CQF PlayersQuestHandler RemoveTheQuest QuestName]
RemoveTheQuest: removes the quest
QuestName: name of the quest to be removed
[CQF PlayersQuestHandler RemoveAllQuests]
RemoveTheQuest: removes all quests made with this mod
[CQF PlayersQuestHandler CompleteTheQuest QuestName XPRewardCount]
CompleteTheQuest: completes the quest
QuestName: name of the quest to be completed
XPRewardCount: optional, rewards the player with this amount of XP (default is 0)
[CQF PlayersQuestHandler CreateNewObjective QuestName ObjectiveName NamedObjectName AutoRenameObjectiveToNamedObject]
CreateNewObjective: creates a new objective
QuestName: name of the quest to add the objective to
ObjectiveName: new objective's name
NamedObjectName: optional, name of the NPC/Object to be tracked with the objective
AutoRenameObjectiveToNamedObject: optional, can be 1 or 0 (equivalent to True or False), if NamedObjectName was specified, the objective gets automatically renamed to this object
[CQF PlayersQuestHandler CreateNewObjectiveByRef QuestName ObjectiveName ObjectRefID AutoRenameObjectiveToNamedObject]
CreateNewObjectiveByRef: creates a new objective
QuestName: name of the quest to add the objective to
ObjectiveName: new objective's name
ObjectRefID: optional, RefID of the NPC/Object to be tracked with the objective
AutoRenameObjectiveToNamedObject: optional, can be 1 or 0 (equivalent to True or False), if ObjectRefID was specified, the objective gets automatically renamed to this object
[CQF PlayersQuestHandler RemoveTheObjective QuestName ObjectiveName]
RemoveTheObjective: removes an objective
QuestName: name of the quest that contains the objective
ObjectiveName: name of the objective to be removed
[CQF PlayersQuestHandler RenameTheObjective QuestName OldObjectiveName NewObjectiveName]
RenameTheObjective: renames an objective
QuestName: name of the quest that contains the objective
OldObjectiveName: name of the objective to be renamed
NewObjectiveName: new name of the objective
[CQF PlayersQuestHandler RenameTheObjectiveToTrackedRef QuestName ObjectiveName]
RenameTheObjectiveToTrackedRef: renames an objective to the object it points to
QuestName: name of the quest that contains the objective
ObjectiveName: name of the objective to be renamed
[CQF PlayersQuestHandler CompleteTheObjective QuestName ObjectiveName]
CompleteTheObjective: completes an objective
QuestName: name of the quest that contains the objective
ObjectiveName: name of the objective to be completed
[CQF PlayersQuestHandler UnCompleteTheObjective QuestName ObjectiveName]
UnCompleteTheObjective: uncompletes an objective
QuestName: name of the quest that contains the objective
ObjectiveName: name of the objective to be uncompleted
[CQF PlayersQuestHandler StartTrackingNamedObject QuestName ObjectiveName NamedObjectName AutoRenameObjectiveToNamedObject]
StartTrackingNamedObject: starts tracking a named object (like NPCs such)
QuestName: name of the quest whose objective is going to track the named object
ObjectiveName: name of the objective that's going to point to the named object
NamedObjectName: name of the NPC/Object to be tracked
AutoRenameObjectiveToNamedObject: optional, can be 1 or 0 (equivalent to True or False), if NamedObjectName was specified, the objective gets automatically renamed to this object
[CQF PlayersQuestHandler StopTrackingNamedObject QuestName NamedObjectName]
StopTrackingNamedObject: stops tracking a named object
QuestName: name of the quest that has an objective that's currently tracking the named object
NamedObjectName: name of the NPC/Object that's being tracked by the objective
[CQF PlayersQuestHandler StartTrackingObjectByRef QuestName ObjectiveName ObjectRefID AutoRenameObjectiveToNamedObject]
StartTrackingObjectByRef: starts tracking an object
QuestName: name of the quest whose objective is going to track the object
ObjectiveName: name of this objective
ObjectRefID: RefID of the NPC/Object to be tracked
AutoRenameObjectiveToNamedObject: optional, can be 1 or 0 (equivalent to True or False), if ObjectRefID was specified, the objective gets automatically renamed to this object
[CQF PlayersQuestHandler StopTrackingObjectByRef QuestName ObjectRefID]
StopTrackingObjectByRef: stops tracking an object
QuestName: name of the quest that has an objective that's currently tracking the object
ObjectRefID: RefID of the NPC/Object that's being tracked by the objective
[CQF PlayersQuestHandler StopTrackingObjective QuestName ObjectiveName]
StopTrackingObjective: stops an objective's tracking function
QuestName: name of the quest whose objective is currently tracking the object
ObjectiveName: name of the objective
[CQF PlayersQuestHandler StartTrackingDeathEvent QuestName ObjectiveName ReactionIndex RewardXPCount]
StartTrackingDeathEvent: starts listening for death events sent by the object (only NPCs) the objective points to
QuestName: name of the quest that has an objective that's currently tracking the NPC
ObjectiveName: name of this objective
ReactionIndex: Can be 0, 1, 2, 3. 1:complete Objective. 2:complete the quest. 3:uncomplete the objective
RewardXPCount: if ReactionIndex was set to 2, the player will be rewarded with this amount of XP
[CQF PlayersQuestHandler StopTrackingDeathEvent QuestName ObjectiveName]
StartTrackingDeathEvent: stops listening for death events sent by the object (only NPCs) the objective points to
QuestName: name of the quest that has an objective that's currently tracking the NPC
ObjectiveName: name of this objective
[CQF PlayersQuestHandler StartTrackingBleedoutEnterEvent QuestName ObjectiveName ReactionIndex RewardXPCount]
StartTrackingBleedoutEnterEvent: starts listening for BleedoutEnter events ("downed pose") sent by the object (only NPCs) the objective points to
QuestName: name of the quest that has an objective that's currently tracking the NPC
ObjectiveName: name of this objective
ReactionIndex: Can be 0, 1, 2, 3. 1:complete Objective. 2:complete the quest. 3:uncomplete the objective
RewardXPCount: if ReactionIndex was set to 2, the player will be rewarded with this amount of XP
[CQF PlayersQuestHandler StopTrackingBleedoutEnterEvent QuestName ObjectiveName]
StartTrackingBleedoutEnterEvent: stops listening for BleedoutEnter events ("downed pose") sent by the object (only NPCs) the objective points to
QuestName: name of the quest that has an objective that's currently tracking the NPC
ObjectiveName: name of this objective
[CQF PlayersQuestHandler StartTracking3DLoadEvent QuestName ObjectiveName ReactionIndex RewardXPCount]
StartTracking3DLoadEvent: starts listening for 3DLoad events sent by the object the objective points to
QuestName: name of the quest that has an objective that's currently tracking the object
ObjectiveName: name of this objective
ReactionIndex: Can be 0, 1, 2, 3. 1:complete Objective. 2:complete the quest. 3:uncomplete the objective
RewardXPCount: if ReactionIndex was set to 2, the player will be rewarded with this amount of XP
[CQF PlayersQuestHandler StopTracking3DLoadEvent QuestName ObjectiveName]
StartTracking3DLoadEvent: stops listening for 3DLoad events sent by the object the objective points to
QuestName: name of the quest that has an objective that's currently tracking the object
ObjectiveName: name of this objective
[CQF PlayersQuestHandler StartTracking3DUnloadEvent QuestName ObjectiveName ReactionIndex RewardXPCount]
StartTracking3DUnloadEvent: starts listening for 3DUnload events sent by the object the objective points to
QuestName: name of the quest that has an objective that's currently tracking the object
ObjectiveName: name of this objective
ReactionIndex: Can be 0, 1, 2, 3. 1:complete Objective. 2:complete the quest. 3:uncomplete the objective
RewardXPCount: if ReactionIndex was set to 2, the player will be rewarded with this amount of XP
[CQF PlayersQuestHandler StopTracking3DUnloadEvent QuestName ObjectiveName]
StartTracking3DUnloadEvent: stops listening for 3DUnload events sent by the object the objective points to
QuestName: name of the quest that has an objective that's currently tracking the object
ObjectiveName: name of this objective
[CQF PlayersQuestHandler EnableLogging]
EnableLogging: enables Papyrus logging
[CQF PlayersQuestHandler DisableLogging]
DisableLogging: disables Papyrus logging
[CQF PlayersQuestHandler FeedbackForceMessageBoxes]
FeedbackForceMessageBoxes: use only message boxes for feedbacks
[CQF PlayersQuestHandler FeedbackForceNotifications]
FeedbackForceNotifications: use only notifications (i.e. text in upper left corner) for feedbacks
[CQF PlayersQuestHandler TurnOffFeedbacks]
TurnOffFeedbacks: turns off all feedbacks
[CQF PlayersQuestHandler ResetFeedbackSettings]
ResetFeedbackSettings: resets feedback settings to default
[StopQuest PlayersQuestHandler]
Deactivates the mod (while resetting everything)
[StartQuest PlayersQuestHandler]
Reactivates the mod if it was deactivated
Hardcoded abilities of the function parameter NamedObjectName:
While NamedObjectName is typically the actual name of the object/NPC an objective points to, it supports some hardcoded "names" that can be used to find different types of random NPCs:
SettlerNPC ==> so, instead of making the quest to search for an NPC named 'SettlerNPC' (most likely such NPC doesn't exist), the quest would search for a random Settler (who can be unique too)
HostileNPC ==> find a hostile NPC (of any kind)
HostileSentryBotNPC ==> find a hostile Sentry Bot
HostileAssaultronNPC ==> find a hostile Assaultron
HostileMrGutsyNPC ==> find a hostile Mr. Gutsy
DeadNPC ==> find a dead NPC (note: unlike the others, it searches for the one that's the closest to the player)
MinLeveledHostileNPC ==> find an NPC with greater than or equal level to the Level Threshold
Use the command [CQF PlayersQuestHandler SetNPCLevelThresholdTo Value] like [CQF PlayersQuestHandler SetNPCLevelThresholdTo 50] to edit the Level Threshold
MaxLeveledHostileNPC ==> find an NPC with lesser than or equal level to the Level Threshold
HostileHumanNPC ==> find a hostile human NPC
HostileRobotNPC ==> find a hostile robot
HostileSynthNPC ==> find a hostile Synth
HostileWealthyNPC ==> find an NPC whose inventory value ("wealth") is greater than or equal to the InventoryValue Threshold
Use the command [CQF PlayersQuestHandler SetNPCInventoryValueThresholdTo Value] like [CQF PlayersQuestHandler SetNPCInventoryValueThresholdTo 100] to edit the InventoryValue Threshold
Requirements:
F4SE
Compatibility:
Should be compatible with everything.