Use this DueUtil Quest Designer to help you easily set up exciting quests for your Discord users. Just fill out the form and copy the command string then paste it into your Discord server.
DueUtil Quest Designer
{source}<script type="text/javascript">
function updateName() {
let questName = document.getElementById("questName").value;
let length = questName.length;
if (length < 1) {
// show the error box
document.getElementById("nameEmpty").style.display = "";
}
if (length > 0) {
// hide the error box
document.getElementById("nameEmpty").style.display = "none";
}
if (length <3) {
// show the error box
document.getElementById("nameShort").style.display = "";
}
if (length>2) {
// hide the error box
document.getElementById("nameShort").style.display = "none";
}
// update master string
// updateCommand("name", questName);
updateCommand();
}
function updateBaseAttack() {
// check for valid entry
let baseAttack = document.getElementById("baseAttack").value;
let length = baseAttack.length;
// console.log("baseAttck: " + baseAttack);
// console.log("length: " + length);
// check to see if value is too low
document.getElementById("baseAttackEmpty").style.display = "";
if (baseAttack >= 1) {
// hide the error box
document.getElementById("baseAttackLow").style.display = "none";
document.getElementById("baseAttackEmpty").style.display = "none";
}
if (baseAttack <1) {
// hide the error box
document.getElementById("baseAttackLow").style.display = "";
}
if (length==0) {
document.getElementById("baseAttackEmpty").style.display = "";
}
if (length > 0) {
document.getElementById("baseAttackEmpty").style.display = "none";
}
updateCommand();
}
function updateBaseStrength() {
// check for valid entry
let baseStrength = document.getElementById("baseStrength").value;
let length = baseStrength.length;
// console.log("baseAttck: " + baseStrength);
// console.log("length: " + length);
// check to see if value is too low
document.getElementById("baseStrengthEmpty").style.display = "";
if (baseStrength >= 1) {
// hide the error box
document.getElementById("baseStrengthLow").style.display = "none";
document.getElementById("baseStrengthEmpty").style.display = "none";
}
if (baseStrength < 1) {
// hide the error box
document.getElementById("baseStrengthLow").style.display = "";
}
if (length == 0) {
document.getElementById("baseStrengthEmpty").style.display = "";
}
if (length > 0) {
document.getElementById("baseStrengthEmpty").style.display = "none";
}
updateCommand();
}
function updateBaseAccuracy() {
// check for valid entry
let baseAccuracy = document.getElementById("baseAccuracy").value;
let length = baseAccuracy.length;
// console.log("baseAttck: " + baseAccuracy);
// console.log("length: " + length);
// check to see if value is too low
document.getElementById("baseAccuracyEmpty").style.display = "";
if (baseAccuracy >= 1) {
// hide the error box
document.getElementById("baseAccuracyLow").style.display = "none";
document.getElementById("baseAccuracyEmpty").style.display = "none";
}
if (baseAccuracy < 1) {
// hide the error box
document.getElementById("baseAccuracyLow").style.display = "";
}
if (length == 0) {
document.getElementById("baseAccuracyEmpty").style.display = "";
}
if (length > 0) {
document.getElementById("baseAccuracyEmpty").style.display = "none";
}
updateCommand();
}
function updateBaseHP() {
// check for valid entry
let baseHP = document.getElementById("baseHP").value;
let length = baseHP.length;
// console.log("baseAttck: " + baseHP);
// console.log("length: " + length);
// check to see if value is too low
document.getElementById("baseHPEmpty").style.display = "";
if (baseHP >= 30) {
// hide the error box
document.getElementById("baseHPLow").style.display = "none";
document.getElementById("baseHPEmpty").style.display = "none";
}
if (baseHP < 30) {
// hide the error box
document.getElementById("baseHPLow").style.display = "";
}
if (length == 0) {
document.getElementById("baseHPEmpty").style.display = "";
}
if (length > 0) {
document.getElementById("baseHPEmpty").style.display = "none";
}
updateCommand();
}
function updateQuestPrefix() {
// check for valid entry
// console.log("updateQuestPrefix Entered");
updateCommand();
}
function updateQuestWeapon() {
// check for valid entry
// console.log("updateQuestPrefix Entered");
updateCommand();
}
function updateImageLink() {
// check for valid entry
// console.log("updateImageLink Entered");
updateCommand();
}
function updateSpawnChance() {
// check for valid entry
// console.log("updateSpawnChance Entered");
updateCommand();
}
function updateQuestChannel() {
// check for valid entry
// console.log("updateQuestChannel Entered");
updateCommand();
}
function updatePlayerLevel() {
// check for valid entry
// console.log("updatePlayerLevel Entered");
updateCommand();
}
function init() {
// clear all fields
document.getElementById("questName").value="";
document.getElementById("baseAttack").value = "";
document.getElementById("baseStrength").value = "";
document.getElementById("baseAccuracy").value = "";
document.getElementById("baseHP").value = "";
document.getElementById("questPrefix").value = "";
document.getElementById("questWeapon").value = "";
document.getElementById("imageLink").value = "";
document.getElementById("spawnChance").value = "";
document.getElementById("spawnChanceHigh").style.display = "none";
document.getElementById("questString").innerHTML = "";
document.getElementById("questChannel").value = "";
document.getElementById("playerLevel").value = "";
}
function updateCommand() {
// Put together the command in the proper order
// // console.log(field, value);
let questString = "d!makequest";
let questName = "\"" + document.getElementById("questName").value + "\" " ;
let baseAttack = "atk " + document.getElementById("baseAttack").value;
let baseStrength = " strg " +document.getElementById("baseStrength").value;
let baseAccuracy = " accy " +document.getElementById("baseAccuracy").value;
let baseHP = " hp " + document.getElementById("baseHP").value;
let questPrefix = "";
if (document.getElementById("questPrefix").value.length > 0) {
questPrefix = " task " + "\"" + document.getElementById("questPrefix").value+"\"";
}
let questWeapon = "";
if (document.getElementById("questWeapon").value.length > 0) {
questWeapon = " weapon " + "\"" + document.getElementById("questWeapon").value + "\"";
}
let imageLink = "";
if (document.getElementById("imageLink").value.length > 0) {
imageLink = " image " + document.getElementById("imageLink").value;
}
let spawnChance = "";
if (document.getElementById("spawnChance").value.length > 0 && document.getElementById("spawnChance").value < 41) {
spawnChance = " spawn " + document.getElementById("spawnChance").value + "%";
document.getElementById("spawnChanceHigh").style.display = "none";
}
if (document.getElementById("spawnChance").value > 40) {
document.getElementById("spawnChanceHigh").style.display = "";
}
let questChannel = "";
if (document.getElementById("questChannel").value.length > 0) {
questPrefix = " channel " + document.getElementById("questChannel").value;
}
let playerLevel = "";
if (document.getElementById("playerLevel").value.length > 0) {
questPrefix = " playerlevel " + "\"" + document.getElementById("playerLevel").value + "\"";
}
// document.getElementById("questString").value = questString + " " + "\"" + questName + "\" " + baseAttack + " " + baseStrength + " " + baseAccuracy + " "+ baseHP;
document.getElementById("questString").innerHTML = questString + " " + questName + baseAttack + baseStrength + baseAccuracy + baseHP + questPrefix + questWeapon + imageLink + spawnChance + questChannel + playerLevel;
}
</script>
<form>
<table class="auto-style4">
<tr>
<td style="width: 343px; height: 61px;">
<strong><span style="color: #CC0000">*</span>Quest Name
(Min 3 Characters)<br />
</strong> <strong><input id="questName" name="QName" type="text" onkeyup="updateName()" /></strong><br /></td>
<td class="auto-style2">
<p id="nameEmpty" style="color: #CC0066"><strong>Quest Name is empty</strong></p>
<p id="nameShort" style="color: #CC0066"><strong>Quest Name is too short</strong></p>
</td>
</tr>
<tr>
<td style="width: 343px; height: 61px;">
<strong><span style="color: #CC0000">*</span>Quest Base Attack Value (Min 1)<br />
<input id="baseAttack" name="Text3" type="text" onkeyup="updateBaseAttack()" /></strong></td>
<td class="auto-style2">
<p id="baseAttackEmpty" style="color: #CC0066" ><strong>Quest Base Attack is empty </strong> </p>
<p id="baseAttackLow" style="color: #CC0066"><strong>Quest Base Attack cannot be less than 1.0</strong></p>
</td>
</tr>
<tr>
<td style="width: 343px; height: 61px;">
<p>
<strong> <span style="color: #CC0000">*</span>Quest Base Strength Value (Min 1)<br />
<input id="baseStrength" name="Text4" type="text" onkeyup="updateBaseStrength()" /></strong></p>
</td>
<td class="auto-style2">
<p id="baseStrengthEmpty" style="color: #CC0066"><strong>Quest Base Strength is empty</strong></p>
<p id="baseStrengthLow" style="color: #CC0066"><strong>Quest Base Strength cannot be less than 1.0</strong></p>
</td>
</tr>
<tr>
<td style="width: 343px; height: 61px;">
<p>
<strong><span style="color: #CC0000">*</span>Quest Base Accuracy Value (Min 1)<br />
<input id="baseAccuracy" name="Text5" type="text" onkeyup="updateBaseAccuracy()" /></strong></p>
</td>
<td class="auto-style2">
<p id="baseAccuracyEmpty" style="color: #CC0066"><strong>Quest Base Accuracy is empty</strong></p>
<p id="baseAccuracyLow" style="color: #CC0066"><strong>Quest Base Accuracy cannot be less than 1.0</strong></p>
</td>
</tr>
<tr>
<td style="width: 343px; height: 61px;">
<p>
<strong><span style="color: #CC0000">*</span>Quest Base HP Value (Min 30)<br />
<input id="baseHP" name="Text6" type="text" onkeyup="updateBaseHP()" /></strong></p>
</td>
<td class="auto-style2">
<p id="baseHPEmpty" style="color: #CC0066"><strong>Quest Base HP is empty</strong></p>
<p id="baseHPLow" style="color: #CC0066"><strong>Quest HP cannot be less than 30</strong></p>
</td>
</tr>
<tr>
<td style="width: 343px; height: 45px;">
<p>
Quest Name Prefix (optional)<br />
<input id="questPrefix" name="Text7" type="text" onkeyup="updateQuestPrefix()" /></p>
</td>
<td class="auto-style3">Default: Battle a</td>
</tr>
<tr>
<td style="width: 343px; height: 45px;">
<p>
Quest Weapon (optional)<br />
<input id="questWeapon" name="Text10" type="text" onkeyup="updateQuestWeapon()" /></p>
</td>
<td class="auto-style3">Default: None (Weapon must be listed in shop)</td>
</tr>
<tr>
<td style="width: 343px; height: 45px;">
<p>
Quest Image Link (optional)<br />
<input id="imageLink" name="Text8" type="text" onkeyup="updateImageLink()" /></p>
</td>
<td class="auto-style3">Default: Crossed swords</td>
</tr>
<tr>
<td style="width: 343px; height: 45px;">
<p>
Quest Spawn Chance (Optional, Max 40)<br />
<input id="spawnChance" name="Text9" type="text" onkeyup="updateSpawnChance()" /></p>
</td>
<td class="auto-style3">
<p class="auto-style1">Default: 21%</p>
<p id="spawnChanceHigh" style="color: #CC0066"><strong>Spawn Chance cannot be more than 40</strong></p>
</td>
</tr>
<tr>
<td style="width: 343px; height: 45px;">
<p>
Quest Channel (Optional)<br />
<input id="questChannel" name="Text11" type="text" onkeyup="updateQuestChannel()" /></p>
</td>
<td class="auto-style3">Default: all</td>
</tr>
<tr>
<td style="width: 343px; height: 45px;">
Player Level Required For Quest (Optional)<br />
<input id="playerLevel" name="Text12" type="text" onkeyup="updatePlayerLevel()" /></td>
<td class="auto-style3">Default: All</td>
</tr>
</table>
<p>
<input id="Button1" type="button" value="Clear" onclick="init()"/></p>
<hr />
</form>
Quest Command: <br /><h2><label id="questString">d!makequest</label></h2>
{/source}
More DueUtil Resources
What's Next?
Now that you have set up quests, check out this article on how to make Weapons.
What is DueUtil?
DueUtil is a Discord Bot that lets you set up a quest game where users can buy items in a shop, fight level-scaling monsters, collect pets, fight other users, and customize their game profile.
Find out more about this Discord Bot here: https://dueutil.tech/
Your Turn. What Do You Do?
Did you find this DueUtil Quest Generator useful?
Tell me about it in the Comments Section. I'm interested in your feedback.
E-mail Notification Opt-in
Do you want to receive email notifications when we add content?
Sign up on our private mailing list.
YES! Notify me of new posts!