Jump to content

Apexx

Elite user
  • Posts

    332
  • Joined

Posts posted by Apexx

  1. But.. if anyone needed code for this:

    Boolean method:

    internal static bool PlayerKnowShadowWeaving()
    {
        return Lua.LuaDoString<bool>(@"
            local numTabs = GetNumTalentTabs();
            for t=1, numTabs do
                local numTalents = GetNumTalents(t);
                for i = 1, numTalents do
                    nameTalent, _, _, _, currRank, _ = GetTalentInfo(t, i);
                    if nameTalent == 'Shadow Weaving' and currRank > 0 then
                        return true;
                    end
                end
            end"
        );
    }

    Usage:

    // Shadow Word: Pain- Only if player knows Shadow Weaving and has 5 stacks
    if (PlayerKnowShadowWeaving() && ObjectManager.Me.BuffStack(15258) >= 5 && !ObjectManager.Target.HaveBuff(SpellController.shadowWordPain.Ids))
    {
        Logging.WriteDebug($"Shadow Weaving buff stack = {Player.BuffStack(SpellController.shadowWeaving.Ids)}");
        // Launch Shadow Word: Pain
    }

     

  2. I am not quite sure if WRobot is able to distinguish between quest objects from any other game object that is interactable. You may need to make a list, or dictionary with quest id, and quest item id.. but you can just compare the nodeNearMe by the name of the object, aka Quest item.

    var nodeNearMe = ObjectManager.GetObjectWoWGameObject().Where(t => t != null && t.CanOpen).OrderBy(u => ObjectManager.Me.Position.DistanceTo(u.Position)).FirstOrDefault();
    
    if (nodeNearMe != null && nodeNearMe.Name == "Quest Item Name Here" && ObjectManager.Me.Position.DistanceTo(nodeNearMe.Position) <= 8)
    {
        // break bear for the nodes
        if (!ObjectManager.Me.InCombatFlagOnly && ObjectManager.Me.HaveBuff("Bear Form"))
        {
            Lua.LuaDoString("CastSpellByName(\"Bear Form\",1)");
            Thread.Sleep(400);
        }
    }

     

  3. I stumbled across a website the other day, while looking for an alternative to Rocketr to process payments, and validate plugins, fight classes, etc.
    when I found, cryptlex (Powerful software licensing API).

    Quote

    Easily generate license keys and validate them in your software apps. Additionally, you can offer trials, subscriptions, node-locked licenses, floating licenses and much more.  -cryptlex.com

    Quick Start

    Using LexActivator with C#

    After working with the code a bit, I wanted to share a demo project, along with a demo product online, as well as license keys if anyone would like to test it out for themselves.
    This project may have bugs and may not work 100%. I am hoping if other programmers check out the code they can offer ideas, comments, and even
    constructive criticism using this method.

    There is a "WRobot" directory in the attached zip file that stores the files required to run the LexActivator C# wrapper as well as the plugin and the product.dat file.
    Extract the files into their appropriate directory.

    VirusTotal

    CryptlexAuthenticator.zip

  4. I managed to figure it out.

    C# Code:

    // Check if Player's reputation earned with a certain faction has reached above ### value
    wManager.Wow.Helpers.Lua.LuaDoString<bool>(@"
        for factionIndex = 1, GetNumFactions() do
            local name, description, standingId, bottomValue, topValue, earnedValue, atWarWith, canToggleAtWar,
                isHeader, isCollapsed, hasRep, isWatched, isChild, factionID = GetFactionInfo(factionIndex)
            if name == ""FACTION NAME HERE"" and earnedValue > #### then
                return true
            end
        end
    ");

    And inside the Quest Editor Tools (Optional Settings -> Can Conditions:

    PoNe5s.png

    return (wManager.Wow.Helpers.Lua.LuaDoString<bool>(@"for factionIndex = 1, GetNumFactions() do local name, description, standingId, bottomValue, topValue, earnedValue, atWarWith, canToggleAtWar, isHeader, isCollapsed, hasRep, isWatched, isChild, factionID = GetFactionInfo(factionIndex) if name == ""FACTION NAME HERE"" and earnedValue > #### then return true end end"));

     

  5. I tried to search what is, "NpcMarkerId" and what it refers to. I am trying to figure out if a certain quest has become open and available based whether or not that player's reputation is high enough and the quest is available when interacting with the quest giver. I did not want to hijack an old thread so I made this one. Everything is working just fine, BUT it tried to pick up the second and third parts of the quests that are not yet available (because low rep) and will sit there for minutes before continuing.

    I even set the Settings: Skip 'PickUp' quest after (sec) to 8 in hopes it would only try to pick it up for a shorter duration before moving on.

    Thanks in advance!

  6. I have been using WRobot for quite some time now. One thing that keeps coming up repeatedly and I don't know if it bothers anyone else or not,
    but it would be really great if there was a way to "sleep"  the Fightclass thread when the player is incapacitated, stunned, etc.. There is noting
    that screams I am using a bot when it spams abilities several times a second and there is no way to actually perform the spells in game because
    your player is stunned. If I were more knowledgeable on the internals of WRobot, I would attempt to write a plug-in, but I am not sure if can be done.

    Thanks for your time!

  7. I may have something here if anyone is interested. It still needs more testing though.

    Code:

    private void FightEventsOnFightStart(WoWUnit wowUnit, CancelEventArgs cancelable)
    {
        try
        {
            if (Settings.Backpedal)
                Var.SetVar("CanBack", true);
        }
        catch (Exception ex)
        {
            MyFunctions.LogWrite("FightEventsOnFightStart() Exception:" + Environment.NewLine + ex.ToString(), true);
        }
    }
    
    private async void FightEventsOnFightLoop(WoWUnit wowUnit, CancelEventArgs cancelable)
    {
        Random _rand = new Random();
        bool _playerAggro = false;
        bool _playerStuck = false;
    
        #region Backpedal
        if (Settings.Backpedal &&                                       // Make sure Include Backpedal is TRUE in Settings
            (!Player.IsPartyMember || ObjectManager.Me.IsInGroup) &&    // Let's not backpedal in groups!
            Var.Exist("CanBack") &&                                     // Make sure our Variable exists
            Var.GetVar<bool>("CanBack") &&                              // Make sure the Variable is TRUE
            Player.InCombat &&                                          // Make sure Player is in combat
            !Player.IsIndoors &&                                        // Skip if Player is indoor
            !Player.IsCast &&                                           // Make sure the Player is NOT casting
            Target.IsAlive &&                                           // Make sure the Target is valid
            Target.IsTargetingMe &&                                     // Make sure the Unit is Targeting the player
            !wowUnit.IsCast &&                                          // We don't want to backpedal from a casting target!
            MyFunctions.TargetInCooldownLevelRange())                   // Target level is > Settings CD lvl
        {
            try
            {
                // Player.IsFacing(Vector3 targetPosition, [float arcRadians = 0.2])
                // Player.IsFacing(u.Position, 1.5f)
                // 1.5 radians = 85.9 degrees || Arc Length = 37.5yd || Sector Area = 468.75 yd^2
    
                var EnemiesInFrontPlayerNearTarget = ObjectManager.GetWoWUnitHostile().Where(u =>
                    u.IsValid && u.IsAlive && !u.InCombat && Player.IsFacing(u.Position, 1.5f) &&
                    Player.Target != u.GetBaseAddress &&
                    u.Position.DistanceTo(Target.Position) <= Settings.BackpedalScanRadius &&
                    (u.Reaction == Reaction.Hated || u.Reaction == Reaction.Hostile || u.Reaction == Reaction.Unfriendly)).OrderBy(o =>
                        Player.Position.DistanceTo(o.Position)).ToList();
    
                var EnemiesBehindPlayer = ObjectManager.GetWoWUnitHostile().Where(u =>
                    u.IsValid && u.IsAlive && !u.InCombat && !Player.IsFacing(u.Position, 1.5f) &&
                    Player.Target != u.GetBaseAddress &&
                    u.Position.DistanceTo(Player.Position) <= (Settings.BackpedalScanRadius + (Settings.BackpedalScanRadius / 2)) &&
                    (u.Reaction == Reaction.Hated || u.Reaction == Reaction.Hostile || u.Reaction == Reaction.Unfriendly)).OrderBy(o =>
                        Player.Position.DistanceTo(o.Position)).ToList();
    
                if (EnemiesInFrontPlayerNearTarget != null && EnemiesInFrontPlayerNearTarget.Count > 0)
                {
                    foreach (WoWUnit unit in EnemiesInFrontPlayerNearTarget.Take(3))
                    {
                        MyFunctions.LogDebug("Backpedal -> Enemy (Front): " + unit.Level + "-" + unit.Name +
                            " (Distance: " + System.Math.Round(Player.Position.DistanceTo(unit.Position), 3) + "yd");
                    }
    
                    WoWUnit NearestFrontUnit = EnemiesInFrontPlayerNearTarget.FirstOrDefault();
    
                    if (EnemiesBehindPlayer != null && EnemiesBehindPlayer.Count < 1)
                    {
                        var timer = new robotManager.Helpful.Timer(_rand.Next(3000, 4000));
                        var timerCheckDistance = new robotManager.Helpful.Timer(_rand.Next(1500, 2250));
                        Vector3 PlayerStartPos = Player.Position;
                        int EnemyCountBegin = MyFunctions.HostileUnitsInRange(100.0f);
    
                        MyFunctions.LogDebug("Backpedal -> Found no enemies behind you. Begin Backpedal");
    
                        if (wowUnit != NearestFrontUnit &&
                            !_playerAggro)
                        {
                            Move.Backward(Move.MoveAction.DownKey);
    
                            while (!_playerStuck &&
                                (!timer.IsReady || wowUnit.Position.DistanceTo(NearestFrontUnit.Position) <= Settings.BackpedalScanRadius))
                            {
                                if (Player.GetMove && wowUnit.IsCast)
                                {
                                    MyFunctions.LogDebug("Backpedal -> Your target is casting; Stopping movement");
                                    Var.SetVar("CanBack", false);
                                    break;
                                }
    
                                if (MyFunctions.HostileUnitsInRange(100.0f) != EnemyCountBegin)
                                {
                                    MyFunctions.LogDebug("Backpedal -> Enemy count changed, you may have aggro'd something; Stopping movement");
                                    Var.SetVar("CanBack", false);
                                    break;
                                }
    
                                if (timerCheckDistance.IsReady &&
                                    Player.Position.DistanceTo(PlayerStartPos) < 1) just over a 1.5 sec.
            
                        {
                                    MyFunctions.LogDebug("Backpedal -> Player might be stuck; Stopping movement");
                                    _playerStuck = true;
                                    Var.SetVar("CanBack", false);
                                    break;
                                }
    
                                if (Player.Position.DistanceTo(NearestFrontUnit.Position) > Settings.BackpedalScanRadius)
                                {
                                    MyFunctions.LogDebug("Backpedal -> Distance is greater than " + Settings.BackpedalScanRadius +
                                        " yards; Stopping movement");
                                    Var.SetVar("CanBack", false);
                                    break;
                                }
    
                                if (Settings.BackpedalScanRadius > 0 &&
                                    Player.Position.DistanceTo(PlayerStartPos) > Settings.BackpedalScanRadius)
                                {
                                    MyFunctions.LogFight("Backpedal -> Player has moved more than " + Settings.BackpedalScanRadius +
                                        " yards; Stopping movement");
                                    Var.SetVar("CanBack", false);
                                    break;
                                }
    
                                if (TraceLine.TraceLineGo(wowUnit.Position))
                                {
                                    MyFunctions.LogFight("Backpedal -> Your target is out of line of sight; Stopping movement");
                                    Var.SetVar("CanBack", false);
                                    break;
                                }
    
                                Thread.Sleep(100);
                                return;
                            }
                        }
                    }
                    else if (EnemiesBehindPlayer != null && EnemiesBehindPlayer.Count > 0)
                    {
                        foreach (WoWUnit unit in EnemiesBehindPlayer)
                        {
                            MyFunctions.LogDebug("Backpedal -> Enemy (Back): " + unit.Level + "-" + unit.Name +
                                " (Distance: " + System.Math.Round(Player.Position.DistanceTo(unit.Position), 3) + "yd");
                        }
    
                        MyFunctions.LogDebug("Backpedal -> Skipping movement");
                        Var.SetVar("CanBack", false);
                        return;
                    }
                }
            }
            catch (Exception ex)
            {
                MyFunctions.LogWrite("FightEventsOnFightLoop -> Backpedal Exception:" + Environment.NewLine + ex.ToString(), true);
            }
        }
    }

     

  8. Hi, I am having problems understanding IsBehind. I would like to check if there are any mobs behind me. I am trying to add a backpedal feature to my fight class, but I don't think I am getting it correct. Here's what I tried:

    var EnemiesBehind = new List<WoWUnit>();
    EnemiesBehind.AddRange(ObjectManager.GetWoWUnitHostile().Where(
        u => u.IsValid && !u.InCombat && u.IsAlive && u.IsBehind(Player.Position, 180.0f) &&
        u.GetDistance <= Settings.BackpedalScanRange).OrderBy(
        o => ObjectManager.Me.Position.DistanceTo(o.Position)));
    
    if (EnemiesBehind != null && EnemiesBehind.Count > 0)
    {
        MyFunctions.LogDebug("Enemy, (" + EnemiesBehind.FirstOrDefault().Level + ")" + EnemiesBehind.FirstOrDefault().Name +
            " found behind you, skipping backpedal!");
        Var.SetVar("CanBack", false);
      	return;
    }

    Any help is much appreciated! Thank you!

    Image Reference:

    ipFFA.png

     

×
×
  • Create New...