Union Client Scripts

Forum for alternative clients, mods & discussions on the same.

Moderator: Phades

A684
Posts: 14
Joined: Sat Jan 01, 2011 1:47 pm

Re: Union Client Scripts

Post by A684 »

Who can give me a miner bot?(for Union)) many thanks in advance :)
A684
Posts: 14
Joined: Sat Jan 01, 2011 1:47 pm

Re: Union Client Scripts

Post by A684 »

WitchKiller34 wrote:Here are the fixed farmer and taker scripts:

note: farmer needs to have water bucket(s) & waterflask/skin, if water runs out then script stops... also have a shovel in the inventory to speed it up and consume less water.

Code: Select all

//#! name = Farmer
//#! uniq = farmer_apxproductions
//#! icon = gfx/invobjs/seed-hops
// Globals
var inventory = checkInventory();
var harvester;

// Settings
var actionTimeout = 1000 * 60 * 2;	// Lag timeout
var cannotPlantTimeout = 1000 * 10;	// Non-plowed tile timeout
var cropRadius = 3;					// Ðàäèóñ â êîòîðì èäåò ïîèñê (âåðõ, ïðàâî, íèç, ëåâî)

// Flags
var stopFlag = false;

/* =========================================================================== */
/* ==============================	ÌÎÐÊÎÂÊÀ	============================== */
/* =========================================================================== */
function CarrotHarvester() {
    this.cropName = "plants/carrot";		// Èìÿ êðîïà êîòîðûé íóæíî õàðâåñòèòü
    this.cropSeedName = "invobjs/carrot";	// Èìÿ ñåìå÷êè êîòîðóþ íóæíî ñàæàòü
	this.cropStage = 4;						// Ñòàäèÿ îáðàáîòêè
}
CarrotHarvester.prototype.processHarvestedGoods = function() {
    inventory = checkInventory();
	
	var seeds = inventory.getItems(this.cropSeedName);
	var free = inventory.freeSlots();
	var i = 0;
	if (free < 3) {
		inventory.sortItems(seeds, "quality", false);
		for (i = 0; i < 3 - free; i++) {
			// Åñòü ìîðêîâü åñëè ãîëîäåí
			if (jGetHungry() < 95) {
				if (seeds[i].isActual()) {
					seeds[i].iact();
					jWaitPopup(actionTimeout);
					jSelectContextMenu("Eat");
					waitUnActual(seeds[i]);
				}
			}
			// Âûáðîñèòü ëèøêó
			if (seeds[i].isActual()) {
				seeds[i].drop();
			}
		}
	}
};

/* =========================================================================== */
/* ==============================	ÑÂÅÊËÀ		============================== */
/* =========================================================================== */
function BeetHarvester() {
    this.cropName = "plants/beetroot";		// Èìÿ êðîïà êîòîðûé íóæíî õàðâåñòèòü
    this.cropSeedName = "invobjs/beetroot";	// Èìÿ ñåìå÷êè êîòîðóþ íóæíî ñàæàòü
	this.cropStage = 3;						// Ñòàäèÿ îáðàáîòêè
}
BeetHarvester.prototype.processHarvestedGoods = function() {
    inventory = checkInventory();
	
	var seeds = inventory.getItems(this.cropSeedName);
	var free = inventory.freeSlots();
	var i = 0;
	//dropsleaves
	var leaves = inventory.getItems("beetrootleaves");
	if(leaves.length > 0)
		if(leaves[0].isActual())
			leaves[0].dropSuchAll();
	while(leaves.length > 0)
	{
		leaves = inventory.getItems("beetrootleaves");
		jSleep(500);
	}
	if (free < 6) {
		inventory.sortItems(seeds, "quality", false);
		for (i = 0; i < 4 - free; i++) {
			if (jGetHungry() < 95) {
				if (seeds[i].isActual()) {
					seeds[i].iact();
					jWaitPopup(actionTimeout);
					jSelectContextMenu("Eat");
					waitUnActual(seeds[i]);
				}
			}
			if (seeds[i].isActual()) {
				seeds[i].drop();
			}
		}
	}
};

/* =========================================================================== */
/* ==============================	ÂÈÍÎÃÐÀÄ	============================== */
/* =========================================================================== */
function WineHarvester() {
    this.cropName = "plants/wine";		// Èìÿ êðîïà êîòîðûé íóæíî õàðâåñòèòü
    this.cropSeedName = "invobjs/seed-grape";	// Èìÿ ñåìå÷êè êîòîðóþ íóæíî ñàæàòü
	this.packName = "invobjs/grapes";
	this.cropStage = 3;						// Ñòàäèÿ îáðàáîòêè
	this.barrelID = 0; //id of barrel
	this.pressID = 0; //id of winepress
	this.containerID = 0;
	this.startCoord = jCoord(0, 0);
	this.fieldSize = jCoord(0, 0);
	this.offsMove = jCoord(2, 0);
}

WineHarvester.prototype.selectObjects = function() {
	var bar = jSelectObject("Select barrel...");
	if(bar.name().indexOf("barrel") == -1)
	{
		jToConsole("ERROR: This is not a barrel!");
		return false;
	}
	else this.barrelID = bar;
	var pr = jSelectObject("Select winepress...");
	if(pr.name().indexOf("winepress") == -1)
	{
		jToConsole("ERROR: This is not a press!");
		return false;
	}
	else this.pressID = pr;
	var cnt = jSelectObject("Select container (chest/lchest)...");
	if(cnt.name().indexOf("cclosed") == -1 && cnt.name().indexOf("lchest") == -1)
	{
		jToConsole("ERROR: This is not a container!");
		return false;
	}
	else this.containerID = cnt;
	return true;
}

WineHarvester.prototype.selectRect = function() {
	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), "Test");
	var label = jGUILabel(selectWindow, jCoord(5, 5), "Select grapes area.");
	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));
	this.startCoord = jMyCoords().add(offs.mul(11));
	this.fieldSize = size;
	return confirm;
}

WineHarvester.prototype.processHarvesting = function() {
	var result = false;
	var grapes = jGetObjectsInRect(this.startCoord, this.fieldSize, this.cropStage, [this.cropName]);
	inventory = checkInventory();
	var cuts = Math.floor((inventory.freeSlots() - 1)/3); //õóéïèçäà
	if(cuts > 8) cuts = 8;
	var currentgrape = 0;
	while(1)
	{
		if(currentgrape >= grapes.length) {result = true; break;}
		//cursor
		if(!jIsCursor("harvest")) {
			jSendAction("harvest");
			jWaitCursor("harvest", actionTimeout);
		}
		//harvesting grapes
		for(var i = 0; i < cuts; i++)
		{
			if(jGetStamina() < 50) drinkWater();
			if(currentgrape >= grapes.length) break;
			jDoClick(grapes[currentgrape], 1, 0);
			jWaitProgress(actionTimeout);
			currentgrape++;
		}
		//got pack of grapes
		resetCursor();
		//goes to press
		jAbsClick(this.pressID.position().add(this.offsMove.mul(11)), 1, 0);
		jWaitMove(actionTimeout);
		jDoClick(this.pressID, 3, 0);
		jWaitWindow("Winepress", actionTimeout);
		//no window in lag/etc
		jSleep(100);
		if(!jHaveWindow("Winepress")) {result = false; break;}
		//transfers all grapes to winepress
		inventory.getItems(this.packName)[0].transferSuchAll();
		//waits transfering
		while(inventory.getItems(this.packName).length > 0)
			jSleep(300);
		//making juice
		jGetWindow("Winepress").pushButton(1);
		while(jGetWindow("Winepress").getInventories()[0].getItems(this.packName).length > 0)
			jSleep(500);
		//lifts press
		var pc = this.pressID.position();// memorizing press coords
		jSendAction("carry");
		jWaitCursor("chi", actionTimeout);
		//lag
		if(!jIsCursor("chi")) {result = false; break;}
		jDoClick(this.pressID, 1, 0);
		jSleep(1500);
		/*while(!jAvatarIsCarrying(jGetMyID()))
			jSleep(200);*/
		//juice to barrel
		jDoClick(this.barrelID, 3, 0);
		jWaitMove(actionTimeout);
		jSleep(2000);
		//placing press back
		jAbsClick(pc, 3, 0);
		jWaitMove(actionTimeout);
		/*while(jAvatarIsCarrying(jGetMyID()))
			jSleep(200);*/
		//getting seeds from press
		jDoClick(this.pressID, 3, 0);
		jWaitWindow("Winepress", actionTimeout);
		//no window in lag/etc
		jSleep(100);
		if(!jHaveWindow("Winepress")) {result = false; break;}
		//transfer to pack seeds
		jGetWindow("Winepress").getInventories()[0].getItems("")[0].transferSuchAll();
		while(jGetWindow("Winepress").getInventories()[0].getItems("").length > 0)
			jSleep(200);
		//offset move
		jMoveStep(this.offsMove);
		jWaitMove(actionTimeout);
		//going to lchect
		var lc = this.containerID.position().add(this.offsMove.mul(11));
		jAbsClick(lc, 1, 0);
		jWaitMove(actionTimeout);
		jDoClick(this.containerID, 3, 0);
		jWaitWindow("Chest", actionTimeout);
		//no window in lag/etc
		jSleep(100);
		if(!jHaveWindow("Chest")) {result = false; break;}
		var bags = jGetWindow("Chest").getInventories()[0].getItems("invobjs/bag-seed");
		var cbag = 0; //current bag
		inventory = checkInventory();
		//transferring seeds, btw i hate loftar
		while(inventory.getItems(this.cropSeedName).length >= 1)
		{
			if(cbag >= bags.length) {result = true; break;}
			var cnt = inventory.getItems(this.cropSeedName).length; //inventory count
			bags[cbag].iact();
			//opens seedbag
			while(!jHaveWindow("Seedbag"))
				jSleep(200);
			//check for free slots
			if(jGetWindow("Seedbag").getInventories()[0].freeSlots() == 0)
			{
				jGetWindow("Seedbag").close();
				while(jHaveWindow("Seedbag"))
					jSleep(200);
				cbag++;
				continue;
			}
			jSleep(100);
			var free = jGetWindow("Seedbag").getInventories()[0].freeSlots(); //free slots in seedbag
			inventory.getItems(this.cropSeedName)[0].transferSuchAll();
			while(inventory.getItems(this.cropSeedName).length > Math.abs(cnt - free))
				jSleep(200);
			jGetWindow("Seedbag").close();
			while(jHaveWindow("Seedbag"))
				jSleep(200);
			cbag++;
		}
		//èäèòå íà õóé, ìíå ëåíü ÷òîòî äåëàòü ñ ýòèìè ñåìåíàìè
		if(result == true) {inventory.getItems(this.cropSeedName)[0].dropSuchAll(); jSleep(1000); break;} //break if all bags r full
		//checks barrel
		var bc = this.barrelID.position().add(this.offsMove.mul(11));
		jAbsClick(bc, 1, 0);
		jWaitMove(actionTimeout);
		jDoClick(this.barrelID, 3, 0);
		while(!jHaveWindow("Barrel"))
			jSleep(500);
		//barrel label
		var blbl = jGetWindow("Barrel").getLabelText(1);
		if(blbl.indexOf("100.0") != -1) {result = true; break;} //breaks if barrel is full
	}//1
	return result;
}

WineHarvester.prototype.plantGrapes = function() {
	jMoveStep(this.offsMove);
	jWaitMove(actionTimeout);
	//going to lchect
	var lc = this.containerID.position().add(this.offsMove.mul(11));
	jAbsClick(lc, 1, 0);
	jWaitMove(actionTimeout);
	jDoClick(this.containerID, 3, 0);
	jWaitWindow("Chest", actionTimeout);
	//no window in lag/etc
	jSleep(100);
	if(!jHaveWindow("Chest")) return false;
	jGetWindow("Chest").getInventories()[0].getItems("invobjs/bag-seed-f")[0].transferSuchAll();
	jSleep(1000);
	inventory = checkInventory();
	var fullbags = inventory.getItems("invobjs/bag-seed-f");
	for(var i = 0; i < fullbags.length; i++)
		fullbags[i].iact();
	while(jGetWindows("Seedbag").length < fullbags.length)
		jSleep(200);
	var swnds = jGetWindows("Seedbag");
	var allseeds = [];
	for(var i = 0; i < swnds.length; i++)
	{
		var sinvs = swnds[i].getInventories()[0].getItems(this.cropSeedName);
		for(var j = 0; j < sinvs.length; j++)
			allseeds.push(sinvs[j]);
	}
	//allseeds.sort(sortFunction2); //à Àðõ õóé!
	var cseed = 0;
	var overflow = false;
	jAbsClick(jTilify(this.startCoord), 1, 0);
	jWaitMove(actionTimeout);
	for(var i = 0; i < this.fieldSize.x; i++) {
		if(overflow == true) break;
		for(var j = 0; j < this.fieldSize.y; j++) {
			if(cseed >= allseeds.length) {overflow = true; break;}
			if(jGetStamina() < 50) drinkWater();
			jAbsClick(this.startCoord.add(i*11, j*11));
			jWaitMove(actionTimeout);
			if(jFindObjectByName(this.cropName, 3) != 0) continue;
			plantNewCrop(this, false);
			/*if(!jGetTileType(jCoord(0, 0)) != 9) plowTile();
			allseeds[cseed].take();
			jWaitDrag(actionTimeout);
			jAbsInteractClick(jCoord(0, 0), 3, 0);
			jWaitDrop(actionTimeout);
			jSleep(100);*/
			cseed++;
		}
		jSleep(100);
	}
	jToConsole("test");
}
/* =========================================================================== */
/* ==============================	ÊÎÍÎÏËß		============================== */
/* =========================================================================== */
function HempHarvester() {
    this.cropName = "plants/hemp";		// Èìÿ êðîïà êîòîðûé íóæíî õàðâåñòèòü
    this.cropSeedName = "invobjs/seed-hemp";	// Èìÿ ñåìå÷êè êîòîðóþ íóæíî ñàæàòü
	this.cropStage = 4;						// Ñòàäèÿ îáðàáîòêè
	bagsSeedsSorter(this);
}
HempHarvester.prototype.processHarvestedGoods = function() {
    bagsSeedsSorter(this);
};

/* =========================================================================== */
/* ==============================	ËÅÍ			============================== */
/* =========================================================================== */
function FlaxHarvester() {
    this.cropName = "plants/flax";		// Èìÿ êðîïà êîòîðûé íóæíî õàðâåñòèòü
    this.cropSeedName = "invobjs/flaxseed";	// Èìÿ ñåìå÷êè êîòîðóþ íóæíî ñàæàòü
	this.cropStage = 3;						// Ñòàäèÿ îáðàáîòêè
}
FlaxHarvester.prototype.processHarvestedGoods = function() {
    bagsSeedsSorter(this);
};

/* =========================================================================== */
/* ==============================	ÏÅÐÅÖ		============================== */
/* =========================================================================== */
function PepperHarvester() {
    this.cropName = "plants/pepper";		// Èìÿ êðîïà êîòîðûé íóæíî õàðâåñòèòü
    this.cropSeedName = "invobjs/seed-pepper";	// Èìÿ ñåìå÷êè êîòîðóþ íóæíî ñàæàòü
	this.cropStage = 3;						// Ñòàäèÿ îáðàáîòêè
}
PepperHarvester.prototype.processHarvestedGoods = function() {
    bagsSeedsSorter(this);
};

/* =========================================================================== */
/* ==============================	×ÀÉ 		============================== */
/* =========================================================================== */
function TeaHarvester() {
    this.cropName = "plants/tea";		// Èìÿ êðîïà êîòîðûé íóæíî õàðâåñòèòü
    this.cropSeedName = "invobjs/seed-tea";	// Èìÿ ñåìå÷êè êîòîðóþ íóæíî ñàæàòü
	this.cropStage = 3;						// Ñòàäèÿ îáðàáîòêè
	this.leaveName = "invobjs/tea-fresh";
	this.containerID = 0;
}
TeaHarvester.prototype.processHarvestedGoods = function() {
    bagsSeedsSorter(this);
};

TeaHarvester.prototype.selectObjects = function() {
	var cnt = jSelectObject("Select container (chest/lchest)...");
	if(cnt.name().indexOf("cclosed") == -1 && cnt.name().indexOf("lchest") == -1)
	{
		jToConsole("ERROR: This is not a container!");
		return false;
	}
	else this.containerID = cnt;
	return true;
}
/* =========================================================================== */
/* ==============================		ÌÀÊ		============================== */
/* =========================================================================== */
function PoppyHarvester() {
    this.cropName = "plants/poppy";		// Èìÿ êðîïà êîòîðûé íóæíî õàðâåñòèòü
    this.cropSeedName = "invobjs/seed-poppy";	// Èìÿ ñåìå÷êè êîòîðóþ íóæíî ñàæàòü
	this.cropStage = 4;						// Ñòàäèÿ îáðàáîòêè
}
PoppyHarvester.prototype.processHarvestedGoods = function() {
	bagsSeedsSorter(this);
};

/* =========================================================================== */
/* ==============================	ÏØÅÍÈ×ÊÀ	============================== */
/* =========================================================================== */
function WheatHarvester() {
    this.cropName = "plants/wheat";		// Èìÿ êðîïà êîòîðûé íóæíî õàðâåñòèòü
    this.cropSeedName = "wheat";	// Èìÿ ñåìå÷êè êîòîðóþ íóæíî ñàæàòü
	this.cropStage = 3;						// Ñòàäèÿ îáðàáîòêè
}
WheatHarvester.prototype.processHarvestedGoods = function() {
    bagsSeedsSorter(this);
};
/*==============================Êðîï÷èêè============================================*/

function bagsSeedsSorter(harv) {
	inventory = checkInventory();
	var bags = inventory.getItems("invobjs/bag-seed");
	var free = inventory.freeSlots();
	var fslots = 0;
	
	if (bags.length > 0) {
		var windows = jGetWindows("Seedbag");
		if (windows.length > 0) {
			var seeds = [];
			var maxseedscount = bags.length * 9;
			//getting seeds from all seedbags into array
			for (var i = 0; i < windows.length; i++) {
				var inv = waitInventory(windows[i], 0);
				fslots += inv.freeSlots();
				var bufseeds = inv.getItems(harv.cropSeedName);
				for (var j = 0; j < bufseeds.length; j++) {
					seeds.push(bufseeds[j]);
				}
			}
			//from inventory to same array
			var invseeds = inventory.getItems(harv.cropSeedName);
			for (var j = 0; j < invseeds.length; j++) {
				seeds.push(invseeds[j]);
			}
			//calculation quality of all seeds
			var allq = 0;
			for (var j = 0; j < seeds.length; j++) {
				allq += seeds[j].quality();
			}
			//medium quality
			var mediumrange = (allq / seeds.length) - 1;
			//correcting medium q
			//too many seeds
			if(fslots < 9)
				mediumrange += 1;
			
			if (seeds.length > maxseedscount * 0.75) {
				for (var j = 0; j < seeds.length; j++) {
					if (seeds[j].quality() <= mediumrange) seeds[j].drop();
				}
				organizeBags(inventory, harv.cropSeedName);
			}
		}//bags windows
	}
	if (inventory.freeSlots() < 4 && bags.length < 1) {
		inventory.sortItems(inventory.getItems(harv.cropSeedName), "quality", false);
		for (i = 0; i < 3 - free; i++) {
			if (seeds[i].isActual()) {
				seeds[i].drop();
			}
		}
	}
}

function organizeBags(inv, name) {
	var bagw = jGetWindows("Seedbag");
	if(bagw.length < 1) return;
	var fullb, nextb;
	fullb = 0;
	nextb = bagw.length - 1;
	while(1)
	{
		if(fullb == nextb) break; //breaks if filling bag == last bag
		if(bagw[fullb].getInventories()[0].freeSlots() == 0) {
			fullb++;
			continue;
		}
		if(bagw[nextb].getInventories()[0].freeSlots() == 9) {
			nextb--;
			continue;
		}
		var freeSlot = bagw[fullb].getInventories()[0].freeSlotsCoords()[0]; //getting 1st empty slot at current filling bag
		var seed = bagw[nextb].getInventories()[0].getItems(name)[0];	 //getting 1st seed at current emptying bag
		seed.take();
		jWaitDrag();
		bagw[fullb].getInventories()[0].drop(freeSlot); //drops to filling bag
		jWaitDrop();
	}
}

function openAllSeedbags() {
	inv = checkInventory();
	var bags = inv.getItems("invobjs/bag-seed");
	if(bags.length < 1)
		return;
	for(var i = 0; i < bags.length; i++)
		if(bags[i].isActual())
			bags[i].iact();
	while(jGetWindows("Seedbag").length != bags.length)
		jSleep(300);
}

function waitUnActual(item) {
	while (item.isActual()) {
		jSleep(100);
	}
}

function resetCursor() {
	if (!jIsCursor("arw")) {
		jAbsClick(jCoord(0, 0), 3, 0);
		jWaitCursor("arw", actionTimeout);
	}
}

function checkInventory() {
	if(!jHaveWindow("Inventory")) {
		jToggleInventory();
		while(!jHaveWindow("Inventory"))
			jSleep(100);
	}
	return jGetWindow("Inventory").getInventories()[0];
}

function checkEquipment() {
	if(!jHaveWindow("Equipment")) {
		jToggleEquipment();
		while(!jHaveWindow("Equipment"))
			jSleep(100);
	}
	return jGetJSEquip();
}

function waitInventoryObject(inv, objname) {
	while (true) {
		var objs = inv.getItems(objname);
		if (objs.length > 0) break;
		else jSleep(100);
	}	
}

function waitUnActual(item) {
	while (item.isActual()) {
		jSleep(100);
	}
}

function drinkWater() {
	if (jGetStamina() > 80) return;
	inventory = checkInventory();
	var buckets = inventory.getItems("bucket-water");
	if (buckets.length > 0) {
		inventory.sortItems(buckets, "amount", false);
		var bucket = buckets[0];
		var bucket_coord = bucket.coord();
		if (bucket.isActual()) {
			bucket.take();
			jWaitDrag();
			var flasks = inventory.getItems("waterflask", "waterskin");
			if (flasks.length > 0) {
				var flask = flasks[0];
				if (flask.isActual()) {
					flask.itemact(0);
					jSleep(500);
					inventory.drop(bucket_coord);
					jWaitDrop();
				}
			}
		}
	}
	var flasks = inventory.getItems("waterflask", "waterskin");
	if (flasks.length > 0) {
		var flask = flasks[0];
		if (flask.isActual()) {
			flask.iact();
			if (jWaitPopup(actionTimeout)) {
				jSelectContextMenu("Drink");
				jWaitProgress();
			} else {
				// No water
				stopFlag = true;
			}
		}
	}
}

function TileInfo(crd) {
	this.coord = crd;
}

function findCrop(harv) {
	var objid = 0;
	for (var i = 0; i < cropRadius; i++) {
		objid = (jFindObjectWithOffset(harv.cropName, 1, jCoord(0, i))); // down
		if (objid && objid.blob(0) == harv.cropStage) return objid;
	}
	for (var i = 0; i < cropRadius; i++) {
		objid = jFindObjectWithOffset(harv.cropName, 1, jCoord(0, -i)); // up
		if (objid && objid.blob(0) == harv.cropStage) return objid;
	}
	for (var i = 0; i < cropRadius; i++) {
		objid = jFindObjectWithOffset(harv.cropName, 1, jCoord(i, 0)); // right
		if (objid && objid.blob(0) == harv.cropStage) return objid;
	}
	for (var i = 0; i < cropRadius; i++) {
		objid = jFindObjectWithOffset(harv.cropName, 1, jCoord(-i, 0));// left
		if (objid && objid.blob(0) == harv.cropStage) return objid;
	}
	objid = jFindObjectByName(harv.cropName, cropRadius);
	if (objid.blob(0) != harv.cropStage) objid = -1;
	return objid;
}

function dropItem(coord) {
	var items = inventory.getItems("");
	for (var i = 0; i < items.length; i++) {
		if (items[i].coord().x == coord.x && items[i].coord().y == coord.y) { 
			items[i].drop();
			break;
		}
	}	
}

function waitDragName(name) {
	while (true) {
		var item = jGetDraggingItem();
		if (item != null) {
			if (item.resName() != null) {
			if (item.resName().indexOf(name) >= 0) {
				break;
			} else {
				jSleep(100);
			}
			} else jSleep(100);
		} else {
			break;
		}
	}
}

function equipScythe() {
	var equip = checkEquipment();
	var scythe = inventory.getItems("scythe")[0];
	if (!scythe) return;
	if (equip.resName(6).indexOf("shovel") >= 0) {
		equip.takeAt(6);
		jWaitDrag(actionTimeout);
		inventory.drop(scythe.coord());
		jSleep(1000);
		waitDragName("scythe");
		equip.dropTo(6);
		jWaitDrop(actionTimeout);
	}
}

function equipShovel() { // From scythe
	var equip = checkEquipment();
	var shovel = inventory.getItems("shovel")[0];
	if (!shovel) return;
	if (equip.resName(6).indexOf("scythe") >= 0) {
		dropItem(shovel.coord().add(0, 2));
		equip.takeAt(6);
		jWaitDrag(actionTimeout);
		inventory.drop(shovel.coord());
		jSleep(1000);
		waitDragName("shovel");
		equip.dropTo(6);
		jWaitDrop(actionTimeout);
	}
}

function plowTile() {
	drinkWater();
	equipShovel();
	jSendAction("plow");
	jWaitCursor("dig", actionTimeout);
	jOffsetClick(jCoord(0, 0), 1, 0);
	jWaitProgress();
	jOffsetClick(jCoord(0, 0), 3, 0);
	jWaitCursor("arw", actionTimeout);
}

function sayArea(text) {
	var chats = jGetChats();
	for (var i = 0; i < chats.length; i++) {
		if (chats[i].chatName().indexOf("Area Chat") >= 0) {
			chats[i].sendMessage(text);
			break;
		}
	}
}

function sortFunction2(a, b) {
	if (!a.isActual() || !b.isActual()) return 0;
	else return a.quality() - b.quality();
}

function sortFunction(a, b) {
	if (!a.isActual() || !b.isActual()) return 0;
	if (a.quality() < b.quality()) return 1;
	if (a.quality() > b.quality()) return -1;
	return 0;
}

function waitInventory(wnd, index) {
	while (wnd.getInventories().length <= 0) {
		jSleep(100);
	}
	return wnd.getInventories()[index];
}

function plantNewCrop(harv, notrecursive) {
	jSleep(300);
	inventory = checkInventory();
	var plantedSeed = null;
	var windows = jGetWindows("Seedbag");
	var seedbags = inventory.getItems("invobjs/bag-seed-f");
	if (seedbags.length > 0) {
		var seeds = [];
		for (var i = 0; i < windows.length; i++) {
			var inv = waitInventory(windows[i], 0);
			if (inv) {
				var bufseeds = inv.getItems(harv.cropSeedName);
				for (var j = 0; j < bufseeds.length; j++) {
					seeds.push(bufseeds[j]);
				}
			}
		}
		var invseeds = inventory.getItems(harv.cropSeedName);
		for (var j = 0; j < invseeds.length; j++) {
			seeds.push(invseeds[j]);
		}
		var sorted_seeds = seeds.sort(sortFunction);
		plantedSeed = sorted_seeds[0];
	} else {
		var invseeds = inventory.getItems(harv.cropSeedName);
		if (invseeds.length > 0) {
			inventory.sortItems(invseeds, "quality", true);
			plantedSeed = invseeds[0];
		}
	}
	
	if (plantedSeed) {
		// Plow tile if needed
		if (jGetTileType(jCoord(0, 0)) != 9) {
			plowTile();
		}
		if (plantedSeed.isActual()) {
			plantedSeed.take();
			jWaitDrag();
			jInteractClick(jCoord(0, 0), 0);
			if (!jWaitDrop(cannotPlantTimeout)) {
				jWaitDrop();
				if (notrecursive) return;
				plowTile();
				plantNewCrop(harv, true);
			}
		} else {
			if (!notrecursive) plantNewCrop(harv, true);
			else jPrint("Double fail on non-actual seed");
		}
	}
}

function waitPFEndMove() {
	while (true) {
		jWaitEndMove();
		jSleep(500);
		if (!jIsMoving()) {
			return;
		}
	}
}

function main() {
	jDropLastWindow();
	openAllSeedbags();
	var blist = ["Carrot", "Poppy", "Wheat", "Hemp", "Beetroot", "Grapes", "Tea", "Flax", "Pepper", "Exit"];
	var selectWindow = jGUIWindow(jCoord(250, 250), jCoord(110, blist.length * 25 + 15), "Farming");
	var label = jGUILabel(selectWindow, jCoord(5, 5), "Select crop type:");
	for(var i = 0; i < blist.length; i++)
		jGUIButton(selectWindow, jCoord(5, 25 + i*25),  100, blist[i]);
	selectWindow.toggleCloseButton();
	var btext = selectWindow.waitButtonClick();
	if(btext == blist[0]) harvester = new CarrotHarvester();
	if(btext == blist[1]) harvester = new PoppyHarvester();
	if(btext == blist[2]) harvester = new WheatHarvester();
	if(btext == blist[3]) harvester = new HempHarvester();
	if(btext == blist[4]) harvester = new BeetHarvester();
	if(btext == blist[5]) {
		selectWindow.destroy();
		harvester = new WineHarvester();
		if(!harvester.selectObjects()) return;
		if(!harvester.selectRect()) return;
		if(!harvester.processHarvesting()) return;
		harvester.plantGrapes();
		return;
	}
	if(btext == blist[6]) {
		harvester = new TeaHarvester();
		if(!harvester.selectObjects()) return;
	}
	if(btext == blist[7]) harvester = new FlaxHarvester();
	if(btext == blist[8]) harvester = new PepperHarvester();
	if(btext == blist[blist.length - 1]) {selectWindow.destroy(); return;}
	selectWindow.destroy();
	while (!stopFlag) {
		var crop = findCrop(harvester);
		if (crop == -1) break; // No crops found
		drinkWater();
		equipScythe();
		if (!jIsPathFree(crop.position())) {
			resetCursor();
			jPFMove(crop.position());
			jWaitStartMove();
			waitPFEndMove();
			while (jIsMoving() || jMyCoords().dist(crop.position()) > 1) {
				jSleep(100);
			}
		}
		jSendAction("harvest");
		jWaitCursor("harvest", actionTimeout);
		jDoClick(crop.getID(), 1, 0);
		jWaitProgress();
		harvester.processHarvestedGoods();
		plantNewCrop(harvester, false);
	}
}

main();
FUCK!
i have a new problem with bot:
Image
Image

Bot NOT drop seed if inventory have 3 free slots =\
User avatar
Arcanist
Posts: 2664
Joined: Mon Mar 19, 2012 2:01 pm

Re: Union Client Scripts

Post by Arcanist »

use seedbags
A684
Posts: 14
Joined: Sat Jan 01, 2011 1:47 pm

Re: Union Client Scripts

Post by A684 »

Arcanist wrote:use seedbags
THANK YOU :*
User avatar
NOOBY93
Posts: 6528
Joined: Tue Aug 09, 2011 1:12 pm

Re: Union Client Scripts

Post by NOOBY93 »

borka wrote://#! name = Taker
//#! tooltip = Take items from ground

:roll:
NOOBY93 wrote:Why?
Jalpha wrote:I believe in my interpretation of things.
User avatar
NOOBY93
Posts: 6528
Joined: Tue Aug 09, 2011 1:12 pm

Re: Union Client Scripts

Post by NOOBY93 »

Sorry for double post, but, starve 4x speed bot does not work.
I stand on stone paved, it clicks to another side of it and says "Script Finished". No drinking water, no turning back, just runs over it once.
Jalpha wrote:I believe in my interpretation of things.
User avatar
borka
Posts: 9965
Joined: Thu Feb 03, 2011 7:47 pm
Location: World of Sprucecap

Re: Union Client Scripts

Post by borka »

hello : Edit Button...

did starve bot changed speed?
User avatar
NOOBY93
Posts: 6528
Joined: Tue Aug 09, 2011 1:12 pm

Re: Union Client Scripts

Post by NOOBY93 »

Edit button wouldn't bump so you probably wouldn't read it. Starve bot changed speed to 4, ran in the direction of the stone pavement and finished script.
...Edit: Well2barrel also doesn't work. I put in 1, 2 tiles to radius and I'm right next to barrel. Then I put 100 tiles. All it does it pick up the bucket in the inventory and say script finished.
Jalpha wrote:I believe in my interpretation of things.
Tycko
Posts: 23
Joined: Mon Mar 26, 2012 9:46 pm

Re: Union Client Scripts

Post by Tycko »

NOOBY93 wrote:Edit button wouldn't bump so you probably wouldn't read it. Starve bot changed speed to 4, ran in the direction of the stone pavement and finished script.
...Edit: Well2barrel also doesn't work. I put in 1, 2 tiles to radius and I'm right next to barrel. Then I put 100 tiles. All it does it pick up the bucket in the inventory and say script finished.
That would be because : jObjectInteractClick(well, 0); //RMB at well

Not sure how to fix myself, but these little problems I have been working on for a few.

Watson, Son of Kent, Son of Tycko
User avatar
Arcanist
Posts: 2664
Joined: Mon Mar 19, 2012 2:01 pm

Re: Union Client Scripts

Post by Arcanist »

NOOBY93 wrote:
borka wrote://#! name = Taker
//#! tooltip = Take items from ground

:roll:
NOOBY93 wrote:Why?
so that I don't have to pick up that 1500 straw I just harvested...

Return to “The Wizards' Tower”