As you complete quests, your reputation for that NPC increases - and not just that! Your reputation for the NPCs "house" will also increase. As you gain reputation, you will unlock more quests and better rewards for quests from that house. NPCs from that house will also let you in their homes and give you access to other secret locations.
NotQuests tag system allows you to save data per-player. That's it. Sounds simple, but it's super powerful. You can save integers (= numbers), floats/doubles (= numbers with decimal places), strings (= text) and booleans (= true or false) for each player.
With actions, we can modify the tags and with conditions, we can check the tags (& even do math with them or compare them to other variables and tags).
We have three NPCs: Jon Snow (ID=0), Arya Stark (ID=1) and Cersei Lannister (ID=2). Jon Snow and Arya Stark belong to House Stark. Cerse Lannister belongs to House Lannister.
First let's create a tag called JonSnowReputation. This tag will store the reputation the player has with Jon Snow. It will be an Integer Tag, as we only need full numbers:
/qa/qaAdmin commands for NotQueststagstagsManages player tags.createcreateCreates a new player tag with the selected value type.Integer<type>Value type for the new tag: BOOLEAN, INTEGER, FLOAT, DOUBLE, or STRING.AcceptsTagType valueExampleIntegerJonSnowReputation<name>Unique name for the tag to create.AcceptstextExampleJonSnowReputation
Let's do the same for the other NPCs and houses
/qa/qaAdmin commands for NotQueststagstagsManages player tags.createcreateCreates a new player tag with the selected value type.Integer<type>Value type for the new tag: BOOLEAN, INTEGER, FLOAT, DOUBLE, or STRING.AcceptsTagType valueExampleIntegerAryaStarkReputation<name>Unique name for the tag to create.AcceptstextExampleAryaStarkReputation
/qa/qaAdmin commands for NotQueststagstagsManages player tags.createcreateCreates a new player tag with the selected value type.Integer<type>Value type for the new tag: BOOLEAN, INTEGER, FLOAT, DOUBLE, or STRING.AcceptsTagType valueExampleIntegerCerseiLannisterReputation<name>Unique name for the tag to create.AcceptstextExampleCerseiLannisterReputation
/qa/qaAdmin commands for NotQueststagstagsManages player tags.createcreateCreates a new player tag with the selected value type.Integer<type>Value type for the new tag: BOOLEAN, INTEGER, FLOAT, DOUBLE, or STRING.AcceptsTagType valueExampleIntegerHouseStarkReputation<name>Unique name for the tag to create.AcceptstextExampleHouseStarkReputation
/qa/qaAdmin commands for NotQueststagstagsManages player tags.createcreateCreates a new player tag with the selected value type.Integer<type>Value type for the new tag: BOOLEAN, INTEGER, FLOAT, DOUBLE, or STRING.AcceptsTagType valueExampleIntegerHouseLannisterReputation<name>Unique name for the tag to create.AcceptstextExampleHouseLannisterReputation
Now, let's create some actions which increased the houses reputation by 10 and some which will deduct the reputation by 1 (more info on that later):
/qa/qaAdmin commands for NotQuestsactionsactionsManages saved actions, inline actions, and action execution.addaddCreates a new saved action.HouseStarkReputationAdd10<Action Identifier>Unique identifier for the new saved action.AcceptstextExampleHouseStarkReputationAdd10TagIntegerTagIntegerSelects the TagInteger variable for this action, condition, objective, or variable check.housestarkreputation<TagName>Name of the NotQuests tag used by TagInteger. Tab-completion only shows tags with the matching value type.Acceptstext valueExamplehousestarkreputationadd<operator>How to change the TagInteger number variable: set, add, deduct, multiply, or divide.AcceptstextExampleadd10<amount>Number expression used as the value for this TagInteger action.Acceptsnumber or numeric expressionExample10
/qa/qaAdmin commands for NotQuestsactionsactionsManages saved actions, inline actions, and action execution.addaddCreates a new saved action.HouseStarkReputationDeduct1<Action Identifier>Unique identifier for the new saved action.AcceptstextExampleHouseStarkReputationDeduct1TagIntegerTagIntegerSelects the TagInteger variable for this action, condition, objective, or variable check.housestarkreputation<TagName>Name of the NotQuests tag used by TagInteger. Tab-completion only shows tags with the matching value type.Acceptstext valueExamplehousestarkreputationdeduct<operator>How to change the TagInteger number variable: set, add, deduct, multiply, or divide.AcceptstextExamplededuct1<amount>Number expression used as the value for this TagInteger action.Acceptsnumber or numeric expressionExample1
/qa/qaAdmin commands for NotQuestsactionsactionsManages saved actions, inline actions, and action execution.addaddCreates a new saved action.HouseLannisterReputationAdd10<Action Identifier>Unique identifier for the new saved action.AcceptstextExampleHouseLannisterReputationAdd10TagIntegerTagIntegerSelects the TagInteger variable for this action, condition, objective, or variable check.houselannisterreputation<TagName>Name of the NotQuests tag used by TagInteger. Tab-completion only shows tags with the matching value type.Acceptstext valueExamplehouselannisterreputationadd<operator>How to change the TagInteger number variable: set, add, deduct, multiply, or divide.AcceptstextExampleadd10<amount>Number expression used as the value for this TagInteger action.Acceptsnumber or numeric expressionExample10
/qa/qaAdmin commands for NotQuestsactionsactionsManages saved actions, inline actions, and action execution.addaddCreates a new saved action.HouseLannisterReputationDeduct1<Action Identifier>Unique identifier for the new saved action.AcceptstextExampleHouseLannisterReputationDeduct1TagIntegerTagIntegerSelects the TagInteger variable for this action, condition, objective, or variable check.houselannisterreputation<TagName>Name of the NotQuests tag used by TagInteger. Tab-completion only shows tags with the matching value type.Acceptstext valueExamplehouselannisterreputationdeduct<operator>How to change the TagInteger number variable: set, add, deduct, multiply, or divide.AcceptstextExamplededuct1<amount>Number expression used as the value for this TagInteger action.Acceptsnumber or numeric expressionExample1
Now let's create the actual actions which will be run when a player completes a quest for a house. For completing a quest for House Stark, the player should get +10 reputation for house stark and -1 reputation for House Lannister (as they don't like seeing you support their rivals):
/qa/qaAdmin commands for NotQuestsactionsactionsManages saved actions, inline actions, and action execution.addaddCreates a new saved action.HouseStarkQuestCompleted<Action Identifier>Unique identifier for the new saved action.AcceptstextExampleHouseStarkQuestCompletedActionActionAction action type.HouseStarkReputationAdd10,HouseLannisterReputationDeduct1<Actions>Name of the actions which will be executedAcceptscomma-separated saved action namesExampleHouseStarkReputationAdd10,HouseLannisterReputationDeduct11<amount>Amount of times the action will be executed.Acceptswhole numberExample1
With this 'Action' action, we can create one action which executes two other actions at the same time. Let's do the same for House Lannister:
/qa/qaAdmin commands for NotQuestsactionsactionsManages saved actions, inline actions, and action execution.addaddCreates a new saved action.HouseLannisterQuestCompleted<Action Identifier>Unique identifier for the new saved action.AcceptstextExampleHouseLannisterQuestCompletedActionActionAction action type.HouseLannisterReputationAdd10,HouseStarkReputationDeduct1<Actions>Name of the actions which will be executedAcceptscomma-separated saved action namesExampleHouseLannisterReputationAdd10,HouseStarkReputationDeduct11<amount>Amount of times the action will be executed.Acceptswhole numberExample1
Actual actions which will be added to the NPCs: More action nesting
But we also want the NPCs individual reputation to increase if you complete a quest for them, don't we? Let's create the final actions for that. First the actions for the reputation:
/qa/qaAdmin commands for NotQuestsactionsactionsManages saved actions, inline actions, and action execution.addaddCreates a new saved action.JonSnowReputationAdd5<Action Identifier>Unique identifier for the new saved action.AcceptstextExampleJonSnowReputationAdd5TagIntegerTagIntegerSelects the TagInteger variable for this action, condition, objective, or variable check.jonsnowreputation<TagName>Name of the NotQuests tag used by TagInteger. Tab-completion only shows tags with the matching value type.Acceptstext valueExamplejonsnowreputationadd<operator>How to change the TagInteger number variable: set, add, deduct, multiply, or divide.AcceptstextExampleadd5<amount>Number expression used as the value for this TagInteger action.Acceptsnumber or numeric expressionExample5
/qa/qaAdmin commands for NotQuestsactionsactionsManages saved actions, inline actions, and action execution.addaddCreates a new saved action.AryaStarkReputationAdd5<Action Identifier>Unique identifier for the new saved action.AcceptstextExampleAryaStarkReputationAdd5TagIntegerTagIntegerSelects the TagInteger variable for this action, condition, objective, or variable check.aryastarkreputation<TagName>Name of the NotQuests tag used by TagInteger. Tab-completion only shows tags with the matching value type.Acceptstext valueExamplearyastarkreputationadd<operator>How to change the TagInteger number variable: set, add, deduct, multiply, or divide.AcceptstextExampleadd5<amount>Number expression used as the value for this TagInteger action.Acceptsnumber or numeric expressionExample5
/qa/qaAdmin commands for NotQuestsactionsactionsManages saved actions, inline actions, and action execution.addaddCreates a new saved action.CerseiLannisterReputationAdd5<Action Identifier>Unique identifier for the new saved action.AcceptstextExampleCerseiLannisterReputationAdd5TagIntegerTagIntegerSelects the TagInteger variable for this action, condition, objective, or variable check.cerseilannisterreputation<TagName>Name of the NotQuests tag used by TagInteger. Tab-completion only shows tags with the matching value type.Acceptstext valueExamplecerseilannisterreputationadd<operator>How to change the TagInteger number variable: set, add, deduct, multiply, or divide.AcceptstextExampleadd5<amount>Number expression used as the value for this TagInteger action.Acceptsnumber or numeric expressionExample5
And now the actual final actions:
/qa/qaAdmin commands for NotQuestsactionsactionsManages saved actions, inline actions, and action execution.addaddCreates a new saved action.JonSnowQuestCompleted<Action Identifier>Unique identifier for the new saved action.AcceptstextExampleJonSnowQuestCompletedActionActionAction action type.HouseStarkQuestCompleted,JonSnowReputationAdd5<Actions>Name of the actions which will be executedAcceptscomma-separated saved action namesExampleHouseStarkQuestCompleted,JonSnowReputationAdd51<amount>Amount of times the action will be executed.Acceptswhole numberExample1
/qa/qaAdmin commands for NotQuestsactionsactionsManages saved actions, inline actions, and action execution.addaddCreates a new saved action.AryaStarkQuestCompleted<Action Identifier>Unique identifier for the new saved action.AcceptstextExampleAryaStarkQuestCompletedActionActionAction action type.HouseStarkQuestCompleted,AryaStarkReputationAdd5<Actions>Name of the actions which will be executedAcceptscomma-separated saved action namesExampleHouseStarkQuestCompleted,AryaStarkReputationAdd51<amount>Amount of times the action will be executed.Acceptswhole numberExample1
/qa/qaAdmin commands for NotQuestsactionsactionsManages saved actions, inline actions, and action execution.addaddCreates a new saved action.CerseiLannisterQuestCompleted<Action Identifier>Unique identifier for the new saved action.AcceptstextExampleCerseiLannisterQuestCompletedActionActionAction action type.HouseLannisterQuestCompleted,CerseiLannisterReputationAdd5<Actions>Name of the actions which will be executedAcceptscomma-separated saved action namesExampleHouseLannisterQuestCompleted,CerseiLannisterReputationAdd51<amount>Amount of times the action will be executed.Acceptswhole numberExample1
Awesome! Now we just need to add these last two actions as a reward to the respective quests. We have already created the quests HelpJonSnow, HelpAryaStark and HelpCerseiLannister for that (you should know how to create quests at this point. If not, please read the beginner tutorial first.).
/qa/qaAdmin commands for NotQuestsediteditOpens subcommands for editing a specific quest.HelpJonSnow<quest>Identifier of the quest to edit; use /qa list to see available quests.Acceptsquest nameExampleHelpJonSnowrewardsrewardsManages rewards granted by this quest or objective.addaddAdds a reward granted by the selected quest.ActionActionAction action type.JonSnowQuestCompleted<Actions>Name of the actions which will be executedAcceptscomma-separated saved action namesExampleJonSnowQuestCompleted1<amount>Amount of times the action will be executed.Acceptswhole numberExample1
/qa/qaAdmin commands for NotQuestsediteditOpens subcommands for editing a specific quest.HelpAryaStark<quest>Identifier of the quest to edit; use /qa list to see available quests.Acceptsquest nameExampleHelpAryaStarkrewardsrewardsManages rewards granted by this quest or objective.addaddAdds a reward granted by the selected quest.ActionActionAction action type.AryaStarkQuestCompleted<Actions>Name of the actions which will be executedAcceptscomma-separated saved action namesExampleAryaStarkQuestCompleted1<amount>Amount of times the action will be executed.Acceptswhole numberExample1
/qa/qaAdmin commands for NotQuestsediteditOpens subcommands for editing a specific quest.HelpCerseiLannister<quest>Identifier of the quest to edit; use /qa list to see available quests.Acceptsquest nameExampleHelpCerseiLannisterrewardsrewardsManages rewards granted by this quest or objective.addaddAdds a reward granted by the selected quest.ActionActionAction action type.CerseiLannisterQuestCompleted<Actions>Name of the actions which will be executedAcceptscomma-separated saved action namesExampleCerseiLannisterQuestCompleted1<amount>Amount of times the action will be executed.Acceptswhole numberExample1
Voilà, we're done! Try completing those quests and check how your reputation changes:
Here is an example of house you can check your reputation for house stark:
/qa/qaAdmin commands for NotQuestsvariablesvariablesEvaluates NotQuests variables for a player or the command sender.checkcheckDisplays a NotQuests variable's value for a player or the command sender.TagIntegerTagIntegerSelects the TagInteger variable for this action, condition, objective, or variable check.housestarkreputation<TagName>Name of the NotQuests tag used by TagInteger. Tab-completion only shows tags with the matching value type.Acceptstext valueExamplehousestarkreputation
Let's add some privileges & rewards for our reputation system: Conditions
Example condition which checks if you have at least 50 reputation in house stark - can be used anywhere, for example in Quest requirements, objectives or conditions:
/qa/qaAdmin commands for NotQuestsconditionsconditionsManages saved conditions that can be reused by quests, objectives, and actions.addaddCreates a new saved condition.HouseStarkReputation50<Condition Identifier>Unique identifier for the new saved condition.AcceptstextExampleHouseStarkReputation50TagIntegerTagIntegerSelects the TagInteger variable for this action, condition, objective, or variable check.housestarkreputation<TagName>Name of the NotQuests tag used by TagInteger. Tab-completion only shows tags with the matching value type.Acceptstext valueExamplehousestarkreputationmoreOrEqualThan<operator>How to compare the TagInteger number variable against the expression.AcceptstextExamplemoreOrEqualThan50<amount>Number expression to compare with the current TagInteger value.Acceptsnumber or numeric expressionExample50
To be continued... I'll write this part up when I have time. Feel free to contribute to this tutorial (or any other tutorials) here: Contribute to the docs.