The Wiki for Tale 7 is in read-only mode and is available for archival and reference purposes only. Please visit the current Tale 11 Wiki in the meantime.
If you have any issues with this Wiki, please post in #wiki-editing on Discord or contact Brad in-game.
Difference between revisions of "User:Safa"
From ATITD7
Jump to navigationJump to searchLine 2,172: | Line 2,172: | ||
<tr> | <tr> | ||
− | <td><font style="font-size:13px">[https://drive.google.com/open?id=0Bydp4KA9MLkKdk1nNUJvZDVDeGs Download] [[Image:Automato.png|15px|Automato_Logo]] Moves sculpture pieces with keystrokes. | + | <td><font style="font-size:13px">[https://drive.google.com/open?id=0Bydp4KA9MLkKdk1nNUJvZDVDeGs Download] [[Image:Automato.png|15px|Automato_Logo]] Moves sculpture pieces with keystrokes. Executes pre-made recipes.</font></td> |
</tr> | </tr> | ||
Revision as of 18:03, 22 September 2016
ATITD Discord Server http://www.discord.me/atitd / https://discord.gg/0kvxEfeM1sBBhy6H |
Macros/Scripts
zemples.lua
Download Reads contents of multiple warehouses and makes a list of all raeli tiles. |
--zStock.lua dofile("common.inc"); --Exit Loop? is_done = false; askText = singleLine([[Hit SHIFT to begin.]]); function doit() askForWindow(askText); askForFocus(); Run(); end --Color List color = { "Alice Blue", "Amethyst", "Antique White", "Aqua", "Aquamarine", "Azure", "Baker Miller Pink", "Banana", "Barn Red", "Beet", "Beige", "Bisque", "Black", "Blanched Almond", "Blaze Orange", "Blue", "Blue Violet", "Boysenberry", "Bright Pink", "Brown", "Burgundy Red", "Burly Wood", "Burnt Sienna", "Burnt Umber", "Cadet Blue", "Cadmium Orange", "Cadmium Yellow", "Carrot", "Chartreuse", "Chocolate", "Cobalt Blue", "Cobalt Green", "Coral", "Cornflower Blue", "Cornsilk", "Crimson", "Dark Blue", "Dark Cyan", "Dark Golden Rod", "Dark Green", "Dark Grey", "Dark Jungle Green", "Dark Khaki", "Dark Magenta", "Dark Olive Green", "Dark Orange", "Dark Orchid", "Dark Red", "Dark Salmon", "Dark Scarlet", "Dark Sea Green", "Dark Sienna", "Dark Slate Blue", "Dark Slate Grey", "Dark Turquoise", "Dark Violet", "Deep Pink", "Deep Sky Blue", "Dim Grey", "Dodger Blue", "Duke Blue", "Eggshell White", "Emerald Green", "Feldspar", "Fire Brick", "Floral White", "Forest Green", "Fuchsia", "Gainsboro", "Ghost White", "Gold", "Golden Rod", "Green", "Green Yellow", "Grey", "Honey Dew", "Hot Pink", "Imperial Blue", "Indian Red", "Indigo", "Ivory", "Khaki", "Lavender", "Lavender Blush", "Lawn Green", "Lemon Chiffon", "Licorice", "Light Blue", "Light Coral", "Light Cyan", "Light Golden Rod Yellow", "Light Green", "Light Grey", "Light Pink", "Light Salmon", "Light Sea Green", "Light Sky Blue", "Light Slate Blue", "Light Slate Grey", "Light Steel Blue", "Light Yellow", "Lime", "Lime Green", "Linen", "Maroon", "Medium Aqua Marine", "Medium Blue", "Medium Orchid", "Medium Purple", "Medium Sea Green", "Medium Slate Blue", "Medium Spring Green", "Medium Turquoise", "Medium Violet Red", "Melon", "Midnight Blue", "Mint Cream", "Misty Rose", "Moccasin", "Navajo White", "Navy", "Old Lace", "Olive", "Olive Drab", "Orange", "Orange Red", "Orchid", "Oxford Blue", "Pale Golden Rod", "Pale Green", "Pale Turquoise", "Pale Violet Red", "Papaya Whip", "Peach Puff", "Peacock", "Persian Indigo", "Persian Pink", "Peru", "Pink", "Plum", "Powder Blue", "Prussian Blue", "Purple", "Raw Sienna", "Red", "Red Devil", "Rich Black", "Rosy Brown", "Royal Blue", "Ruby Red", "Saddle Brown", "Salmon", "Sandy Brown", "Sangria", "Sap Green", "Sea Green", "Sea Shell", "Seal Brown", "Sienna", "Silver", "Sky Blue", "Slate Blue", "Slate Grey", "Smokey Black", "Snow", "Spring Green", "Steel Blue", "Steel Pink", "Tan", "Teal", "Thistle", "Tomato", "Turquoise", "Tyrian Purple", "Violet", "Violet Red", "Wheat", "White", "White Smoke", "Yellow", "Yellow Green", "Zaffre" }; colorcode = { "-369820161", "-1721316097", "-85207041", "16777215", "-2114061057", "-1209938433", "-7229441", "-472950785", "2081030911", "-1908896001", "-168436481", "-18103297", "16843263", "-1323521", "-10026753", "65535", "-1976835329", "-2026741505", "-16744449", "-1523963137", "-2147475201", "-558331905", "-1976168449", "-1976359681", "1604231423", "-10419201", "-6745345", "-529324801", "2147418367", "-764862721", "1029286911", "1032929535", "-8433409", "1839590655", "-467713", "-602653441", "35839", "9145343", "-1199174657", "6553855", "-1448498689", "438575615", "-1112052737", "-1962898433", "1433087999", "-7601921", "-1724723969", "-1827267329", "-376014081", "1443043839", "-1883467777", "1007949055", "-2092658177", "793726975", "13554175", "-1811885057", "-15428609", "12582911", "1768516095", "512819199", "40191", "-51983873", "13195263", "-778930689", "-1306385665", "-331521", "579543807", "-16711681", "-589505281", "-117899265", "-2686721", "-626712321", "8388863", "-1375784961", "-2139062017", "-251662081", "-9849601", "2332159", "-849584897", "1226271487", "-3841", "-253326081", "-421070081", "-985601", "2096890111", "-340481", "437326079", "-1378294017", "-260013825", "-520093697", "-84225281", "-1863413505", "-741092353", "-4800001", "-37781505", "548580095", "-2016478465", "-2072969217", "2005441023", "-1682251777", "-7937", "16711935", "852308735", "-84875521", "-2127952385", "1724754687", "52735", "-1168780289", "-1821320193", "1018393087", "2070474495", "16423679", "1170325503", "-1623423233", "-475502081", "421097727", "-167773441", "-1777153", "-1788417", "-2183681", "33023", "-34216193", "-2139094785", "1804477439", "-5963521", "-12254977", "-630139137", "2181119", "-286741761", "-1728341761", "-1293487617", "-613379073", "-1059329", "-2442753", "866241023", "840071935", "-142622977", "-846905345", "-4142081", "-576659969", "-1327438081", "3232767", "-2147450625", "-949938945", "-16776961", "-2046750209", "4210943", "-1131442177", "1097458175", "-1693376769", "-1958407169", "-92245249", "-190553857", "-1845490945", "813700351", "780883967", "-659713", "840176895", "-1605227009", "-808014337", "-2016482305", "1784335871", "1887473919", "269224191", "-328961", "16744447", "1182971135", "-869046529", "-759919361", "8421631", "-658515713", "-10270721", "1088475391", "1711422719", "-293409025", "-1623423233", "-169954305", "-1", "-168430081", "-65281", "-1697828097", "1353983" }; function clipboardResult() clip1 = (numbers[1] ..'\n'.. numbers[2] ..'\n'.. numbers[3] ..'\n'.. numbers[4] ..'\n'.. numbers[5] ..'\n'.. numbers[6] ..'\n'.. numbers[7] ..'\n'.. numbers[8] ..'\n'.. numbers[9] ..'\n'.. numbers[10] ..'\n'.. numbers[11] ..'\n'.. numbers[12] ..'\n'.. numbers[13] ..'\n'.. numbers[14] ..'\n'.. numbers[15] ..'\n'.. numbers[16] ..'\n'.. numbers[17] ..'\n'.. numbers[18] ..'\n'.. numbers[19] ..'\n'.. numbers[20] ..'\n'.. numbers[21] ..'\n'.. numbers[22] ..'\n'.. numbers[23] ..'\n'.. numbers[24] ..'\n'.. numbers[25] ..'\n'.. numbers[26] ..'\n'.. numbers[27] ..'\n'.. numbers[28] ..'\n'.. numbers[29] ..'\n'.. numbers[30] ..'\n'.. numbers[31] ..'\n'.. numbers[32] ..'\n'.. numbers[33] ..'\n'.. numbers[34] ..'\n'.. numbers[35] ..'\n'.. numbers[36] ..'\n'.. numbers[37] ..'\n'.. numbers[38] ..'\n'.. numbers[39] ..'\n'.. numbers[40] ..'\n'.. numbers[41] ..'\n'.. numbers[42] ..'\n'.. numbers[43] ..'\n'.. numbers[44] ..'\n'.. numbers[45] ..'\n'.. numbers[46] ..'\n'.. numbers[47] ..'\n'.. numbers[48] ..'\n'.. numbers[49] ..'\n'.. numbers[50] ..'\n'.. numbers[51] ..'\n'.. numbers[52] ..'\n'.. numbers[53] ..'\n'.. numbers[54] ..'\n'.. numbers[55] ..'\n'.. numbers[56] ..'\n'.. numbers[57] ..'\n'.. numbers[58] ..'\n'.. numbers[59] ..'\n'.. numbers[60] ..'\n'.. numbers[61] ..'\n'.. numbers[62] ..'\n'.. numbers[63] ..'\n'.. numbers[64] ..'\n'.. numbers[65] ..'\n'.. numbers[66] ..'\n'.. numbers[67] ..'\n'.. numbers[68] ..'\n'.. numbers[69] ..'\n'.. numbers[70] ..'\n'.. numbers[71] ..'\n'.. numbers[72] ..'\n'.. numbers[73] ..'\n'.. numbers[74] ..'\n'.. numbers[75]); clip2 = (numbers[76] ..'\n'.. numbers[77] ..'\n'.. numbers[78] ..'\n'.. numbers[79] ..'\n'.. numbers[80] ..'\n'.. numbers[81] ..'\n'.. numbers[82] ..'\n'.. numbers[83] ..'\n'.. numbers[84] ..'\n'.. numbers[85] ..'\n'.. numbers[86] ..'\n'.. numbers[87] ..'\n'.. numbers[88] ..'\n'.. numbers[89] ..'\n'.. numbers[90] ..'\n'.. numbers[91] ..'\n'.. numbers[92] ..'\n'.. numbers[93] ..'\n'.. numbers[94] ..'\n'.. numbers[95] ..'\n'.. numbers[96] ..'\n'.. numbers[97] ..'\n'.. numbers[98] ..'\n'.. numbers[99] ..'\n'.. numbers[100] ..'\n'.. numbers[101] ..'\n'.. numbers[102] ..'\n'.. numbers[103] ..'\n'.. numbers[104] ..'\n'.. numbers[105] ..'\n'.. numbers[106] ..'\n'.. numbers[107] ..'\n'.. numbers[108] ..'\n'.. numbers[109] ..'\n'.. numbers[110] ..'\n'.. numbers[111] ..'\n'.. numbers[112] ..'\n'.. numbers[113] ..'\n'.. numbers[114] ..'\n'.. numbers[115] ..'\n'.. numbers[116] ..'\n'.. numbers[117] ..'\n'.. numbers[118] ..'\n'.. numbers[119] ..'\n'.. numbers[120] ..'\n'.. numbers[121] ..'\n'.. numbers[122] ..'\n'.. numbers[123] ..'\n'.. numbers[124] ..'\n'.. numbers[125] ..'\n'.. numbers[126] ..'\n'.. numbers[127] ..'\n'.. numbers[128] ..'\n'.. numbers[129] ..'\n'.. numbers[130] ..'\n'.. numbers[131] ..'\n'.. numbers[132] ..'\n'.. numbers[133] ..'\n'.. numbers[134] ..'\n'.. numbers[135] ..'\n'.. numbers[136] ..'\n'.. numbers[137] ..'\n'.. numbers[138] ..'\n'.. numbers[139] ..'\n'.. numbers[140] ..'\n'.. numbers[141] ..'\n'.. numbers[142] ..'\n'.. numbers[143] ..'\n'.. numbers[144] ..'\n'.. numbers[145]); clip3 = (numbers[146] ..'\n'.. numbers[147] ..'\n'.. numbers[148] ..'\n'.. numbers[149] ..'\n'.. numbers[150] ..'\n'.. numbers[151] ..'\n'.. numbers[152] ..'\n'.. numbers[153] ..'\n'.. numbers[154] ..'\n'.. numbers[155] ..'\n'.. numbers[156] ..'\n'.. numbers[157] ..'\n'.. numbers[158] ..'\n'.. numbers[159] ..'\n'.. numbers[160] ..'\n'.. numbers[161] ..'\n'.. numbers[162] ..'\n'.. numbers[163] ..'\n'.. numbers[164] ..'\n'.. numbers[165] ..'\n'.. numbers[166] ..'\n'.. numbers[167] ..'\n'.. numbers[168] ..'\n'.. numbers[169] ..'\n'.. numbers[170] ..'\n'.. numbers[171] ..'\n'.. numbers[172] ..'\n'.. numbers[173] ..'\n'.. numbers[174] ..'\n'.. numbers[175] ..'\n'.. numbers[176] ..'\n'.. numbers[177] ..'\n'.. numbers[178] ..'\n'.. numbers[179] ..'\n'.. numbers[180] ..'\n'.. numbers[181] ..'\n'.. numbers[182]); lsClipboardSet(clip1 ..'\n'.. clip2 ..'\n'.. clip3); end --Inventory numbers = {}; for i=1,182 do numbers[i] = 0; end ui_dark=993146367; ui_mid=1717067007; ui_light=-437918209; noDataX = 20; log = {}; logcolor = {}; wh_count = 0; --SUM of all tiles total = 0; function getTotal() total = 0; if #numbers > 1 then for i =1,#numbers do total= total + numbers[i]; end end end function formatZemplestxt() File = io.open("zemples.txt","w+"); File:close(); end function zemplestxt() formatZemplestxt() File = io.open("zemples.txt","a+"); File:write("-- Quantity of colors from 1 Alice Blue to 182 Zaffre --\n"); for i =1,182 do File:write(numbers[i] .."\n"); end File:write("-- Console Log --\n"); for i =1,#log do File:write(log[i] .."\n"); end File:close(); end function scaleY(y) return a[1]/(350/y); end function scaleX(x) return a[0]/(300/x); end function check() for i=1,182 do name = string.find(clipboard, "Raeli Tiles:".. color[i]); if name then --Problem colors if i == 16 then hold = string.sub(clipboard, name + 17, name + 22); lsPrintln(hold); end --Blue if i == 73 then hold = string.sub(clipboard, name + 18, name + 23); lsPrintln(hold); end --Green if i == 83 then hold = string.sub(clipboard, name + 21, name + 25); lsPrintln(hold); end --Lavender if i == 102 then hold = string.sub(clipboard, name + 17, name + 21); lsPrintln(hold); end --Lime if i == 145 then hold = string.sub(clipboard, name + 16, name + 21); lsPrintln(hold); end --Red if i == 175 then hold = string.sub(clipboard, name + 19, name + 21); lsPrintln(hold); end --Violet if i == 178 then hold = string.sub(clipboard, name + 18, name + 22); lsPrintln(hold); end --White if i == 180 then hold = string.sub(clipboard, name + 19, name + 23); lsPrintln(hold); end --Yellow if hold == "Violet" then hold = nil; elseif hold == "Yellow" then hold = nil; elseif hold == "Blush" then hold = nil; elseif hold == "Green" then hold = nil; elseif hold == "Devil" then hold = nil; elseif hold == "Red" then hold = nil; elseif hold == "Smoke" then hold = nil; elseif hold == "Green" then hold = nil; else num = string.sub(clipboard, name - 6, name - 2); num = string.gsub(num, " ", ""); numbers[i] = numbers[i] + num; space = ""; if string.len(numbers[i]) == 1 then space ="00000"; elseif string.len(numbers[i]) == 2 then space ="0000"; elseif string.len(numbers[i]) == 3 then space ="000"; elseif string.len(numbers[i]) == 4 then space ="00"; elseif string.len(numbers[i]) == 5 then space ="0"; else space =""; end lsPrintln("Tile: ".. space .. numbers[i] .." Color: ".. color[i]); log[#log + 1] ="Tile: ".. space .. numbers[i] .." Color: ".. color[i]; logcolor[#logcolor + 1]= colorcode[i]; end else --lsPrintln("Checking: ".. color[i] .." Num: 0"); end end end function Run() formatZemplestxt(); --Loop while not is_done do checkBreak(); a = lsGetWindowSize(); lsDisplaySystemSprite(1, 0, 0, 0, a[0], a[1], ui_mid); --BG Color lsDisplaySystemSprite(1, 0, 0, 1, a[0], a[1]/8.75, ui_dark); lsDisplaySystemSprite(1, 0, a[1] - 10, 4, a[0], a[1]/35, ui_dark); if wh_count =="Saved to clipboard and zemples.txt" then lsPrint(0, a[1] - 11, 6, scaleX(0.6), scaleX(0.6), ui_mid, wh_count); clipboardResult(); elseif wh_count == 0 then else lsPrint(scaleX(135), a[1] - 11, 6, scaleX(0.5), scaleX(0.5), ui_mid, wh_count .."/47"); progress = (a[0] * wh_count) / 100; lsDisplaySystemSprite(1, 0, a[1] - 10, 5, progress * 2, a[1]/35, ui_light); end getTotal(); if total > 0 then x = 0; y =scaleY(10); colorplace = 0; colorWidth = 0; for i =1,#numbers do per = (numbers[i]*100) /total; percent =string.sub(per, 0, 4); colorWidth = (a[0] * percent) / 100; lsDisplaySystemSprite(1, x, y, 2, colorWidth, a[1]/17.5, colorcode[i]); colorplace = colorplace + colorWidth; x = colorplace; end else if (a[0] - 100) == noDataX then noDataDirection ="left"; end if noDataX == 0 then noDataDirection ="right"; end if noDataDirection == "left" then noDataX = noDataX - 1; else noDataX = noDataX + 1; end random = math.random(0,90000); if random > 4500 then redflash =ui_dark else redflash=-1962916353; end lsPrint(noDataX + scaleY(30), 15, 3, scaleY(0.5), scaleY(0.5), ui_dark, "No Data"); lsDisplaySystemSprite(1, noDataX, scaleY(10), 2, a[1]/3.5, a[1]/17.5, ui_light); lsDisplaySystemSprite(1, scaleX(90), scaleY(50), 2, scaleX(50), scaleY(50), ui_light); lsDisplaySystemSprite(1, scaleX(140), scaleY(70), 2, scaleX(10), scaleY(30), redflash); lsDisplaySystemSprite(1, scaleX(150), scaleY(50), 2, scaleX(50), scaleY(50), ui_light); lsDisplaySystemSprite(1, scaleX(90), scaleY(105), 2, scaleX(110), scaleY(120), ui_light); lsPrint(scaleX(10), scaleY(250), 2, scaleX(0.6), scaleX(0.6), ui_light, "Use middle mouse click to scan each warehouse"); end if #log > 1 then y = scaleY(50); xyz = #log; for i=1,#log do star = string.find(log[xyz], "*"); if star then lsPrint(0, y, 2, scaleX(0.5), scaleX(0.5), ui_light, log[xyz]); lsDisplaySystemSprite(1, 0, y + scaleY(2), 2, scaleX(220), scaleY(8), logcolor[xyz]); else lsPrint(0, y, 2, scaleX(0.5), scaleX(0.5), ui_light, log[xyz]); lsDisplaySystemSprite(1, scaleX(90), y + scaleY(2), 2, scaleX(8), scaleY(8), logcolor[xyz]); end y = y + scaleX(10); xyz = xyz - 1; end end if lsMouseIsDown(2) then mouse_x, mouse_y = srMousePos(); srClickMouseNoMove(mouse_x, mouse_y); lsSleep(100); srReadScreen(); utility = findText("Utility"); if utility then srClickMouseNoMove(utility[0] + 10, utility[1]); lsSleep(100); srReadScreen(); copy = findText("Copy"); if copy then srClickMouseNoMove(copy[0] + 10, copy[1]); lsSleep(100); clipboard = lsClipboardGet(); log[#log + 1]="* Contents of ".. string.sub(clipboard, 0, 16) .."at ".. string.sub(clipboard, 42, 52) logcolor[#logcolor + 1] = ui_dark; --lsClipboardSet(clipboard); check(); zemplestxt(); if wh_count == 46 then wh_count = "Saved to clipboard and zemples.txt" else wh_count = wh_count + 1; end else lsPlaySound("fail.wav"); end else lsPlaySound("fail.wav"); end end if lsKeyDown("c") then clipboard = lsClipboardGet(); log[#log + 1]="* Contents of ".. string.sub(clipboard, 0, 16) .."at ".. string.sub(clipboard, 42, 52) logcolor[#logcolor + 1] = ui_dark; --lsClipboardSet(clipboard); check(); zemplestxt(); lsSleep(300); end if lsKeyDown("q") then is_done = 1; end lsDoFrame(); lsSleep(10); end end |
chariot_stop.lua
Download Travels to desired destination using shortest path when it is free. |
--Chariot Stop v1.1 by Safa --Thanks to Dreger for getCurrentRegion() function. --This macro will travel to desired destination using shortest path when possible. It has to read your location from clock up top. (Use /clockloc command to open it if missing.) Do NOT walk while macro is running. Do NOT pin chariot windows. You can chat or minimize VT if you wish. Please re-open Chariot window after travel. dofile("screen_reader_common.inc"); dofile("ui_utils.inc"); dofile("common.inc"); --Introduction askForWindow("Chariot_Stop v1.1 (by Safa) This macro will travel to desired destination using shortest path when possible. It has to read your location from clock up top. (Use /clockloc command to open it if missing.) Do NOT walk while macro is running. Do NOT pin chariot windows. You can chat or minimize VT if you wish. Please re-open Chariot window after travel.") ; --debugging function spacer() lsPrintln(" "); lsPrintln(" "); lsPrintln(" "); end function clearconsole() for i =1,20 do lsPrintln(" "); end end clearconsole(); -- / debugging function checkCS() -- Loop if CS window not present. srReadScreen(); cs = srFindImage("chariot/cs.png", 5000); while not cs do srReadScreen(); cs = srFindImage("chariot/cs.png", 5000); sleepWithStatus(4000, "Can't see Chariot Window!"); lsPlaySound("AnvilHit.wav"); end end -- returns the text string for the current region from the clock window or nil if not found. function getCurrentRegion() lsPrintln("Starting getCurrentRegion"); srReadScreen(); anchor = findText("Year"); if(not anchor) then anchor = findText("ar 1"); end if(not anchor) then anchor = findText("ar 2"); end if(not anchor) then anchor = findText("ar 3"); end if(not anchor) then anchor = findText("ar 4"); end if(not anchor) then anchor = findText("ar 5"); end if(not anchor) then anchor = findText("ar 6"); end if(not anchor) then anchor = findText("ar 7"); end if(not anchor) then anchor = findText("ar 8"); end if(not anchor) then anchor = findText("ar 9"); end if anchor then window = getWindowBorders(anchor[0], anchor[1]); lines = findAllText(nil, window, NOPIN); regionCoords = table.concat(lines[2], ","); regionAndCoords = string.sub(regionCoords,string.find(regionCoords,",") + 1); region = string.sub(regionAndCoords, 0, string.find(regionAndCoords,":") - 1); return region; end return nil; end -- All Regions regions = {"Cat's Claw Ridge", "Cradle of Sun", "Desert of Nomads", "Desert of Shades", "Eastern Grounds", "Four Corners", "Lake of Reeds", "Memphis", "Midland Valley", "Old Egypt", "River Plains", "Seven Lakes", "Sinai", "South Egypt", "Valley of Kings"}; -- Adjacents toCCR = {"Old Egypt", "Valley of Kings", "X"}; toCOS = {"Seven Lakes", "X", "X"}; toDON = {"Lake of Reeds", "Old Egypt", "Sinai"}; toDOS = {"River Plains", "Valley of Kings", "X"}; toEG = {"South Egypt", "X", "X"}; toFC = {"Midland Valley","X","X"}; toLR = {"Desert of Nomads", "Sinai", "X"}; toM = {"South Egypt", "X", "X"}; toMV = {"Four Corners", "Old Egypt","River Plains"}; toOE = {"Cat's Claw Ridge", "Desert of Nomads", "Midland Valley"}; toRP = {"Desert of Shades","Midland Valley","Seven Lakes"}; to7L = {"Cradle of Sun", "River Plains", "South Egypt"}; toS = {"Desert of Nomads", "Lake of Reeds"}; toSE = {"Eastern Grounds", "Memphis", "Seven Lakes"}; toVOK = {"Cat's Claw Ridge", "Desert of Shades", "X"}; --Adjacent Distances --CCR function CCR() far1 = {"Valley of Kings", "Old Egypt"}; far2 = {"Midland Valley", "Desert of Nomads"}; far3 = {"Lake of Reeds", "Sinai", "River Plains", "Four Corners"}; far4 = {"Seven Lakes"}; far5 = {"South Egypt", "Cradle of Sun"}; far6 = {"Memphis", "Eastern Grounds"}; end --COS function COS() far1 = {"Seven Lakes"}; far2 = {"River Plains", "South Egypt"}; far3 = {"Desert of Shades", "Midland Valley", "Memphis", "Eastern Grounds"}; far4 = {"Four Corners", "Valley of Kings", "Old Egypt"}; far5 = {"Cat's Claw Ridge", "Desert of Nomads"}; far6 = {"Lake of Reeds", "Sinai"}; end --DON function DON() far1 = {"Lake of Reeds", "Sinai", "Old Egypt"}; far2 = {"Cat's Claw Ridge", "Midland Valley"}; far3 = {"Valley of Kings", "Four Corners", "River Plains"}; far4 = {"Desert of Shades", "Seven Lakes"}; far5 = {"Cradle of Sun", "South Egypt"}; far6 = {"Memphis", "Eastern Grounds"}; end --DOS function DOS() far1 = {"Valley of Kings", "River Plains"}; far2 = {"Cat's Claw Ridge", "Midland Valley", "Seven Lakes"}; far3 = {"Old Egypt", "Four Corners", "Cradle of Sun", "South Egypt"}; far4 = {"Desert of Nomads", "Memphis", "Eastern Grounds"}; far5 = {"Lake of Reeds", "Sinai"}; end --EG function EG() far1 = {"South Egypt"}; far2 = {"Memphis", "Seven Lakes"}; far3 = {"Cradle of Sun", "River Plains"}; far4 = {"Desert of Shades", "Midland Valley"}; far5 = {"Valley of Kings", "Four Corners", "Old Egypt"}; far6 = {"Cat's Claw Ridge", "Desert of Nomads"}; far7 = {"Lake of Reeds", "Sinai"}; end --FC function FC() far1 = {"Midland Valley"}; far2 = {"Old Egypt", "River Plains"}; far3 = {"Cat's Claw Ridge", "Desert of Nomads", "Desert of Shades", "Seven Lakes"}; far4 = {"Lake of Reeds", "Sinai", "Valley of Kings", "Cradle of Sun"}; far5 = {"South Egypt"}; far6 = {"Memphis", "Eastern Grounds"}; end --LR function LR() far1 = {"Desert of Nomads", "Sinai"}; far2 = {"Old Egypt"}; far3 = {"Cat's Claw Ridge", "Midland Valley"}; far4 = {"Valley of Kings", "Four Corners", "River Plains"}; far5 = {"Desert of Shades", "Seven Lakes"}; far6 = {"Cradle of Sun", "South Egypt"}; far7 = {"Memphis", "Eastern Grounds"}; end --M function M() far1 = {"South Egypt"}; far2 = {"Eastern Grounds", "Seven Lakes"}; far3 = {"Cradle of Sun", "River Plains",}; far4 = {"Desert of Shades", "Midland Valley"}; far5 = {"Valley of Kings", "Four Corners", "Old Egypt"}; far6 = {"Cat's Claw Ridge", "Desert of Nomads"}; far7 = {"Lake of Reeds", "Sinai"}; end --MV function MV() far1 = {"Old Egypt", "River Plains", "Four Corners"}; far2 = {"Cat's Claw Ridge", "Desert of Nomads", "Desert of Shades", "Seven Lakes"}; far3 = {"Valley of Kings", "Lake of Reeds", "Sinai", "Cradle of Sun", "South Egypt"}; far4 = {"Memphis", "Eastern Grounds"}; end --OE function OE() far1 = {"Cat's Claw Ridge", "Desert of Nomads", "Midland Valley"}; far2 = {"Valley of Kings", "Four Corners", "River Plains", "Lake of Reeds", "Sinai"}; far3 = {"Desert of Shades", "Seven Lakes"}; far4 = {"Cradle of Sun", "South Egypt"}; far5 = {"Memphis", "Eastern Grounds"}; end --RP function RP() far1 = {"Midland Valley", "Desert of Shades", "Seven Lakes"}; far2 = {"Four Corners", "Old Egypt", "Cradle of Sun"}; far3 = {"Cat's Claw Ridge", "Desert of Nomads", "South Egypt"}; far4 = {"Valley of Kings", "Lake of Reeds", "Sinai", "Memphis", "Eastern Grounds"}; end --7L function SevenL() far1 = {"River Plains", "Cradle of Sun", "South Egypt"}; far2 = {"Memphis", "Eastern Grounds", "Midland Valley", "Desert of Shades"}; far3 = {"Four Corners", "Valley of Kings", "Old Egypt"}; far4 = {"Cat's Claw Ridge", "Desert of Nomads"}; far5 = {"Lake of Reeds", "Sinai"}; end --S function S() far1 = {"Lake of Reeds", "Desert of Nomads"}; far2 = {"Old Egypt"}; far3 = {"Cat's Claw Ridge", "Midland Valley"}; far4 = {"Valley of Kings", "Four Corners", "River Plains"}; far5 = {"Desert of Shades", "Seven Lakes"}; far6 = {"Cradle of Sun", "South Egypt"}; far7 = {"Memphis", "Eastern Grounds"}; end --SE function SE() far1 = {"Memphis", "Eastern Grounds", "Seven Lakes"}; far2 = {"Cradle of Sun", "River Plains"}; far3 = {"Desert of Shades", "Midland Valley"}; far4 = {"Valley of Kings", "Four Corners", "Old Egypt"}; far5 = {"Cat's Claw Ridge", "Desert of Nomads"}; far6 = {"Lake of Reeds", "Sinai"}; end --VOK function VOK() far1 = {"Cat's Claw Ridge", "Desert of Shades"}; far2 = {"Old Egypt", "River Plains"}; far3 = {"Desert of Nomads", "Midland Valley", "Seven Lakes"}; far4 = {"Four Corners", "Cradle of Sun", "South Egypt"}; far5 = {"Memphis", "Eastern Grounds"}; end --WHEREAMI whereami = getCurrentRegion(); adjacent = {}; firstTimeRunning = "Yes"; if not whereami then error "Couldn't region region. Please zoom in until night sky isn't visible." end --Get adjacent regions. function getAdjacent() if whereami == "Cat's Claw Ridge" then adjacent = toCCR; elseif whereami == "Cradle of the Sun" then adjacent = toCOS; elseif whereami == "Desert of Nomads" then adjacent = toDON; elseif whereami == "Desert of Shades" then adjacent = toDOS; elseif whereami == "Eastern Grounds" then adjacent = toEG; elseif whereami == "Four Corners" then adjacent = toFC; elseif whereami == "Lake of Reeds" then adjacent = toLR; elseif whereami == "Memphis" then adjacent = toM; elseif whereami == "Midland Valley" then adjacent = toMV; elseif whereami == "Old Egypt" then adjacent = toOE; elseif whereami == "River Plains" then adjacent = toRP; elseif whereami == "Seven Lakes" then adjacent = to7L; elseif whereami == "Sinai" then adjacent = toS; elseif whereami == "South Egypt" then adjacent = toSE; elseif whereami == "Valley of the Kings" then adjacent = toVOK; end lsPrintln("Adjacent to " .. whereami .. " : " .. adjacent[1] .. " , " .. adjacent[2] .. " , " .. adjacent[3]); spacer(); end --Needs destination to be not nil; function pathfind() stack = {}; local path_done = nil; while not path_done do lsPrintln("Pathfinding..."); lsPrintln("whereami: " .. whereami .. " destination: " .. destination); --Get adjacent regions. getAdjacent(); if adjacent[1] == destination then stack[#stack + 1] = adjacent[1]; path_done = 1; elseif adjacent[2] == destination then stack[#stack + 1] = adjacent[2]; path_done = 1; elseif adjacent[3] == destination then stack[#stack + 1] = adjacent[3]; path_done = 1; else --Adjacents don't match destination. --Start comparing adjacents & nearby adjacents for distance to destination. if destination == "Cat's Claw Ridge" then CCR(); elseif destination == "Cradle of Sun" then COS(); elseif destination == "Desert of Nomads" then DON(); elseif destination == "Desert of Shades" then DOS(); elseif destination == "Eastern Grounds" then EG(); elseif destination == "Four Corners" then FC(); elseif destination == "Lake of Reeds" then LR(); elseif destination == "Memphis" then M(); elseif destination == "Midland Valley" then MV(); elseif destination == "Old Egypt" then OE(); elseif destination == "River Plains" then RP(); elseif destination == "Seven Lakes" then SevenL(); elseif destination == "Sinai" then S(); elseif destination == "South Egypt" then SE(); elseif destination == "Valley of Kings" then VOK(); end stackChanged ="No"; --far1 for i=1, #far1 do if adjacent[1] == far1[i] then stack[#stack + 1] = far1[i] i = #far1 stackChanged ="Yes"; elseif adjacent[2] == far1[i] then stack[#stack + 1] = far1[i] i = #far1 stackChanged ="Yes"; elseif adjacent[3] == far1[i] then stack[#stack + 1] = far1[i] i = #far1 stackChanged ="Yes"; end end --far2 if stackChanged == "No" then for i=1, #far2 do if adjacent[1] == far2[i] then stack[#stack + 1] = far2[i] i = #far2 stackChanged ="Yes"; elseif adjacent[2] == far2[i] then stack[#stack + 1] = far2[i] i = #far2 stackChanged ="Yes"; elseif adjacent[3] == far2[i] then stack[#stack + 1] = far2[i] i = #far2 stackChanged ="Yes"; end end end --far3 if stackChanged == "No" then for i=1, #far3 do if adjacent[1] == far3[i] then stack[#stack + 1] = far3[i] i = #far3 stackChanged ="Yes"; elseif adjacent[2] == far3[i] then stack[#stack + 1] = far3[i] i = #far3 stackChanged ="Yes"; elseif adjacent[3] == far3[i] then stack[#stack + 1] = far3[i] i = #far3 stackChanged ="Yes"; end end end --far4 if stackChanged == "No" then for i=1, #far4 do if adjacent[1] == far4[i] then stack[#stack + 1] = far4[i] i = #far4 stackChanged ="Yes"; elseif adjacent[2] == far4[i] then stack[#stack + 1] = far4[i] i = #far4 stackChanged ="Yes"; elseif adjacent[3] == far4[i] then stack[#stack + 1] = far4[i] i = #far4 stackChanged ="Yes"; end end end --far5 if stackChanged == "No" then for i=1, #far5 do if adjacent[1] == far5[i] then stack[#stack + 1] = far5[i] i = #far5 stackChanged ="Yes"; elseif adjacent[2] == far5[i] then stack[#stack + 1] = far5[i] i = #far5 stackChanged ="Yes"; elseif adjacent[3] == far5[i] then stack[#stack + 1] = far5[i] i = #far5 stackChanged ="Yes"; end end end --far6 if stackChanged == "No" then for i=1, #far6 do if adjacent[1] == far6[i] then stack[#stack + 1] = far6[i] i = #far6 stackChanged ="Yes"; elseif adjacent[2] == far6[i] then stack[#stack + 1] = far6[i] i = #far6 stackChanged ="Yes"; elseif adjacent[3] == far6[i] then stack[#stack + 1] = far6[i] i = #far6 stackChanged ="Yes"; end end end --far7 if stackChanged == "No" then for i=1, #far7 do if adjacent[1] == far7[i] then stack[#stack + 1] = far7[i] i = #far7 stackChanged ="Yes"; elseif adjacent[2] == far7[i] then stack[#stack + 1] = far7[i] i = #far7 stackChanged ="Yes"; elseif adjacent[3] == far7[i] then stack[#stack + 1] = far7[i] i = #far7 stackChanged ="Yes"; end end end if stackChanged == "No" then error "Something went wrong!"; end whereami = stack[#stack]; end lsPrintln("endloop"); end end function doit() while 1 do getAdjacent(); button_names = {adjacent[1], adjacent[2], adjacent[3]}; if not stack then -- Ask for which button local image_name = nil; local is_done = nil; while not is_done do local y = nil; local x = nil; local bsize = nil; x = 30; y = 30; if not destination then lsPrintWrapped(90, 10, 10, lsScreenX - 10, 0.6, 0.6, 0xFFFFFFff, "Choose a destination:"); else lsPrintWrapped(45, 10, 10, lsScreenX - 10, 0.6, 0.6, 0x80ff80ff, "Destination selected as: ".. destination); end for i=1, #button_names do if button_names[i] == "X" then --Do Nothing else if lsButtonText(x, y, 0, lsScreenX - 50, 0x80ff80ff, button_names[i]) then image_name = button_names[i]; is_done = 1; end end y = y+30; end if lsButtonText(x, y, 0, lsScreenX - 50, 0xffff80ff, "Travel to...") then image_name = "Travel to..."; is_done = 1; end if lsButtonText(lsScreenX - 220, lsScreenY - 30, z, 150, 0xFF0000ff, "Dismount") then error "Clicked End Script button"; end lsDoFrame(); lsSleep(10); end if image_name == button_names[1] then --Adjacent selected as destination destination = button_names[1]; pathfind(); elseif image_name == button_names[2] then --Adjacent selected as destination destination = button_names[2]; pathfind(); elseif image_name == button_names[3] then --Adjacent selected as destination destination = button_names[3]; pathfind(); elseif image_name == "Travel to..." then --"Travel to" pressed, ask which region to travel to. local travel_to = nil; local is_done = nil; while not is_done do local y = nil; local x = nil; local bsize = nil; x = 30; y = 0; for i=1, #regions do if lsButtonText(x, y, 0, lsScreenX - 50, 0x80ff80ff, regions[i]) then destination = regions[i]; is_done = 1; end y = y+30; end if lsButtonText(lsScreenX - 220, lsScreenY - 30, z, 150, 0xFF0000ff, "Dismount") then error "Clicked End Script button"; end lsDoFrame(); lsSleep(10); end pathfind(); end end --if not stack end --Get ready for travel if firstTimeRunning == "Yes" then lsPrintWrapped(0, 10, 10, lsScreenX - 10, 0.6, 0.6, 0xffff80ff, "Securing the saddle..."); lsDoFrame(); lsSleep(500); lsPrintWrapped(0, 10, 10, lsScreenX - 10, 0.6, 0.6, 0xffff80ff, "Securing the saddle..."); lsPrintWrapped(0, 25, 10, lsScreenX - 10, 0.6, 0.6, 0xffff80ff, "Cleaning horseshoes..."); lsDoFrame(); lsSleep(500); lsPrintWrapped(0, 10, 10, lsScreenX - 10, 0.6, 0.6, 0xffff80ff, "Securing the saddle..."); lsPrintWrapped(0, 25, 10, lsScreenX - 10, 0.6, 0.6, 0xffff80ff, "Cleaning horseshoes..."); lsPrintWrapped(0, 40, 10, lsScreenX - 10, 0.6, 0.6, 0xffff80ff, "Brushing hair..."); lsDoFrame(); lsSleep(500); lsPrintWrapped(0, 10, 10, lsScreenX - 10, 0.6, 0.6, 0xffff80ff, "Securing the saddle..."); lsPrintWrapped(0, 25, 10, lsScreenX - 10, 0.6, 0.6, 0xffff80ff, "Cleaning horseshoes..."); lsPrintWrapped(0, 40, 10, lsScreenX - 10, 0.6, 0.6, 0xffff80ff, "Brushing hair..."); lsPlaySound("snort.wav"); lsPrintWrapped(0, 55, 10, lsScreenX - 10, 0.6, 0.6, 0xffff80ff, "Whispering ".. destination .." to horses..."); lsDoFrame(); lsSleep(500); lsPrintWrapped(0, 10, 10, lsScreenX - 10, 0.6, 0.6, 0xffff80ff, "Securing the saddle..."); lsPrintWrapped(0, 25, 10, lsScreenX - 10, 0.6, 0.6, 0xffff80ff, "Cleaning horseshoes..."); lsPrintWrapped(0, 40, 10, lsScreenX - 10, 0.6, 0.6, 0xffff80ff, "Brushing hair..."); lsPrintWrapped(0, 55, 10, lsScreenX - 10, 0.6, 0.6, 0xffff80ff, "Whispering ".. destination .." to horses..."); lsPrintWrapped(0, 70, 10, lsScreenX - 10, 0.6, 0.6, 0xffff80ff, "Clicking tongue..."); lsDoFrame(); lsSleep(1000); firstTimeRunning = "No"; end --Stash CS checkCS(); safeDrag(cs[0], cs[1], 10, 10); sleepWithStatus(1000, "Stashing chariot..."); whereami = getCurrentRegion(); getAdjacent(); --Select Destination if stack[1] == adjacent[1] then safeClick(30, 85); elseif stack[1] == adjacent[2] then safeClick(30, 100); elseif stack[1] == adjacent[3] then safeClick(30, 120); else error "Stack[1] doesn't match adjacents." end --Stash Region window to 290, 10 sleepWithStatus(1000, "Stashing destination..."); srReadScreen(); regionwindow = srFindImage("chariot/travelto.png", 5000); safeDrag(regionwindow[0], regionwindow[1], 290, 10); --function checkFREE() -- Check for free travel. srReadScreen(); FREE = srFindImage("chariot/travelfree.png", 5000); regionwindow = srFindImage("chariot/travelto.png", 5000); tt = srFindImage("chariot/tt.png", 5000); useTT = nil; while not FREE do if alwayswhip then safeClick(tt[0], tt[1], rightclick); useTT = 1; sleepWithStatus(1000, "Waiting for Yes promt..."); srReadScreen(); yes = srFindImage("chariot/yes.png", 5000); safeClick(yes[0], yes[1], rightclick); if #stack == 1 then sleepWithStatus(4000, "Travelling..."); else lsPlaySound("gallop.wav"); sleepWithStatus(4000, "Travelling..."); end FREE = 1; else srReadScreen(); FREE = srFindImage("chariot/travelfree.png", 5000); --Buttons lsPrintWrapped(90, 10, 10, lsScreenX - 10, 0.6, 0.6, 0x80ff80ff, "Waiting for Free Travel"); if lsButtonText(30, 25, 0, lsScreenX - 50, 0x80ff80ff, "Whip horses once") then safeClick(tt[0], tt[1], rightclick); useTT = 1; sleepWithStatus(1000, "Waiting for Yes promt..."); srReadScreen(); yes = srFindImage("chariot/yes.png", 5000); safeClick(yes[0], yes[1], rightclick); if #stack == 1 then sleepWithStatus(4000, "Travelling..."); else lsPlaySound("gallop.wav"); sleepWithStatus(4000, "Travelling..."); end FREE = 1; end if lsButtonText(30, 55, 0, lsScreenX - 50, 0x80ff80ff, "Whip horses every stop") then alwayswhip = 1; end if lsButtonText(30, 85, 0, lsScreenX - 50, 0xFF0000ff, "Dismount") then error "Clicked End Script button"; end --Report lsPrintWrapped(30, 110, 10, lsScreenX - 10, 0.6, 0.6, 0x80ff80ff, "Destination: ".. destination); lsPrintWrapped(30, 125, 10, lsScreenX - 10, 0.6, 0.6, 0xffff80ff, "Route:"); y = 125; for i=1,#stack do y = y + 15; lsPrintWrapped(30, y, 10, lsScreenX - 10, 0.6, 0.6, 0xffff80ff, i.. " >> ".. stack[i]); end lsDoFrame(); lsSleep(100); --If waiting for Free Travel, refresh region window. if not useTT then if tt then safeClick(290, 10, rightclick); else error "Region window missing!" end end end end --end if not useTT then srReadScreen(); FREE = srFindImage("chariot/travelfree.png", 5000); if FREE then safeClick(FREE[0], FREE[1], rightclick); if #stack == 1 then sleepWithStatus(4000, "Travelling..."); else lsPlaySound("gallop.wav"); sleepWithStatus(4000, "Travelling..."); end else error "Region window missing!"; end end --Clear first item of the stack and move the rest to left. for i=1, #stack do stack[i] = stack[i + 1]; end --REACHED? if not stack[1] then lsPlaySound("horsewalk.wav"); lsSleep(3000); lsPlaySound("longsnort.wav"); error "You reach your destination and dismount your horse."; end end end |
grass.lua
Download Walks and gathers grass. |
-- run and gather grass v1.0 by Safa dofile("common.inc"); numGrass = 0 function pickGrass() srReadScreen(); local xyWindowSize = srGetWindowSize(); local midX = xyWindowSize[0] / 2; local pos = srFindImageInRange("grass.png",0,0,midX,100,1000); if (pos) then srClickMouseNoMove(pos[0], pos[1], 1); numGrass = numGrass + 1; sleepWithStatus(2500, "Picking"); end end function walkeast() local xyWindowSize = srGetWindowSize() safeClick(xyWindowSize[0] / 2 + 400, xyWindowSize[1] /2 + 10); sleepWithStatus(1500, "Walking East"); end function walkwest() local xyWindowSize = srGetWindowSize() safeClick(xyWindowSize[0] / 2 - 400, xyWindowSize[1] /2 + 10); sleepWithStatus(1500, "Walking West"); end function doit() local done = false --Say Hi askForWindow("Stay on a grassy area and hit Shift to start. You can chat and perform other tasks while the macro is running as long as grass is visible in the middle of your screen. You can also minimize Automato window after the macro is started. - grass v1.0 by Safa") ; --Set camera to top down view. srKeyDown(0x76); srKeyDown(0x77); srKeyDown(0x77); srKeyDown(0x77); --doit while not done do sleepWithStatus(500, "Grass collected: " .. tostring(numGrass)) ; pickGrass(); walkwest(); pickGrass(); walkeast(); end end |
gravel.lua
Download Drops every type of stone in your inventory and smashes them in place. |
--gravel.lua dofile("common.inc"); is_done = false; --Exit Loop? askText = singleLine([[ Hit SHIFT to begin. Pin inventory, press and hold ALT to drop stones. Hold middle click or S to smash. ]]); function doit() askForWindow(askText); askForFocus(); Run(); end function Run() --Loop xyWindowSize = srGetWindowSize(); srReadScreen(); while not is_done do checkBreak(); if lsAltHeld() then srReadScreen(); stone = findText("Stone"); if stone then srClickMouseNoMove(stone[0] +10, stone[1], true); sleepWithStatus(25, "Dropping"); srClickMouseNoMove(xyWindowSize[0]/2 + 55, xyWindowSize[1]/2 + 20, 1); else sleepWithStatus(25, "Nothing to drop."); end end if lsMouseIsDown(2) then srKeyEvent('s'); lsSleep(25); srClickMouseNoMove(xyWindowSize[0], xyWindowSize[1] - xyWindowSize[1] + 10, 1); end if lsKeyDown("q") then is_done = 1; end lsDoFrame(); lsSleep(25); end end |
markChatsAsRead.lua
Download Goes through every chat tab in a second. |
dofile("common.inc"); is_done = false; askText = singleLine([[markChatsAsRead:Safa Make sure ATITD is in focus and hit shift to mark all chat tabs as read.]]); function doit() askForWindow(askText); askForFocus(); run(); end function run() --Loop while not is_done do for i =1,100 do srKeyDown(0x78); lsSleep(20); end is_done = 1; lsDoFrame(); lsSleep(50); end end |
mod_assist.lua
Download Makes it easier to moderate boards with buttons and shortcuts. |
-- mod_assist.lua by Safa -- -- Do various modding tasks using Automato UI or Keyboard Shortcuts. Get notified when new posts are present. -- Uses pbslog.txt to save modding history. dofile("common.inc"); askText = singleLine([[ mod_assist by Safa. Do various modding tasks using Automato UI or Keyboard Shortcuts. Get notified when new posts are present. This macro WON'T autopost any messages. Every post must be approved by the operator! Click the gear icon for more settings. Hit SHIFT to begin. ]]); --Done Modding is_done = false; --Automato Window Size automato = lsGetWindowSize(); --Used by Timer to determine a second is passed. frame = 0; notifyOnce = 0; lessTriggerHappy = 500; animation_beep = 3000; animation_readScreen = 0; animation_postSent = 0; --Timer h=0; m=0; s=0; --Number of posts approved/posted. p_yes=0; p_saved =0; --Keybind Buttons buttons = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "CAPSLOCK", "F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9", "F10", "F11", "F12", "PRINTSCREEN", "SCROLLLOCK", "PAUSE", "INSERT", "HOME", "PAGEUP", "DELETE", "END", "PAGEDOWN", "RIGHT", "LEFT", "DOWN", "UP", "AUDIONEXT", "AUDIOPREV", "AUDIOSTOP", "AUDIOPLAY", "AUDIOMUTE", "LCTRL", "LSHIFT", "LALT", "LGUI", "RCTRL", "RSHIFT", "RALT" }; --Settings ui_size = "Default"; logsession = "On"; keyboard_shortcuts = "On"; post_button = "LALT"; save_button = "LCTRL"; sounds = "Loop"; success_sound = "On"; scribble_sound = "On"; --State. 0:Waiting for Posts 1: Post Pending 2: Settings 3: Post Sent State=0; function doit() askForWindow(askText); findClockInfo(); askForFocus(); lsPlaySound("start.wav"); startModding(); end function notify() if sounds == "Loop" then if animation_beep > 3000 then lsPlaySound("beepping.wav"); animation_beep = 0; else animation_beep = animation_beep + 100; end elseif sounds == "On" then if notifyOnce == 0 then lsPlaySound("beepping.wav"); notifyOnce = 1; end end end function exitButton() --Return to Automato Scripts List if "End Script" is pressed. if lsButtonText(0 - 20, lsScreenY - 30, z, 200, 0x000000FF, "Log & Exit") then if logsession == "On" then LogSession(); end is_done = 1; end end function exitButtonSmall() --Return to Automato Scripts List if "End Script" is pressed. if lsButtonText(0, 60, z, lsScreenX, 0x000000FF, "Log & Exit") then if logsession == "On" then LogSession(); end is_done = 1; end end function PBSLog(Text) FileFish = io.open("pbslog.txt","a+"); FileFish:write(Text); FileFish:close(); end function LogSession() if logTime == "Off" then timeStarted = " Unknown "; timeStopped = " Unknown "; else --Time Macro Stopped. (for pbslog.txt) findClockInfo(); timeStopped = "[" .. Date .. ", " .. Time .. "] "; end --Log information about this modding session. if p_yes < 10 then PBSLog(" " .. " (" .. h .. "h" .. m .. "m".. s .. "s) " .. "-00" .. p_yes .. "- " .. timeStarted .. " " .. timeStopped .. "\n"); elseif p_yes < 100 then PBSLog(" " .. " (" .. h .. "h" .. m .. "m".. s .. "s) " .. "-0" .. p_yes .. "- " .. timeStarted .. " " .. timeStopped .. "\n"); else PBSLog(" " .. " (" .. h .. "h" .. m .. "m".. s .. "s) " .. "-" .. p_yes .. "- " .. timeStarted .. " " .. timeStopped .. "\n"); end end function findClockInfo() srReadScreen(); anchor = findText("Year"); if(not anchor) then anchor = findText("ar 1"); end if(not anchor) then anchor = findText("ar 2"); end if(not anchor) then anchor = findText("ar 3"); end if(not anchor) then anchor = findText("ar 4"); end if(not anchor) then anchor = findText("ar 5"); end if(not anchor) then anchor = findText("ar 6"); end if(not anchor) then anchor = findText("ar 7"); end if(not anchor) then anchor = findText("ar 8"); end if(not anchor) then anchor = findText("ar 9"); end if anchor then lsPrintln("Found Clock"); window = getWindowBorders(anchor[0], anchor[1]); lines = findAllText(nil, window, nil, NOPIN); for i=1,#lines do --lsPrintln("LINE " .. i .. " : " .. table.concat(lines[i], ",")); theDateTime = table.concat(lines[1], ",") -- Line 1 on the clock theDateTime = string.sub(theDateTime,string.find(theDateTime,",") + 1); stripYear = string.sub(theDateTime,string.find(theDateTime,",") + 2); Time = string.sub(stripYear,string.find(stripYear,",") + 2); stripYear = "," .. stripYear Date = string.sub(stripYear,string.find(stripYear,",") + 1, string.len(stripYear) - string.len(Time) - 2); --lsPrintln(theDateTime .. "\nCoords: " .. Coordinates .. " (" .. string.len(Coordinates) .. ")\nTime: " .. Time .. " (" .. string.len(Time) .. ")\nDate: " .. Date .. " (" .. string.len(Date) .. ")"); end end end function updateTimer() if frame > 1000 then frame = 0; s = s + 1; if s == 60 then s = 0; m = m + 1; end if m == 60 then m = 0; s = 0; h = h + 1; end end end function playScribble() if scribble_sound == "On" then lsPlaySound("scribble.wav"); end end function playSuccess() if success_sound == "On" then lsPlaySound("successful.wav"); end end function waitForPosts() if ui_size == "Default" then -- UI Size Default --Show time passed below microphone. updateTimer(); if lsButtonImg(200, 50, 8, 0.10, 0xFFFFFFff, "pbs/settings.png") then State = 2; end if p_saved == 1 then lsPrint(85, 10, 2, 0.6, 0.6, 0x55AAAAFF, "Holding saved post(s)."); end lsPrint(90, 25, 2, 0.7, 0.7, 0xFFFFFFFF, "Waiting for posts"); if p_yes < 10 then lsPrint(55, 130, 2, 2.0, 2.0, 0xFFFFFFff, "00" .. p_yes); elseif p_yes < 100 then lsPrint(55, 130, 2, 2.0, 2.0, 0xFFFFFFFF, "0" .. p_yes); else lsPrint(55, 130, 2, 2.0, 2.0, 0xFFFFFFFF, p_yes); end lsPrint(120, 220, 2, 0.7, 0.7, 0xFFFFFFFF, "(" .. h .. "h" .. m .. "m".. s .. "s)"); lsButtonImg(50, 50, 1, 0.40, 0xFFFFFFff, "pbs/microphone.png"); exitButton(); else -- UI Size Toolbar updateTimer(); if lsButtonImg(240, 5, 5, 0.10, 0xFFFFFFff, "pbs/settings.png") then State = 2; end if p_saved == 1 then lsPrint(85, 10, 2, 0.6, 0.6, 0x55AAAAFF, "Holding saved post(s)."); end lsPrint(140, 15, 2, 0.5, 0.5, 0xFFFFFFFF, "Waiting for posts"); lsPrint(65, 7, 2, 2.0, 2.0, 0xFFFFFFFF, p_yes); lsPrint(150, 30, 2, 0.7, 0.7, 0xFFFFFFFF, "(" .. h .. "h" .. m .. "m".. s .. "s)"); lsButtonImg(5, 5, 1, 0.10, 0xFFFFFFff, "pbs/microphone.png"); exitButtonSmall(); end end function postButton() if keyboard_shortcuts == "On" then if post_button == "LALT" then if lsAltHeld() then if lessTriggerHappy > 500 then srClickMouseNoMove(POST[0] + 25, POST[1] + 5, 1); playScribble(); p_yes = p_yes + 1; State =3; animation_postSent = 0; lessTriggerHappy = 0; else lessTriggerHappy = lessTriggerHappy + 100; end end else if lsKeyDown(post_button) then if lessTriggerHappy > 500 then srClickMouseNoMove(POST[0] + 25, POST[1] + 5, 1); playScribble(); p_yes = p_yes + 1; State =3; animation_postSent = 0; lessTriggerHappy = 0; else lessTriggerHappy = lessTriggerHappy + 100; end end end end end function saveButton() if keyboard_shortcuts == "On" then if save_button == "LCTRL" then if lsControlHeld() then safeDrag(POST[0] - 10, POST[1] - 40, 25, 25, 1); safeDrag(740, 80, atitd[0] - 40, 80, 1); end else if lsKeyDown(save_button) then safeDrag(POST[0] - 10, POST[1] - 40, 25, 25, 1); safeDrag(740, 80, atitd[0] - 40, 80, 1); end end end end function postPending() updateTimer(); if not POST then State =3; notifyOnce = 0; animation_postSent = 0; else if ui_size == "Default" then --UI Size Default notify(); postButton(); saveButton(); lsPrint(100, 25, 2, 0.7, 0.7, 0xFFFFFFFF, "Post(s) Pending"); lsPrint(143, 125, 2, 2.0, 2.0, 0x55AAAAFF, p_yes); lsPrint(120, 220, 2, 0.7, 0.7, 0xFFFFFFFF, "(" .. h .. "h" .. m .. "m".. s .. "s)"); --Expand Post Window if lsButtonImg(200, 50, 3, 0.15, 0xFFFFFFff, "pbs/expand.png") then safeDrag(POST[0] - 10, POST[1] - 40, 25, 25, 1); safeDrag(740, 80, atitd[0] - 40, 80, 1); end --Save Post if lsButtonImg(220, 120, 3, 0.15, 0xFFFFFFff, "pbs/save.png") then srClickMouseNoMove(POST[0] + 10, POST[1] + 5, 1); lsPlaySound("saved.wav"); p_saved = 1; end --Send Post if lsButtonImg(50, 50, 1, 0.40, 0xFFFFFFff, "pbs/message.png") then srClickMouseNoMove(POST[0] + 25, POST[1] + 5, 1); playScribble(); p_yes = p_yes + 1; State =3; animation_postSent = 0; playSuccess(); end exitButton(); else --UI Size Toolbar notify(); postButton(); saveButton(); lsPrint(165, 15, 2, 0.5, 0.5, 0xFFFFFFFF, "Post(s) Pending"); lsPrint(260, 20, 2, 1.0, 1.0, 0xFFFFFFFF, p_yes); lsPrint(170, 30, 2, 0.7, 0.7, 0xFFFFFFFF, "(" .. h .. "h" .. m .. "m".. s .. "s)"); --Expand Post Window if lsButtonImg(105, 5, 5, 0.10, 0xFFFFFFff, "pbs/expand.png") then safeDrag(POST[0] - 10, POST[1] - 40, 25, 25, 1); safeDrag(740, 80, atitd[0] - 40, 80, 1); end --Save Post if lsButtonImg(55, 5, 5, 0.10, 0xFFFFFFff, "pbs/save.png") then srClickMouseNoMove(POST[0] + 10, POST[1] + 5, 1); lsPlaySound("saved.wav"); p_saved = 1; end --Send Post if lsButtonImg(5, 5, 1, 0.10, 0xFFFFFFff, "pbs/message.png") then srClickMouseNoMove(POST[0] + 25, POST[1] + 5, 1); playScribble(); p_yes = p_yes + 1; State =3; animation_postSent = 0; end exitButtonSmall(); end end end function postSent() if ui_size == "Default" then --UI Size Default updateTimer(); --Go to state 0 when 0.5 second passes. if animation_postSent > 500 then State = 0; notifyOnce = 0; lessTriggerHappy = 0; else if notifyOnce == 0 then playSuccess(); notifyOnce = 1; end lsPrint(110, 25, 2, 0.9, 0.9, 0xFFFFFFFF, "All Done!"); lsButtonImg(45, 49, 1, 0.85, 0xFFFFFFff, "pbs/yes.png"); exitButton(); POST = nil; animation_postSent = animation_postSent + 100; end else --UI Size Toolbar updateTimer(); --Go to state 0 when 0.5 second passes. if animation_postSent > 500 then State = 0; notifyOnce = 0; else if notifyOnce == 0 then playSuccess(); notifyOnce = 1; end lsPrint(65, 7, 2, 2.0, 2.0, 0xFFFFFFFF, "All Done!"); lsButtonImg(5, 5, 1, 0.20, 0xFFFFFFff, "pbs/yes.png"); exitButtonSmall(); POST = nil; animation_postSent = animation_postSent + 100; end end end function settingsMenu() updateTimer(); settings_y = 0; lsDisplaySystemSprite(1, 0, 0, 0, automato[0], automato[1], 0xFFFFFFFF); lsPrint(60, settings_y + 10, 1, 0.7, 0.7, 0x000000FF, "Small User Interface"); if ui_size == "Default" then if lsButtonImg(20, settings_y, 1, 0.30, 0xFFFFFFff, "pbs/off.png") then ui_size = "Toolbar"; end else if lsButtonImg(20, settings_y, 1, 0.30, 0xFFFFFFff, "pbs/on.png") then ui_size = "Default"; end end settings_y = settings_y + 25; lsPrint(60, settings_y + 10, 1, 0.7, 0.7, 0x000000FF, "Log Modding Session (pbslog.txt)"); if logsession == "Off" then if lsButtonImg(20, settings_y, 1, 0.30, 0xFFFFFFff, "pbs/off.png") then logsession = "On"; end else if lsButtonImg(20, settings_y, 1, 0.30, 0xFFFFFFff, "pbs/on.png") then logsession = "Off"; end end settings_y = settings_y + 25; if sounds == "Loop" then lsPrint(60, settings_y + 10, 1, 0.7, 0.7, 0x000000FF, "Notify until all posts are sent"); if lsButtonImg(20, settings_y, 1, 0.30, 0xFFFFFFff, "pbs/mid.png") then sounds = "On"; end elseif sounds == "On" then lsPrint(60, settings_y + 10, 1, 0.7, 0.7, 0x000000FF, "Notify once for every post"); if lsButtonImg(20, settings_y, 1, 0.30, 0xFFFFFFff, "pbs/on.png") then sounds = "Off"; end else lsPrint(60, settings_y + 10, 1, 0.7, 0.7, 0x000000FF, "No Notification"); if lsButtonImg(20, settings_y, 1, 0.30, 0xFFFFFFff, "pbs/off.png") then sounds = "Loop"; end end settings_y = settings_y + 25; lsPrint(60, settings_y + 10, 1, 0.7, 0.7, 0x000000FF, "Success/All Sent Sound"); if success_sound == "Off" then if lsButtonImg(20, settings_y, 1, 0.30, 0xFFFFFFff, "pbs/off.png") then success_sound = "On"; end else if lsButtonImg(20, settings_y, 1, 0.30, 0xFFFFFFff, "pbs/on.png") then success_sound = "Off"; end end settings_y = settings_y + 25; lsPrint(60, settings_y + 10, 1, 0.7, 0.7, 0x000000FF, "Scribble/Posting Sound"); if scribble_sound == "Off" then if lsButtonImg(20, settings_y, 1, 0.30, 0xFFFFFFff, "pbs/off.png") then scribble_sound = "On"; end else if lsButtonImg(20, settings_y, 1, 0.30, 0xFFFFFFff, "pbs/on.png") then scribble_sound = "Off"; end end settings_y = settings_y + 25; lsPrint(60, settings_y + 10, 1, 0.7, 0.7, 0x000000FF, "Enable Keyboard Shortcuts"); if keyboard_shortcuts == "Off" then if lsButtonImg(20, settings_y, 1, 0.30, 0xFFFFFFff, "pbs/off.png") then keyboard_shortcuts = "On"; end else if lsButtonImg(20, settings_y, 1, 0.30, 0xFFFFFFff, "pbs/on.png") then keyboard_shortcuts = "Off"; end end settings_y = settings_y + 50; lsDisplaySystemSprite(1, 0, settings_y - 10, 1, automato[0], 1, 0x000000FF); lsPrint(15, settings_y - 5, 1, 0.5, 0.5, 0x000000FF, "Automato must be in focus to use custom keybindings!"); lsPrint(70, settings_y + 5, 1, 0.7, 0.7, 0x000000FF, "Change Key Bindings"); settings_y = settings_y + 25; if lsButtonImg(45, settings_y + 5, 2, 0.06, 0xFFFFFFff, "pbs/message.png") then bind = "post"; end if bind == "post" then lsPrint(90, settings_y, 2, 2.0, 2.0, 0xFFFFFFff, post_button); lsDisplaySystemSprite(1, 0, settings_y, 1, automato[0], 40, 0x000000FF); --Black postKeyList(); else lsPrint(90, settings_y, 2, 2.0, 2.0, 0x000000FF, post_button); end settings_y = settings_y + 35; if lsButtonImg(45, settings_y + 5, 2, 0.06, 0xFFFFFFff, "pbs/save.png") then bind = "save"; end if bind == "save" then lsPrint(90, settings_y, 1, 2.0, 2.0, 0xFFFFFFff, save_button); lsDisplaySystemSprite(1, 0, settings_y, 1, automato[0], 40, 0x000000FF); --Black saveKeyList(); else lsPrint(90, settings_y, 1, 2.0, 2.0, 0x000000FF, save_button); end settings_y = settings_y + 35; if lsButtonText(0 - 20, lsScreenY - 30, 1, 200, 0x000000FF, "Save") then if post_button == save_button then error "Keyboard shortcuts for post button and save button cannot be the same!"; else State=0; end end end function postKeyList() for i =1,#buttons do if lsKeyDown(buttons[i]) then post_button = buttons[i]; end end end function saveKeyList() for i =1,#buttons do if lsKeyDown(buttons[i]) then save_button = buttons[i]; end end end function startModding() if not Time then logTime = "Off"; else --Time Macro Started. (for pbslog.txt) timeStarted = "[" .. Date .. ", " .. Time .. "]"; end srReadScreen(); atitd = srGetWindowSize(); while not is_done do --Wait X seconds then read screen. if animation_readScreen > 1000 then srReadScreen(); POST = srFindImage("pbs/S_P.png"); O_P = srFindImage("pbs/O_P.png"); animation_readScreen = 0; else animation_readScreen = animation_readScreen + 100; end if POST then if State ~= 2 then State = 1; end end if O_P then p_saved = 1; else p_saved = 0; end --Determine Active Menu if State == 0 then waitForPosts(); elseif State == 1 then postPending(); elseif State == 2 then settingsMenu(); elseif State == 3 then postSent(); end if lsKeyDown("q") then is_done = 1; end frame = frame + 100; lsDoFrame(); lsSleep(100); end end |
oven_timer.lua
Download Finds the desired dredge rate by continuously restarting dredge process. |
--oven_timer.lua dofile("common.inc"); --ACCEPT IF TIMER IS BELOW accept_minute = 1; accept_second = 50; --Exit Loop? is_done = false; --Timer m=0; s=0; frame = 6.6; animation_readScreen = -5000; animation_Sound = 5000; --# of retries r=0; --State state = 0; askText = singleLine([[ Hit SHIFT to begin. ]]); function doit() askForWindow(askText); askForFocus(); Run(); end function updateTimer() if frame > 20 then frame = 6.6; s = s + 1; if s == 60 then s = 0; m = m + 1; end end end function set0() lsPrint(15, 32, 5, 0.6, 0.6, 0x000000FF, "Mode:"); lsPrint(70, 32, 6, 0.6, 0.6, -865025, "Setting Up"); lsDisplaySystemSprite(1, 60, 32, 5, 80, 15, 0x000000FF); lsPrint(15, 90, 5, 0.6, 0.6, 0x000000FF, "II. Open your Raeli Oven window and stash it"); lsPrint(15, 105, 5, 0.6, 0.6, 0x000000FF, "in a corner. Move your mouse towards the area"); lsPrint(15, 120, 5, 0.6, 0.6, 0x000000FF, "where it says White(0) and hit shift when (0)"); lsPrint(15, 135, 5, 0.6, 0.6, 0x000000FF, "is clearly visible below."); lsPrint(15, 60, 5, 0.6, 0.6, 0x000000FF, "I. Make sure your oven isn't dredging already."); srReadScreen(); srMakeImage("CUSTOM", mouse_x, mouse_y, 70, 35); srShowImageDebug("CUSTOM", 10, 200, 5); if lsShiftHeld() then state = 1; dredge = findText("Start dredging"); srClickMouseNoMove(dredge[0] +10, dredge[1], true); lsSleep(150); xyWindowSize = srGetWindowSize(); srSetMousePos(xyWindowSize[0]/2 + 55, xyWindowSize[1]/2 + 20, 1); end end function time() lsPrint(15, 32, 5, 0.6, 0.6, 0x000000FF, "Mode:"); lsPrint(70, 32, 6, 0.6, 0.6, -865025, "Timing Oven"); lsDisplaySystemSprite(1, 60, 32, 5, 90, 15, 0x000000FF); lsDisplaySystemSprite(1, 10, 200, 5, automato[0] - 20, automato[1] / 2.5, 0xFFFFFFff); lsPrint(70, 220, 6, 4.7, 4.7, 0x000000FF, m ..":".. s); lsPrint(15, 75, 5, 0.6, 0.6, 0x000000FF, "Number of retries: [".. r .."]"); lsPrint(15, 90, 5, 0.6, 0.6, 0x000000FF, "Accepting below ".. accept_minute ..":".. accept_second); --Wait X seconds then read screen. if animation_readScreen > 1000 then srReadScreen(); zero = srFindImage("CUSTOM"); animation_readScreen = 0; if not zero then state = 2; end else animation_readScreen = animation_readScreen + 50; end if lsButtonText(15, 105, 7, 200, -865025, "Increase Timer") then if accept_second == 55 then accept_minute = accept_minute + 1; accept_second = 0; else accept_second = accept_second + 5; end end if lsButtonText(15, 130, 7, 200, -865025, "Decrease Timer") then if accept_second == 5 then accept_minute = accept_minute - 1; accept_second = 55; else accept_second = accept_second - 5; end end updateTimer(); if m == accept_minute then if s > accept_second then srReadScreen(); this = findText("This is a Raeli Oven"); srClickMouseNoMove(this[0] +10, this[1]); lsSleep(250); srReadScreen(); bake = findText("Begin the Baking Process"); srClickMouseNoMove(bake[0] +10, bake[1], true); lsSleep(250); srReadScreen(); dredge = findText("Start dredging"); srClickMouseNoMove(dredge[0] +10, dredge[1], true); m = 0; s = 0; r = r + 1; end end end function success() --Wait X seconds then read screen. if animation_Sound > 5000 then lsPlaySound("successful.wav"); animation_Sound = 0; else animation_Sound = animation_Sound + 50; end lsPrint(15, 32, 5, 0.6, 0.6, 0x000000FF, "Mode:"); lsPrint(70, 32, 6, 0.6, 0.6, -865025, "Success"); lsDisplaySystemSprite(1, 60, 32, 5, 70, 15, -1697828097); lsDisplaySystemSprite(1, 10, 200, 5, automato[0] - 20, automato[1] / 2.5, -1697828097); lsPrint(70, 220, 6, 4.7, 4.7, 0xFFFFFFff, m ..":".. s); lsPrint(15, 75, 5, 0.6, 0.6, 0x000000FF, "Number of retries: [".. r .."]"); lsPrint(15, 90, 5, 0.6, 0.6, 0x000000FF, "Accepting below ".. accept_minute ..":".. accept_second); lsPrint(15, 105, 5, 0.6, 0.6, 0x000000FF, "Oven rate is: ".. m ..":".. s); end function Run() --Loop while not is_done do checkBreak(); automato = lsGetWindowSize(); --Automato Window Size mouse_x, mouse_y = srMousePos(); --Mouse Location px = srReadPixel(mouse_x, mouse_y); --Pixel color @ Mouse Location --lsDisplaySystemSprite(1, automato[0] - automato[0] + 15, automato[1] / 1.75, 6, 50, 50, px); --COLOR PICKER lsPrint(15, 10, 5, 0.7, 0.7, 0x000000FF, "This is a Raeli Oven Timer"); if lsButtonImg(automato[0] - 45, automato[1] - automato[1] + 10, 5, 1.0, 0xFFFFFFff, "blank.png") then is_done=true; end lsDisplaySystemSprite(1, 4, 4, 4, automato[0] - 8, automato[1] - 8, -371609345); --Background lsDisplaySystemSprite(1, 3, 3, 3, automato[0] - 6, automato[1] - 6, 0x000000FF); --Black 2 lsDisplaySystemSprite(1, 2, 2, 2, automato[0] - 4, automato[1] - 4, -1804843265);--Border Light lsDisplaySystemSprite(1, 1, 1, 1, automato[0] - 2, automato[1] - 2, 1917857535); --Border lsDisplaySystemSprite(1, 0, 0, 0, automato[0], automato[1], 0x000000FF); --Black 1 --Determine Active Menu if state == 0 then set0(); elseif state == 1 then time(); elseif state == 2 then success(); end if lsKeyDown("q") then lsClipboardSet(px); is_done = 1; end frame = frame + 1; lsDoFrame(); lsSleep(50); end end |
resin.lua
Download Gathers resin with middle mouse button. |
--resin.lua --Gather resin using middle mouse button. Chat must be minimized. dofile("common.inc"); --Exit Loop? is_done = false; askText = singleLine([[Gather resin using middle mouse button. Chat must be minimized.]]); function doit() askForWindow(askText); askForFocus(); gatherResin(); end function gatherResin() lsTopmost(0); --Loop while not is_done do checkBreak(); if lsMouseIsDown(2) then srKeyEvent('r'); lsSleep(100); end if lsKeyDown("q") then is_done = 1; end lsDoFrame(); lsSleep(50); end end |
sculptor.lua
Download Moves sculpture pieces with keystrokes. Executes pre-made recipes. |
--Sculptor Macro File dofile("common.inc"); is_done = false; askText = singleLine([[To use the click multiplier select a higher setting than 1X then right click. Keyboard control only works when automato is in focus. Keybinds are: WASD E< for movement, 8456 91(Numpad) for rotation. R to record/stop. Numpad enter to play. Use 1,2,3,4,5,6 on keyboard to switch multipliers. Hit SHIFT to begin.]]); function doit() askForWindow(askText); askForFocus(); Run(); end function anchor() srReadScreen(); MoveObject = findText("Move Object"); end function click() --srSetMousePos(x, y); for i=1,multiply do white = blue; srClickMouseNoMove(x, y, 1); end end function play() a = 1; for i=1,len do rps[i] = string.sub(recipe, a, i*5); a = a + 5; end for i=1,#rps do multiply = string.sub(rps[i], 3, 5); lsPrintln("Multiplier: ".. multiply); string = string.sub(rps[i], 1, 2); lsPrintln("Move: ".. string); if string == "w+" then x=x+40; y=y+90; click(); end if string == "w-" then x=x+40; y=y+110; click(); end if string == "xM" then x=x+40; y=y+130; click(); end if string == "a+" then x=x+10; y=y+130; click(); end if string == "a-" then x=x+30; y=y+130; click(); end if string == "d+" then x=x+70; y=y+130; click(); end if string == "d-" then x=x+60; y=y+130; click(); end if string == "/+" then x=x+80; y=y+90; click(); end if string == "/-" then x=x+60; y=y+110; click(); end if string == "(+" then x=x+ 10; y=y+150; click(); end if string == "(-" then x=x+30; y=y+140; click(); end end recipe =""; --test = string.sub(rps[i], 3, 5); --lsPrintln(test); end multiply = "001"; recording = false; recipe=""; rps={}; function Run() --Loop while not is_done do checkBreak(); anchor(); --Heavy on the system. mouse_x, mouse_y = srMousePos(); last = string.sub(recipe, 0, 5); len = string.len(recipe) / 5; if MoveObject then x = MoveObject[0]; y = MoveObject[1]; blue = 0x4993DDFF; red = 0xFF0000FF; white = 0xFFFFFFFF; text_white = 0xFFFFFFFF; else blue = 0x000000FF; red = 0x000000FF; white = 0x000000FF; text_white = 606348543; lsPrint(65, 65, 4, 0.6, 0.6, 0x000000FF, "Can't see sculpture controls!"); lsDisplaySystemSprite(1, 50, 50, 3, 200, 50, 0xFF0000FF); end if lsMouseIsDown(3) then for i=1,multiply - 1 do white = blue; srClickMouseNoMove(mouse_x, mouse_y, 1); end lsSleep(200); end if lsKeyDown("r") then if recording then recording = false; else recording = true end lsSleep(200); end if lsKeyDown("KP_ENTER") then play(); lsSleep(200); end --Movement keyboard shortcuts if lsKeyDown("w") then x=x+40; y=y+110; if recording then recipe="w-" .. multiply .. recipe; end click(); end if lsKeyDown("s") then x=x+40; y=y+140; if recording then recipe="s-" .. multiply .. recipe; end click(); end if lsKeyDown("a") then x=x+30; y=y+130; if recording then recipe="a-" .. multiply .. recipe; end click(); end if lsKeyDown("d") then x=x+60; y=y+130; if recording then recipe="d-" .. multiply .. recipe; end click(); end if lsKeyDown("e") then x=x+60; y=y+110; if recording then recipe="/-" .. multiply .. recipe; end click(); end if lsKeyDown("<") then x=x+30; y=y+140; if recording then recipe="(-" .. multiply .. recipe; end click(); end --Rotation keyboard shortcuts if lsKeyDown("KP_8") then x=x+140; y=y+90; if recording then recipe="8+" .. multiply .. recipe; end click(); end if lsKeyDown("KP_5") then x=x+140; y=y+140; if recording then recipe="5-" .. multiply .. recipe; end click(); end if lsKeyDown("KP_4") then x=x+130; y=y+130; if recording then recipe="4-" .. multiply .. recipe; end click(); end if lsKeyDown("KP_6") then x=x+160; y=y+130; if recording then recipe="6-" .. multiply .. recipe; end click(); end if lsKeyDown("KP_9") then x=x+160; y=y+110; if recording then recipe="9-" .. multiply .. recipe; end click(); end if lsKeyDown("KP_1") then x=x+130; y=y+140; if recording then recipe="1-" .. multiply .. recipe; end click(); end if lsKeyDown(1) then multiply="001"; end if lsKeyDown(2) then multiply="003"; end if lsKeyDown(3) then multiply="005"; end if lsKeyDown(4) then multiply="010"; end if lsKeyDown(5) then multiply="050"; end if lsKeyDown(6) then multiply="100"; end lsPrint(50, 31, 2, 0.6, 0.6, text_white, recipe); lsPrint(0, lsScreenY - 20, 2, 0.7, 0.7, text_white, mouse_x .." ".. mouse_y .." | ".. multiply .."X | " .. last .." | ".. len); lsDisplaySystemSprite(1, 0, lsScreenY - 20, 0, lsScreenX, 15, blue); if multiply == "001" then x1=blue; else x1=white; end if multiply == "003" then x3=blue; else x3=white; end if multiply == "005" then x5=blue; else x5=white; end if multiply == "010" then x10=blue; else x10=white; end if multiply == "050" then x50=blue; else x50=white; end if multiply == "100" then x100=blue; else x100=white; end if recording then rec_color=red; else rec_color=blue; end if recording then rec_text="Stop"; else rec_text="Rec" end if lsButtonText(0 , 0, z, 50, x1, "1X") then multiply="001"; end if lsButtonText(50 , 0, z, 50, x3, "3X") then multiply="003"; end if lsButtonText(50 * 2 , 0, z, 50, x5, "5X") then multiply="005";end if lsButtonText(50 * 3 , 0, z, 50, x10, "10X") then multiply="010"; end if lsButtonText(50 * 4 , 0, z, 50, x50, "50X") then multiply="050"; end if lsButtonText(50 * 5 , 0, z, 50, x100, "100X") then multiply="100"; end if lsButtonText(0, 25, z, 50, rec_color, rec_text) then if recording then recording = false; else recording = true; end end if lsButtonText(0, 50, z, 50, blue, "Clear") then recipe = ""; end if lsButtonText(85, 60, z, 120, blue, "Play recipe") then play(); end lsPrint(40, 105, 2, 0.7, 0.7, text_white, "Movement"); if lsButtonText(60, 100+25, 1, 25, white, "^") then x=x+40; y=y+90; if recording then recipe="w+" .. multiply .. recipe; end click(); end if lsButtonText(60, 125+25, 1, 25, white, "^") then x=x+40; y=y+110; if recording then recipe="w-" .. multiply .. recipe; end click(); end if lsButtonText(60, 195+25, 1, 25, white, "v") then x=x+40; y=y+140; if recording then recipe="s-" .. multiply .. recipe; end click(); end if lsButtonText(60, 220+25, 1, 25, white, "v") then x=x+40; y=y+150; if recording then recipe="s+" .. multiply .. recipe; end click(); end if lsButtonText(60, 160+25, 1, 25, white, "x") then x=x+40; y=y+130; if recording then recipe="xM" .. multiply .. recipe; end click(); end if lsButtonText(25, 160+25, 1, 25, white, "<") then x=x+30; y=y+130; if recording then recipe="a-" .. multiply .. recipe; end click(); end if lsButtonText(0, 160+25, 1, 25, white, "<") then x=x+10; y=y+130; if recording then recipe="a+" .. multiply .. recipe; end click(); end if lsButtonText(95, 160+25, 1, 25, white, ">") then x=x+60; y=y+130; if recording then recipe="d-" .. multiply .. recipe; end click(); end if lsButtonText(120, 160+25, 1, 25, white, ">") then x=x+70; y=y+130; if recording then recipe="d+" .. multiply .. recipe; end click(); end if lsButtonText(95, 125+25, 1, 25, white, "/") then x=x+60; y=y+110; if recording then recipe="/-" .. multiply .. recipe; end click(); end if lsButtonText(120, 100+25, 1, 25, white, "/") then x=x+80; y=y+90; if recording then recipe="/+" .. multiply .. recipe; end click(); end if lsButtonText(25, 195+25, 1, 25, white, "/") then x=x+30; y=y+140; if recording then recipe="(-" .. multiply .. recipe; end click(); end if lsButtonText(0, 220+25, 1, 25, white, "/") then x=x+ 10; y=y+150; if recording then recipe="(+" .. multiply .. recipe; end click(); end lsPrint(195, 150, 2, 0.7, 0.7, text_white, "Rotation"); if lsButtonText(60+150, 100+70, 1, 25, white, "^") then x=x+140; y=y+90; if recording then recipe="8+" .. multiply .. recipe; end click(); end if lsButtonText(60+150, 125+70, 1, 25, white, "^") then x=x+140; y=y+110; if recording then recipe="8-" .. multiply .. recipe; end click(); end if lsButtonText(60+150, 195+70, 1, 25, white, "v") then x=x+140; y=y+140; if recording then recipe="5-" .. multiply .. recipe; end click();end if lsButtonText(60+150, 220+70, 1, 25, white, "v") then x=x+140; y=y+150; if recording then recipe="5+" .. multiply .. recipe; end click(); end if lsButtonText(60+150, 160+70, 1, 25, white, "x") then x=x+140; y=y+130; if recording then recipe="xR" .. multiply .. recipe; end click(); end if lsButtonText(25+150, 160+70, 1, 25, white, "<") then x=x+130; y=y+130; if recording then recipe="4-" .. multiply .. recipe; end click(); end if lsButtonText(0+150, 160+70, 1, 25, white, "<") then x=x+110; y=y+130; if recording then recipe="4+" .. multiply .. recipe; end click(); end if lsButtonText(95+150, 160+70, 1, 25, white, ">") then x=x+160; y=y+130; if recording then recipe="6-" .. multiply .. recipe; end click(); end if lsButtonText(120+150, 160+70, 1, 25, white, ">") then x=x+170; y=y+130; if recording then recipe="6+" .. multiply .. recipe; end click(); end if lsButtonText(95+150, 125+70, 1, 25, white, "/") then x=x+160; y=y+110; if recording then recipe="9-" .. multiply .. recipe; end click(); end if lsButtonText(120+150, 100+70, 1, 25, white, "/") then x=x+180; y=y+90; if recording then recipe="9+" .. multiply .. recipe; end click(); end if lsButtonText(25+150, 195+70, 1, 25, white, "/") then x=x+130; y=y+140; if recording then recipe="1-" .. multiply .. recipe; end click(); end if lsButtonText(0+150, 220+70, 1, 25, white, "/") then x=x+110; y=y+150; if recording then recipe="1+" .. multiply .. recipe; end click(); end if lsKeyDown("q") then is_done = 1; end lsDoFrame(); lsSleep(10); end end |