Jump to content

How to create Quest profile


Droidz

Recommended Posts

Quest profile

Quest profile contain two files:

Quests.cs > C# code - What the bot should do for completed the objectives of the quest, one class per quest. (I recommend for edit this file to use visual studio and add for reference wManager.dll at the project, this file)

Profile.xml > Xml code – In this file is defined:

  • The order of quest step (sample: quest1>PickUp ; quest2>PickUp ; quest2>Pulse ; quest2>TurnIn ; …)
  • List of Npc quest giver (starts and ends quests list id)
  • List of Npc (vendor, repair, mailbox)
  • (You can use editor (You can found it in “Profile creator helper”) or block note)
Useful tools:

Select product « Quester », Click on button “Start”, new window appear, click on button “Profile creator helper”.

post-1-0-71798400-1366390716_thumb.png

Quest Tools

post-1-0-20472600-1366390717_thumb.png

  • Return entry id and position of your current target (text formatted to c# syntax for Quest.cs).
  • Return your position (text formatted to c# syntax for Quest.cs).
  • Return game objects information (game object is Mailbox, chest, mine, herb, …), entry id and position of all objects loaded in wow memory (position order by player distance) (replace “GameObject Name” by object name (case sensitive)) (text formatted to c# syntax for Quest.cs).
  • Return unit information (uint is player, pet, creature, Npc, …), entry id and position of all unit loaded in wow memory (position order by player distance) (replace “Creature Name” by unit name (case sensitive)) (text formatted to c# syntax for Quest.cs).
  • Create base quest class (information extracted of wowhead, it is recommended to manually check if they are correct) (replace “Quest ID” by your quest entry id”) (text formatted to c# syntax for Quest.cs).
  • Create Npc quest giver, prefilled PickUp, TurnIn quests and position (information extracted of wowhead, it is recommended to manually check if they are correct) (replace “Npc ID” by your unit entry id”) (text formatted to xml syntax for Profile.xml).
  • Return information about your current quests, this return quest entry id, stat of objectives 1, 2, 3, 4 and time left.
  • Convert Zygor guide to WRobot quest profile (it don’t convert all, this can help you to gain time because you need to fix errors and bad information manually) (you can found guide in “ZygorGuidesViewer\Guides\Leveling”) (copy text of guide in textbox (14) for convert it) (return xml and C# code).
  • Quest Profile Editor (for Profile.xml).
  • This extract all quests classes name of c# (Quests.cs) file.
  • Open Windows Notepad.
  • Open Windows Calculator.
  • Open Development tools (very useful tools for extract wow memory information).
  • Textbox where are returned values.
To get entry id of a unit, quest or object go to wowhead, on this URL wowhead.com/quest=26378 entry id of this quest is 26378.

Download this file for get positions of NPC (extract it in wrobot folder): http://download.wrobot.eu/wrobot/Data_creature.csv.zip

Profile.xml

For edit this file you can use “Profile Editor” (9) or notepad.

QuestFile:

Path to c# file.

QuestsSorted:

post-1-0-61458000-1366390717_thumb.png

Action of quests (WRobot reading this list in order)

NameClass: The C# class name of the quest selected (case sensitive) (class name is in Quests.cs).

Actions:

· Pulse: Execute objective of the quest.

· TurnIn: Return to Npc for complete the quest.

· PickUp: Go to Npc for accept the quest.

· PulseAllInOne: Execute PickUp > Pulse > TurnIn.

NpcQuest:

List of Npc and Game Object quest giver. Don’t forget to complete PickUpQuests and TurnInQuests (list of quest id), you can use Quest Tools (6) for gain time.

Npc:

List of mailbox, Npc vendor, repair…

I recommend to edit existing quest profile to better understand.

Quest.cs

For edit Quest.cs you need base know of c#.net and POO. You need also Visual Studio 2010 (or 2012).

Editor:

You can use notepad, but I recommend:

· Open Visual Studio

· Create new project Class Library.

· Add reference at your project wManager.dll and robotManager.dll.

· When you create project with visual studio a .cs file is created, remove all text of it (Quest.cs don’t use namespace).

Quest.cs don’t use namespace, you need one class by quest (it is possible to use two classes per quest if necessary). I use quest name for naming class (no compulsory), don't forget to use public class and inheritance of Quest.....Class.

Quest simple, without objective, just pickup, turnin:

public class ReportToGoldshire : QuestClass // inheritance of QuestClass
{
    public ReportToGoldshire()
    {
        QuestId.Add (54); // Add quest id
    }
}
Quest type kills or get items find on creature:
public sealed class BeatingThemBack : QuestGrinderClass // Inheritance of QuestGrinderClass
{
    public BeatingThemBack ()
    {
        QuestId.Add (28757); // Add quest id

        Step.AddRange(new[] { 6, 0, 0, 0 }); // Objective required count, for this quest he has only one objective to kills 6 creatures, if quest need 10 items replace 6 by 10


        HotSpots.Add(new Vector3(-8885.293f, -62.18237f, 85.49203f)); // Position where you can found creature at kill
        HotSpots.Add(new Vector3(-8850.301f, -94.07894f, 83.14889f)); // Position where you can found creature at kill

        EntryTarget.Add(49871); // Entry id of creature at kill
    }
}
Quest type gatherer for pick up items:
public sealed class ABundleofTrouble : QuestGathererClass // Inheritance of QuestGathererClass
{
    public ABundleofTrouble()
    {
        QuestId.Add(5545); // Add quest id

        Step.AddRange(new[] { 8, 0, 0, 0 }); // Objective required count

        EntryIdObjects.Add(176793); // Entry id of game objects at gather

        HotSpots.Add (new Vector3(-9364, -1274, 60)); // Position where you can found game objects

        HotSpots.Add (new Vector3(-9494, -1464, 60)); // Position where you can found game objects
    }
}
Quest type use item on GameObjects/Unit:
public sealed class ExtinguishingHope : QuestUseItemOnClass // Inheritance of QuestUseItemOnClass
{
    public ExtinguishingHope()
    {
        QuestId.Add(26391); // Add quest id

        Step.AddRange(new[] { 8, 0, 0, 0 }); // Objective required count
        HotSpots.Add(new Vector3(-8921, -354, 73)); // Position where you can found game objects, creatures

        HotSpots.Add(new Vector3(-9037, -314, 73)); // Position where you can found game objects, creatures

        ItemId = 58362; // Entry id of item at use
        Range = 5 ; // Range of item
        EntryIdTarget.Add(42940); // Entry id of game objects or creatures/npc whose you need use item on it

    }
}
 

For quest type use spell on GameObjects/Unit replace inheritance class QuestUseSpellOnClass by QuestUseSpellOnClass and ItemId by SpellId

 

Quest type interact with Npc:

public sealed class FearNoEvil : QuestInteractWithClass
{
    public FearNoEvil()
    {
        QuestId.Add (28813); // Add quest id

        Step.AddRange(new[] { 4, 0, 0, 0 });// Objective required count

        EntryIdTarget.Add(50047); // Entry id of creature/npc at interact with
    GossipOptionNpcInteractWith = 0; // This options is only if npc has menu
        HotSpots.Add(new Vector3(-8781, -105, 83));
        HotSpots.Add(new Vector3(-8783, -187, 82));
    }
}
 

Override, Add condition for get if character can get this quest:

public class ReportToGoldshire : QuestClass // inheritance of QuestClass
{
    public ReportToGoldshire()
    {
        QuestId.Add (54); // Add quest id
    }
	
	public override bool CanConditions()// Override method CanConditions
	{
		if (ObjectManager.Me.WowClass == WoWClass.Monk)
		{
			return false;
		}
		
		if (ObjectManager.Me.Level > 5)
		{
			return false;
		}
		
		if (ObjectManager.Me.WowRace != WoWRace.Human)
		{
			return false;
		}
		
		return true;
	}
}

If the character is an monk, or level is bigger than 5 or not human this quest is skip

Override PickUp for accep quest of item:
public sealed class TheCollector : QuestClass
{
    public TheCollector()
    {
        QuestId.AddRange(new[] { 123 });

        Step.AddRange(new[] { 0, 0, 0, 0 });
    }

    public override bool PickUp() // Override method PickUp()
    {
        ItemsManager.UseItem(ItemsManager.GetNameById(1307));
        Quest.AcceptQuest();
        return true;
    }
}
Quest without objective number count and with special objective:
public sealed class TheJasperlodeMineQuest : QuestClass
{
    public TheJasperlodeMineQuest()
    {
        QuestId.AddRange(new[] { 76 });

        Step.AddRange(new[] { 0, 0, 0, 0 });
    }

    private bool _step1;

    public override bool Pulse() // Override Pulse, special objective (need to Explore the Jasperlode Mine)
    {
        if (!_step1 && GoToTask.ToPosition(new Vector3(-9097, -565, 61))) // Go to Jasperlode Mine
        {
            Thread.Sleep(3000);
            _step1 = true; // character is at Jasperlode Mine, objective complete
        }
        return true;
    }

    public override bool IsComplete() // Override iscomplete for add _step1
    {
        if (IsCompleted()) // If quest already turnin
            return true;

        if (!HasQuest()) // If character not have this quest
            return false;

        return _step1; // Return _step1
    }
}
Multi Quest in one class:
public sealed class BeatingThemBackQuest : QuestGrinderClass
{ 
	public BeatingThemBackQuest() 
	{ 
		QuestId.AddRange(new[] { 28757, 28762, 28763, 28764, 28765, 28766, 28767, 31139, 28763 }); 
		Step.AddRange(new[] { 6, 0, 0, 0 });
		HotSpots.Add(new Vector3(-8885.293f, -62.18237f, 85.49203f));
		HotSpots.Add(new Vector3(-8850.301f, -94.07894f, 83.14889f));
		EntryTarget.Add(49871);
	}
}

Wow have created 9 quests with same objective, one per wow class, when wrobot check if you have quest, he search if your character have one of quests of the class.

Link to comment
Share on other sites

I've created some and got them working but, honest feedback which I hope helps, it needs to be made much easier.

 

I'm sure it's being worked on and will come, just trying to provide some constructive feedback and am looking forward to the new versions as they are released :)

Link to comment
Share on other sites

  • 4 weeks later...

SOLVED!

 

included 2 lines at begining of QuestList.cs file.

using wManager.Wow.Class;
using robotManager.Helpful; 

Hi,

I try to make it work but it seems i cant. I would like to make one MOP Daily quest first.
I get an error while try using profile: cant find "QuestGrinderClass" type or namespace.
This was the original error but half haungarian.

Compilator Error :
c:\Users\Home\AppData\Local\Temp\d2rf4nhz.0.cs(1,39) : error CS0246: A következő típus- vagy névtérnév nem található: „QuestGrinderClass” (esetleg hiányzik egy „using” direktíva vagy egy szerelvényre mutató hivatkozás).


QuestList.cs

//including these two rows solved my problem
using wManager.Wow.Class;
using robotManager.Helpful;

public sealed class TheEternalVigil : QuestGrinderClass
{
    public TheEternalVigil()
    {
        // http://www.wowhead.com/quest=30307
        Name = "The Eternal Vigil";

        QuestId.AddRange(new[] { 30307 });

        //kill 8 creatures
        Step.AddRange(new[] {8, 0, 0, 0 });

        // Target NPC info results     
        HotSpots.Add(new Vector3(1575.099f, 1387.266f, 444.9345f));
        HotSpots.Add(new Vector3(1551.12f, 1381.316f, 443.8689f));
        HotSpots.Add(new Vector3(1570f, 1436.109f, 441.7368f));
        HotSpots.Add(new Vector3(1517.842f, 1418.363f, 442.5871f));
        HotSpots.Add(new Vector3(1608.345f, 1461.799f, 442.3046f));
        HotSpots.Add(new Vector3(1614.658f, 1415.385f, 446.3118f));


        EntryTarget.Add(58412); // Shao-Tien Marauder  : http://www.wowhead.com/npc=58412
        EntryTarget.Add(65810); // Shao-Tien Soul-Render  : http://www.wowhead.com/npc=65810
        

    }
} 

GoldenLotusDaily.xml

<?xml version="1.0" encoding="utf-8"?>
<QuesterProfile xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <QuestFile>QuestList.cs</QuestFile>
  <QuestsSorted>
    <QuestsSorted Action="PickUp" NameClass="TheEternalVigil" />
    <QuestsSorted Action="Pulse" NameClass="TheEternalVigil" />
    <QuestsSorted Action="TurnIn" NameClass="TheEternalVigil" />
  </QuestsSorted>
  <NpcQuest>
    <NPCQuest Id="58408" Name="Leven Dawnblade" GameObject="false">
      <PickUpQuests>
        <int>30307</int>
      </PickUpQuests>
      <TurnInQuests>
        <int>30307</int>
      </TurnInQuests>
      <Position>
        <X>1212.302</X>
        <Y>1044.78</Y>
        <Z>425.9673</Z>
        <Type>None</Type>
      </Position>
    </NPCQuest>
  </NpcQuest>
  <Npc />
  <Blackspots />
</QuesterProfile>

I'd appreciate any advice.

Thanks

Link to comment
Share on other sites

  • 7 months later...
  • 2 years later...

Hi

J'ai bien compris qu'une classe C# définissant une quête doit comporter :

Une QuestId et le NPC correspondant doit être définis dans le XML.

Supposons que je veuille effectuer une tache ne correspondant a aucune quête mais nécessitant l'interaction avec un NPC.

Concrètement, je souhaite apres avoir recolté la mine et la commande de mine, passer aupres du NPC une nouvelle commande.

Dans le Quest editor, il y a bien une option qu on doit passer a true si la quete ne fait pas forcement parti de notre liste de quetes. 

Comment définir ca dans un fichier .CS ?. 

De plus l'interaction ne se fait pas avec le perso si la QuestId n'est pas definie. Peut t on depasser cela ?

Merciiiii :)

Link to comment
Share on other sites

33 minutes ago, PierreDeRosette said:

Hi

J'ai bien compris qu'une classe C# définissant une quête doit comporter :

Une QuestId et le NPC correspondant doit être définis dans le XML.

Supposons que je veuille effectuer une tache ne correspondant a aucune quête mais nécessitant l'interaction avec un NPC.

Concrètement, je souhaite apres avoir recolté la mine et la commande de mine, passer aupres du NPC une nouvelle commande.

Dans le Quest editor, il y a bien une option qu on doit passer a true si la quete ne fait pas forcement parti de notre liste de quetes. 

Comment définir ca dans un fichier .CS ?. 

De plus l'interaction ne se fait pas avec le perso si la QuestId n'est pas definie. Peut t on depasser cela ?

Merciiiii :)

Salut, si ça peut t'aider regarde dans le dossier "WRobot\Profiles\Quester\Cache\", les profils XML sont convertis en c# (ça te donne des exemples). Pour ce que tu veux faire, reste dans avec un profil XML est utilise une quête de type "OverridePulseCSharpCode" (ou "FullCSharpCode" si elle est complexe) (regarde dans le dossier Cache après avoir lancé le profil pour comprendre ou est mis le code). Si tu veux je peux essayer de la coder, pour ça donne-moi le plus d'information possible.

Link to comment
Share on other sites

  • 2 months later...

Hi,

how do i create /cast spell command?

cheers

 

edit:

Rererenced WOW's API

PROTECTED CastSpell(spellID, "bookType") - Cast the specified spell by ID. spellbookTab is "spell" or "pet". As of patch 2.0, this function has been restricted to Blizzard signed UI mods. Note: You can still use this function to open Craft windows and activate Lock Picking. (protected 2.0)

http://wowwiki.wikia.com/wiki/World_of_Warcraft_API

Link to comment
Share on other sites

On 5/26/2016 at 2:13 PM, kodec said:

Hi,

how do i create /cast spell command?

cheers

 

edit:

Rererenced WOW's API


PROTECTED CastSpell(spellID, "bookType") - Cast the specified spell by ID. spellbookTab is "spell" or "pet". As of patch 2.0, this function has been restricted to Blizzard signed UI mods. Note: You can still use this function to open Craft windows and activate Lock Picking. (protected 2.0)

http://wowwiki.wikia.com/wiki/World_of_Warcraft_API

You could try;

RunMacroText("/Cast Frost Bolt")

or you can also use the command you found but instead of spellid use the position in your spellbook, eg;

CastSpell(1,"spell")

will cast the first spell in your spellbook;

CastSpell(1,"pet")

will cast the first spell in your pet's spellbook.

 

Hope that helps.

 

Link to comment
Share on other sites

  • 10 months later...
On 15/04/2017 at 9:35 PM, Dequality said:

What is the C# line for checking if a certain quest is completed already? :) 

Hello, 

Quest.GetQuestCompleted(123456)

 

Link to comment
Share on other sites

3 hours ago, wlhr said:

just do it

I'm strongly considering it... I want the one for private servers as I feel the ban risk is smaller, however I kinda need to make my own profiles 1-80 which is some pretty heavy work haha. 

Link to comment
Share on other sites

I have no Idea how to use this, even if I made alot of profiles for Pirox. Can u help me with some kind of "ToDo" List to make a succesfull profile?
Can I create the Profile only in the "EasyProfileCreator" or do I need some other programms?

 

There is my Testprofile. Tried to accept 2 Dailys at Icecrown and Turn them in. But he does nothing. It's 3.3.5 client btw

TestDaily1111.xml

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...