Jump to content

nudl

Members
  • Posts

    110
  • Joined

  • Last visited

Reputation Activity

  1. Haha
    nudl reacted to Krazzee in Help with checking Hearthstone location   
    Hello :)
    I just tested myself and you are absolutely correct, I was assuming it had to have been Gallow's End Tavern and never apparently sat and actually read the true name, to which you are indeed correct it is Gallows' End Tavern. You have no idea how hard I laughed at my mistake this morning when I woke up and read your reply then tested it--I suppose it's like the old saying: "When you make an assumption, you make an ass out of you and -umption." This will absolutely help more than you know, as of now my Undead 1-12 quester is basically complete :) A bit of quest tuning and some testing and it might be up to scratch for a beta release. 
    Thank you very much for all of your assistance nudl, you have helped me to bring my quester to fruition and I can't thank you enough. And thank you for the compliment :) I'm sure I'll be bothering you again for an issue in the future :P Now to level up some other classes and program in the level 10 class quests and I think it'll be totally finished. Consider this solved.
    (Here's the successful code I'm now using if anyone needs it for anything similar)
    <QuestsSorted Action="TurnIn" NameClass="ARoguesDeal" /> <QuestsSorted Action="If" NameClass="Lua.LuaDoString&lt;string&gt;(&quot;bindlocation = GetBindLocation(); return bindlocation;&quot;) != &quot;Gallows' End Tavern&quot;" /> <QuestsSorted Action="RunCode" NameClass="wManager.Wow.Bot.Tasks.GoToTask.ToPositionAndIntecractWithNpc(new Vector3(2269.51f, 244.944f, 34.25697f), 5688, 1, false);" /> <QuestsSorted Action="RunMacroLua" NameClass="/click StaticPopup1Button1" /> <QuestsSorted Action="GoToStep" NameClass="56" /> <QuestsSorted Action="EndIf" NameClass="" />  
  2. Like
    nudl got a reaction from FNV316 in Clicking objects in dungeons   
    The Gong in the Razorfen Downs isn't only a GameObject since it got redesigned, but also a Unit.
    I've used this two RunCodes one after another:
    Can't test if they still work though, as I don't do anything on official servers anymore.
  3. Like
    nudl reacted to Droidz in Skull marked ?   
    Hello,
     
    You have lua functions GetRaidTargetIndex and SetRaidTarget (or SetRaidTargetIcon)
     
    Samples:
     
    Launch the spell id 109259 on the first boss with skull icon:

    local SpellName = GetSpellInfo(109259) for i = 1, 4, 1 do local UnitIdString = "boss" .. i if UnitExists(UnitIdString) then if GetRaidTargetIndex(UnitIdString) == 8 then CastSpellByName(SpellName, UnitIdString) return end end end Launch the spell id 109259 on the first raid target with skull icon (this code check the target of raid members):
    local SpellName = GetSpellInfo(109259) for i = 1, 40, 1 do local UnitIdString = "raid" .. i .. "target" if UnitExists(UnitIdString) then if GetRaidTargetIndex(UnitIdString) == 8 then CastSpellByName(SpellName, UnitIdString) return end end end Launch the spell id 109259 on the first party target with skull icon (this code check the target of party members):
    local SpellName = GetSpellInfo(109259) for i = 1, 4, 1 do local UnitIdString = "party" .. i .. "target" if UnitExists(UnitIdString) then if GetRaidTargetIndex(UnitIdString) == 8 then CastSpellByName(SpellName, UnitIdString) return end end end ps: Replace 109259 by your spell id and add conditions to launch the spell, to launch the spell if mob health is lower than 50%:

    local SpellName = GetSpellInfo(109259) for i = 1, 4, 1 do local UnitIdString = "party" .. i .. "target" if UnitExists(UnitIdString) then if GetRaidTargetIndex(UnitIdString) == 8 then if UnitHealth(UnitIdString)/UnitHealthMax(UnitIdString)*100 < 50 then CastSpellByName(SpellName, UnitIdString) return end end end end ps2: Code no tested, do not hesitate to tell me if this don't works
  4. Like
    nudl reacted to Droidz in Snippets codes for quest profiles   
    Blacklist object/unit in ObjectManager 
    WRobot will 100% ignore blacklisted objects
    WoWUnit unit = new WoWUnit(0); if (unit.IsValid && !wManager.Wow.ObjectManager.ObjectManager.BlackListObjectManagerGuid.Contains(unit.Guid)) wManager.Wow.ObjectManager.ObjectManager.BlackListObjectManagerGuid.Add(unit.Guid); (this code can disrupt WRobot, use it only if you know what you're doing)
  5. Like
    nudl reacted to reapler in Bag.GetBagItem()   
    Not fully tested, but this should work:
    /// <summary> /// Used to get the item quantity by name. /// </summary> /// <param name="itemName">The item name.</param> /// <remarks>Replacement for GetItemCount in vanilla.</remarks> /// <returns></returns> public static int GetItemQuantity(string itemName) { var execute = "local itemCount = 0; " + "for b=0,4 do " + "if GetBagName(b) then " + "for s=1, GetContainerNumSlots(b) do " + "local itemLink = GetContainerItemLink(b, s) " + "if itemLink then " + "local _, stackCount = GetContainerItemInfo(b, s)\t " + "if string.find(itemLink, \"" + itemName + "\") then " + "itemCount = itemCount + stackCount; " + "end " + "end " + "end " + "end " + "end; " + "return itemCount; "; return Lua.LuaDoString<int>(execute); } /// <summary> /// Used to delete all items by name. /// </summary> /// <param name="itemName">The item to delete.</param> /// <param name="leaveAmount">The amount of items which remain in the bag.</param> /// <remarks>Bug at links with "-"</remarks> public static void DeleteItems(string itemName, int leaveAmount) { var itemQuantity = GetItemQuantity(itemName) - leaveAmount; if (string.IsNullOrWhiteSpace(itemName) || itemQuantity <= 0) return; var execute = "local itemCount = "+itemQuantity+"; " + "local deleted = 0; " + "for b=0,4 do " + "if GetBagName(b) then " + "for s=1, GetContainerNumSlots(b) do " + "local itemLink = GetContainerItemLink(b, s) " + "if itemLink then " + "local _, stackCount = GetContainerItemInfo(b, s)\t " + "local leftItems = itemCount - deleted; " + "if string.find(itemLink, \""+ itemName + "\") and leftItems > 0 then " + "if stackCount <= 1 then " + "PickupContainerItem(b, s); " + "DeleteCursorItem(); " + "deleted = deleted + 1; " + "else " + "if (leftItems > stackCount) then " + "SplitContainerItem(b, s, stackCount); " + "DeleteCursorItem(); " + "deleted = deleted + stackCount; " + "else " + "SplitContainerItem(b, s, leftItems); " + "DeleteCursorItem(); " + "deleted = deleted + leftItems; " + "end " + "end " + "end " + "end " + "end " + "end " + "end; "; Lua.LuaDoString(execute); } Usage:
    DeleteItems("Soul Shard", 20);  
  6. Like
    nudl got a reaction from omega in cant get bot to launch   
    I can't say anything about the error message, but wrobot.exe must have around 800kb after a fresh install, and it's last / second last bot. Here you just have 77kb, 1kb, 1kb.
    >Use Updater
    Maybe I'm wrong, sorry.
  7. Like
    nudl reacted to reapler in Quest Editor   
    A small update from me:
    Since i'm almost done with the database, i can continue working on my editor again. But my first design wasn't really good. 
    I'm thinking to use a more simpler solution which doesn't require to assign a "Action parameter" at the sorted quests.
    In the end each action define a step which are selectable on the bar like this:
    By the way, if you have a custom pulse like "KillAndLoot",  "Gatherer" or something else which is often used, you are welcome to post it and i can create a seperate setting gui for it.
  8. Like
    nudl reacted to eeny in 1-70 H grind or quest   
    hes a newbie ( doesnt have a sub) so he cant see that.  Majority of users requesting profiles like this use cracked wrobot, so dont feed them.
  9. Like
    nudl reacted to reapler in Plugins and Accept User Keyboard Input   
    I've looked into it, you need to run the hook on its own context via "Application.Run();" to get it working:
    using System; using System.Diagnostics; using System.Runtime.InteropServices; using System.Threading.Tasks; using System.Windows.Forms; using robotManager.Helpful; using wManager.Plugin; public class Main : IPlugin { public void Initialize() { KeyBoardHook.Initialize(); KeyBoardHook.OnKeyDown += KeyDown; } public void Dispose() { KeyBoardHook.OnKeyDown -= KeyDown; KeyBoardHook.Dispose(); } public void Settings() { } private static void KeyDown(object sender, KeyBoardHook.KeyArgs keyArgs) { Logging.Write(keyArgs.Key.ToString()); } public class KeyBoardHook { private const int WH_KEYBOARD_LL = 13; private const int WM_KEYDOWN = 0x0100; private const int WM_KEYUP = 0x101; private static readonly LowLevelKeyboardProc Proc = HookCallback; private static IntPtr _hookId = IntPtr.Zero; private static Keys _lastKeyDown = Keys.None; public delegate void KeyBoardHookEventHandler(object sender, KeyArgs e); public static event KeyBoardHookEventHandler OnKeyDown = delegate{}; public static event KeyBoardHookEventHandler OnKeyUp = delegate{}; internal static void Initialize() { Task.Factory.StartNew(() =>//avoid thread blocking from Application.Run(); { _hookId = SetHook(Proc); Application.Run(); //important! need to run in its own "context" }); } internal static void Dispose() { UnhookWindowsHookEx(_hookId); Application.Exit(); } private static IntPtr SetHook(LowLevelKeyboardProc proc) { using (var curProcess = Process.GetCurrentProcess()) using (var curModule = curProcess.MainModule) { return SetWindowsHookEx(WH_KEYBOARD_LL, proc, GetModuleHandle(curModule.ModuleName), 0); } } private delegate IntPtr LowLevelKeyboardProc(int nCode, IntPtr wParam, IntPtr lParam); private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam) { if (nCode < 0) return CallNextHookEx(_hookId, nCode, wParam, lParam); if (wParam == (IntPtr) WM_KEYDOWN) { var vkCode = (Keys) Marshal.ReadInt32(lParam); if (_lastKeyDown == vkCode) return CallNextHookEx(_hookId, nCode, wParam, lParam); OnKeyDown(null, new KeyArgs(vkCode)); _lastKeyDown = vkCode; } else if (wParam == (IntPtr) WM_KEYUP) { var vkCode = (Keys) Marshal.ReadInt32(lParam); OnKeyUp(null, new KeyArgs(vkCode)); if (_lastKeyDown == vkCode) _lastKeyDown = Keys.None; } return CallNextHookEx(_hookId, nCode, wParam, lParam); } [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] private static extern IntPtr SetWindowsHookEx(int idHook, LowLevelKeyboardProc lpfn, IntPtr hMod, uint dwThreadId); [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] [return: MarshalAs(UnmanagedType.Bool)] private static extern bool UnhookWindowsHookEx(IntPtr hhk); [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] private static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode, IntPtr wParam, IntPtr lParam); [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] private static extern IntPtr GetModuleHandle(string lpModuleName); public class KeyArgs : EventArgs { public Keys Key { get; private set; } public KeyArgs(Keys key) { this.Key = key; } } } } So far it worked well.
  10. Haha
    nudl reacted to CarloBotto in Quester skipping stages in instance   
    OM Freaking G!!!!!!!!
    It was all because I pasted that condition in the wrong place!!!!
    That's not actually the first time I did that, but I managed to find and correct the mistake before!
    Perhaps a "better go to Specsavers" situation :D
    Or just stick with editing via Notepad++ :)
    ExitZF probably wasn't working as intended, but somehow the character was sent out of the instance anyway, to travel the lands of Kalimdor, lol
    Big THANKS, nudle :-)
     
     
  11. Like
    nudl got a reaction from CarloBotto in Quester skipping stages in instance   
    ExitZF shouldn't (and can't?) work like this, because you have the can condition "return (wManager.Wow.Helpers.Usefuls.ContinentId == (int)wManager.Wow.Enums.ContinentId.Kalimdor);"
    But you are in ZF. So this can't work, but you are saying it does? D:
    Other than that, try with a fresh install of wrobot (Just install another in another folder and try it with that one.)
    Maybe it's one of your settings.
     
  12. Like
    nudl reacted to Matenia in Huge banwave of bots 3.3.5   
    This happened on Outland every day since day 1. They ban at least 50 accounts a day. It means nothing, because the bot isn't detected.
    It's just manual reports adding up. If their GMs actually put in any real work, they'd be banning 200 accounts a day. I've been botting on Warmane since day 1, got banned twice after never really logging out and staying in one spot for days.
  13. Like
    nudl got a reaction from vicca in Some General Quests about botting...   
    Yeah, pretty much only for real money. But tbh I always got myself some gold to my main.
  14. Thanks
    nudl got a reaction from vicca in Some General Quests about botting...   
    Hey, I'll try to answer all your questions.
    It's never safe to even attach the bot to an account you 100% don't want to lose. (You can risk it, nobody can tell you, how high the risk is.)
    You have to buy the game AND the gametime, yes. For each Account. Not really that cheap, but maybe you can get your hand on some cheaper gamekeys.
    The best would be if you never transfer anything to your main, but IF you need to, take the route over a guildbank. (only a suggestion.)
    And look here:
     
    No need to excuse you for your use of English.
  15. Thanks
    nudl reacted to camelot10 in asking for remote load XML support   
    Premium Seller only
  16. Like
    nudl reacted to CarloBotto in Your best zone for gold Farm   
    You can make a lot more than that by selling low level recipes on the AH. Each recipe will sell for that or more. I'm talking about the first recipes you can get from the areas you go to after the starting areas.
    Back in Cata days, which was the last time I botted, I used to fish in Hyjel and those areas, and sold the fish for LOTS of gold. In fact I made so much gold, I bought all the flying skills and mounts for my guild members :)
    I was shocked on my return to find those fish are now pretty much worthless. At least I have not been able to sell any of them.
    My advice would be to stop farming and max out your toon's level. Then you can farm higher level areas with ease, and make a lot more gold. 
    At the moment I am manually running through the highest level instances in Kalimdor and Azeroth and getting about 1k gold per hour. That's not botting, as yet. I'm just testing things out. Figuring out what's the best places and ways to make gold. My characters are maxed out, and clear the instances in about 15 minutes, including bosses.
    I sell any gear (armour, weapons, bags, etc.) I spot already up for sale in the AH. I disenchant all soulbound and auction the resulting enchanting mats, and also put the cloth and potions in the auction house. Sell all grays to a vendor of course :)  The gear/armour/weapons, etc. sell for silly money now in the AH.
    In the end I plan to just bot for a few hours per day, spread over the day (1 hour here, 2 hours there, etc.). The rest of the time I'll be questing, trading, doing my WoW thing myself, or more likely cheesing some poor sod in SC2 :D
  17. Like
    nudl got a reaction from CarloBotto in IsCompleteCondition for is creature dead   
    Hey CarloBotto
    return ObjectManager.GetWoWUnitByEntry(ID).Count == 0; You can use this. Just change ID to the... ID, yeah. You could instead of this == operator use also >=, <= (less, more than and equal), >, < (less, more) and != (not equal). Just fyi.
    You don't need to have the quest. Be sure to check "not required in questlog".
    And, you pretty much have to search for them.
  18. Like
    nudl reacted to CarloBotto in Bot not attacking in instances (works fine outside of instances)   
    Finally got this sorted. Using KillAndLoot quest to enter and exit the instance, then a series of FollowPath quests to go through all the mobs in the instance, that way the toon kills and loots most if not all mobs.
    I've create a number of FollowPath quests, so that they end and begin at a key point in the instance, where additional scripting will allow for interaction with things and/or the taking on of bosses. I'll add those just as soon as I figure out how. 
    It took a while to get to this point, because being stubborn, I would not let go of trying to do it with a Grinder script, but there were issues I could not solve, so Quester I went :)
  19. Like
    nudl got a reaction from Kalos72 in General Setting per Profile?   
    <QuestsSorted Action="RunCode" NameClass="wManager.wManagerSetting.CurrentSetting.UseFlyingMount = false;" /> Should work like this, yep.
  20. Thanks
    nudl reacted to Avvi in Avvi's C# Tips & Tricks with Helpful Code Snippets   
    Hi all,
    I figured I'd post some things that I have learned during my time of developing in C#. Perhaps some of this is obvious for some of the more experienced WRobot C# writers, but for me, I had to do a lot of forum searching and experimenting to make progress on any of my work. 
     
    How do I get started?
    Please see this post by @Droidz
     
     
    How can I see what Functions are available to me in the WRobot API?
    I recommend using some sort of decompiler in order to see what functions are available in the WRobot API. That is, use something such as dotPeek from jetbrains. See this URL: https://www.jetbrains.com/decompiler/ . Once you have this downloaded, open  the WRobot Binaries located in the (C:\WRobot\Bin) folder in dotPeek. I cannot even begin to explain how many times the recompiled helped me find useful things I could re-use. As a quick tip, I would suggest taking a look at the wManager.wManager.Wow.Helpers functions that are available. Anything listed as public static <variable type>  will be available to use from a Plugin/Profile/Fightclass etc.
     
    What if WRobot doesn't have an available function that I will need?
    WRobot doesn't have everything instantly available, so you may need to resort to using some Lua Functions to get information back from the WoW Client. An example of this that I ran into at some point was getting the number of Character Macros someone has.. Of course this is very specific, but please bear with me for the sake of this example :).
    WoW Lua Reference:  http://wowprogramming.com/docs/api_categories
    Using Lua in C#:
    This snippet will return a List of integers and set the C# variable numberOfMacros  equal to the returned list of the DoString function. To be more specific, it will provide a list of the number of Global account Macros , and the number of Personal Character Macros.
    var numberOfMacros = Lua.LuaDoString<List<int>>("return numCharacterMacros");  
    The below will return just the number Character Macros someone has.  If you need a specific variable from a Lua Function, then do the following: 
    var numPersonalMacros = Lua.LuaDoString<int>("local numAccountMacros, numCharacterMacros = GetNumMacros(); return numCharacterMacros"); The above snippet will set the C# variable numPersonalMacros equal to numCharacterMacros from the lua return value.
    Using a Variable in the Lua.LuaDoString.  The below will return the text body of the macro that has the id of 121.
    var _macroID = 121 string macroBody = Lua.LuaDoString<string>("return GetMacroBody(" + _macroID + ")");  
     
    Executing Lua Code in C#
    This  will leave the party (if the player is in one).
    wManager.Wow.Helpers.Lua.RunMacroText("/run LeaveParty()");  
    What is the difference between Lua.LuaDoString() and RunMacroText()? 
    The difference is in can be understand in how you think about them. Lua.LuaDoString should be seen as a way to retrieve information.. More specifically, the Lua.LuaDoString's purpose is to have a value returned to it, so that you can assign it to a C# Variable. RunMacroText can be used to do something in game. More specifically, RunMacroText should be used when trying to run some sort of in-game script (such as /cast spell).
     
    Plugin Template C#: Plugin-Template.cs
    I have attached a basic plugin template that can be used. In it, I have provided an example of:
    A Basic Implementation of the wManager.Plugin.IPlugin Class (including Settings/Initialize/Dispose) Basic loop that will occur while WRobot is running Settings that can be configured from Plugin Page A Category/Short Description for the Plugin Settings An example of Watching for Game Events. An example of OnRunState / OnAfterRunState for WRobot States Watching For Game Events
    Sometimes you may find that you need to wait for something to occur in game before you can take a specific action. In WoW / WRobot world, these things are called events. Below are two examples of events. The first event will occur when either the Group Loot Settings change, or a Player Enters/Joins the current Party.The second Event will occur when a System Message is received.  I recommend adding this watchForEvents Function in the Initialize function of a plugin, or somewhere where it will only be called once. For an example of this, please see my Plugin Template.
    private void watchForEvents() { EventsLuaWithArgs.OnEventsLuaWithArgs += (LuaEventsId id, List<string> args) => { if (id == wManager.Wow.Enums.LuaEventsId.PARTY_MEMBERS_CHANGED) { Logging.Write("Joined Group or something about the current group was changed."); } if (id == wManager.Wow.Enums.LuaEventsId.CHAT_MSG_SYSTEM) { Logging.Write("We Received a System Message."); } }; }  
    Finding the list of available Game Events:
    Each version of the game is different here, so this is where you will need to be careful. By that I mean, some versions of the game may have an event type, but a different version may not. Blizzard was not always consistent in their name accross different versions of the game, so please be careful to test against multiple versions of the game. 
     Open DotPeek  Search for "LuaEventsID" Double Click LuaEventsId in the Assembly Explorer Window. A window will open displaying a list of Events. What do each of these Events mean?
    WoW Event Reference:  http://wowwiki.wikia.com/wiki/Event_API 
    (Reminder! Some of these may be different in different versions of the game.)
     
    Watching For WRobot State Changes
    In addition to in game events, there are also WRobot 'states'. Similar to Game Events, WRobot states are the particular condition that WRobot is in at a specific time. For example, there is a state called 'MillingState', and another called 'Looting' that come out with WRobot. States are managed by the WRobot FiniteStateMachineEvents Engine. When a State occurs/changes/ends/etc, an event is passed to the FiniteStateMachine (pardon my wording here if this is not 100% correct). There are three main events that we can use to manage our States.
    State Events that occur:
    OnBeforeCheckIfNeedToRunState - This can be used to CANCEL an event if specific conditions are met. OnRunState - This can be used to do something just as the State is being started. OnAfterRunState - This can be used to do something just as the State has completed.  
    Example of OnRunState and OnAfterRunState
    In this example we are watching for when WRobot starts the ToTown State and when it finishes it. We create a boolean that is set to true when the state is started, and then set it to false when the State is completed. I recommend adding the initializeToTownWatcher() function in the Initialize function of a plugin, or somewhere where it will only be called once. For example of this, please see my Plugin Template.
    bool goToTown = false; private void initializeToTownWatcher() { robotManager.Events.FiniteStateMachineEvents.OnRunState += (engine, state, cancelable) => { if (state != null && state.DisplayName == "To Town") { goToTown = true; Logging.Write("Going to Town State has been initiated."); } }; robotManager.Events.FiniteStateMachineEvents.OnAfterRunState += (engine, state) => { if (state != null && state.DisplayName == "To Town") { goToTown = false; Logging.Write("We have completed going To Town State."); } }; } Example of OnBeforeCheckIfNeedToRunState
    In this example, we catch the state with the name of To Town and cancel it by setting the passed in cancelable parameter to true.
    private void cancelToTownState() { robotManager.Events.FiniteStateMachineEvents.OnBeforeCheckIfNeedToRunState += (engine, state, cancelable) => { if (state != null && state.DisplayName == "To Town") { Logging.Write("We have cancelled the To Town State"); cancelable.Cancel = true; } }; } Where can I find other WRobot States?
    Each version of the WRobot is different, so some versions of WRobot may have a state type, but a different version may not. Please be careful to test against multiple versions of the game/WRobot. 
    Open DotPeek Expand wManager Module Expand wManager.Wow.Bot.States namespace.  
     
    MORE TBA....
    The above is my attempt at trying to help newcomers to WRobot at writing their own plugins / fight classes / etc. If there are any questions , suggestions, or even  corrections, please do let me know in the comments and I'll be sure to add/update things as they come up!
     
    Thanks,
    - Avvi 
     
  21. Like
    nudl got a reaction from mikesimmons in Flight Master's Whistle   
    Use Quester.
    Just add this:
    <QuestsSorted Action="RunLuaCode" NameClass="RunMacroText("/use item:141605")" /> Works with other items too, just look up the ID on wowhead and change it with 141605.
  22. Haha
    nudl reacted to Dreamful in About possible C# hacks/scripts (pvp)   
    Didnt try you to sell anything lol

    They are always bugs on Trinity Servers, just find them. Do reverse Engenieering, like the Rend bug that still exist or hidden crits from a warrior ability, that i am not gonna name it, few people sell this for a high price. just find them :)
    and now, fuck you rude script kiddy.
  23. Thanks
    nudl reacted to Matenia in Condition for Profession   
    This plugin reads profession level through Lua. You can check out the source code.
    Here is the relevant C# code:
    private void SetMiningSkill() { CurrentMining = Lua.LuaDoString<int>(@" miningSkill = 1; for i = 1, GetNumSkillLines() do local skillName, isHeader, isExpanded, skillRank, numTempPoints, skillModifier = GetSkillLineInfo(i) if isHeader and not isExpanded then ExpandSkillHeader(i); end end for i = 1, GetNumSkillLines() do local skillName, isHeader, isExpanded, skillRank, numTempPoints, skillModifier = GetSkillLineInfo(i) if not isHeader and skillName == ""Mining"" then miningSkill = skillRank end end ", "miningSkill"); }  
×
×
  • Create New...