Hi,
this is a toolbox kit i put together with different some code i had laying around, enjoy!
using robotManager.Helpful;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using wManager.Wow.Bot.Tasks;
using wManager.Wow.Enums;
using wManager.Wow.Helpers;
using wManager.Wow.ObjectManager;
public class Tool
{
public static void LearningSpells(string SpellName)
{
Lua.LuaDoString(string.Format(@"
for i=1,GetNumTrainerServices() do
local name = GetTrainerServiceInfo(i)
if (name == '{0}') then
BuyTrainerService(i)
end
end
", SpellName.Replace("'", "\'")));
}
public static bool RecipeIsKnown(string profession, string RecipeName)
{
bool Known = Lua.LuaDoString<bool>(string.Format(@"
if not TradeSkillFrame then
CastSpellByName('{0}')
end
if TradeSkillFrame:IsVisible() == nil then
CastSpellByName('{0}')
end
numTradeSkills = GetNumTradeSkills()
for i = 1, numTradeSkills do
tradeSkillName, _, _, _ = GetTradeSkillInfo(i)
if (tradeSkillName == '{1}') then
return true;
end
if (TradeSkillFrame:IsVisible()) then
TradeSkillFrame:Hide();
end
end
return false;
", profession, RecipeName));
Thread.Sleep(100);
return Known;
}
// Craft works for Wrath of the Lich king
public static void Craft(string profession, string itemName, int quantity)
{
if (RecipeIsKnown(profession, itemName) == true)
{
if (Usefuls.WowVersion == 12340)
{
Lua.LuaDoString(string.Format(@"
if not TradeSkillFrame then
CastSpellByName('{0}')
end
if TradeSkillFrame:IsVisible() == nil then
CastSpellByName('{0}')
end
for i=1,GetNumTradeSkills() do
local name, _, _, _ = GetTradeSkillInfo(i)
if (name == '{1}') then
DoTradeSkill(i, {2})
end
if (TradeSkillFrame:IsVisible() and {2} < 2) then
TradeSkillFrame:Hide();
end
end
",
profession, itemName, quantity));
}
else
if (Usefuls.WowVersion == 8606 || Usefuls.WowVersion == 5875)
{
Lua.LuaDoString(string.Format(@"
if not TradeSkillFrame then
CastSpellByName('{0}')
end
if TradeSkillFrame:IsVisible() == nil then
CastSpellByName('{0}')
end
for i=1,GetNumTradeSkills() do
local name, _, _, _ = GetTradeSkillInfo(i)
if (name == '{1}') then
DoTradeSkill(i, {2})
end
if (TradeSkillFrame:IsVisible() and {2} < 2) then
TradeSkillFrame:Hide();
end
end
", profession, itemName, quantity));
}
}
}
public static void RemoveItem(int Itemid)
{
Lua.LuaDoString(string.Format(@"for i=0,4 do
for p=1,36 do
if GetContainerItemID(i,p) == {0} then
PickupContainerItem(i,p)
DeleteCursorItem();
return
end
end
end", Itemid));
}
public static void UseItem(int itemID)
{
Lua.LuaDoString(string.Format(@"for bag = 0,4 do
for slot = 1,GetContainerNumSlots(bag) do
local item = GetContainerItemID(bag, slot)
if (item and item == {0}) then
if (GetContainerItemCooldown(bag,slot)==0) then
UseContainerItem(bag,slot)
return true
end
end
end
end
", itemID));
}
public static int HasItem(string itemName)
{
var execute =
"local itemCount = 0; " +
"for b=0,4 do " +
"if GetBagName(b) then " +
"for s=1, GetContainerNumSlots(b) do " +
"local itemLink = GetContainerItemLink(b, s) " +
"if itemLink then " +
"local _, stackCount = GetContainerItemInfo(b, s)\t " +
"if string.find(itemLink, \"" + itemName + "\") then " +
"itemCount = itemCount + stackCount; " +
"end " +
"end " +
"end " +
"end " +
"end; " +
"return itemCount; ";
return Lua.LuaDoString<int>(execute);
}
public static bool Faction(string FactionName)
{
bool rep = Lua.LuaDoString<bool>("for factionIndex = 1, GetNumFactions() do local name, _, standingId = GetFactionInfo(factionIndex); if string.find(name, '" + FactionName.Replace("'", "\'") + "') then return standingId; end end");
return rep;
}
public static void AbandonQuest(string questName)
{
Lua.LuaDoString("local name = '" + questName + "' for i=1,GetNumQuestLogEntries() do local questTitle, level, questTag, suggestedGroup, isHeader, isCollapsed, isComplete = GetQuestLogTitle(i) if string.find(questTitle, name) then SelectQuestLogEntry(i) SetAbandonQuest() AbandonQuest() end end");
}
public static bool haveKey(int keyId)
{
bool haveKey = Lua.LuaDoString<bool>("local itemIdSearch = " + keyId + "; local bag = KEYRING_CONTAINER; for slot = 1,MAX_CONTAINER_ITEMS do local itemLink = GetContainerItemLink(bag,slot); local _, itemCount = GetContainerItemInfo(bag,slot); if itemLink and itemCount then local _,_,itemId = string.find(itemLink, '.*|Hitem:(%d+):.*'); if itemId and tonumber(itemId) == itemIdSearch then return true end end end return false");
return haveKey;
}
public static void BuyItem(string name, int amount)
{
Lua.LuaDoString(string.Format(@"
local itemName = ""{0}""
local quantity = {1}
for i=1, GetMerchantNumItems() do
local name = GetMerchantItemInfo(i)
if name and name == itemName then
BuyMerchantItem(i, quantity)
end
end", name, amount));
}
public static void Sellitem(string ItemName)
{
Lua.LuaDoString(string.Format(@"
local ItemToSell = '{0}'
for bag = 0,4,1 do
for slot = 1, GetContainerNumSlots(bag), 1 do
local name = GetContainerItemLink(bag, slot);
if name and string.find(name, ItemToSell) then
if (MerchantFrame:IsShown() ) then
ShowMerchantSellCursor(1)
UseContainerItem(bag, slot)
end
end
end
end", ItemName));
}
public static bool Face(Vector3 vector3)
{
var player = new Vector3(vector3);
ObjectManager.Me.Rotation = robotManager.Helpful.Math.TargetFacingToRadian(ObjectManager.Me.Position, player);
Move.StrafeLeft();
Move.StrafeRight();
return true;
}
public static void Fish(Vector3 vector3, Vector3 Water, int SkillLineStart, int SkillLineEnd, uint rode, uint sword)
{
while (Skill.GetValue(SkillLine.Fishing) >= SkillLineStart && Skill.GetValue(SkillLine.Fishing) <= SkillLineEnd)
{
ItemsManager.UseItem(rode);
if (!FishingTask.IsLaunched)
{
if (GoToTask.ToPosition(vector3, 1.5f))
{
Face(Water);
FishingTask.LoopFish();
}
}
}
FishingTask.StopLoopFish();
ItemsManager.UseItem(sword);
}
public static void CheckUpdate()
{
try
{
string onlineFile = "Github Raw link";
Quester.Bot.QuesterSetting.Load();
string profileName = "File.xml";
string currentFile = System.Windows.Forms.Application.StartupPath + @"\Profiles\Quester\" + profileName;
var currentFileContent = System.IO.File.ReadAllText(currentFile, System.Text.Encoding.UTF8);
var onlineFileContent = new System.Net.WebClient { Encoding = System.Text.Encoding.UTF8 }.DownloadString(onlineFile);
if (!string.IsNullOrWhiteSpace(currentFileContent) && !string.IsNullOrWhiteSpace(onlineFileContent))
{
if (currentFileContent != onlineFileContent)
{
Logging.Write("New version found, try to update file", (Logging.LogType)1, System.Drawing.Color.Red);
System.IO.File.WriteAllText(currentFile, onlineFileContent);
Thread.Sleep(500);
new Thread(() => robotManager.Products.Products.ProductRestart()).Start();
}
}
Logging.Write("[Auto Updater]The version on your pc is the latest updated version.", (Logging.LogType)1, System.Drawing.Color.Red);
}
catch (Exception e)
{
Logging.WriteError("Auto update: " + e);
}
}
public static int InteractItems(List<string> itemNames, int interactions = int.MaxValue)
{
if (!itemNames.Any())
return -1;
var execute =
"local counter = 0; " +
"local leftStacks = 0; " +
"for b=0,4 do " +
"if GetBagName(b) then " +
"for s=1, GetContainerNumSlots(b) do " +
"local itemLink = GetContainerItemLink(b, s) " +
"if itemLink then " +
"local _, stackCount = GetContainerItemInfo(b, s)\t" +
"if string.find(itemLink, \"" + itemNames.FirstOrDefault() + "\") ";
if (itemNames.Count > 1)
{
execute = itemNames.Where(obj => itemNames.FirstOrDefault() != obj).Aggregate(execute, (current, obj) => current + "or string.find(itemLink, \"" + obj + "\") ");
}
execute = execute +
"then " +
"if (counter < " + interactions + ") then " +
"UseContainerItem(b, s); " +
"counter = counter + 1; " +
"else " +
"leftStacks = leftStacks + 1;" +
"end " +
"\tend\tend\tend end end return leftStacks;";
return Lua.LuaDoString<int>(execute);
}
/// <summary>
/// Sends a mail to a recipient.
/// </summary>
/// <param name="recipient">The recipient.</param>
/// <param name="subject">The subject.</param>
/// <param name="itemNames">The items to send as names.</param>
/// <returns>true if successful ; false if no mailbox available or stacks are left.</returns>
public static bool SendItems(string recipient, string subject, List<string> itemNames)
{
var mailBox = ObjectManager.GetObjectWoWGameObject().FirstOrDefault(i => i.IsMailbox && i.GetDistance <= 5);
if (mailBox == null || string.IsNullOrWhiteSpace(recipient))
return false;
if (subject.Length == 0)
subject = "-";
if (mailBox)
{
const int delayMs = 800;
var timeOut = DateTime.Now.AddSeconds(40);
Interact.InteractGameObject(mailBox.GetBaseAddress);
Thread.Sleep(delayMs);
Lua.LuaDoString("RunMacroText('/click MailFrameTab2');");
Thread.Sleep(delayMs);
var leftStack = InteractItems(itemNames, 12);
Thread.Sleep(delayMs);
Lua.LuaDoString(@"SendMail(\" + recipient + ",\"{subject}\",\" \");");
Thread.Sleep(delayMs * 3);
while (leftStack != 0 && DateTime.Now < timeOut)
{
leftStack = InteractItems(itemNames, 12);
Thread.Sleep(delayMs);
Lua.LuaDoString(string.Format(@"SendMail(\" + recipient + ",\"{subject}\",\" \");"));
Thread.Sleep(delayMs * 3);
}
Lua.LuaDoString("CloseMail();");
if (leftStack != 0)
return false;
}
return true;
}
public static bool Achievement(int achievementID, int index)
{
bool haveAchievement = Lua.LuaDoString<bool>("local achievementID = " + achievementID + "; local indexCriteria = " + index +"; local achievementInfo = {GetAchievementInfo(achievementID)}; if achievementInfo[4] then return achievementInfo[4] end local achCriteriaInfo = {GetAchievementCriteriaInfo(achievementID, indexCriteria)}; return achCriteriaInfo[3];");
return haveAchievement;
}
}
public static class Travel
{
public static class Flight
{
//Thunderbluff to Orgrimmar
static readonly Vector3 ThunderBluffFlightMaster = new Vector3(-1196.75f, 26.0777f, 176.9492f);
static readonly int FlightMasterID = 2995;
static readonly Vector3 OrgrimmarPlateform = new Vector3(1676.25f, -4313.45f, 61.79468f);
static readonly string Orgrimmar = "Orgrimmar";
//Orgrimmar to Thunderbluff
static readonly Vector3 OrgrimmarFlightMaster = new Vector3(1676.25f, -4313.45f, 61.79468f);
static readonly int OrgrimmarFlightMasterID = 3310;
static readonly Vector3 ThunderBluffPlateform = new Vector3(-1196.75f, 26.0777f, 176.9492f);
static readonly string Thunderbluff = "Thunder Bluff";
private static void Wait(Vector3 arrival, int distance)
{
if (ObjectManager.Me.IsOnTaxi)
{
while (ObjectManager.Me.Position.DistanceTo(arrival) > distance)
{
Thread.Sleep(5000);
}
}
}
public static bool FlightPathChecker(string FlightPath)
{
bool Flight = Lua.LuaDoString<bool>(string.Format(@"
local node = '{0}'
if ( TaxiFrame:IsVisible() ) then
for i=1,NumTaxiNodes() do
if string.find(TaxiNodeName(i), node) then
return true;
end
end
return false;
end", FlightPath.Replace("'", "\'")));
return Flight;
}
public static bool Flying(int npcID, Vector3 vector, string FlightName)
{
if (!ObjectManager.Me.IsOnTaxi)
{
while (GoToTask.ToPositionAndIntecractWithNpc(vector, npcID, 1) && !ObjectManager.Me.IsOnTaxi)
{
if (FlightPathChecker(FlightName) == false)
{
Logging.Write("[Travel]Flight: " + "Sorry, you do not have the flightpath to " + FlightName);
break;
}
int node;
node = Lua.LuaDoString<int>("for i=0,30 do if string.find(TaxiNodeName(i),'" + FlightName + "') then return i end end");
Lua.LuaDoString("TakeTaxiNode(" + node + ")");
}
}
return true;
}
public static void ThunderBluffToOrgrimmar()
{
Flying(FlightMasterID, ThunderBluffFlightMaster, Orgrimmar);
Wait(OrgrimmarPlateform, 5);
}
public static void OrgrimmarToThunderBluff()
{
Flying(OrgrimmarFlightMasterID, OrgrimmarFlightMaster, Thunderbluff);
Wait(ThunderBluffPlateform, 5);
}
}
}
How to use Tool:
RunCode (Action):
- Tool.LearningSpells("Name Of spell"); // Put in name of the spell you wish to buy.
- Tool.Craft("profession", "RecipeName", 1); // This code will only work for Wrath of the lich king
- Tool.RemoveItem(55); // Removes item by ID
- Tool.UseItem(55); // Uses item by ID
- Tool.AbandonQuest("Quest Name"); //Abandon Quest by Name
- Tool.Sellitem("Item Name"); // sell item by name
- Tool.Fish(new Vector3(1, 1, 1), new Vector3(1, 1, 1), 0, 75, 6562, 111);
- Tool.CheckUpdate(); // updates quester profiles from github.raw
- Tool.SendItems("name", "note", new List<string> { "Super Healing Potion", }); // mail itemlist to another player
If statements :
- Tool.RecipeIsKnown("profession", "RecipeName") == true // check if you have this Recipe! If statement!
- Tool.HasItem("itemname") <= 0
- Tool.Faction("Name of the faction", 5) == true // add name of faction, and amount of rep you want to check aganst. 42999 is max rep.
- Tool.haveKey(KeyID) // checks if you have a key
- Tool.Achievement(int achievementID, int index)
How to use Travel (RunCode):
Flight :
- Travel.Flight.ThunderBluffToOrgrimmar();
- Travel.Flight.OrgrimmarToThunderBluff();
I want to say thank you to both @Droidz For his hints on what the problem with was for some code.
ToolBox has many useful functions to help you develop different products.
Credits (Thanks to these people for there help and or code.) :
@Droidz for Auto updater.
@reaper for his SendMailing code.
@Ordush for his Crafting Code.
@Matenia for all the helpful links and hints to get this project Toolbox. Must respect!
If you find any bugs or want me to implement anything, Join our discord server and send me a message. : https://discordapp.com/invite/xQuhs5C