#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases. SendMode Input ; Recommended for new scripts due to its superior speed and reliability. SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory. CoordMode, Tooltip, Screen CoordMode, Pixel, Screen CoordMode, Mouse, Screen OnExit, Exit #Include, GDIP.ahk #Include, OSR Area Library.ahk #Include, OSR Action Library.ahk #Include, OSR General Library.ahk pToken := Gdip_Startup() global Tab global XOff global YOff global Seed global FriendsList global Ini := "Data.ini" global Delimiters := "|-" global fSection := "OCR FL" ; Height of 11 global tSection := "OCR Text" ; Height of 11 global Section := "OCR Examine" ; Height of 11 global SubSection := "OCR Subtext" ; Height of 9 global Inventory := MultiplyString(SubStr(Delimiters, 1, 1), 27) IniRead, Seed, % Ini, Seed, Seed, Error If (Seed = "Error") IniWrite, % Seed := GSeed(SubStr(Delimiters, 1, 1)), % Ini, Seed, Seed global Alpha := 1 ; ReturnPos(Seed, 9, SubStr(Seed, StrLen(Seed))) global Black := "0" SubStr(Delimiters, 2, 1) "20" SubStr(Delimiters, 2, 1) "0" SubStr(Delimiters, 2, 1) "20" SubStr(Delimiters, 2, 1) "0" SubStr(Delimiters, 2, 1) "20" global Cyan := "0" SubStr(Delimiters, 2, 1) "140" SubStr(Delimiters, 2, 1) "165" SubStr(Delimiters, 2, 1) "255" SubStr(Delimiters, 2, 1) "125" SubStr(Delimiters, 2, 1) "255" global Green := "0" SubStr(Delimiters, 2, 1) "180" SubStr(Delimiters, 2, 1) "135" SubStr(Delimiters, 2, 1) "255" SubStr(Delimiters, 2, 1) "0" SubStr(Delimiters, 2, 1) "120" global Grey := "55" SubStr(Delimiters, 2, 1) "85" SubStr(Delimiters, 2, 1) "50" SubStr(Delimiters, 2, 1) "75" SubStr(Delimiters, 2, 1) "40" SubStr(Delimiters, 2, 1) "70" global Orange := "155" SubStr(Delimiters, 2, 1) "255" SubStr(Delimiters, 2, 1) "105" SubStr(Delimiters, 2, 1) "170" SubStr(Delimiters, 2, 1) "0" SubStr(Delimiters, 2, 1) "130" global Red := "255" SubStr(Delimiters, 2, 1) "255" SubStr(Delimiters, 2, 1) "0" SubStr(Delimiters, 2, 1) "105" SubStr(Delimiters, 2, 1) "0" SubStr(Delimiters, 2, 1) "0" global White := "190" SubStr(Delimiters, 2, 1) "255" SubStr(Delimiters, 2, 1) "190" SubStr(Delimiters, 2, 1) "255" SubStr(Delimiters, 2, 1) "175" SubStr(Delimiters, 2, 1) "255" global Yellow := "190" SubStr(Delimiters, 2, 1) "255" SubStr(Delimiters, 2, 1) "170" SubStr(Delimiters, 2, 1) "255" SubStr(Delimiters, 2, 1) "0" SubStr(Delimiters, 2, 1) "150" OrionOffset() $F1::ExitApp $F2::ListVars $F3::Reload Return Exit: Gdip_Shutdown(pToken) ExitApp Return #IfWinActive, Orion ~Delete:: MouseGetPos, MX, MY Tooltip, % "X" MX - XOff " Y" MY - YOff SetTimer, TooltipOff, 10000 Return TooltipOff: Tooltip, SetTimer, TooltipOff, Off Return #IfWinActive ;================================================================================================ ; SCRIPTING AREA BELOW ;================================================================================================ Home:: Reload Return End:: BankAct := "Stringing" If InStr(tExamine := Examine(Yellow SubStr(Delimiters, 1, 1) White), "Bandit") OR InStr(tExamine, "Mena") GoTo, Blackjacking Else If InStr(tExamine, "Bank") GoTo, %BankAct% Return Stringing: ChatboxItem := 1 ChatBoxLen := 1 Loop { If (A_Index = 1) Record := SearchGrid(Record, "Bank", White) SetTimer, Finish, 60000 End := BankStanding(Record, "W-" ((wTemp := RSeed(0, 1)) ? 8 : 16) "-" ((6 > Temp := RSeed(5, 7)) ? 4 : Temp) "-50|D-" RSeed(1, 14) "-" ((RSeed(0, 1)) ? 4 : 6) "|W-" ((wTemp) ? 16 : 8) "-" ((6 > Temp := RSeed(5, 7)) ? 4 : Temp) "-50", ((tTemp := RSeed(0, 1)) ? RSeed(1, 14) : RSeed(15, 28)), ((tTemp) ? RSeed(15, 28) : RSeed(1, 14)), ChatboxItem, ChatboxLen, 0) If (rTemp := RSeed(0, 1)) Record := SearchGrid(Record, "Bank", White) Tooltip, Waiting, XOff - 5, YOff - 52 WaitContains(Inventory(28), Grey, RSeed(500, 700), 1) Tooltip, Wait Over, XOff - 5, YOff - 52 If !(rTemp) Record := SearchGrid(Record, "Bank", White) SetTimer, Finish, Off If (End = 0) { Logout() Pause Sleep 15 } } Return Cutting: ChatboxItem := 2 ChatBoxLen := 3 Loop { If (A_Index = 1) Record := SearchGrid(Record, "Bank", White), tTemp := 1 SetTimer, Finish, 100000 End := BankStanding(Record, "D-" RSeed(2, 28) "-6|W-7-" RSeed(6, 7) "-50", ((tTemp := RSeed(0, 1)) ? 1 : ((RSeed(0, 1)) ? ((RSeed(0, 1)) ? 2 : 5) : RSeed(2, 28))), ((tTemp) ? ((RSeed(0, 1)) ? ((RSeed(0, 1)) ? 2 : 5) : RSeed(2, 28)) : 1), ChatboxItem, ChatboxLen, 1) If (tTemp := RSeed(0, 1)) Record := SearchGrid(Record, "Bank", White) Loop { If InStr(Chatbox(Black), "Youhaverunoutof") Break Sleep % Abs(Round(RandomSkew(Alpha, 150))) + 50 } If !(tTemp) Record := SearchGrid(Record, "Bank", White) SetTimer, Finish, Off If (End = 0) { Logout() Pause Sleep 15 } } Return Finish: fCount++ If (fCount = 3) { Logout() ExitApp Return } hrMovement(Inventory(((tTemp := RSeed(0, 1)) ? ((BankAct = "Cutting") ? 1 : 14) : 28), 1)) Loop { If InStr(QuickText(XOff + 8 "|" YOff + 9 "|" 50 "|" 11, White, Section, 4, 50), "Use") Break Sleep % Round(Abs(RandomSkew(Alpha, 50))) + 30 } Loop { If (A_Index = 1) OR (Floor(A_Index / 4) = Ceil(A_Index / 4)) Send("LButton", Round(Abs(RandomSkew(Alpha, 50))) + 30, Round(Abs(RandomSkew(Alpha, 50))) + 30, Round(Abs(RandomSkew(Alpha, 50))) + 30) If InStr(QuickText(XOff + 8 "|" YOff + 9 "|" 500 "|" 11, White, Section, 4, 150), "->") Break Sleep % Round(Abs(RandomSkew(Alpha, 50))) + 30 } hrMovement(Inventory(((tTemp) ? 28 : ((BankAct = "Cutting") ? 1 : 14)), 1)) Send("LButton", Round(Abs(RandomSkew(Alpha, 50))) + 30, Round(Abs(RandomSkew(Alpha, 50))) + 30, Round(Abs(RandomSkew(Alpha, 50))) + 30) MakeItem(ChatboxItem, ChatboxLen) Sleep % Round(Abs(RandomSkew(Alpha, 50))) + RSeed(2400, 2800) QuickRCMenu(4, 5, 100) Loop { If (sTemp := QuickText(XOff + 205 "|" YOff + 396 "|" 105 "|" 11, Black, Section, 4, 345) = "EnterAmount:") { Sleep % RSeed(600, 1000) Type(RSeed(3, 9) RSeed(0, 9) "{Enter}", RSeed(150, 300)) Break } If (A_TickCount - Start > 4000) Break Sleep % RSeed(300, 600) } GoTo, WaitingforFletch WaitingForFletch: If (BankAct = "Stringing") WaitContains(Inventory(28), Grey, RSeed(500, 700), 1) Else If (BankAct = "Cutting") { Loop { If InStr(Chatbox(Black), "Youhaverunoutof") Break Sleep % Abs(Round(RandomSkew(Alpha, 150))) + 50 } } fCount = 0 GoTo %BankAct% Blackjacking: RemHP := 10 Loop { ooIndex := A_Index HP := HPOrb() If !InStr(NPC := QuickText(XOff + 58 "|" YOff + 9 "|" 60 "|" 11, Yellow, Section, 4, 70), "Mena") AND !InStr(NPC, "Bandit") Return sTemp := 0 Send("RButton", 0, Round(Abs(RandomSkew(Alpha, 50))) + 30, Round(Abs(RandomSkew(Alpha, 50))) + 30) Send("Numpad2", 0, Round(Abs(RandomSkew(Alpha, 50))) + 20, Round(Abs(RandomSkew(Alpha, 50))) + 20) Loop, % Floor((HP - RemHP) / 4) { oIndex := A_Index Send("Numpad2", 0, Round(Abs(RandomSkew(Alpha, 50))) + 20, Round(Abs(RandomSkew(Alpha, 50))) + 20) If (sTemp = 2) Sleep % RSeed(350, 400) Send("LButton", 0, Round(Abs(RandomSkew(Alpha, 50))) + 20, Round(Abs(RandomSkew(Alpha, 50))) + 20) Send("Numpad8", 0, Round(Abs(RandomSkew(Alpha, 50))) + 20, Round(Abs(RandomSkew(Alpha, 50))) + 20) Send("Numpad8", 0, Round(Abs(RandomSkew(Alpha, 50))) + 20, Round(Abs(RandomSkew(Alpha, 50))) + 20) If (RReturn(1, 20) = 1) { Send("Numpad8", 0, Round(Abs(RandomSkew(Alpha, 50))) + 15, Round(Abs(RandomSkew(Alpha, 50))) + 15) Send("Numpad2", 0, Round(Abs(RandomSkew(Alpha, 50))) + 15, Round(Abs(RandomSkew(Alpha, 50))) + 15) } Send("RButton", 0, Round(Abs(RandomSkew(Alpha, 50))) + 30, Round(Abs(RandomSkew(Alpha, 50))) + 30) Send("Numpad2", 0, Round(Abs(RandomSkew(Alpha, 50))) + 20, Round(Abs(RandomSkew(Alpha, 50))) + 20) If !(RSeed(0, 4)) { Send("Numpad2", 0, Round(Abs(RandomSkew(Alpha, 50))) + 15, Round(Abs(RandomSkew(Alpha, 50))) + 15) Send("Numpad8", 0, Round(Abs(RandomSkew(Alpha, 50))) + 15, Round(Abs(RandomSkew(Alpha, 50))) + 15) } Start := A_TickCount Loop { cTemp := QuickText(XOff + 9 "|" YOff + 445 - ((oIndex - 1) * 14) "|" 50 "|" 11, Black, tSection, 3, 70) Temp := QuickText(XOff + 9 "|" YOff + 445 "|" 50 "|" 11, Black, tSection, 3, 70) If InStr(Temp, "Yousm") OR InStr(Temp, "Ican") OR (A_TickCount - Start > 600 + Abs(Round(RandomSkew(Alpha, 100)))) AND !InStr(Temp, "You've") AND (ooIndex > 1) Break 2 Else If InStr(cTemp, "Yourbl") Break Sleep 15 } If (A_Index = Floor((HP - RemHP) / 4)) { Sleep % RSeed(350, 400) Send("LButton", 0, Round(Abs(RandomSkew(Alpha, 50))) + 20, Round(Abs(RandomSkew(Alpha, 50))) + 20) Tooltip, Terminated %ooIndex%, XOff - 5, YOff - 52 Return } If (1 = sTemp := RSeed(1, 2)) Sleep % RSeed(350, 400) } Send("LButton", 0, Round(Abs(RandomSkew(Alpha, 50))) + 20, Round(Abs(RandomSkew(Alpha, 50))) + 20) Send("Numpad8", 0, Round(Abs(RandomSkew(Alpha, 50))) + 20, Round(Abs(RandomSkew(Alpha, 50))) + 20) Send("RButton", 0, Round(Abs(RandomSkew(Alpha, 50))) + 30, Round(Abs(RandomSkew(Alpha, 50))) + 30) If (1 = sTemp := RSeed(1, 2)) GoSub, fPick Send("Numpad2", 0, Round(Abs(RandomSkew(Alpha, 50))) + 20, Round(Abs(RandomSkew(Alpha, 50))) + 20) If (sTemp = 2) GoSub, fPick Send("LButton", 0, Round(Abs(RandomSkew(Alpha, 50))) + 20, Round(Abs(RandomSkew(Alpha, 50))) + 20) Send("Numpad8", 0, Round(Abs(RandomSkew(Alpha, 50))) + 20, Round(Abs(RandomSkew(Alpha, 50))) + 20) Timeout := 0 GoSub, fPick Sleep % RSeed(650, 700) } Return fPick: Start := A_TickCount Loop { If InStr(fTemp := QuickText(XOff + 9 "|" YOff + 445 "|" 50 "|" 11, Black, tSection, 3, 70), "Youpi") OR InStr(fTemp, "Youat") AND (A_TickCount - Start > 575 + Abs(Round(RandomSkew(Alpha, 100)))) AND (Timeout) AND !InStr(fTemp, "You've") Break Sleep 15 } Timeout := 1 MyList .= A_TickCount - Start "`n`n" Return /* ================================================================================================ Library Function Information Below ================================================================================================ Time (Sleep) values are in milliseconds, coordinates/widths/heights are in pixels, and color strings follow "Red Low-Red High-Green Low-Green High-Blue Low-Blue High" (0-255). When calling a function like so: Function(parameters) anything not in quotes inside the ( ) is treated as a variable and therefore passes whatever info it contains to the Function. All variables are blank by default, this will not cause an error. To pass literal information to a function you must format it as a string like so: Function("String because of quotes"). Here Function() receives "String because of quotes" rather than a blank because the quotes created a string and prevented each word from being read as a variable. A thread is a contiguous segment of code, a segment of code is contiguous until it encounters a Return. Functions you'll need: hMovement(X "|" Y "|" W "|" H) moves your mouse to that area where (X, Y) indicates the top left corner of a box with the dimensions W width and H height. The "|" are simply delimiters to separate the numbers. Since my Inventory(Pos), DepositBoxGUI(Pos), BankGUI(Pos), CastSpell(Pos), and Prayer(Pos) each return data for the inputted position in this form you can simply put one of these commands inside hMovement(Prayer("SharpEye")) to move your over the Sharp Eye prayer. Initializing any of these area commands will switch your inventory tab when relevent, for instance hMovement(Prayer("SharpEye")) will switch you to your Prayer tab if it is not open. Sleep % Round(Abs(RandomSkew(Alpha, 125)) + 50) stops the current thread for about 200-300 ms. Change 125 to 50 and 50 to 20 to stop the current thread for 20-80 ms or so. These ranges are unconfined for antiban. Send("LButton", B, D, A) is my send command, it's useful for clicking. LButton is your left mouse button. RButton is your right mouse button. You can put any button name there. B is the time the function waits before pressing down, D is how long the function waits after pressing down to release it, and A is how long the function waits after releasing to let the rest of your thread run. Type(Phrase) types whatever string you put into the phrase parameter. QuickRCMenu(Pos, Len) will right click and then left click the item whose position you input, the length of the list is only relevent to prevent issues with the bottom edge of the screen. InventoryTabs(Pos) can be called to switch your inventory tab. InventoryTabs(1) for instance would switch you to your Combat Options tab automatically. Count from left to right, the first row contains 1-7 and the bottom row contains 8-14. Run it on its own line. Unlike the other area commands, this does not need to be inside hMovement(). More condensed function data is below, the presence of := means the parameter is optional: ~ Action Library Below BankStanding(Record, BankList, Use := 1, UseOn := 28, Make := 1, MakeLen := 1) ; Bankstanding returns Record and requires record to keep track of bank position on screen ; Banklist should contain inputs for QuickBankInteract ; Use should contain the horizontal inventory position of an item to click-use ; UseOn should contain the horizontal inventory position of an item to use the prior item on ; Make should contain the chatbox item you want to interact with using MakeIem() ; MakeLen should contain the total number of items in the chatbox interaction SearchGrid(Previous, Text, Color) ; Previous contains area data in the form: "X-Y|X-Y..." ; Text should contain the text data the examine area should contain for the loop to end ; Color refers to the color of the text the script will read using QuickText OrionOffset() ; XOff and YOff need to be global variables ; All coordinates in any function need to have XOff and YOff ; removed from them in order to be universally compatible ; These are only relevant for Orion, otherwise use LaunchRS() Examine(Colors) ; Returns the specifically colored text currently in your examine area. ChatBox(Pos, Colors) ; Returns the specifically colored text currently in your chat box. Pos 1 is the most recent line of text. HPOrb() ; Returns the amount of HP you have remaining based on Jagex's default HP orb (not Orions) hrMovement(Area, Total := "", Iterations := "", FalseActs := 1) ; Same as hMovement except it will expand the area and click if that click performs no action, ; Or it will right click and then move to close the menu hMovement(Area, Event := "", Total := "", Iterations := "", FalseActs := 1) ; Area := X1|Y1|W|H, Event := Colors|All|False|X1|Y1|X2|Y2 ; Total and Iterations are used to determine the average time a movement should take ; If FalseActs is true then there may be stops between the start and end points ; Returns a new total time, Iterations should be incremented outside this function as well DepositBoxInteract(DList) ; ItemName-Amount-Noted (Boolean, 1 or 0)| ; Redefines global Inventory variable accordingly QuickBankInteract(List) ; Bank must be open prior to start, closes bank and waits for close after execution. ; List should contain any number of: ; D - Inventory Position Horizontal - Right Click Menu Position ; W - Bank GUI Position Horizontal & at top row - Right Click Menu Position - Threshold (Optional, if the item drops below this the function returns a 1) ; DB - Deposit Box GUI Position - Right Click Menu Position ; Each interaction should be separated by |, can occur in any order. ; EX: QuickBankInteract("D-9-5|W-6-5-2000|D-3-8|W-20-6|DB-8-5") BankInteract(DList := 0, WList := "") ; BankInteract("OCR Examine", "OCR Subtext", "Shrimps-All|Cod-All-1|Green Partyhat-1|Arrow Shaft-5-1|Herring-10-1", "Shrimps-10-0-1|Green Partyhat-1|Cod-10-0-1|Coins-AB1-69-1") ; DList := "ItemName-Amount-Noted|ItemName-Amount-Noted|..." ; WList := "ItemName-Amount-Threshold-Noted|ItemName-Amount-Threshold-Noted|..." ; Returns a binary string where 1s indicate triggered thresholds and 0s are above threshold level, in WList's order. FLInteract(Player, Message := "", Delete := 0) ; Player should contain the player's name whom you want to interact with, with appropriate spaces ; If they are not in your global Friendslist variable then they will be added to your FL ingame and to the variable ; Message should contain the message you want to send them, or left blank if you do not wish to send them anything ; Delete should be true if you wish to delete them (after sending the message) RCMenu(Opt, Colors := "", Stop := 50, Length := "", Contains := 0) ; Opt must be set to the text of the menu item you wish to click or the text the item contains if Contains is true ; Colors should contain the colors of the text as passed to the QuickText function ; Stop is distance w/o text to stop after, Length is width for QuickText, Contains is to choose an option that contains the phrase ; Optimize efficiency by reading the least amount of text. Want to find "Fire" to cook? Fire is cyan LaunchRS(YO := 0, W := 69) ; Launches RS in your default browser if it is not already open and defines XOff and YOff ; YO should be the previous OY return in order to minimize search time, W = Login world ; Orion must be launched manually and define X/YOff with the OrionOffset() function Login(User, Pass) ; Waits until the first login button exists then... ; Types user name {Enter} Pass {Enter} and clicks the Click Here to Play button ; Ends when the "Click Here To Play" button disappears Logout() ; Logs you out by clicking the 'Logout' button in the 'Logout' tab ; Ceases attempts once the white text of the "Existing Users" button appears QuickText(Image, Colors, iSection, Space := 1, Stop := "", StartColor := 0) ; Returns the text within an image, WITHOUT SPACES. ; Image requires "X|Y|W|H", Delimiters: "|-", Data: OCR Section dumped into a var, Space: Maximum space between words to keep text color constant ; Stop: Streak of no-text pixels to cease searching after Type(Phrase, MS := "") ; Types your phrase, add {Enter} or ¤ to send Enter keystrokes ; MS is the time to type within, it is a rough estimate ; MS should be based off of the number of characters within Phrase to constitute "human-like typing" Send(Char, B := 0, D := 0, A := 0) ; Sends the character Char, waits B before pushing down, waits D before releasing, and waits A before exiting WaitContains(Image, Colors, tSleep := 0, All := 0, vNot := 0) ; Waits tSleep amount of time for the area you input to the Image parameter to have Color(s) ; The color requirement is applied to the first pixel by default, all pixels if All is true and looks for colors outside your range if vNot is true. RecordFL() ; Puts your entire Friends List into the Friendslist global variable and writes it to your .ini RecordInv() ; Records your inventory by mousing over your items and reading the Examine area's text. ; Records amounts by reading the little text in the upper left corner of the item ; Returns a list of items in the form "AbyssalWhip|10+Salmon|100000+Coins" w/o spaces where #+ indicates a stackable or noted item ~ Area Library Below QuickRCMenu(Pos, Len := 4) ; Pos is the position you want to retrieve, top item is 1 ; Len is the length of the list (all clickable options) ; Right clicks to open the menu, then moves and clicks your chosen option DepositBoxGUI(Pos, Check := 0) ; Returns the position of an item in the Deposit Box GUI ingame. Horizontal Pos only. ; Section = OCR Subtext to return the amount in that position. ; Returns X1 | Y1 | Width | Height | Amount BankGUI(Pos, Check := 0) ; Returns the position of an item in the Banking GUI ingame. Horizontal Pos only. ; Section = OCR Subtext to return the amount in that position. ; Returns X1 | Y1 | Width | Height | Amount CastSpell(Pos) ; Pos is either the Verical position of the spell of the spell name ; Returns X1 | Y1 | Width | Height and switches to your spell tab InventoryTabs(Pos) ; Pos is the horizontal position of the inventory tab, top row is 1-7 then 8-14 or the exact tab title ; No return value, switches your tab and does not release until switch is confirmed w/ red color shift Inventory(Pos, Type := 0, Check := 0) ; Type is Vertical by default, Type = 1 for horizontal, Amount of item is returned if Section isn't blank ; Returns X1 | Y1 | W | H | Amount Prayer(Pos) ; Pos is either the horizontal position or the exact name of the prayer ; Returns X1 | Y1 | W | H and switches to the prayer tab ~ General Library Below RandomBezier( X0, Y0, Xf, Yf, O="" ) ; MasterFocus's Mouse Movement Function. Do not use for mouse movement. mousemove(options) ; Wicked's Mouse Movement Function. Distance(X1, Y1, X2, Y2) ; Calculates the distance between two points. RandomSkew(Alpha, Scale) ; A boundless random distribution. Alpha should be global + in your seed. RandomNormal(ByRef X, ByRef Y, Dev:=1) ; Used by RandomSkew. AreaContains(Image, Colors, All := 0, vNot := 0) ; Image = X1 | Y1 | W | H, Colors = R1-R2-G1-G2-B1-B2|... ; If All is true then all the pixels must be within the color range to return true. ; If Not is true then the function returns true when it finds at least one pixel with values outside the range. ; Returns 1 if true, 0 if false. RSeed(Min, Max, Set := 0) ; A modified random function using your "Seed" in the WRandomVertex function. ; Set = 1 to use the other set of values in the Seed. ; Returns a value between Min and Max, does not support decimals GSeed(Delimiter) ;Seed := Vertex|Exponent|Increment|Skew creates around 5.25m potentially distinct options, odds are seed1, evens are seed2 ; Vertex1 |Vertex2 |Exponent1 |Exponent2 |Increment1 |Increment2 |Skew1 |Skew2 |Alpha RReturn(Min, Max) ; Uses the built-in random function to directly return a random value. ; Supports decimals for Min and Max. ; http://www.autohotkey.com/board/topic/99251-weighted-random-functions-asymmetric-parabola-and-formula/ WRandomVertex(RangeMin, RangeMax, Vertex := "", Exponent := 2, Increment := .1, Skew := 0, Probability := "H", Display := 0) PAmount(Amount) ; Translates a string like 100k to 100000 as its return value RPLInstance(List, Instance, Delimiter, Replacement := "", Amnt := 1) ; Takes a list as input, then replaces Amnt number of Instance with Replacement. ; Returns the list after changes while preserving its delimiters. InString(String, Item, Delimiter) ; Searches a list (string) for Item as separated by delimiter ; Returns True if a list item is found, false otherwise ReturnPos(String, Pos, Delimiter) ; Goes through a list (string) as separated by Delimiter and returns the item at position Pos CountVarBy(Var, Delimiter) ; Counts the items in a list (var) based on Delimiter and returns the result MultiplyString(String, Multiple) ; Takes a string and returns Multiple contiguous instances of it as a new string InitialMatching(Pixel, Colors, Pos := "") ; DelimiterList := "|-" ; Ex. 220-230-210-215-230-235|110-115-160-170-165-185 ; Returns 1 (Pos found at on list) if your pixel matches the colors on color list, if Pos is defined then only searches Pos of the list ColorMatch(Pixel, Match, Delimiter) ; Returns 1 if the Pixel's color value is within the match parameters (which are separated by delimiter) AverageColor(Area, Colors := "", Tolerance := 32, Test := 0) ; Area = X1 | Y1 | W | H ; Returns the average color of an area if Test is true, Returns true or false if the average color of the area is within Tolerance of Colors ReadKey(File, SectionName, Colors, Stop := 10) ; This needs to reorder the .ini section too, so I don't need to do it manually ; ReadKey("Key.png", "Data.ini", "New", "1-255-1-255-1-255", "|-") ; Requires .ini sort. QuickText() does not work with a misordered .ini file. TabTest(Pos) ; Checks for the color red in the tab in Pos to see if it's open, returns Pos if it's red. FloatingBinMatch(Bin1, Bin2, Increment := 1) ; You should never have to use this again. Forgot what it does. FLMatch(YPos, Search, Index) ; Tries to match a name on your Friends list if they're online NestedSearchPos(String, Search, 2Search := 0, 2Pos := 0) ; You should never have to use this again. Forgot what it does. */