Jump to content

Matenia

Elite user
  • Posts

    2232
  • Joined

  • Last visited

Posts posted by Matenia

  1. Booty Bay was fixed, so could be custom client. You can create offmesh connections - tons of forum threads explaining. I've posted some code examples of how to add custom pathing.

    Taxis: Always been an issue, you can try any of the free flightmaster plugins available for many expansions. May have to adjust them yourself as needed - especially FNV's is really old by now. This could be server/custom client related for you though.

    Battlegrounder: Profiles will work if you turn off free mode or whateever. Threads on the forums explain this already. The last guy who asked got a wall of text response. I'm sure you can find the threads.

    Not sure - never seen it bug out, but I replaced the ToTown state with my own in HMP anyway.

  2. Some fightclasses will force Lua to move, because injecting movement when using frame locks will cause your client to deadlock, freeze and eventually crash.
    Fyi, Lua to move has nothing to do with CTM. If CTM is enabled, it will ALWAYS be used. Lua to move just means for stuff like antiafk it will use Lua to inject movement keys rather than sending actual keystrokes to the client.

    Lua to move is perfectly fine. Just enable CTM.

  3. Generally, games don't put very specific stress on your system. Just loading all of your RAM or a few threads of your CPU doesn't mean you're unloading the full might it's IPC is capable of.

    WRobot reads and writes to existing processes memory. It does so by very frequently. If you have an issue with your RAM config or even just one faulty stick, as soon as you hit those faulty cells too fast, you read data that was never written but you assume it was. It leads to data corruption down the line.

    This can break your whole OS, without you even knowing it's broken. I've overclocked RAM so often, I've even broken BIOS's before and had to reflash with a hardware programmer. That's why my first suggestion was repairing windows.

  4. Yes, some things can actually stress your system and your daily tasks likely don't. Repair Windows first.

    Run OCCT, do some SSE and AVX2 memory tests for 2-3 hours each.

    Test the CPU separately.

    It doesn't matter if your parts are new. If you're running on auto voltages and using RAM in a range where your CPU's IMC needs manual configuration to run stable, it'll crash under some loads eventually.

    I highly recommend not using the cracked version btw. Try the official TRIAL and if that runs stable, you know what to do.

  5. There should be absolutely no way that software itself causes a BSOD unless your OS is already corrupt. 

    The only other realistic thing that's happening here is that your hardware is faulty. Broken RAM, IMC can't handle your RAM clocks, CPU overclock/undervolt not stable, etc.

     

  6. Vendor setup in wrobot will likely work. It's in the advanced settings.

    For WotLK, I don't think there's anything besides HumanMasterPlugin that automates buying ammo completely. But it's 20€.
    If you're proficient in C#, you can probably change FoodAndDrink plugins (Vanilla, TBC, WotLK - check all 3 plugin sections) to buy ammo instead.

    I'm not sure the Wholesome group has anything that does auto vendoring completely, but I would urge you to look into it.

     

    Edit: 

    They do have auto vendoring now. It does a lot of what HMP also does. I encourage you to check this out. 

  7. 7 hours ago, lulala said:

    Latency setting will delay all the things down, we really need a parameter to control the gathering time.....

    No. If this is an issue, it's because your client is fucked (addons, modified client), your PC is slow (memory reading takes so long that by the time WRobot returns the value, it's not presenting the reality anymore) or your internet is shit/server is slow/latency is an issue.

    All of this is mostly solved by latency - you want WRobot to check less frequently so it doesn't "miss" a tick. If it stops too early, it's mostly because the server or your client is delivering incorrect data.

    This can happen if the very first tick after requesting gather returns that you aren't casting - the 700ms "cast" time of gathering that you're then seeing is just coincidence - it just so happens to be how long WRobot takes to make the next decision - it already thinks it isn't gathering and is on to the next step.

  8. This is a full class that can be run as a state.
    It works based on wowhead talent strings and talents are assigned "historically" meaning you have to give it different states of the talent tree depending on how you want talents to be assigned as you level up.

    If you look at the code, it uses Lua to call the LearnTalent function with the index it calculates. You can also hard code this.

    By default, these talent trees are for vanilla and TBC, the WoWVersion check deactivates this for WotLK.

    public class TalentPoints : State
    	{
    		public override string DisplayName => "TalentPoints";
    
    		private static readonly Dictionary<WoWClass, List<string>> ClassTalents = new Dictionary<WoWClass, List<string>>
    		{
    			{
    				WoWClass.Mage, new List<string>
    				{
    					"--05003230", "--0501323010005", "--0501323010235", "--050132301023513", "--05023230102351301", "--05053230102351301", "230005--05053230102351301",
    					"23005500002--05053230102351301"
    				}
    			},
    			{
    				WoWClass.Druid, new List<string>
    				{
    					"-53020203", "-53020203002", "-53020203032001", "-53020203032021", "-5302020303222151", "-5302020303222151-05", "0140003-5302020303222151-05",
    					"014005301-5402020303222151-05"
    				}
    			},
    			{
    				WoWClass.Rogue, new List<string>
    				{
    					"-02", "-32005001", "-32005521000201", "-3200552100050110231", "005003-3200552100050110231", "3050031053-3200552100050110231"
    				}
    			},
    			{
    				WoWClass.Priest, new List<string>
    				{
    					"--50023001", "--50023221004", "--50023221014012", "--5002322103411241", "--5002322103411251", "05003213--5002522103511251"
    				}
    			},
    			{
    				WoWClass.Hunter, new List<string>
    				{
    					"55000001", "550002015", "5500020150201", "5500020150221", "5500020150521041", "5500020150521251-050514002"
    				}
    			},
    			{
    				WoWClass.Warlock, new List<string>
    				{
    					"05-00503", "05002-00503", "05002-20523", "050221001-20523", "050221301-20523", "05022230102-20523", "0502253010201-20523", "0502253010201-2052300122",
    					"0502253010201-2052300152", "0502253012201-2052300152", "2502253012201005-2052310152"
    				}
    			},
    			{
    				WoWClass.Paladin, new List<string>
    				{
    					"--052300012", "--052300512", "--0523025120001", "--0523025120031", "-052303512003151", "--052303512203151", "-5032010043-052303512203151"
    				}
    			},
    			{
    				WoWClass.Shaman, new List<string>
    				{
    					"-50050001", "-50252001050001", "-50252001050031", "-5025200115003151", "5-5025200115003151-50005301", "5-5025200125003151-50005301"
    				}
    			},
    			{
    				WoWClass.Warrior, new List<string>
    				{
    					"023230003", "02323020302", "0232502130201", "0232502135201", "023250213524100001", "023250213524100001-05053020005"
    				}
    			},
    		};
    
    		public override void Run()
    		{
    			var talentStrings = (PluginSettings.In.TalentStrings.IsNullOrEmpty() || PluginSettings.In.TalentStrings.All(string.IsNullOrWhiteSpace))
    				? ClassTalents[ObjectManager.Me.WowClass]
    				: PluginSettings.In.TalentStrings.ToList();
    
    			foreach (var talentString in talentStrings)
    			{
    				// "-545" results in "" and "545", "--545" 
    				var trees = talentString.Split('-');
    				//spec every tree left to right
    				for (var i = 0; i < trees.Length; i++)
    				{
    					var talentsString = trees[i];
    					if (string.IsNullOrWhiteSpace(talentsString))
    					{
    						continue;
    					}
    
    					// Wow uses index starting at 1
    					var talentTree = i + 1;
    					List<uint> talents = talentsString.ToCharArray().Select(s => (uint) char.GetNumericValue(s)).ToList();
    					//Logger.Info($"{talentTree} {talentsString} {talents.Select(x => x.ToString()).Aggregate((s1, s2) => s1 + "," + s2)}");
    					
    					// Talent points are meant to be spent by priority. Whenever a new point is available, we need to run the whole algorithm again
    					var successfullySpent = LearnTalents(talentTree, talents);
    					if (successfullySpent)
    					{
    						return;
    					}
    				}
    			}
    		}
    
    		private bool LearnTalents(int tree, List<uint> talents)
    		{
    			if (tree <= 0 || talents.IsNullOrEmpty())
    			{
    				return false;
    			}
    			
    			// we iterate the talents from left to right as they are used in the talent calculator for each tree 
    			return Lua.LuaDoString<bool>($@"
    				local tree = {tree};
    				local talents = {{ {talents.Select(u => u.ToString()).Aggregate((s1, s2) => s1 + ", " + s2)} }};
    				
    				local talentIndex = 1;
    				for k, talent in pairs(talents) do
    					local name, iconPath, iconX, iconY, currentRank, maxRank = GetTalentInfo(tree, talentIndex);
    					--if name then print(name .. ' at index ' .. talentIndex .. ' and rank ' .. currentRank .. ' needs to be rank ' .. talent); end
    					if (name and currentRank < talent) then
    						--print(name .. ' ' .. currentRank .. ' needs to be ' .. talent);
    						LearnTalent(tree, talentIndex);
    						return true; -- we can't learn multiple talents at once, talent points are spent as if they were historically given one per level up
    					end
    					talentIndex = talentIndex + 1;
    				end
    
    				-- no talent points spent
    				return false;
    			");
    		}
    
    		// don't change this! just returning UnitCharacterPoints is bugged
    		public override bool NeedToRun => Conditions.InGameAndConnectedAndAliveAndProductStartedNotInPause && Helper.RealWowVersion < 12340 &&
    		                                  Lua.LuaDoString<int>("local talents = UnitCharacterPoints('player'); return talents") > 0;
    	}

     

×
×
  • Create New...