-
Posts
128 -
Joined
-
Last visited
Reputation Activity
-
AudreyH got a reaction from Pudge in Snippets codes for quest profiles
KILL AND LOOT "is complete condition" for killing a boss (instance, raid) with no quest
return ObjectManager.GetWoWUnitByEntry(16151).Count == 0; with the id of the boss
dont forget to select "true" in "not required in quest log"
-
AudreyH reacted to Seminko in Light's Hope: Elysium realm renamed to Lightbringer - how to batch rename WRobot settings
I have over 100 XML settings files for WRobot. Here's how you can change all of them at once.
Run Windows PowerShell, navigate to the settings folder and do:
Get-Childitem *.xml | foreach { rename-item $_ $_.Name.Replace("Elysium", "Lightbringer") } Enjoy
-
AudreyH reacted to Yayybo in Quester Profiles in C#
Well its doable but dunno if its worth the hassle to rewrite an existing product just for the sake of not using the profile editor :D Still i guess you could tweak the movement, approaching vendors/questgivers/trainers/flightmasters more easily with predefined pathes. Like if you are near a vendor that is inside a house swap to a predefined path instead of generating a new one with recast and detour...which gets stucked or hugs the wall like crazy.
Hacked a small example together which is despite the name not very 'advanced' haha... . I've included two quest examples for Valley of Trials. Tested on TBC. Kinda wonky and not 100% working right now :/ Most of the included classes are empty as i've added them cuz i thought those features might be handy or must be included to work properly... . Atleast it was more convenient to write the quest profiles and a lot faster than with the profile editor x)
AdvancedQuester.rar
-
AudreyH reacted to Mlight123 in Plugin Request
I went ahead and experimented and managed to pull it off myself by editing the ResetInstances.cs file and changing the Lua script to Chat.SendChatMessages(".i u all"); in case anyone else needs this here it is :D
ResetInstances.cs
-
AudreyH reacted to Avvi in Avvi's C# Tips & Tricks with Helpful Code Snippets
Hi all,
I figured I'd post some things that I have learned during my time of developing in C#. Perhaps some of this is obvious for some of the more experienced WRobot C# writers, but for me, I had to do a lot of forum searching and experimenting to make progress on any of my work.
How do I get started?
Please see this post by @Droidz
How can I see what Functions are available to me in the WRobot API?
I recommend using some sort of decompiler in order to see what functions are available in the WRobot API. That is, use something such as dotPeek from jetbrains. See this URL: https://www.jetbrains.com/decompiler/ . Once you have this downloaded, open the WRobot Binaries located in the (C:\WRobot\Bin) folder in dotPeek. I cannot even begin to explain how many times the recompiled helped me find useful things I could re-use. As a quick tip, I would suggest taking a look at the wManager.wManager.Wow.Helpers functions that are available. Anything listed as public static <variable type> will be available to use from a Plugin/Profile/Fightclass etc.
What if WRobot doesn't have an available function that I will need?
WRobot doesn't have everything instantly available, so you may need to resort to using some Lua Functions to get information back from the WoW Client. An example of this that I ran into at some point was getting the number of Character Macros someone has.. Of course this is very specific, but please bear with me for the sake of this example :).
WoW Lua Reference: http://wowprogramming.com/docs/api_categories
Using Lua in C#:
This snippet will return a List of integers and set the C# variable numberOfMacros equal to the returned list of the DoString function. To be more specific, it will provide a list of the number of Global account Macros , and the number of Personal Character Macros.
var numberOfMacros = Lua.LuaDoString<List<int>>("return numCharacterMacros");
The below will return just the number Character Macros someone has. If you need a specific variable from a Lua Function, then do the following:
var numPersonalMacros = Lua.LuaDoString<int>("local numAccountMacros, numCharacterMacros = GetNumMacros(); return numCharacterMacros"); The above snippet will set the C# variable numPersonalMacros equal to numCharacterMacros from the lua return value.
Using a Variable in the Lua.LuaDoString. The below will return the text body of the macro that has the id of 121.
var _macroID = 121 string macroBody = Lua.LuaDoString<string>("return GetMacroBody(" + _macroID + ")");
Executing Lua Code in C#
This will leave the party (if the player is in one).
wManager.Wow.Helpers.Lua.RunMacroText("/run LeaveParty()");
What is the difference between Lua.LuaDoString() and RunMacroText()?
The difference is in can be understand in how you think about them. Lua.LuaDoString should be seen as a way to retrieve information.. More specifically, the Lua.LuaDoString's purpose is to have a value returned to it, so that you can assign it to a C# Variable. RunMacroText can be used to do something in game. More specifically, RunMacroText should be used when trying to run some sort of in-game script (such as /cast spell).
Plugin Template C#: Plugin-Template.cs
I have attached a basic plugin template that can be used. In it, I have provided an example of:
A Basic Implementation of the wManager.Plugin.IPlugin Class (including Settings/Initialize/Dispose) Basic loop that will occur while WRobot is running Settings that can be configured from Plugin Page A Category/Short Description for the Plugin Settings An example of Watching for Game Events. An example of OnRunState / OnAfterRunState for WRobot States Watching For Game Events
Sometimes you may find that you need to wait for something to occur in game before you can take a specific action. In WoW / WRobot world, these things are called events. Below are two examples of events. The first event will occur when either the Group Loot Settings change, or a Player Enters/Joins the current Party.The second Event will occur when a System Message is received. I recommend adding this watchForEvents Function in the Initialize function of a plugin, or somewhere where it will only be called once. For an example of this, please see my Plugin Template.
private void watchForEvents() { EventsLuaWithArgs.OnEventsLuaWithArgs += (LuaEventsId id, List<string> args) => { if (id == wManager.Wow.Enums.LuaEventsId.PARTY_MEMBERS_CHANGED) { Logging.Write("Joined Group or something about the current group was changed."); } if (id == wManager.Wow.Enums.LuaEventsId.CHAT_MSG_SYSTEM) { Logging.Write("We Received a System Message."); } }; }
Finding the list of available Game Events:
Each version of the game is different here, so this is where you will need to be careful. By that I mean, some versions of the game may have an event type, but a different version may not. Blizzard was not always consistent in their name accross different versions of the game, so please be careful to test against multiple versions of the game.
Open DotPeek Search for "LuaEventsID" Double Click LuaEventsId in the Assembly Explorer Window. A window will open displaying a list of Events. What do each of these Events mean?
WoW Event Reference: http://wowwiki.wikia.com/wiki/Event_API
(Reminder! Some of these may be different in different versions of the game.)
Watching For WRobot State Changes
In addition to in game events, there are also WRobot 'states'. Similar to Game Events, WRobot states are the particular condition that WRobot is in at a specific time. For example, there is a state called 'MillingState', and another called 'Looting' that come out with WRobot. States are managed by the WRobot FiniteStateMachineEvents Engine. When a State occurs/changes/ends/etc, an event is passed to the FiniteStateMachine (pardon my wording here if this is not 100% correct). There are three main events that we can use to manage our States.
State Events that occur:
OnBeforeCheckIfNeedToRunState - This can be used to CANCEL an event if specific conditions are met. OnRunState - This can be used to do something just as the State is being started. OnAfterRunState - This can be used to do something just as the State has completed.
Example of OnRunState and OnAfterRunState
In this example we are watching for when WRobot starts the ToTown State and when it finishes it. We create a boolean that is set to true when the state is started, and then set it to false when the State is completed. I recommend adding the initializeToTownWatcher() function in the Initialize function of a plugin, or somewhere where it will only be called once. For example of this, please see my Plugin Template.
bool goToTown = false; private void initializeToTownWatcher() { robotManager.Events.FiniteStateMachineEvents.OnRunState += (engine, state, cancelable) => { if (state != null && state.DisplayName == "To Town") { goToTown = true; Logging.Write("Going to Town State has been initiated."); } }; robotManager.Events.FiniteStateMachineEvents.OnAfterRunState += (engine, state) => { if (state != null && state.DisplayName == "To Town") { goToTown = false; Logging.Write("We have completed going To Town State."); } }; } Example of OnBeforeCheckIfNeedToRunState
In this example, we catch the state with the name of To Town and cancel it by setting the passed in cancelable parameter to true.
private void cancelToTownState() { robotManager.Events.FiniteStateMachineEvents.OnBeforeCheckIfNeedToRunState += (engine, state, cancelable) => { if (state != null && state.DisplayName == "To Town") { Logging.Write("We have cancelled the To Town State"); cancelable.Cancel = true; } }; } Where can I find other WRobot States?
Each version of the WRobot is different, so some versions of WRobot may have a state type, but a different version may not. Please be careful to test against multiple versions of the game/WRobot.
Open DotPeek Expand wManager Module Expand wManager.Wow.Bot.States namespace.
MORE TBA....
The above is my attempt at trying to help newcomers to WRobot at writing their own plugins / fight classes / etc. If there are any questions , suggestions, or even corrections, please do let me know in the comments and I'll be sure to add/update things as they come up!
Thanks,
- Avvi
-
-
AudreyH got a reaction from fragik in How to create Quest profile
It's the beginning of a great Adventure :)
-
AudreyH got a reaction from Bronson in Snippets codes for quest profiles
KILL AND LOOT "is complete condition" for killing a boss (instance, raid) with no quest
return ObjectManager.GetWoWUnitByEntry(16151).Count == 0; with the id of the boss
dont forget to select "true" in "not required in quest log"
-
AudreyH reacted to inselmann in (Workaround) Zeppelin to Northrend 100% afk-able
Hi guys,
my english is not so good. So excuse me. German is my native language.
I want to share my method to use the zep to northrend 100% afkable.
If you are lucky you are in a few minutes in northrend if unlucky it takes 20minutes :-)
But it is working when you are away from your computer.
First: We need fly skills!
Lets automate buying fly skills for your character in burning crusade.
(We start in bc after getting lvl 70 nagrand grind, we go back to thrallmar and go to flight trainer)
We can automate everything:
<QuestsSorted Action="None" NameClass="Fliegen lernen" />
<QuestsSorted Action="RunCode" NameClass="var position = new Vector3(45.09895f, 2741.531f, 85.17036f);
int npcEntryId = 35093;

if (!ObjectManager.Me.IsOnTaxi)
{
 if (wManager.Wow.Bot.Tasks.GoToTask.ToPositionAndIntecractWithNpc(position, npcEntryId))
 {
 Usefuls.SelectGossipOption(GossipOptionsType.taxi);
 }
}" />
<QuestsSorted Action="Wait" NameClass="1000" />
<QuestsSorted Action="RunCode" NameClass="var position = new Vector3(45.09895f, 2741.531f, 85.17036f);
int npcEntryId = 35093;

if (!ObjectManager.Me.IsOnTaxi)
{
 if (wManager.Wow.Bot.Tasks.GoToTask.ToPositionAndIntecractWithNpc(position, npcEntryId))
 {
 Usefuls.SelectGossipOption(GossipOptionsType.taxi);
 }
}" />
<QuestsSorted Action="Wait" NameClass="2000" />
<QuestsSorted Action="RunLuaCode" NameClass="RunMacroText ("/click ClassTrainerScrollFrameButton3");" />
<QuestsSorted Action="Wait" NameClass="2000" />
<QuestsSorted Action="RunLuaCode" NameClass="RunMacroText ("/click ClassTrainerTrainButton");" />
<QuestsSorted Action="Wait" NameClass="2000" />
<QuestsSorted Action="RunCode" NameClass="var position = new Vector3(45.09895f, 2741.531f, 85.17036f);
int npcEntryId = 35093;

if (!ObjectManager.Me.IsOnTaxi)
{
 if (wManager.Wow.Bot.Tasks.GoToTask.ToPositionAndIntecractWithNpc(position, npcEntryId))
 {
 Usefuls.SelectGossipOption(GossipOptionsType.taxi);
 }
}" />
<QuestsSorted Action="Wait" NameClass="1000" />
<QuestsSorted Action="RunCode" NameClass="var position = new Vector3(45.09895f, 2741.531f, 85.17036f);
int npcEntryId = 35093;

if (!ObjectManager.Me.IsOnTaxi)
{
 if (wManager.Wow.Bot.Tasks.GoToTask.ToPositionAndIntecractWithNpc(position, npcEntryId))
 {
 Usefuls.SelectGossipOption(GossipOptionsType.taxi);
 }
}" />
<QuestsSorted Action="Wait" NameClass="2000" />
<QuestsSorted Action="RunLuaCode" NameClass="RunMacroText ("/click ClassTrainerScrollFrameButton2");" />
<QuestsSorted Action="Wait" NameClass="2000" />
<QuestsSorted Action="RunLuaCode" NameClass="RunMacroText ("/click ClassTrainerTrainButton");" />
<QuestsSorted Action="Wait" NameClass="2000" />
<QuestsSorted Action="RunCode" NameClass="var position = new Vector3(45.09895f, 2741.531f, 85.17036f);
int npcEntryId = 35093;

if (!ObjectManager.Me.IsOnTaxi)
{
 if (wManager.Wow.Bot.Tasks.GoToTask.ToPositionAndIntecractWithNpc(position, npcEntryId))
 {
 Usefuls.SelectGossipOption(GossipOptionsType.taxi);
 }
}" />
<QuestsSorted Action="Wait" NameClass="1000" />
<QuestsSorted Action="RunCode" NameClass="var position = new Vector3(45.09895f, 2741.531f, 85.17036f);
int npcEntryId = 35093;

if (!ObjectManager.Me.IsOnTaxi)
{
 if (wManager.Wow.Bot.Tasks.GoToTask.ToPositionAndIntecractWithNpc(position, npcEntryId))
 {
 Usefuls.SelectGossipOption(GossipOptionsType.taxi);
 }
}" />
<QuestsSorted Action="Wait" NameClass="2000" />
<QuestsSorted Action="RunLuaCode" NameClass="RunMacroText ("/click ClassTrainerScrollFrameButton1");" />
<QuestsSorted Action="Wait" NameClass="2000" />
<QuestsSorted Action="RunLuaCode" NameClass="RunMacroText ("/click ClassTrainerTrainButton");" />
<QuestsSorted Action="Wait" NameClass="2000" />
then i use my heartstone to orgrimmar, back in orgrimmar i fly in the middle of the zep area
The zep has NO mesh, you CAN NOT walk there and the npcs on the zep are not useable at all.
First of all right now the zep from orgrimmar to borean tundra is bugged, it flies to the mountain and stopps there.
At least for me, so i have to use the zep to undercity and from there to northrend. (2x zep :-) )
I dont share my exact code because it looks not good if everybody uses it.
You have to write your own code for the flying part.
So we make a workaround:
We can not go directly on the zep, we fly at the back of the zep (it is important so we can get out of the zep
later) and there we dismount. Now we are on the zep :-)
The hard part was to determine how to repeat and succesfully get on it.
So we use a while condition, it checks for local coordinates and repeats if we fail:
<QuestsSorted Action="None" NameClass="project zep" />
<QuestsSorted Action="While" NameClass="ObjectManager.Me.Position.DistanceTo2D(new Vector3(1778.676, -4334.307, 101.6494)) < 1500" />
<QuestsSorted Action="Pulse" NameClass="flyingpart" />
<QuestsSorted Action="Reset" NameClass="flyingpart" />
<QuestsSorted Action="None" NameClass="we wait at position" />
<QuestsSorted Action="Wait" NameClass="9000" />
<QuestsSorted Action="None" NameClass="we dismount - i use druid you must change it" />
<QuestsSorted Action="RunLuaCode" NameClass="RunMacroText ("/use Travel Form");" />
<QuestsSorted Action="RunCode" NameClass="wManager.wManagerSetting.CurrentSetting.CloseIfPlayerTeleported = false" />
<QuestsSorted Action="Wait" NameClass="140000" />
<QuestsSorted Action="RunCode" NameClass="wManager.wManagerSetting.CurrentSetting.CloseIfPlayerTeleported = true" />
<QuestsSorted Action="EndWhile" NameClass="" />
140000 is wait time if all went fine and we are on the zep, zone will be change and while condition is over,
if not triggered we start again at flyingpart
I use 2 zep stations right now, the zep in undercity that flies to northend you must dismount on the ropes
at the end of the ship. It is important otherwise you may have problems to leave the zep later.
If you reach northrend just make a if condition to leave the zep
<QuestsSorted Action="If" NameClass="ObjectManager.Me.Position.DistanceTo2D(new Vector3(x, y, z)) < 50" />
my code without flying stuff, this is from orgrimmar to tirisfal and tirisfal to northrend,
<QuestsSorted Action="None" NameClass="Lvl 70 erreicht, fliegen gelernt in bc, zurueck in OG" />
<QuestsSorted Action="None" NameClass="spass mit dem zeppelin" />
<QuestsSorted Action="RunCode" NameClass="wManager.wManagerSetting.CurrentSetting.UseMount = false;
wManager.wManagerSetting.CurrentSetting.UseFlyingMount = false;" />
<QuestsSorted Action="Pulse" NameClass="guteralterfreierhimmel" />
<QuestsSorted Action="RunCode" NameClass="wManager.wManagerSetting.CurrentSetting.UseFlyingMount = true;
wManager.wManagerSetting.CurrentSetting.UseMount = true;" />
<QuestsSorted Action="RunCode" NameClass="wManager.wManagerSetting.CurrentSetting.SkinMobs = false;
wManager.wManagerSetting.CurrentSetting.HarvestMinerals = false;
wManager.wManagerSetting.CurrentSetting.CloseIfPlayerTeleported = true;
wManager.wManagerSetting.CurrentSetting.UseFlyingMount = true;
wManager.wManagerSetting.CurrentSetting.UseMount = true;
wManager.wManagerSetting.CurrentSetting.AttackBeforeBeingAttacked = false;" />
<QuestsSorted Action="If" NameClass="ObjectManager.Me.Position.DistanceTo2D(new Vector3(1929.501, -4701.443, 36.34026)) < 50" />
<QuestsSorted Action="Pulse" NameClass="zumplateau" />
<QuestsSorted Action="Reset" NameClass="zumplateau" />
<QuestsSorted Action="EndIf" NameClass="" />
<QuestsSorted Action="Wait" NameClass="1000" />
<QuestsSorted Action="None" NameClass="projekt zeppelin" />
<QuestsSorted Action="While" NameClass="ObjectManager.Me.Position.DistanceTo2D(new Vector3(1778.676, -4334.307, 101.6494)) < 1500" />
<QuestsSorted Action="Pulse" NameClass="sinnlosfliegenzumzep" />
<QuestsSorted Action="Reset" NameClass="sinnlosfliegenzumzep" />
<QuestsSorted Action="None" NameClass="auf zep jetzt warten" />
<QuestsSorted Action="Wait" NameClass="9000" />
<QuestsSorted Action="RunLuaCode" NameClass="RunMacroText ("/use Travel Form");" />
<QuestsSorted Action="RunCode" NameClass="wManager.wManagerSetting.CurrentSetting.CloseIfPlayerTeleported = false" />
<QuestsSorted Action="Wait" NameClass="140000" />
<QuestsSorted Action="RunCode" NameClass="wManager.wManagerSetting.CurrentSetting.CloseIfPlayerTeleported = true" />
<QuestsSorted Action="EndWhile" NameClass="" />
<QuestsSorted Action="If" NameClass="ObjectManager.Me.Position.DistanceTo2D(new Vector3(2067.353, 288.5511, 97.03262)) < 50" />
<QuestsSorted Action="None" NameClass="vom zep runterkommen" />
<QuestsSorted Action="Pulse" NameClass="zumplateauuc" />
<QuestsSorted Action="Reset" NameClass="zumplateauuc" />
<QuestsSorted Action="EndIf" NameClass="" />
<QuestsSorted Action="While" NameClass="ObjectManager.Me.Position.DistanceTo2D(new Vector3(2070.47, 303.2696, 97.24919)) < 1500" />
<QuestsSorted Action="Pulse" NameClass="sinnlosfliegenzumzepuc" />
<QuestsSorted Action="Reset" NameClass="sinnlosfliegenzumzepuc" />
<QuestsSorted Action="None" NameClass="auf zep jetzt warten" />
<QuestsSorted Action="Wait" NameClass="9000" />
<QuestsSorted Action="RunLuaCode" NameClass="RunMacroText ("/use Travel Form");" />
<QuestsSorted Action="RunCode" NameClass="wManager.wManagerSetting.CurrentSetting.CloseIfPlayerTeleported = false" />
<QuestsSorted Action="Wait" NameClass="125000" />
<QuestsSorted Action="RunCode" NameClass="wManager.wManagerSetting.CurrentSetting.CloseIfPlayerTeleported = true" />
<QuestsSorted Action="EndWhile" NameClass="" />
<QuestsSorted Action="None" NameClass="willkommen im lichking addon jetzt runterlaufen vom zep" />
<QuestsSorted Action="None" NameClass="vom zep runterkommen" />
<QuestsSorted Action="If" NameClass="ObjectManager.Me.Position.DistanceTo2D(new Vector3(1995.305, -6097.593, 73.51222)) < 500" />
<QuestsSorted Action="Pulse" NameClass="startlichking" />
<QuestsSorted Action="Reset" NameClass="startlichking" />
<QuestsSorted Action="EndIf" NameClass="" />
Have fun!
Spend a whole day to get it working :-)
-
AudreyH reacted to Droidz in Update Status - Patch 7.1.0 Build 22900
Hello,
I start to work on this patch
ps: More info about this version: http://www.wowhead.com/g00/news=257057/patch-7-1-survival-guide-return-to-karazhan-suramar-campaign-raiding-with-leashe
-
AudreyH reacted to Pasterke in base framework C# for fightclasses
This is a base Framework in C# to develop a fightclass.
Everything is named Test, just rename Test to Disc, Warrior etc ....
I put some comments where needed.
Imoportant : CastSpellOn can't be used on unfriendly targets because the protected status of the WoW API !
Hope this is usefull :)
frameWork.zip
-
AudreyH got a reaction from Droidz in Havebuff problem
Because the proc is
Infusion of Light: ID=54149, Stack=1, TimeLeft=12747 ms, Owner=0000000007CAC6590815B80000000000, Flag=Duration, Negative, CasterLevel=110, Mask=117440591
-
AudreyH got a reaction from BetterSister in Snippets codes for quest profiles
KILL AND LOOT "is complete condition" for killing a boss (instance, raid) with no quest
return ObjectManager.GetWoWUnitByEntry(16151).Count == 0; with the id of the boss
dont forget to select "true" in "not required in quest log"
-
AudreyH got a reaction from Dreamful in Auto Make Elemental
Thxs,
i forgot this plugin sadly :)
It works fine
-
AudreyH reacted to Droidz in TargetBuffCastedByMe 3.3.5 Servers (Anyone who uses this please look at)
In xml fightclass, you can use "C Sharp Code" condtion, in value put:
If you want check if buff casted by your character is in target:
wManager.Wow.ObjectManager.ObjectManager.Target.GetAllBuff().Any(b => b.IsValid() && b.Owner == wManager.Wow.ObjectManager.ObjectManager.Me.Guid && b.SpellId == 123456) (replace 123456 by your spell id).
-
AudreyH reacted to Droidz in Bug in CurrentTarget.HaveBuff(84617)
Hello, like here: http://wrobot.eu/forums/topic/2866-targetbuffcastedbyme-335-servers-anyone-who-uses-this-please-look-at/#comment-13188 WRobot (and lua) retrun the first buff in the list.
In C# code you can fix this problem with this code:
if (wManager.Wow.ObjectManager.ObjectManager.Target.IsValid) { var buffs = wManager.Wow.ObjectManager.ObjectManager.Target.GetAllBuff(); var guidPlayer = wManager.Wow.ObjectManager.ObjectManager.Me.Guid; foreach (var buff in buffs) { if (buff.Owner == guidPlayer && buff.SpellId == 84617) { var buffTimeLeft = buff.TimeLeft; // work here... } } }
-
-
AudreyH got a reaction from Droidz in Cooldown Time Left
int notReady = Lua.LuaDoString<int>("local start, duration, enable = GetItemCooldown(124224); return start;");
return 0 if item is ready; > 1 if not
-
AudreyH reacted to Droidz in Check wow unit or wow player for debuff
Hello,
try this:
List<WoWPlayer> playerList = ObjectManager.GetObjectWoWPlayer(); string debuffName = "SpellNameInEnglish"; foreach (var player in playerList) { if (player.IsValid && ObjectManager.Me.PlayerFaction == player.PlayerFaction) { if (player.HaveBuff(debuffName)) Logging.Write("[MyPlugin] Player " + player.Name + " have debuff " + debuffName); } } -
AudreyH reacted to Droidz in Target Enemy and cast Spell on it
Hello, You can add spell normally (just add "Crusader Strike" and WRobot will launch this spell when you select an enemy in range) Or if you want automatically attack near enemy, in the spell name put: local name = GetSpellInfo(35395); TargetNearestEnemy(); if UnitExists("target") and UnitIsEnemy("player","target") and IsSpellInRange(name, "target") then CastSpellByName(name, "target"); end TargetLastTarget(); In spell settings "Combat only" > False, "Not spell, is lua script" > true, "Timer" > 3000 (for test all 3 secondes).
-
AudreyH reacted to Droidz in Check wow unit or wow player for debuff
For get player role for the moment you can use lua: http://wowprogramming.com/docs/api/UnitGetAvailableRoles
In the next version I have added "AvailableRoles" function, you can use it like:
List<WoWPlayer> playerList = ObjectManager.GetObjectWoWPlayer(); bool canTank, canHealer, canDps; string debuffName = "SpellNameInEnglish"; foreach (var player in playerList) { if (player.IsValid && ObjectManager.Me.PlayerFaction == player.PlayerFaction) { player.AvailableRoles(out canTank, out canHealer, out canDps); Logging.Write("[MyPlugin] Player " + player.Name + " canTank: " + canTank + ", canHealer: " + canHealer + ", canDps: " + canDps); if (player.HaveBuff(debuffName)) Logging.Write("[MyPlugin] Player " + player.Name + " have debuff " + debuffName); } } -
AudreyH got a reaction from Droidz in inteligent pet battles
Hi,
we are working on a customizable battle pet addon
-
AudreyH got a reaction from Droidz in How to create Quest profile
It's the beginning of a great Adventure :)
-
AudreyH reacted to creativextent in [Tutorial] Create a basic Grinding Profile
This Simple guide will show you how to make a grinding profile
I will include images as well.
1. Figure out what and where you are going to grind! This is a simple thing, just look up information wowhead.com and figure things out!
2. Load up your wonderful MMORobot
3. Now click the drop down menu above the big start arrow, and select GRINDER
4. Now Click the Big ol Start button and you will presented with options. Click the Option button "Profile Creator"
5. Now you are presented with MORE options! I will explain each one!
1. Separation distance: I am not sure, but it is either how far away the bot can vary from the path, or how far the bot keeps or stays away from hostel npcs. Either way, 5 works great always.
2. Load or save buttons: Are just what they say, Load a profile to the creator or save the one you are working on.,
3. List and the ADD button: you use this to list and add different zones.
3. Zone Name: What is means :)
4. Del button: Delete what is in the Zone Name
5. Player lvl min/ max: what levels to start and stop at when reached during the grinding.
6. Target lvl min/ max: How high or low the NPCs must be before attacking.
7. Target Ids and the ADD / Del button: Target Ids are of the NPCs you are grinding, and you can use more than one. The ADD button next to it makes adding these NPCs a lot more easy. You click the NPC you want to kill and click add, now that targets ID is in your kill list. and the Del button deletes them.
8. Record Way button: This is extremely important. You use this button to start recording the path you want to take. Just find a starting location and click Record way and the bot will record the path you want to take. and when you have reached as far as you want just hit the button again and it will stop recording.
9. Add position to blacklist, and del button: You use this to black list a spot you want the bot to avoid or not attack in. So you do not die usually. The numbers in the bot next to the button tells the bot how far away to get in yards from the position. and the Del button deletes points.
10.Add Target to NPC list/ Drop down list/ Add by name to NPC buttons: Add target to Npc list tells the bot what npcs you want the bot to visit while grinding for things like repairs and trash selling. Just high light the NPC and click the button and it will add it. Use the Del button to delete the NPC. There is a drop down menu with a default list of general Npc types it will visit if seen or close. and you can use the Add by name to Npc to add specific Npcs you want the bot to visit.
----------------
6. Now from your good starting spot, put all the proper settings i explained above and hit Record Way and when you are done hit Stop Record Way
7. Awesome! Now just hit the Save button on the top right and name it anything you want!
8. Now Exit out of that long menu and now you are back at the Load Profile Grinder option again. Just use the drop down menu and find the profile you just made and hit load profile!
Congrats you have made a grinding profile and are now botting!
Please rep if we get that system and post if you like the little guide :)
-