Jump to content

exuals

Members
  • Posts

    18
  • Joined

  • Last visited

Posts posted by exuals

  1. 12 hours ago, Matenia said:

    Gonna dump some code here I've used to experiment, you can adjust it for your own needs:

    
    public class SmartPulls
    {
    
        private static WoWLocalPlayer Me = ObjectManager.Me;
        private static int _checkDistance = 22;
        private static int _frontDistance = 15;
    
        public static void Start()
        {
            if (PluginSettings.CurrentSetting.SmartPulls)
            {
                FightEvents.OnFightStart += FightValidityCheck;
                Radar3D.OnDrawEvent += Radar3DOnOnDrawEvent;
            }
        }
    
        private static void Radar3DOnOnDrawEvent()
        {
            if (Radar3D.IsLaunched)
            {
                Vector3 rightPlayerVector = Helper.CalculatePosition(Me.Position,
                    -Helper.Atan2Rotation(Me.Position, Me.Position, Me.Rotation), -_checkDistance);
                Vector3 leftPlayerVector = Helper.CalculatePosition(Me.Position,
                    -Helper.Atan2Rotation(Me.Position, Me.Position, Me.Rotation), _checkDistance);
    
                Vector3 rightTargetVector = Helper.CalculatePosition(rightPlayerVector,
                    -Helper.Atan2Rotation(Me.Position, rightPlayerVector, 0), _checkDistance + _frontDistance);
                Vector3 leftTargetVector = Helper.CalculatePosition(leftPlayerVector,
                    -Helper.Atan2Rotation(Me.Position, leftPlayerVector, 0), -(_checkDistance + _frontDistance));
    
                Radar3D.DrawCircle(rightPlayerVector, 2.5f, Color.Blue);
                Radar3D.DrawCircle(leftPlayerVector, 2.5f, Color.Green);
                Radar3D.DrawCircle(rightTargetVector, 2.5f, Color.Yellow);
                Radar3D.DrawCircle(leftTargetVector, 2.5f, Color.DarkRed);
    
                Radar3D.DrawLine(rightPlayerVector, leftPlayerVector, Color.Gold);
                Radar3D.DrawLine(leftPlayerVector, leftTargetVector, Color.Gold);
                Radar3D.DrawLine(leftTargetVector, rightTargetVector, Color.Gold);
                Radar3D.DrawLine(rightTargetVector, rightPlayerVector, Color.Gold);
            }
        }
    
        public static void Stop()
        {
            FightEvents.OnFightStart -= FightValidityCheck;
            Radar3D.OnDrawEvent -= Radar3DOnOnDrawEvent;
        }
    
        public static void Pulse()
        {
            if (PluginSettings.CurrentSetting.SmartPulls && !Escape.IsEscaping && Me.Target > 0 && !Fight.InFight && !Me.InCombatFlagOnly && Logging.Status != "Regeneration" && !Me.HaveBuff("Resurrection Sickness"))
            {
                Vector3 rightPlayerVector = Helper.CalculatePosition(Me.Position,
                    -Helper.Atan2Rotation(Me.Position, Me.Position, Me.Rotation), -_checkDistance);
                Vector3 leftPlayerVector = Helper.CalculatePosition(Me.Position,
                    -Helper.Atan2Rotation(Me.Position, Me.Position, Me.Rotation), _checkDistance);
    
                Vector3 rightTargetVector = Helper.CalculatePosition(rightPlayerVector,
                    -Helper.Atan2Rotation(Me.Position, rightPlayerVector, 0), _checkDistance + _frontDistance);
                Vector3 leftTargetVector = Helper.CalculatePosition(leftPlayerVector,
                    -Helper.Atan2Rotation(Me.Position, leftPlayerVector, 0), -(_checkDistance + _frontDistance));
    
                List<Vector3> boundBox = new List<Vector3>
                {
                    rightPlayerVector,
                    leftPlayerVector,
                    rightTargetVector,
                    leftTargetVector
                };
                
                WoWUnit unit = ObjectManager.GetObjectWoWUnit()
                    .Where(o => o.IsAlive && o.Reaction == Reaction.Hostile && !o.IsPet && !o.IsPlayer() && o.Guid != Me.Target &&
                                (o.Level >= Me.Level ? o.Level - Me.Level <= 3 : Me.Level - o.Level <= 6) 
                                && VectorHelper.PointInPolygon2D(boundBox, o.Position)
                                && !TraceLine.TraceLineGo(Me.Position, o.Position, CGWorldFrameHitFlags.HitTestSpellLoS)
                                && !wManagerSetting.IsBlackListed(o.Guid))
                    .OrderBy(o => o.GetDistance)
                    .FirstOrDefault();
    
                if (unit != null)
                {
                    PluginLog.Log($"{unit.Name} is in our way, attacking!");
                    MovementManager.StopMoveTo(false, 500);
                    ObjectManager.Me.Target = unit.Guid;
                    Fight.StartFight(unit.Guid);
                    ObjectManager.Me.Target = unit.Guid;
                }
            }
        }
        
        //don't pull another target if we are already in combat with anyone (e.g. body pulled mobs)
        private static void FightValidityCheck(WoWUnit unit, CancelEventArgs cancelable)
        {
            if (Escape.IsEscaping || ObjectManager.GetObjectWoWUnit().Count(u => u.IsTargetingMeOrMyPet && u.Reaction == Reaction.Hostile) > 0)
            {
                return;
            }
            
            if (CheckForGroup(unit, cancelable))
            {
                MovementManager.StopMoveTo(false, 500);
                cancelable.Cancel = true;
                return;
            }
    
            if (CheckForClearPath(unit, cancelable))
            {
                MovementManager.StopMoveTo(false, 500);
                cancelable.Cancel = true;
                return;
            }
        }
    
        private static bool CheckForGroup(WoWUnit unit, CancelEventArgs cancelable)
        {
            // group too large, nothing we can do, stop fight and go away
            int addAmount = ObjectManager.GetObjectWoWUnit().Count(o =>
                o.IsAlive && o.Reaction == Reaction.Hostile && o.Guid != unit.Guid &&
                o.Position.DistanceTo(unit.Position) <= 12 && !o.IsTargetingMeOrMyPetOrPartyMember);
            if (addAmount > 1)
            {
                wManagerSetting.AddBlackList(unit.Guid, 60000);
                Fight.StopFight();
                Lua.LuaDoString("ClearTarget()");
                wManagerSetting.AddBlackListZone(unit.Position, 30 + addAmount * 5);
                PathFinder.ReportBigDangerArea(unit.Position, 30 + addAmount * 5);
                PluginLog.Log("Stopping pull on large group!");
                return true;
            }
            return false;
        }
    
        private static bool CheckForClearPath(WoWUnit unit, CancelEventArgs cancelable)
        {
            if (Me.InCombatFlagOnly)
            {
                return false;
            }
            
            Vector3 rightPlayerVector = Helper.CalculatePosition(Me.Position, -Helper.Atan2Rotation(unit.Position, Me.Position, 0), _checkDistance);
            Vector3 leftPlayerVector = Helper.CalculatePosition(Me.Position, -Helper.Atan2Rotation(unit.Position, Me.Position, 0), -_checkDistance);
            
            Vector3 rightTargetVector = Helper.CalculatePosition(unit.Position, -Helper.Atan2Rotation(Me.Position, unit.Position, 0), -_checkDistance);
            Vector3 leftTargetVector = Helper.CalculatePosition(unit.Position, -Helper.Atan2Rotation(Me.Position, unit.Position, 0), _checkDistance);
    
            List<Vector3> boundingBox = new List<Vector3>{rightPlayerVector, leftPlayerVector, rightTargetVector, leftTargetVector};
    
            if (ObjectManager.GetObjectWoWUnit().FirstOrDefault(o =>
                    o.IsAlive && o.Reaction == Reaction.Hostile && o.Guid != unit.Guid && 
                    VectorHelper.PointInPolygon2D(boundingBox, o.Position)) != null)
            {
                
                WoWUnit newEnemy = ObjectManager.GetObjectWoWUnit()
                    .Where(o => o.IsAlive && o.Reaction == Reaction.Hostile && o.SummonedBy <= 0 && !o.IsPlayer() && o.Guid != unit.Guid && !wManagerSetting.IsBlackListed(o.Guid) && !wManagerSetting.IsBlackListedNpcEntry(o.Entry))
                    .OrderBy(o => o.GetDistance)
                    .FirstOrDefault();
                if (newEnemy != null)
                {
                    wManagerSetting.AddBlackList(unit.Guid, 60000);
                    Fight.StopFight();
                    Fight.StartFight(newEnemy.Guid);
                    PluginLog.Log($"Enemy in the way, can't pull here - pulling {newEnemy.Name} instead");
                }
                return true;
            }
            
            return false;
        }
    
    }

     

    Wish I could tip you mate, thanks so much.

  2. I've tried writing custom plugins to blacklist with a scan around the NPC it targets and it's still  not even reasonably useful. The radius it checks for attack before being attacked in is so small and blindsided. 

    I'll watch it set a path with a node on top of an hostile NPC?

    I've added every possible mob in the area to my target list, it will still make the stupidest choices of target, like the mob in the back and run up to range pulling everything.

    It will try and  attack another mob if your pet is being hit and not you.

    Blacklisted NPCs are treated as if theyre invisible and will 100% kill you while bot attempts to go kill other targets.

     

    Why not sort potential targets by  distance? Why not check node paths for nearby enemies when walking, can these be added please?

  3. So they have a note system in place, you can find screenshots of it if you go through the GMs comments on the subreddit.

    It basically keeps tracks of infractions, past mutes, etc etc. Sometimes a new GM can't ban but will leave a comment for a senior GM to investigate, eg if you failed 4/6 of the anti bot measures.

    You have to be online for the senior GM to follow up,  they won't wait till your 60, it'll be within a day or two but I could be wrong on that.

  4. It will repeatedly choose an Alliance vendor when I'm Horde, it made 17 trips to an Alliance base, obviously dying.

    I manually disabled it in the DB and it still will go to that vendor which is farther than the nearest Horde one.

     

    Any plans for fixes or at least an API call so I can rewrite functionality?

  5. Look at the other fightclasses and check for simple numbers at first near spells names to get an idea of what it's doing.

    eg. Most fight classes will have ObjectManager.Me.HealthPercent which is a check to see if your health is greater or less than a certain threshold. "If health less than 70%, cast renew"

    Start tweaking numbers to change what percentage what spells trigger, if you don't want it to do a spell, comment it out by placing '//' infront of the lines of code.
     

    if (RaptorStrike.KnownSpell && ObjectManager.Target.GetDistance < 8)
            {
                RaptorStrike.Launch();
            }

    change to
     

    if (RaptorStrike.KnownSpell && ObjectManager.Target.GetDistance < 8)
            {
                //RaptorStrike.Launch();
            }

    Here's a more complex line that is almost human readable, hopefully the fightclasses you download were written well:
     

    if (ObjectManager.Me.HealthPercent <= 40 && FlashHeal.KnownSpell && !ObjectManager.Me.HaveBuff("Shadowform") && ObjectManager.Me.ManaPercentage > 15)
            {
                FlashHeal.Launch();
            } 

    "If my health is less than 40% and I know flash heal, I'm not in shadowform (the ! means inverse) and I have some mana"

     

  6. On 7/26/2018 at 1:46 PM, MrKitties said:

    like for example they don't tell you that if you add a target for a profile and then black list it. the bot will still fuck it up or get fucked by it. watching my rogue level is super fucking frustrating and now either I worship lua programming or pay someone to do it for me to make it look better all because they know lua. I basically have to make a new profile which some people say its 10 mins but in reality if you want a nice one you're going to spend a few hrs with no mount making some loops in a huge area(ex. the barrens, ashenvale, and tanaris). searching through the forums is a mess as well. I am not a search engine genius, so I pickup a bunch of random shit posts I don't need and I have sift through it for like an hr or two hoping I find someone else that had the same problem as me and got an answer for it that was actually an answer and not a shit reply that didn't make sense or answer the question at all

    K this will be a bit technical but don't be a bitch and google it.

    Use classicdb.ch for the NPC database to find beasts or elementals around the level you are.

    Switch to https://vanilla-twinhead.twinstar.cz/?zone=406 and select the zones then pick an area you're in or near.

    Order NPCs by level, scroll to find your level range, look for beasts that are ideally neutral but can be aggressive if spaced out.

    Click on said NPC, it will hightlight the nodes on the map indicating where that NPC spawns, find an NPC in a remote location, you can cross reference classicdb.ch again on their zone DB which shows quest locations and if the NPC is part of a quest. 
    The best mob is a neutral, non quest npc somewhere remote, like a river between two zones.

    Start up a private server of your own, takes a few minutes, make yourself GM and teleport to the NPC location.
    Mount up, set invisible and make your profile in a minute easy.

    Ideally you teleport 3 or 4 times making a string of profiles slowly climbing in npc level, make a quester profile which simply launches these profiles you made. 

    A strong fight class is only possible with C# and modifications to be honest, the free ones don't account for multiple mobs, risky pulls, CCing a secondary target. Perhaps buy one or get someone to do a custom one for you.

    You get to 59 on Northdale?

  7. 10 minutes ago, CocoChanel said:

    "I reported a mage botting in wetlands at the lvl 27 raptors. I AFKd on the hill above the area, and after some time a GM moved the bot several times to see if it would run back in range and immediately attack the mob. You may not have "seen" the GM chat window, but you would have noticed being moved from your mob over and over. You got caught botting."

     

    Comment from Reddit.

     

    How I would fix = If your character or current fighting target is moved more than 10 yards, ignore your current fighting opponent, and generate a smooth path back to the profile or generate a smooth path to the mob, and do random shit like strafing, jumping or saying a message in general chat like "Lag?".

    Thanks for finding it, knew they had tests.
    I'm writing a plugin quick for this.

  8. 1 minute ago, CocoChanel said:

    Not rly, if a character is at the spot x y z 15 times in 4 hours, report it.

    All AFK characters in stormwind instant banned lol.

    We can bypass tests with stronger fight classes that detect when a mob suddenly teleported.

     

    The real question is can we have the bot tell me when a GM is watching, we have full access to WoW memory set, the fact that they're there is readable in memory even if invisible.

    Setup a private server, have a GM silently watch your bot, memory dump and compare to the same dump without GM logged in to find the values.
    A GM is still a player and players can be detected in memory.

  9. Just now, Bambo said:

    I highly doubt they are using walking patterns to detect something. That would mean a huge amount of workload to do that for every char online.

    I agree with this, the reddit comments mentioned drop tables being too large would cause performance stress.
    Plus you walk client sided, hence speedhacks, they're not monitoring walking patterns.

  10. 1 minute ago, CocoChanel said:

    "These tests are easily producible by taking your current target and moving it away 20 yards, making it perm evade, teleporting your character away 20 yards etc.
    "

     

    Funny you mention that, happened on my low level warrior right before it got suspended. Not the teleport away, but my mob starting running away from me while in combat with 80% hp. 

     

    I still stick with the VM solution. I have been running VM's, and I have not gotten mass banned since.

    I babysit my char's and only let them run for a 3-4 hour period unattended when their won't be EU people on.

    The tests are real, it was mentioned twice by a senior GM and I've seen it happen to my character before.

  11. 2 minutes ago, Bambo said:

    Very interesting stuff. Thanks alot for your research. I watch my bots alot. And they never have been fighting against mobs that constantly evade or something like this. I could have missed it as well though.

     

    TBH i think they stepped their game up and they detect wrobot in some weird way that it doesnt catch all people... Also, true anything below lvl 30 does not really seem to be of interest for them. Although I got mass banned on 12 low level accounts as well already.. All withing minutes. So they are not only able to detect wrobot itself, they are also able to create links between the accounts.

    The links between accounts is their note system.

    It's based on connection IP, so all accounts share the same notes. This way they make notes about the actual player and can tell if you were previously banned for botting or muted etc for follow up offences.

    They don't detect wRobot, they simply have automated tests that they run on every single person reported for suspicious activity. If the tests are inconclusive (eg. user passed 4 out of 6 tests), a note is most likely added to the account and a GM will do manual follow up.

    These tests are easily producible by taking your current target and moving it away 20 yards, making it perm evade, teleporting your character away 20 yards etc.

    They also can do simple DB checks to get an idea of the autism involved, eg. Get a sum of all NPC kills for mob Id 4082, if over >500 this guy is clearly not questing and needs investigation.

    I rewrote my fight classes from scratch and included a wide range of scenarios for handling target distance, whether we're actually doing damage, ignoring fights and using a wide range of spells plus more accurate movement such as attempt to kite a mob higher lvl than us.

    I recently survived the past two waves (which seem to occur around 10am-noon EST) using private fight classes and profiles.

    If you guys don't want to be banned you need to step it up a notch and adapt to your environment. It's the little things that get you reported, tag a mob someone else needs for quest and they inspect and see if your a bot, don't return a buff from a passerby, respawn twice and get killed clearly. Simple plugins fix a lot of these issues.

  12. Some thoughts on this:

     

    I kept trying to think why bots would make it to level 30 before starting to get picked off, it's when both factions start to merge and bot in the same areas making it easier for GMs to group ban lots of bots based on common profiles.

    I've been checking Gears_LH on reddit looking for clues to their internal systems:
    https://old.reddit.com/user/Gears_LH?count=25&amp;after=t1_e2px5gx

    Their notes system they use:
    https://imgur.com/a/ebtnYhs


    Interesting comment on their bot detection:
    "You have the right to appeal via the control panel. A GM who was not involved in the original banning will review the evidence collected by banning GM. If you were not banning botting, the reviewing GM will be able to tell based on the output of the tests performed and you will be unbanned.

    FYI though, our bot tests don't concern whether you're paying much attention, because we know that people zone out when they grind. Our tests are for automation, and if you were playing as you said, you would not have failed them.

    Edit: Accidentally a word wrong"

    They have tests such as making a mob perm evaded, untargetable, move it farther away etc. We should develop a plugin that checks for various ways these tests can occur and to ignore any mob being tested on.

    People making topics for GMs to watch spots for botting:
    https://old.reddit.com/r/lightshope/comments/8y9kvh/admins_please_just_watch_this_spot_for_bots/

    Next plan for those really upset:
    "You're both right. We process thousands of tickets. At any give time there are between 100-300 tickets pending. New tickets are constantly coming in even as we clear old tickets. Basically the number of pending tickets defines the response time."

    Let's spam the report system with fresh accounts, make the number of pending reach the thousands or even have it run a stack overflow.

     

    Further comments of interest:
    "He's on my tracker for now, I watched him for about an hour last night before bed while writing code, and seemed legit. But we'll continue to monitor."

    "I'm pushing leads to let me release a full breakdown of bans since launch. It's staggering."
    They have new technology they don't want leaked?

    "Yep, it may take a little time to get each bot, but we do, so don't fret if you see them still botting after being reported. They just don't know they are banned yet."

    "Woody was banned for botting after failing a suite of tests to a conclusive standard, not for using or making a macro. I have reviewed the data collected by the banning GM and concur. The appeal has been denied, and that is the end of this. Woody is welcome to create a new account and start over just as any player is, provided he/they obey the rules of the server."

    Once again they have a testing suite applied to suspicious or reported players.

     

    "The GM team is very healthy right now, and we are planning to take on a couple more GMs before launch.

    That said, tracking fish botting and seeing who is catching the fish and where, and even looking into instances to find fish bots is extremely easy.

    When we talk about "receiving" we don't mean players that buy stuff on the AH. We mean direct trades or mail, and thats stuff we can check directly."

     

×
×
  • Create New...