Jump to content
Automation Vault

Guide to making a Quest Profile from a Noobs perspective


Recommended Posts


First we need a Text Editor like Visual Studio/Visual Studio code or Notepad++

You can Download the Questing Guide from this post aswell.

Questing Guide.lua


Information about this guide:
In this guide i will use the human start area as an exalple.

All Quest NPC ID and Quest ID are found on Wowhead by searching the quest for example on google or wowhead it self

Starting out:

The first thing we wanna know is What Race/Class is our player this is done by the command:
Player = GetPlayer();

This will return Player Race, Class and everything else we need so we got this placed at top of Profile as we gonna need it first

Now your Profile should look something like this:

Note the Function made, we will get to how they work later dont worry 🙂


Setting up a Simple Pick up and Turn in quest with no Objectives such as any Start Area Quest:

First we want to Accep the Quest, here i will use the quest "A Threat Within" from Deputy Willem as an example from human start area


First Number, 823 Is the Quest giver ID we always want to tell the Bot the quest giver we are picking up from.
Second Number, 783 is the Quest ID, we tell the bot to pick up this quest from the quest giver we gave bot in the first number

Now since this is a Quest where theres no objective or the item needed is given by the quest giver we just want to turn in the quest right away we will use this command:


Again we got the first number 197, this is the NPC we want to turn quest in to, so same as previous command first number is the NPC,

and again we got the Quest ID as the second number being in this case the same Quest we just picked up "A Threat Within" but now we have to turn it into a new Quest giver this time Marshal McBride

Your Profile should now look something like this:

Setting up a Simple Kill Quest with just 1 Objective:

In this examble I will use the Quest Kobold Camp Cleanup as an example

Step 1:

First again you got to Pick up the quest from the Quest giver:


Again First Number "197" is the Quest giver and the Second number "7" is the Quest ID.

Now your Quest Profile should look something like this:

Step 2:

In this quest the bot has to kill 8 Kobold Vermin, to set this up we got to use this 

KoboldVermin = {}; -- New Table to store our mob IDs
KoboldVermin[1] = 6;  -- ID for Kobold Vermin
KoboldCamp = CreateObjective("KillMobs",1,8,1,7,TableToList(KoboldVermin)); --- the Objective we can call on later in the profile


First we are "Creating the objective for the bot to store mob IDs in"

Second we give the bot the ID of the Mobs we want to kill in this case its Kobold Vermins and they have NPC id 6, found on Wowhead.

Third we Create the Objective you can call this what you want, i choose to call it by part of the Quest name in this example

CreateObjective = we now tell it to Create the objective with the Name KoboldCamp

KillMobs= This is to tell the bot i want to kill the mobs . Other type of this can be KillMobsAndLoot , this will tell bot to Kill the mob AND loot it. in case its a quest where you need to get an item from a mob, such as wolf pelt in Human start area

Explaining the Numbers and words following:
First Number "1" is telling the bot, this is the first Objective in this quest.
Second Number "8" is telling the bot, this is the amount i want to kill in this quest.
Third Number "1" is telling the bot, theres only 1 objective in total in this quest.
Fourth Number "7" is the Quest ID for this Quest, again the ID is found on Wowhead like you did when you made your Pick up of the quest.
TableToList(KiboldVermin) is the Table we just made before to list our Mob ID in earlier.

Now we have given the bot all the info we need to complete the quest "Kobold Camp Cleanup"

Your profile should now look something like this:

Note im still keeping the previous quest there as we ofcause want the Bot to do many in a row.


Now we want to tell the bot to actually do the quest, this is done with this Command:


Here we are telling the Bot to do the Objective we just created called KoboldCamp


Step 3:

Now after we are at the last step for this type of Quest, Turning it in.
We will use this command to do so:


Again we tell the bot the NPC ID "197" and the Quest ID "7", this will tell the bot to go to the NPC and turn in the quest.


Your profile should now look similar to this hopefully:

Now you have Learnt a few things:

How you tell bot to Pick up Quests.
How you tell bot to Turn in Quests.
How you Create an Objective for the quest to follow.
How you tell the bot to do the Objective you gave it.

Next we will do a Quest with other types of Objectives

  • Like 2
  • Thanks 2
Link to comment
Share on other sites

In this Step I will Explain how to set up other different types of Objectives other then KillMobs or KillMobsAndLoot.

We are still working on same principle as the previous post, where you learned how to pick up a quest and how to turn in a quest, and telling the bot to do our objective.

now i will take the quest Milly's Harvest and explain how to have a bot Gather an item from an object.


Again First we want it to pick up the quest with the line:

AcceptQuestFrom(9296,3904); --- Milly's Harvest - Milly Osworth

Again First number is the Quest giver NPC "9296", and second number is the Quest ID "3904".


Setting up the the Objective is similar to previous except a few things, i will explain:

MillyHarvest = {};
MillyHarvest[1] = 161557; --- Milly Harvest
Harvest = CreateObjective("GatherObject",1,8,1,3904,nil,TableToList(MillyHarvest));

As you see The first line is the same, we are setting the table we can call later in when creating the objective.

The second Line is also very similar, except this time its not a Mob ID this is the ID of the Object we are gathering from, and here i do mean the actual object on the ground you your self would normaly right click to start gathering.

The third Line is again Creating the Objective, but in stead this time we are not killing an NPC we are Gathering an Object, so instead its called GatherObject in stead of KillMobs or KillMobsAndLoot.

Note there is a Blue word after the Quest ID "nil", this must be there in a GatherObject Objective, else the bot will give you an Error.

And last we are again Calling Upon the Table MillyHarvest where we listed the Object to Interact with for the bot to gather the Item. 

Harvest = CreateObjective("GatherObject",1,8,1,3904,nil,TableToList(MillyHarvest));

so you will get this full line to that you can now tell the bot do work with.

Here is an example of how this quest would look if you only did the quest and nothing else, you can then work it in to your profile your self.

You will see alot is very similar to previous step, we are still telling bot our player race and class.

We are listing our Quest Objectives for the bot to follow
We are telling the bot to Accept the quest from Milly 
We are telling the bot to do our Objective in this case called "Harvest"
Last we are telling the bot to turn in the quest .

  • Like 2
  • Thanks 2
Link to comment
Share on other sites

You have now Learnt how to:

Tell the bot to Pick up and Turn in Quests.
Make Quest Objectives, both for killing mobs and gathering from an object.

Now i will teach you how to work a little with an if statement, in this first case how to set up a class quest.

Again we will be using some of the previous things like Picking up and Turning in quests.

In this step comes the point where we will need that very first thing we tell the bot 

Player = GetPlayer();


Now we will need to make an "If Statement"

In an "If statement" you can tell the bot that If we are a specific class, then we want it to "do this", or if we are a specific race "do this", or If a quest is complete or not complete "do this"

if(Player.Class == 1) then  

Here is an explanation to what we do in this line, some will see very familiar to previous guides.

First we tel the bot that if we are the Player.Class 1 then "Do This"

Player Class numbers can be found here: 

The line if(Player.Class == 1) will tell the bot that IF we are a warrior, then go to Quest giver 197 and pick up quest ID 3100 wich in this case is the very first warrior class quest where you meet your class trainer.

After this we again like previous tell the bot to Turn in the quest at our Quest NPC in this case our warrior trainer with the ID 911 and again the quest is still 3100.

Last we need to tell the bot we are done with our IF statement, by putting the word "end", if this is not done, bot will not know that we are done with the statement and will continue to think we can only do stuff as a warrior.

Here is an other example of an If statemen:

if CanTurnInQuest(61) then

Here you will see that i tell the bot that if we can turn in the quest with ID 61, this is the quest "Shipment to Stormwind", then i need to go to these Coordinates.

you can use this line QuestGoToPoint(-8856.702,601.0007,92.05086); to sometimes fix pathing issues, where the bot does not know how to generate a path to a quest npc, wich was the case for me in this quest. 

So since bot did not by it self know the way, i gave it 2 coordinates to follow, first is around the stormwind gate and the next is in front of the building where quest giver is, after this the bot could find the rest of the way by doing  the command 



Here is a thid  example of an If statemen:

In this case we can ask the bot that if the Quest is NOT completed, then do this. 

if CanTurnInQuest(62) == false then
TurnInQuestAt(240,62); --- The Fargodeep Mine - Marshal Dughan

As you can see we are asking the bot that if we can turn in the quest 62 is false,  meaning that we can NOT turn it in, then go to the Coordinates, else IF we can turn it in, just go turn it in at the Quest NPC.

  • Like 1
  • Thanks 2
Link to comment
Share on other sites


Here i will talk about what a function can be used for, as you see in the file you downloaded in the first step there was already a function made, Thanks to @MrFade.

function UseHearthStone()
    while(Player.IsChanneling or Player.IsCasting) do
    while(InGame == false) do


First we are telling the bot we want to create the function with the line function UseHeartStone() , you can name this whatever you want, but this is the name you will be calling upon later when you want it to use it.

Now we tell the bot to do, in this case using our Hearthstone, with the line UseItem("Hearthstone"), this can be done with any item in your inventory.

since we are using our hearthstone we know the game will give us a loading screen, so we want the the to to pause our plugin the one you enabled with the funny name for a little time, but we only want it done while we are channeling or casting the item/spell. so we need a "while loop" to check this.

while(Player.IsChanneling or Player.IsCasting) do

and While we are casting or channeling we want do absolutely nothing so we will tell the bot to Sleep our plugin, i believe this is the plugin you enabled with the funny name that the bot communicates with, done with the line:


Once again to end an "if statement" or in this case a while loop we need to tell the bot we are done with this so you must put the word:


now we want bot to check, if we are still in the game, as we know when casting a Heartstone successfully we get a loading screen this will for the bot count as not being ingame, so we want the bot to do nothing if that is the case and this is again done with a While Loop:

while(InGame == false) do
and again we have to sleep our plugin so the bot will not try and do anything like Jumping or Moving.
and last but not least since we are done with both our While loops but we are still within an "If statement" we ofcause have to end this "if statement" with the line:


so you get the full function as listed at the start. 

To use this function all you have to do is this simple command


this will then tell bot to do everthing. 

this can be usefull if you want to get fast back to your Inn or start area after doing a quest far away, so you can tell the bot that if a certain quest is complete, then use our function, should look similar to this:

if CanTurnInQuest(794) then


Here is a second function example:

this time its to use an item for a quest, in this case a quest in the Night Elf Start zone Quest called "Crown of the Earth" https://www.wowhead.com/classic/quest=921/crown-of-the-earth

Here we got to use an item called  Crystal Phial, an item we need to fill up with water from a fountain.

function UsePhial()
    UseItem("Crystal Phial");
        while(Player.IsChanneling or Player.IsCasting) do
        while(InGame == false) do

As you can see all the info is the same, except the function name "function UsePhial()" and the item we are using "UseItem("Crystal Phial");"

to use this function all you have to do is again call upon it like the previous version with a Hearthstone but with the line UsePhial();

  • Like 2
  • Thanks 2
Link to comment
Share on other sites

  • joax changed the title to Guide to making a Quest Profile from a Noobs perspective
  • Create New...