Jump to content

Matenia

Elite user
  • Posts

    2230
  • Joined

  • Last visited

Everything posted by Matenia

  1. If you use pure Lua (not macro) it should also work using https://wowwiki-archive.fandom.com/wiki/API_LearnTalent If the button is called Panel2Talent12, you can use LearnTalent(2, 12)
  2. It's good manners to post your solution so that people with the same problem in the future can build upon it. https://xkcd.com/979/
  3. Fix your fightclass and/or wrobot settings not to ignore players. Likely Party product doesn't have the state for attacking players either.
  4. It seems these are all quester logs.
  5. You put your account name. What do you put in your Battle.net tag when you log into the game in your client? You use your account name from the website, not your email. So you just put account name twice, easy.
  6. You need to spend some time on figuring out how to actually use the quester. In the quester profile, you can use Pickup, Run and TurnIn. Pickup will pick up the quest if it's neither completed nor in your log, run will run it if currently in your log and Turnin will go to the marked turn in NPC if the quest is in your log and marked completely. For what you seem to want to do, you can just use the quest editor and likely don't need to write a single line of code. There's a guide and tutorial section in the forums. There are even video guides.
  7. Yes, that should be correct. Some people have gone as far as clearing all the lines separately by iterating them. I think this was needed in Vanilla but not TBC.
  8. You shouldn't recreate tooltips. You should clean them up and re-use. They don't get garbage collected properly. I made a comment regarding that before. I don't remember the specifics, but that's basically what my research had shown
  9. I actually think these threads are quite constructive, so I'm going to share some pathing code I use in HMP to hopefully help you out. You can specifically add OffMesh connections. In fact, you can add them to be used EVEN if WRobot can still find a path. You can also store functions in WRobot's internal Vars, which can be referenced using the C# string that offmesh connections are capable of using. So you could even call them from a quester profile, as long as you save the function in that Var map first. using System; using System.Collections.Generic; using System.Threading; using robotManager.Helpful; using wManager; using wManager.Wow.Class; using wManager.Wow.Enums; using wManager.Wow.Helpers; using wManager.Wow.ObjectManager; public class OffMeshes { public static readonly string PathToKey = "HMPPathToFunction"; public static readonly string MoveForwardAndResetKey = "HMPMoveForwardAndReset"; public static bool PathTo(Vector3 position) { var path = PathFinder.FindPath(position); foreach (var pos in path) { while (Conditions.InGameAndConnectedAndAliveAndProductStartedNotInPause && ObjectManager.Me.Position.DistanceTo2D(pos) > 1.5) { MovementManager.MoveTo(pos); Thread.Sleep(500); } } MovementManager.StopMove(); return position.DistanceTo2D(ObjectManager.Me.Position) <= 1.5f; } public static void MoveForwardAndReset(int ms = 15000) { var temp = wManagerSetting.CurrentSetting.CloseIfPlayerTeleported; wManagerSetting.CurrentSetting.CloseIfPlayerTeleported = false; Move.Forward(Move.MoveAction.PressKey, ms); Thread.Sleep(ms); wManagerSetting.CurrentSetting.CloseIfPlayerTeleported = temp; if (ObjectManager.Me.GetMove) { MovementManager.StopMove(); } } public static void AddConnections() { // Setting functions to WRobot's internal map to re-use them later in Offmesh connections Var.SetVar(PathToKey, new Action<Vector3>((x) => PathTo(x))); Var.SetVar(MoveForwardAndResetKey, new Action(() => MoveForwardAndReset())); PathFinder.OffMeshConnections.Add(new PathFinder.OffMeshConnection(new List<Vector3> { new Vector3(174.0891, 1185.221, 166.1563), new Vector3(196.5771, 1180.41, 167.9987), }, 1) { Type = PathFinder.OffMeshConnectionType.Unidirectional, Name = "Nijel's Point - Maxxton" }); PathFinder.OffMeshConnections.Add(new PathFinder.OffMeshConnection(new List<Vector3> { new Vector3(-68.50166, 1186.978, 90.78709), new Vector3(-12.31121, 1205.146, 109.4463), new Vector3(24.1873, 1218.461, 133.6504), new Vector3(63.54899, 1219.134, 154.2211), new Vector3(153.3421, 1216.366, 165.8533), new Vector3(176.0194, 1186.073, 166.0586), new Vector3(198.7642, 1180.339, 167.9988), }, 1) { Type = PathFinder.OffMeshConnectionType.Unidirectional, Name = "Nijel's Point - Maxxton 2", }); PathFinder.OffMeshConnections.Add(new PathFinder.OffMeshConnection(new List<Vector3> { new Vector3(100.9536, 1223.328, 161.6412), new Vector3(154.9091, 1209.382, 165.5027), new Vector3(173.1814, 1190.673, 166.1338), new Vector3(197.2656, 1180.434, 167.999), }, 1) { Type = PathFinder.OffMeshConnectionType.Unidirectional, Name = "Nijel's Point - Maxxton 3" }); PathFinder.OffMeshConnections.Add(new PathFinder.OffMeshConnection(new List<Vector3> { new Vector3(247.4097, 1253.189, 192.1647), new Vector3(255.671, 1254.537, 192.1407), }, 1) { Type = PathFinder.OffMeshConnectionType.Unidirectional, Name = "Nijel's Point - Innkeeper" }); PathFinder.OffMeshConnections.Add(new PathFinder.OffMeshConnection(new List<Vector3> { new Vector3(254.4657, 1214.722, 189.7014), new Vector3(248.5491, 1251.517, 192.1623), new Vector3(255.7968, 1253.575, 192.1399), }, 1) { Type = PathFinder.OffMeshConnectionType.Unidirectional, Name = "Nijel's Point - Innkeeper2" }); PathFinder.OffMeshConnections.Add(new PathFinder.OffMeshConnection(new List<Vector3> { new Vector3(247.4097, 1253.189, 192.1647), new Vector3(255.1739, 1256.671, 192.1407), }, 1) { Type = PathFinder.OffMeshConnectionType.Unidirectional, Name = "Nijel's Point - Janet Hommers" }); PathFinder.OffMeshConnections.Add(new PathFinder.OffMeshConnection(new List<Vector3> { new Vector3(-861.2993, -3758.589, 19.47886, "None"), new Vector3(-849.3063, -3742.703, 22.49161, "None"), new Vector3(-842.8103, -3734.129, 19.89155, "None"), new Vector3(-849.7686, -3735.616, 19.88754, "None"), new Vector3(-848.3646, -3731.851, 21.27056, "None"), new Vector3(-843.2056, -3727.342, 25.23064, "None"), new Vector3(-839.3514, -3726.285, 26.32008, "None") }, (int) ContinentId.Kalimdor) { Type = PathFinder.OffMeshConnectionType.Bidirectional, Name = "Ratchet - Gazlowe", TryToUseEvenIfCanFindPathSuccess = true }); PathFinder.OffMeshConnections.Add(new PathFinder.OffMeshConnection(new List<Vector3> { new Vector3(1155.042, 182.7223, 3.134686, "None"), new Vector3(1157.968, 184.0907, 5.895848, "None"), new Vector3(1157.852, 185.0874, 6.79552, "None"), new Vector3(1169.146, 188.5145, 17.70432, "None"), new Vector3(1176.177, 183.1431, 21.6543, "None"), new Vector3(1174.764, 180.1774, 21.44643, "None"), new Vector3(1170.609, 182.9803, 23.67873, "None"), new Vector3(1167.625, 185.7788, 27.12425, "None"), new Vector3(1165.26, 188.2767, 28.77732, "None"), new Vector3(1161.465, 183.8654, 29.03481, "None"), new Vector3(1164.393, 176.3627, 31.69842, "None") }, (int) ContinentId.Kalimdor) { Type = PathFinder.OffMeshConnectionType.Bidirectional, Name = "Stonetalon - Big machine", TryToUseEvenIfCanFindPathSuccess = true }); PathFinder.OffMeshConnections.Add(new PathFinder.OffMeshConnection(new List<Vector3> { new Vector3(-9009.081, 851.679, 105.893, "None"), new Vector3(-9017.271, 864.8356, 109.8218, "None"), new Vector3(-9014.967, 882.9603, 112.9219, "None"), new Vector3(-8999.138, 890.7767, 115.9936, "None"), new Vector3(-8982.68, 880.2233, 119.937, "None"), new Vector3(-8982.612, 866.5609, 123.3268, "None"), new Vector3(-8992.165, 860.2961, 126.6532, "None"), new Vector3(-9001.312, 864.4201, 129.772, "None"), new Vector3(-9013.052, 873.2303, 132.0581, "None"), new Vector3(-9007.667, 877.3668, 135.9138, "None"), new Vector3(-9003.198, 874.1686, 139.3298, "None"), new Vector3(-9004.052, 868.6579, 142.6572, "None"), new Vector3(-9009.047, 867.0392, 145.7849, "None"), new Vector3(-9013.107, 871.0745, 148.6166, "None"), new Vector3(-9016.262, 884.7032, 29.6207, "None") }, (int) ContinentId.Azeroth) { Type = PathFinder.OffMeshConnectionType.Bidirectional, Name = "SW Mage Tower", TryToUseEvenIfCanFindPathSuccess = true }); } } Here is an example of how to use Darnassus connections. It teaches WRobot that the portals and ships are just regular pathing connections. using System; using System.Collections.Generic; using robotManager.Helpful; using wManager; using wManager.Wow.Enums; using wManager.Wow.Helpers; namespace HumanMasterPlugin.Pathing { public static class Darnassus { public static readonly string ToAuberdineKey = "HMPToAuberdine"; public static readonly string ToRuthEranKey = "HMPToRuthEran"; private static readonly Ship _ship = Helper.RealWowVersion > 5875 ? DarnassusAuberdineBoatTBC.Ship : DarnassusAuberdineBoatVanilla.Ship; public static void Start() { wManagerSetting.CurrentSetting.OffMeshConnectionsSearchDistance = 1000; //blacklist natural darnassus path PathFinder.ReportBigDangerArea(new Vector3(9161.415, 1125.652, 1304.879), 100f); Var.SetVar(ToRuthEranKey, new Action(ToRuthEran)); Var.SetVar(ToAuberdineKey, new Action(ToAuberdine)); var moveforwardAction = $@"c#: robotManager.Helpful.Var.GetVar<Action>(""{OffMeshes.MoveForwardAndResetKey}"")();"; var auberdineAction = $@"c#: robotManager.Helpful.Var.GetVar<Action>(""{ToAuberdineKey}"")();"; var ruthEranAction = $@"c#: robotManager.Helpful.Var.GetVar<Action>(""{ToRuthEranKey}"")();"; PathFinder.OffMeshConnections.Add(new PathFinder.OffMeshConnection(new List<Vector3> { new Vector3(9946.901, 2556.688, 1316.229, "None"), new Vector3(9946.558, 2576.157, 1318.328, "None"), new Vector3(9946.107, 2594.624, 1316.194, "None"), new Vector3(9946.401, 2617.684, 1316.665, "None") {Action = moveforwardAction}, new Vector3(8783.707, 966.4249, 30.20752, "None"), new Vector3(8774.904, 964.0229, 30.35609, "None"), new Vector3(8755.102, 952.9327, 26.45088, "None"), new Vector3(8726.162, 942.1434, 17.12174, "None"), }, (int) ContinentId.Kalimdor) { Type = PathFinder.OffMeshConnectionType.Unidirectional, Name = "Darnassus Portal Down", TryToUseEvenIfCanFindPathSuccess = true }); PathFinder.OffMeshConnections.Add(new PathFinder.OffMeshConnection(new List<Vector3> { new Vector3(8672.928, 985.4261, 6.262514, "None"), new Vector3(8645.084, 997.5281, 4.820365, "None"), new Vector3(8615.801, 1007.996, 5.570138, "None"), new Vector3(8557.271, 1020.589, 5.375874, "None"), new Vector3(8554.27, 1021.136, 5.495627, "None") {Action = auberdineAction}, new Vector3(6557.808, 774.058, 6.835019, "None"), new Vector3(6564.013, 773.3265, 6.590591, "None"), new Vector3(6551.588, 777.1901, 6.788247, "None") }, (int) ContinentId.Kalimdor) { Type = PathFinder.OffMeshConnectionType.Unidirectional, Name = "Rut'Theran to Auberdine", TryToUseEvenIfCanFindPathSuccess = true }); PathFinder.OffMeshConnections.Add(new PathFinder.OffMeshConnection(new List<Vector3> { new Vector3(9946.901, 2556.688, 1316.229, "None"), new Vector3(9946.558, 2576.157, 1318.328, "None"), new Vector3(9946.107, 2594.624, 1316.194, "None"), new Vector3(9946.401, 2617.684, 1316.665, "None") {Action = moveforwardAction}, new Vector3(8783.707, 966.4249, 30.20752, "None"), new Vector3(8774.904, 964.0229, 30.35609, "None"), new Vector3(8755.102, 952.9327, 26.45088, "None"), new Vector3(8726.162, 942.1434, 17.12174, "None"), new Vector3(8554.27, 1021.136, 5.495627, "None") {Action = auberdineAction}, new Vector3(6577.144, 767.6254, 5.65262, "None"), new Vector3(6564.013, 773.3265, 6.590591, "None"), new Vector3(6551.588, 777.1901, 6.788247, "None"), }, (int) ContinentId.Kalimdor) { Type = PathFinder.OffMeshConnectionType.Unidirectional, Name = "Darnassus Portal Down and Auberdine", TryToUseEvenIfCanFindPathSuccess = true }); PathFinder.OffMeshConnections.Add(new PathFinder.OffMeshConnection(new List<Vector3> { new Vector3(8753.117, 948.64, 25.66852, "None"), new Vector3(8765.486, 956.6833, 29.10012, "None"), new Vector3(8772.359, 960.1454, 30.11599, "None"), new Vector3(8785.79, 966.983, 30.1999, "None") {Action = moveforwardAction}, new Vector3(9946.25, 2612.97, 1316.245, "None"), new Vector3(9946.107, 2594.624, 1316.194, "None"), new Vector3(9946.558, 2576.157, 1318.328, "None"), new Vector3(9946.901, 2556.688, 1316.229, "None"), }, (int) ContinentId.Kalimdor) { Type = PathFinder.OffMeshConnectionType.Unidirectional, Name = "Darnassus Portal Up", TryToUseEvenIfCanFindPathSuccess = true }); PathFinder.OffMeshConnections.Add(new PathFinder.OffMeshConnection(new List<Vector3> { new Vector3(6572.557, 770.3295, 5.48198, "None"), new Vector3(6580.037, 767.1205, 5.766551, "None") {Action = ruthEranAction}, new Vector3(8557.271, 1020.589, 5.375874, "None"), new Vector3(8765.486, 956.6833, 29.10012, "None"), new Vector3(8785.79, 966.983, 30.1999, "None") {Action = moveforwardAction}, new Vector3(9946.25, 2612.97, 1316.245, "None"), new Vector3(9946.107, 2594.624, 1316.194, "None"), new Vector3(9946.558, 2576.157, 1318.328, "None"), new Vector3(9946.901, 2556.688, 1316.229, "None"), }, (int) ContinentId.Kalimdor) { Type = PathFinder.OffMeshConnectionType.Unidirectional, Name = "Auberdine to Rut'Theran and Darnassus Portal", TryToUseEvenIfCanFindPathSuccess = true }); PathFinder.OffMeshConnections.Add(new PathFinder.OffMeshConnection(new List<Vector3> { new Vector3(6572.557, 770.3295, 5.48198, "None"), new Vector3(6580.037, 767.1205, 5.766551, "None") {Action = ruthEranAction}, new Vector3(8557.271, 1020.589, 5.375874, "None"), }, (int) ContinentId.Kalimdor) { Type = PathFinder.OffMeshConnectionType.Unidirectional, Name = "Auberdine to Rut'Theran", TryToUseEvenIfCanFindPathSuccess = true }); } public static void ToAuberdine() { PluginLog.Log("Destination near Auberdine, take boat"); _ship.TravelToDestination(); } public static void ToRuthEran() { PluginLog.Log("Destination near Darnassus, take boat"); _ship.TravelToDestination(true); } } } For the sake of at least protecting some of my "secrets" of several thousands of hours that went into HMP since 2016, I'm not going to share my ship implementations. They are simple enough that I think you could figure them out though. Back when I started, none of this was documented and I basically had to trial and error through a lot of it or build things from scratch. Thankfully @Droidz was very, very helpful and even added more Offmesh functionality for people to use more easily. I hope this helps at least a few people in the future if they ever stumble upon this topic covering custom pathing, offmesh connections or Darnassus portals or ships. Of course, this can be adapted to add new elevators or similar portals too.
  10. Just wanted to chip in and say you absolutely shouldn't store NPCs in the database. Temporarily adding them (unless already available) is fine. But if you save them, you'll eventually give WRobot too much info that it doesn't need. It will go to the wrong NPCs/trainers just because they're closer in 2D space. Back in the day before I wrote my own states and completely got rid of WRobot's states, I would intercept the ToTown state, clear the NPC DB and just inject my own based on 3D distance from a pre-select NPC list. WRobot will do a lot of dumb things if you give it free reign. Having a ton of NPCs available is just asking it to make the wrong choices. Intercepting states and forcing selection is absolutely the way to go. I know people who wrote specific questers/grinders for their operations that would force inject a food vendor and repair for every level section and overwrite them with every "zone" change. Same for trainers, pretty much.
  11. Für alle Versionen
  12. Für Legion und aufwärts gibt's das glaub ich nicht. @Droidz is TRIAL completely turned off or only for the WoW 6.0+ versions of WRobot?
  13. Ist weiterhin möglich. Du müsstest TRIAL als Key eingeben und dann + drücken um den Key hinzuzufügen bevor du ihn verwendest. Aber lass dir gesagt sein, wenn du gar kein Englisch sprichst bist du hier falsch. Es läuft fast alles auf dem englischen Client, was die Community so erstellt, und um überhaupt irgendwas zu finden, musst du in den Foren eigentlich Englisch beherrschen.
  14. Fightclass folder, just like everything else. Then you select it, just like any other
  15. Just wanted to pop in and say for Vanilla it's really worth finding some of the older wiki entries regarding Tooltip handling in general. Tooltip handling in vanilla is very different from later expansions and honestly such a mess. I don't think you can just destroy tooltips. For example, as far as I know, you can not get ToolTips to be garbage collected by just setting them back to 'nil'. They will continue to exist and you're just dumping your memory full of new tooltips eventually. You absolutely need to reuse the tooltip and clear all lines as well as assigning a new owner. As far as I remember, in Vanilla you even need to manually delete some sub texts on the tooltip because it's such a rudimentary (buggy) implementation in 1.12. The old wiki entries should have more info. A code snippet from my own TBC+ code: List<int> containerSlot = Bag.GetItemContainerBagIdAndSlot(bagItem.Entry); if (!containerSlot.IsNullOrEmpty()) { Lua.LuaDoString($@" {TooltipName}:Hide(); {TooltipName}:SetOwner(UIParent, 'ANCHOR_NONE'); {TooltipName}:ClearLines(); {TooltipName}:SetBagItem({containerSlot[0]}, {containerSlot[1]}); "); ParsedItem parsedBagItem = ItemParser.ParseCurrentTooltip(TooltipName); ...
  16. Either your parameters aren't correct for 3.3.5a or the server isn't giving your client the correct info. Or even worse, your client is modified. local name, nameSubtext, text, texture, startTime, endTime, isTradeSkill, castID, notInterruptible = UnitCastingInfo(unit); This is taken from 3.3.5a interface files. notInterruptable probably returns nil, so you may have to double check what actually is returned. Here's the source: https://github.com/wowgaming/3.3.5-interface-files/blob/main/CastingBarFrame.lua
  17. Your Lua is wrong. The second local shouldn't be there. You're just creating a second local variable called name in that conditional block instead of overwriting the one outside of it. Instead of searching for a variable that will constantly be overwritten, just return what you need like so: private bool SpellIsInterruptible() { return Lua.LuaDoString<bool>( @" local name, _, _, _, _, _, _, notInterruptible = UnitCastingInfo(""target""); if not name then name, _, _, _, _, _, notInterruptible = UnitChannelInfo(""target""); end if name then return not notInterruptible; end return false; "); }
  18. I believe you can just let the state run that originally triggered your event handler (ToTown, most likely). It should know vendors in Moonglade, if your database is correctly filled. If you really needed to, you could just create an instance of ToTown and Training in your plugin and run those manually. The run method should be blocking and as long as you're in Moonglade, there shouldn't be anything interrupting the state so you don't need (much) extra logic to figure out if it was successfully run.
  19. It absolutely won't happen with a bot. Maybe if you tried to code the routine from scratch, but you'd have to basically forsake all of WRobot's normal combat management etc.
  20. You'd have to intercept ToTown using State Events. An example can be found here. You can adjust it to use the Moonglade spell instead.
  21. Look at what I linked. The error happens ONCE after you add your state. This code works fine - wRobot's FiniteStateMachine that iterates the states throws the error. Since you only modify the collection ONCE to add your state(s), the very next iteration across all states works just fine. I'm telling you, you can ignore the error.
  22. That error happens once, in WRobot's code. Next iteration it does, it now has your states in it and everything works without error. Edit: These are 5 years old, but the code is still applicable as far as I know. No guarantee PartyBot Helper still works with HMP.
  23. It's probably your fightclass pausing to achieve something (like regen to summon pet). Check the source code. If it doesn't pause anything - you're probably using the PC and hitting the shortcut to pause WRobot. It seems you're not using plugins and only Grinder, not even a Quester. So there's no code injections outside of your fightclass as far as I can tell.
  24. Try Lua.LuaDoString("TradeSkillCreateAllButton:Click()") If that doesn't work, the problem seems to be that Wrobot executes secure calls and the button won't won't work when doing so. There might be an extra argument that allows disabling secure call. Additionally, maybe the anti-cheat protection WRobot uses breaks some code.
  25. Based on the logs I'm seeing, your internet is going out completely. You're also losing connection to wrobot's auth server. If you're using a VPN, make sure you're disabling whatever IP cycling feature it might have. And for the love of God, delete the screenshot which contains your order iD. @Droidz please delete his screenshot if he isn't fast enough. It contains his full order id. This is precisely why everywhere says for support you need to read the FAQ and PM me on Discord.
×
×
  • Create New...