This repository has been archived on 2025-02-27. You can view files and clone it, but cannot push or open issues or pull requests.
AIDScripting/examples/sundale.js

122 lines
5.3 KiB
JavaScript
Raw Permalink Normal View History

2021-05-06 08:13:50 -06:00
// An example of how scripting can be used to manipulate quests, as well as how messages and the state variable can be used to store and show information
// The code can be given basic changes using the state.configuration object, without needing to deal with the rest of the code
// The scenario this was made for can be seen at https://play.aidungeon.io/scenario/71bab1a0-9d70-11ea-8733-c15678a0b129
// INPUT MODIFIER
const modifier = (text) => {
state.configuration = {
enableSelectionOnCompletedQuest: false, // Whether quest selection should be restricted until a specific quest is completed
enableSelectionOnQuest: 0, // The line number of the quest in the list of quests (e.g. quest on second line = 2) on the Edit Scenario page. Only used when the above is true.
initialQuests: 0, // The amount of quests inputted into the Edit Scenario page
quests: [ // The quests that will become available to the player either after the above quest is completed or at the start of the scenario.
{
name: "quit your job", // The quest's name, shown in the selection message
objectives: ["resign from your job"], // The objectives that are part of the quest
nextQuests: [ // The quests that should be assigned after the player completes this one
{
name: "find a new job",
objectives: ["get a job"],
nextQuests: []
}
]
}
]
}
if (state.initialised != true) {
state.finishedScenario = false
state.initialised = true
if (!state.configuration.enableSelectionOnCompletedQuest) {
state.availableQuests = JSON.parse(JSON.stringify(state.configuration.quests))
} else {
state.availableQuests = []
}
state.assignedQuest = ""
state.nextOutput = ""
}
state.nextOutput = ""
if (text.toLowerCase().startsWith("\n> you take up quest ")) {
state.assignedQuest = JSON.parse(JSON.stringify(state.availableQuests[text.toLowerCase().substring(21) - 1]))
quests.push({
quest: state.assignedQuest.objectives.shift()
})
state.nextOutput = "You decide that the next thing you want to do with your life is " + state.assignedQuest.name.toLowerCase() + "."
} else if (text.toLowerCase().includes("\n> you give up on your quest.")) {
state.nextOutput = "You give up on your quest to " + state.assignedQuest.name.toLowerCase() + "."
state.assignedQuest = ""
quests.splice(state.configuration.initialQuests)
}
return {
text: text
}
}
modifier(text)
// OUTPUT MODIFIER
const modifier = (text) => {
let modifiedText = text
if (!state.finishedScenario || !state.configuration.enableSelectionOnCompletedQuest) state.message = ""
if ((state.finishedScenario || !state.configuration.enableSelectionOnCompletedQuest) && state.assignedQuest == "") {
questNames = []
for (quest of state.availableQuests) {
questNames.push(quest.name)
}
state.message = "Available Quests: " + questNames.join(", ") + ". To take up a quest, type 'take up quest <quest number in list>'."
} else if (state.assignedQuest != "") {
if (!quests[state.configuration.initialQuests].completed) {
state.message = "Current Objective: " + quests[state.configuration.initialQuests].quest + ". To quit, type 'give up on my quest'."
} else {
nextObjective = state.assignedQuest.objectives.shift()
if (nextObjective == undefined) {
quests.splice(state.configuration.initialQuests)
state.availableQuests = state.availableQuests.filter(e => e.name !== state.assignedQuest.name)
for (nextQuest of state.assignedQuest.nextQuests) {
state.availableQuests.push(nextQuest)
}
state.assignedQuest = ""
questNames = []
for (quest of state.availableQuests) {
questNames.push(quest.name)
}
state.message = "Available Quests: " + questNames.join(", ") + ". To take up a quest, type 'take up quest <quest number in list>'."
} else {
quests.splice(state.configuration.initialQuests)
quests.push({
quest: nextObjective
})
state.message = "Objective completed! New objective: " + quests[state.configuration.initialQuests].quest + ". To quit, type 'give up on my quest'."
}
}
}
if (state.configuration.enableSelectionOnCompletedQuest) {
if (quests[state.configuration.enableSelectionOnQuest - 1].completed == true && !state.finishedScenario) {
state.message = "Quests have been assigned and will be accessible next turn."
state.finishedScenario = true
state.availableQuests = JSON.parse(JSON.stringify(state.configuration.quests))
}
}
if (state.nextOutput !== "") {
return {
text: state.nextOutput
}
}
return {
text: modifiedText
};
}
modifier(text)