Jump to content

Matenia

Elite user
  • Posts

    2226
  • Joined

  • Last visited

Posts posted by Matenia

  1. 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.

  2. 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.

  3. 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.

  4. 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.

     

  5. 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. 

  6. 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.

  7. 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;
    	}

     

  8. 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.

×
×
  • Create New...