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 search
 
Line 5: Line 5:
 
[[Image:Discord_w.png|25px|Discord_Logo]]
 
[[Image:Discord_w.png|25px|Discord_Logo]]
 
<font style="font-size:20px"> ATITD Discord Server </font>
 
<font style="font-size:20px"> ATITD Discord Server </font>
'''http://www.discord.me/atitd / https://discord.gg/0kvxEfeM1sBBhy6H'''  
+
'''http://www.discord.me/atitd'''  
 
</td>
 
</td>
 
</tr>
 
</tr>
 
</table>
 
</table>
 
----
 
----
 
+
==Macros==
===Macros/Scripts===
+
[http://www.atitd.org/wiki/tale7/User:Safa/automato How to manually install macros]
[http://www.atitd.org/wiki/tale7/User:Safa/automato How to Install Scripts]
 
 
<!----------------------------------------------- Zemples.lua ----------------------------------------------->
 
<!----------------------------------------------- Zemples.lua ----------------------------------------------->
 
====zemples.lua====
 
====zemples.lua====
 
<font style="font-size:1px">
 
<font style="font-size:1px">
<table border="0" style="width:70%;">
+
<table border="0" style="width:70%; background-color:#feedc8">
  
 
<tr>
 
<tr>
Line 22: Line 21:
 
</tr>
 
</tr>
  
<tr>
+
</table>
<td>
 
<pre style="white-space: pre-wrap; color:white; background-color:#282828;">
 
--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
 
 
 
 
 
</pre>
 
 
 
</td></tr></table>
 
 
</font>
 
</font>
 
<!----------------------------------------------- chariot_stop.lua ----------------------------------------------->
 
<!----------------------------------------------- chariot_stop.lua ----------------------------------------------->
 
====chariot_stop.lua====
 
====chariot_stop.lua====
 
<font style="font-size:1px">
 
<font style="font-size:1px">
<table border="0" style="width:70%;">
+
<table border="0" style="width:70%; background-color:#feedc8">
  
 
<tr>
 
<tr>
Line 279: Line 32:
 
</tr>
 
</tr>
  
<tr>
+
</table>
<td>
 
<pre style="white-space: pre-wrap; color:white; background-color:#282828;">
 
 
 
--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
 
 
 
 
 
</pre>
 
 
 
</td></tr></table>
 
 
</font>
 
</font>
 
 
<!----------------------------------------------- grass.lua ----------------------------------------------->
 
<!----------------------------------------------- grass.lua ----------------------------------------------->
 
 
====grass.lua====
 
====grass.lua====
 
<font style="font-size:1px">
 
<font style="font-size:1px">
<table border="0" style="width:70%;">
+
<table border="0" style="width:70%; background-color:#feedc8">
  
 
<tr>
 
<tr>
Line 1,035: Line 43:
 
</tr>
 
</tr>
  
<tr>
+
</table>
<td>
 
<pre style="white-space: pre-wrap; color:white; background-color:#282828;">
 
 
 
-- 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
 
 
 
 
 
</pre>
 
 
 
</td></tr></table>
 
 
</font>
 
</font>
 
<!----------------------------------------------- gravel.lua ----------------------------------------------->
 
<!----------------------------------------------- gravel.lua ----------------------------------------------->
Line 1,102: Line 49:
 
====gravel.lua====
 
====gravel.lua====
 
<font style="font-size:1px">
 
<font style="font-size:1px">
<table border="0" style="width:70%;">
+
<table border="0" style="width:70%; background-color:#feedc8">
  
 
<tr>
 
<tr>
Line 1,108: Line 55:
 
</tr>
 
</tr>
  
<tr>
+
</table>
<td>
 
<pre style="white-space: pre-wrap; color:white; background-color:#282828;">
 
 
 
--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
 
 
 
 
 
 
 
</pre>
 
 
 
</td></tr></table>
 
 
</font>
 
</font>
 
<!----------------------------------------------- markChatsAsRead.lua ----------------------------------------------->
 
<!----------------------------------------------- markChatsAsRead.lua ----------------------------------------------->
Line 1,173: Line 61:
 
====markChatsAsRead.lua====
 
====markChatsAsRead.lua====
 
<font style="font-size:1px">
 
<font style="font-size:1px">
<table border="0" style="width:70%;">
+
<table border="0" style="width:70%; background-color:#feedc8">
  
 
<tr>
 
<tr>
Line 1,179: Line 67:
 
</tr>
 
</tr>
  
<tr>
+
</table>
<td>
 
<pre style="white-space: pre-wrap; color:white; background-color:#282828;">
 
 
 
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
 
 
 
 
 
 
 
</pre>
 
 
 
</td></tr></table>
 
 
</font>
 
</font>
 
<!----------------------------------------------- mod_assist.lua ----------------------------------------------->
 
<!----------------------------------------------- mod_assist.lua ----------------------------------------------->
Line 1,218: Line 73:
 
====mod_assist.lua====
 
====mod_assist.lua====
 
<font style="font-size:1px">
 
<font style="font-size:1px">
<table border="0" style="width:70%;">
+
<table border="0" style="width:70%; background-color:#feedc8">
  
 
<tr>
 
<tr>
Line 1,224: Line 79:
 
</tr>
 
</tr>
  
<tr>
+
</table>
<td>
 
<pre style="white-space: pre-wrap; color:white; background-color:#282828;">
 
 
 
-- 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
 
 
 
 
 
 
 
</pre>
 
 
 
</td></tr></table>
 
 
</font>
 
</font>
 
<!----------------------------------------------- oven_timer.lua----------------------------------------------->
 
<!----------------------------------------------- oven_timer.lua----------------------------------------------->
Line 1,893: Line 85:
 
====oven_timer.lua====
 
====oven_timer.lua====
 
<font style="font-size:1px">
 
<font style="font-size:1px">
<table border="0" style="width:70%;">
+
<table border="0" style="width:70%; background-color:#feedc8">
  
 
<tr>
 
<tr>
Line 1,899: Line 91:
 
</tr>
 
</tr>
  
<tr>
+
</table>
<td>
 
<pre style="white-space: pre-wrap; color:white; background-color:#282828;">
 
 
 
--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
 
 
 
 
 
 
 
</pre>
 
 
 
</td></tr></table>
 
</font>
 
<!----------------------------------------------- resin.lua ----------------------------------------------->
 
 
 
====resin.lua====
 
<font style="font-size:3px">
 
<table border="0" style="width:70%;">
 
 
 
<tr>
 
<td><font style="font-size:13px">[https://drive.google.com/open?id=0Bydp4KA9MLkKeHlmRkVtNDN1Mjg Download] [[Image:Automato.png|15px|Automato_Logo]] Gathers resin with middle mouse button.</font></td>
 
</tr>
 
 
 
<tr>
 
<td>
 
<pre style="white-space: pre-wrap; color:white; background-color:#282828;">
 
 
 
--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
 
 
 
 
 
 
 
</pre>
 
 
 
</td></tr></table>
 
 
</font>
 
</font>
 
<!----------------------------------------------- sculptor.lua ----------------------------------------------->
 
<!----------------------------------------------- sculptor.lua ----------------------------------------------->
Line 2,169: Line 97:
 
====sculptor.lua====
 
====sculptor.lua====
 
<font style="font-size:1px">
 
<font style="font-size:1px">
<table border="0" style="width:70%;">
+
<table border="0" style="width:70%; background-color:#feedc8">
  
 
<tr>
 
<tr>
Line 2,175: Line 103:
 
</tr>
 
</tr>
  
<tr>
+
</table>
<td>
 
<pre style="white-space: pre-wrap; color:white; background-color:#282828;">
 
 
 
--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
 
 
 
 
 
 
 
</pre>
 
 
 
</td></tr></table>
 
 
</font>
 
</font>
  
 
----
 
----
  
===Off Topic===
+
==Off Topic==
  
 
====Demipharaoh Debate 2016/09====
 
====Demipharaoh Debate 2016/09====
Line 2,400: Line 139:
 
<font style="font-size:15px; color:#666666;">I set up an easier to use voice chat server for ATITD on Discord because including me some players find teamspeak and mumble too much of a hassle. It is free and available 24/7. Linked at the top of this page.
 
<font style="font-size:15px; color:#666666;">I set up an easier to use voice chat server for ATITD on Discord because including me some players find teamspeak and mumble too much of a hassle. It is free and available 24/7. Linked at the top of this page.
  
One thing i started doing very recently is creating content for the game. ATITD is really in need of content creators. We never advertise the game. Playerbase is slowly dying and new players are a rarity. My goal is to help people see beyond the dated graphics of the game and realise what a gem Atitd is. You can see the first video in this project called [https://www.youtube.com/watch?v=RokoegJxoKw Beauty of Atitd] here.</font>
+
One thing i started doing very recently is creating content for the game. ATITD is really in need of content creators. We never advertise the game. Playerbase is slowly dying and new players are a rarity. My goal is to help people see beyond the dated graphics of the game and realise what a gem Atitd is. You can see the first video in this project called [https://www.youtube.com/watch?v=RokoegJxoKw Beauty of Atitd] here.
 +
 
 +
I'm also working on http://www.atitd.org/wiki/tale7/Sculpture_Palette for sculpture lovers.
 +
</font>
  
  
 
'''Q7. How do you feel about sometimes heavy use of macros in this game by many players? and If there was a choice would you support complete ban of macros in the Tale?'''
 
'''Q7. How do you feel about sometimes heavy use of macros in this game by many players? and If there was a choice would you support complete ban of macros in the Tale?'''
  
<font style="font-size:15px; color:#666666;">This is a question i like. If you scroll up you can see im one of the suppliers of these macros and i don't get this macros are evil way of thinking. If you have a vacuum cleaner and a broom. Nobody would judge you for using the vacuum cleaner. You are of course free to sweep the whole house with the broom but truthfully would you? Using macros is nothing different. You can do the same task over and over or you can leave it to your computer. ATITD is a grindy game. You will never run out of things to do even with macros. Also the community graciously shares the macros they make with the public. I don't see the logic behind choosing the broom then complaining about the vacuum.
+
<font style="font-size:15px; color:#666666;">
 
 
  
Lastly, macros can never be banned successfully. There is always a way around any precaution. I can assure you they will get used in secret and it will be unfair when that happens. </font>
+
Macros can never be banned successfully. There is always a way around any precaution. </font>
  
  

Latest revision as of 19:20, 18 December 2016

Discord_Logo ATITD Discord Server http://www.discord.me/atitd


Macros

How to manually install macros

zemples.lua

Download Automato_Logo Reads contents of multiple warehouses and makes a list of all raeli tiles.

chariot_stop.lua

Download Automato_Logo Travels to desired destination using shortest path when it is free.

grass.lua

Download Walks and gathers grass.

gravel.lua

Download Drops every type of stone in your inventory and smashes them in place.

markChatsAsRead.lua

Download Goes through every chat tab in a second.

mod_assist.lua

Download Automato_Logo Makes it easier to moderate boards with buttons and shortcuts.

oven_timer.lua

Download Automato_Logo Finds the desired dredge rate by continuously restarting dredge process.

sculptor.lua

Download Automato_Logo Moves sculpture pieces with keystrokes. Executes pre-made recipes.


Off Topic

Demipharaoh Debate 2016/09

Q1. For those who have never had the opportunity to interact with you before can you share a little about yourself, what you enjoy about ATITD as well as how long you have been playing?

I discovered ATITD at a very young age when i didn't know a single word of english. This was in T3. My fascination with the game and the community resulted in me sleeping with a huge dictionary for months. I'm 23 today and still in love with ATITD for so many reasons. I mostly played in T6 and been here since the beginning of T7. I really enjoy the problemsolving that comes with complex mechanics of this game and i find travelling in the desert very calming.


Q2. How you like T7 so far, it's better or worst than previous Tales. Which Tale was your favorite?

No complaints about T7. Can't say it is better or worse than previous tales but game is finally getting some love from devs im happy about that. My favorite tale is definetly T3 because of nostalgia.


Q3. If the general consensus of the rest of the DPs were that that person should not be banned, but you felt strongly that they should, what would you do?

Personally i don't think anyone but pharaoh should have that kind of power. Sadly this test is and always have been a popularity contest. People usually vote for their friends or the most popular candidate. Therefore there is always the possibility of a DP not being objective when a friend is involved.

Q4. How's your progress in other Leadership tests?

I tend to avoid discipline of leadership for the reasons i stated in previous question but i will try to be the change i want to see in egypt if egypt finds me worthy of this task.


Q5. How are you providing leadership in the game and amongst the player base?

I've been an elder in Zfree and Zemples for a long time. These are sizeable guilds focused on helping players. Zemples for example helped more than 30 people pass funerary this tale and that number is still counting. I've been organising this process since T6.


Q6. What specifically have you done to further the growth of the community?

I set up an easier to use voice chat server for ATITD on Discord because including me some players find teamspeak and mumble too much of a hassle. It is free and available 24/7. Linked at the top of this page.

One thing i started doing very recently is creating content for the game. ATITD is really in need of content creators. We never advertise the game. Playerbase is slowly dying and new players are a rarity. My goal is to help people see beyond the dated graphics of the game and realise what a gem Atitd is. You can see the first video in this project called Beauty of Atitd here.

I'm also working on http://www.atitd.org/wiki/tale7/Sculpture_Palette for sculpture lovers.


Q7. How do you feel about sometimes heavy use of macros in this game by many players? and If there was a choice would you support complete ban of macros in the Tale?

Macros can never be banned successfully. There is always a way around any precaution.


Q8. Spouselog allows access to ban powers. Do you know who have access to your spouse account?

No one.


Q9. As DP do you think you should share your password? Do you think a DP should have access to other DP accounts?

DPs should take responsibility for their actions. Sharing passwords between each other can complicate things.


Q10. What other powers would you like to see DPs hold, in the interests of improving game play?

It would be nice to influence the game/world instead of only playing police. I would love to see DPs as loremakers or worldbuilders with some limitations.


Q11. What question would you like to be asked, and why?

Do you want a back massage and hot chocolate?

Yes. I do.


Q12. Closing statement.

I promise a small loan of 1 million charcoal to every citizen who votes for me. Make ATITD great again.