This script was intended for treefarms, no?shubla wrote: except sometimes it gets stuck if log gets inside another tree. And sometimes it also starts pathfinding itself to random directions.
Builds Cupboards in area:
Code: Select all
//#! uniq = arcanist_builder
//#! name = Cupboard Builder
//#! icon = gfx/invobjs/small/cheese-tray
include("jBotAPI");
function getRandomArbitary(min, max){
return Math.random() * (max - min) + min;
}
function jPFMove_LX(point) {
point = jTilify(point);
var MyX = jMyCoords().x;
var MyY = jMyCoords().y;
if (jIsPathFree(point)) jAbsClick(point, 1, 0);
else jPFMove(point);
cycles = 0;
wcontinue = true;
while (wcontinue) {
wcontinue = MyX != point.x || MyY != point.y;
jPrint("jPFMove_LX My =" + MyX + " " + MyY + " - " + point.x + " " + point.y);
jSleep(1000);
MyX = jMyCoords().x;
MyY = jMyCoords().y;
if(cycles == 6) {
jPrint("jPFMove_LX trying to move again");
jOffsetClick(jCoord(getRandomArbitary(-2,2),getRandomArbitary(-2,2)),1,0);
jSleep(500);
if (!jIsPathFree(point)) jPFMove(point);
else jAbsClick(point, 1, 0);
cycles = 0
wcontinue = false;
}
cycles++;
}
jPrint("jPFMove ended");
}
function jPFMoveOffset_LX(point, offset) {
offsMoveS=jCoord(0,offset);
offsMoveE=jCoord(offset,0);
offsMoveW=jCoord(-offset,0);
offsMoveN=jCoord(0,-offset);
while (1){
try {
/*
if (jIsPathFree(point.add(offsMoveS.mul(11)))) {
jAbsClick(point, 1, 0);
return offsMoveS;
}
if (jIsPathFree(point.add(offsMoveE.mul(11)))) {
jAbsClick(point, 1, 0);
return offsMoveE;
}
if (jIsPathFree(point.add(offsMoveW.mul(11)))) {
jAbsClick(point, 1, 0);
return offsMoveW;
}
if (jIsPathFree(point.add(offsMoveN.mul(11)))) {
jAbsClick(point, 1, 0);
return offsMoveN;
}
*/
if(jPFMove(point.add(offsMoveS.mul(11))) > 0) {
jPFMove_LX(point.add(offsMoveS.mul(11)));
return offsMoveS;
}
if(jPFMove(point.add(offsMoveE.mul(11))) > 0) {
jPFMove_LX(point.add(offsMoveE.mul(11)));
return offsMoveE;
}
if(jPFMove(point.add(offsMoveW.mul(11))) > 0) {
jPFMove_LX(point.add(offsMoveW.mul(11)));
return offsMoveW;
}
if(jPFMove(point.add(offsMoveN.mul(11))) > 0) {
jPFMove_LX(point.add(offsMoveN.mul(11)));
return offsMoveN;
}
jPrint("jPFMoveOffset_LX can't find path to " + point + " offset " + offset);
// break;
jOffsetClick(jCoord(getRandomArbitary(-2,2),getRandomArbitary(-2,2)),1,0);
jSleep(500);
}
catch(e) {
jPrint(e);
}
}
}
function waitPFEndMove(){
jWaitStartMove(300);
jSleep(100);
while (true) {
jWaitEndMove(10000);
jSleep(200);
if (!jIsMoving()) {
return;
}
}
}
function selectAreaInRect(title) {
jMoveStep(jCoord(0, 0));
var offs = jCoord(0, 0);
var size = jCoord(1, 1);
var confirm = false;
jDrawGroundRect(offs, size);
var blist = ["West", "East", "North", "South", "Inc width", "Inc height", "Dec width", "Dec height", "Confirm", "Exit"];
var selectWindow = jGUIWindow(jCoord(250, 250), jCoord(105, blist.length * 25 + 15), "Area");
var label = jGUILabel(selectWindow, jCoord(5, 5), title);
for(var i = 0; i < blist.length; i++)
jGUIButton(selectWindow, jCoord(5, 25 + i*25), 100, blist[i]);
selectWindow.toggleCloseButton();
var btext = "";
while(btext != "Exit"){
btext = selectWindow.waitButtonClick();
if(btext == blist[0]) offs.x--;
if(btext == blist[1]) offs.x++;
if(btext == blist[2]) offs.y--;
if(btext == blist[3]) offs.y++;
if(btext == blist[4]) size.x++;
if(btext == blist[5]) size.y++;
if(btext == blist[6]) if(size.x > 1) size.x--;
if(btext == blist[7]) if(size.y > 1) size.y--;
if(btext == blist[8]) {confirm = true; break;}
jDrawGroundRect(offs, size);
}
selectWindow.destroy();
jDrawGroundRect(offs, jCoord(0, 0));
var startCoord = jMyCoords().add(offs.mul(11));
var fieldSize = size;
var returns = [];
//jToConsole(size);
//jToConsole(startCoord);
//jToConsole(offs);
returns[0] = jCoord(startCoord.x,startCoord.y ); // Top left
returns[1] = jCoord(startCoord.x,startCoord.y + 11 * (size.y - 1) ); // Bottom Left
returns[2] = jCoord(startCoord.x + 11 * (size.x- 1),startCoord.y ); // Top Right
returns[3] = jCoord(startCoord.x + 11 * (size.x- 1),startCoord.y + 11 * (size.y - 1) ); // Bottom Right
returns[4] = size;
return returns;
}
function goNearPosition( position, offset){
while (jIsMoving() || jMyCoords().dist(position) > offset*11){
jPFMoveOffset_LX(position, offset);
jSleep(500);
}
}
function getBoards(number){
jPrint("Getting Boards");
var obj = jFindObjectByName("items/board", 15);
while (obj == null){
var log = getNearest("log");
goNearPosition( log.position(), 1);
equipSaw();
jDoClick(log.getID(), 3, 0);
jWaitPopup(1000);
jSelectContextMenu("Make Boards");
jWaitProgress(actionTimeout);
var obj = jFindObjectByName("items/board", 15);
}
while (obj != null && checkInventory().freeSlots() > 0 && checkInventory().getItems("items/board").length < number) {
if (obj == null) break;
if (!jIsPathFree(obj.position())) {
jPrint("Found board");
jPrint(obj.position());
jPFMoveOffset_LX(obj.position(), 0);
waitPFEndMove();
}
jDoClick(obj.getID(), 3, 0);
jWaitMove(1000);
jSleep(100);
if (jGetDraggingItem()) {
jDropObject(0);
break;
}
var obj = jFindObjectByName("items/board", 15);
}
}
function makeSign(sign_coord, action, signwindow){
while(!jGetWindow(signwindow)){
jPrint("Trying to make sign");
jPFMoveOffset_LX(sign_coord, 1);
jSendDoubleAction(action[0], action[1]);
jSleep(1000);
jPlace(jCoord(0, -1), 1, 0);
jSleep(1000);
jAbsClick(sign_coord, 3, 0);
var sign = jFindMapObjectNearAbs(sign_coord, 1, "sign");
checkInventory().getItems("board")[0].transferSuchAll();
}
return sign;
}
function openSign(sign, signwindow){
while(!jHaveWindow(signwindow)){
jToConsole("Opening Sign");
goNearPosition(sign.position(), 1);
jSleep(500);
jDoClick(sign.getID(), 3, 0);
jSleep(500);
if (!jHaveWindow(signwindow)) jSleep(500);
}
return;
}
function main(){
var rect = selectAreaInRect("Select area to build");
var signwindow = "Cupboard";
var topleft_coord = rect[0];
var bottomright_coord = rect[3];
var widthtiles = Math.floor((bottomright_coord.x-topleft_coord.x)/11)
var heighttiles = Math.floor((bottomright_coord.y-topleft_coord.y)/11)
for (var height=0;height<=heighttiles;height++){
for (var width=0;width<=widthtiles;width++){
getBoards(8);
var sign = makeSign(jCoord(topleft_coord.x+width*11,topleft_coord.y+height*11), ["bp", "cupboard"], signwindow);
drinkWater();
openSign(sign, signwindow);
var vals = GetBuildValues(signwindow, 1)[0];
jToConsole(vals);
while(vals > 0){
getBoards(GetBuildValues(signwindow, 1)[0]);
drinkWater();
putItemsToSign ("board", sign, signwindow, 1, 1);
var sign = jFindMapObjectNearAbs(jCoord(topleft_coord.x+width*11,topleft_coord.y+height*11), 1, "sign");
jMoveStep(jCoord(0, 0));
jSleep(500);
openSign(sign, signwindow);
var vals = GetBuildValues(signwindow, 1)[0];
jToConsole(vals);
}
var sign = jFindMapObjectNearAbs(jCoord(topleft_coord.x+width*11,topleft_coord.y+height*11), 1, "sign");
openSign(sign, signwindow);
var sign = jFindMapObjectNearAbs(jCoord(topleft_coord.x+width*11,topleft_coord.y+height*11), 1, "sign");
jPrint("Going to build");
jSleep(500);
while (sign){
while(!jHaveWindow(signwindow)){
openSign(sign, signwindow);
}
jSleep(1000);
while (!jHaveHourglass() && jHaveWindow(signwindow)){
jGetWindow(signwindow).pushButton("Build");
jPrint("Pressed Button");
jSleep(250);
}
jWaitStartProgress(actionTimeout);
while (jHaveHourglass()) {
jSleep(500);
}
var sign = jFindMapObjectNearAbs(jCoord(topleft_coord.x+width*11,topleft_coord.y+height*11), 1, "sign");
}
}
}
}
main();
#swag