Moderator: Phades
Arcanist wrote:Well then, do you know of any workaround for the issue?
jorb wrote:All your characters will be deleted, and I will level every village any one of them were ever members of.
var obj = GetCoop(15, jCoord(-2, 0));
jPrint("obj="+obj);
var wnd = GetWindow("Chicken Coop");
jPrint("wnd = "+wnd);
jPrint("invCount = "+wnd.getInventories().length);
var objInv = wnd.getInventories()[0];
jPrint("objInv = "+objInv);
jPrint("chickens = "+objInv.getItems("gfx/invobjs/chicken").length);
jPrint("cocks = "+objInv.getItems("gfx/invobjs/cock").length);
jPrint("chicks = "+objInv.getItems("gfx/invobjs/chick").length);
jPrint("eggs = "+objInv.getItems("gfx/invobjs/egg-chicken").length);
var eggs = objInv.getItems("gfx/invobjs/egg-chicken");
jPrint("value0 = "+wnd.getMeterValue(0));
jPrint("value1 = "+wnd.getMeterValue(1));
//#! name = Carrotsesfarmereses
//#! uniq = Usernm_Farmer
//#! icon = gfx/invobjs/carrot
include("Usernm_lib");
var direction = jMyCoords(1,0);
var inventory = checkInventory();
var field_line_size = 6;
var seed_name = "carrot";
var crop_name = "plants/carrot";
var crop_stage = 4;
function stepOnce(directon){
var next_tile = jMyCoords().add(direction.mul(11));
jAbsClick(next_tile,1,0);
safeWaitMove(next_tile);
}
function harvestCrop(crop){
jSendAction("harvest");
jWaitCursor("harvest");
jDoClick(crop.getID(),1,0);
inventoryItemsCountChange();
resetCursor();
}
function plantOneLine(seed_name, field_line_size, direction){
var start_point = jMyCoords();
if (start_point !== jTilify(start_point)){
jAbsClick(jTilify(start_point),1,0);
safeWaitMove(jTilify(start_point));
}
var inventory = checkInventory();
var seeds = inventory.getItems(seed_name);
var seed_coord = jCoord(0,0);
sortItemsInInventory(seeds);
var next_tile = start_point.add(direction.mul(11));
var crop = jFindMapObjectNearAbs(start_point, 1, "plant");
var i = 0;
while (true){
var crop = jFindMapObjectNearAbs(start_point, 1, "plant");
if ((jGetTileType(jCoord(0,0) == 9))&&(crop == null)){
jToConsole(i+" "+seeds[i]);
seeds[i].take();
jWaitDrag();
jAbsInteractClick(start_point, 0);
while (crop == null){
jSleep(100);
crop = jFindMapObjectNearAbs(start_point, 1, "plant");
}
}
i++
if (jGetTileType(direction) !== 8){
jAbsClick(next_tile,1,0);
safeWaitMove(next_tile);
start_point = jMyCoords();
crop = jFindMapObjectNearAbs(start_point, 1, "plant");
next_tile = jMyCoords().add(direction.mul(11));
} else {
jToConsole("Field line end");
}
}
}
// Возвращает JSInventory[]
function checkInventory() {
if(!jHaveWindow("Inventory")) {
jToggleInventory();
while(!jHaveWindow("Inventory")){
jSleep(100);
}
}
return jGetWindow("Inventory").getInventories()[0];
}
// Возвращает JSEquip
function checkEquipment() {
if(!jHaveWindow("Equipment")) {
jToggleEquipment();
while(!jHaveWindow("Equipment")){
jSleep(100);
}
}
return jGetJSEquip();
}
// Функция возвращает JSWindow указанного объекта, пытаясь подойти к нему и открыть его.
function checkObject(object_gob, window_name) {
if(!jHaveWindow(window_name)) {
jDoClick(object_gob.getID(), 3, 0);
while(!jHaveWindow(window_name)){
jSleep(100);
}
return jGetWindow(window_name);
}
else {
return jGetWindow(window_name);
}
}
// Немного поправленная первая половина функции drinkWater из jBotapi. Жесткая задержка в полсекунды заменена на интеллектуальную проверку наполненности фляги.
function fillFlask() {
var 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", "kuksa");
if (flasks.length > 0) {
var flask = flasks[0];
if (flask.isActual()) {
flask.itemact(0);
if (flask.name().indexOf("Kuksa") >=0) {
var full = "0.3/0.3"
}
if (flask.name().indexOf("Waterflask") >=0) {
var full = "2.0/2.0"
}
if (flask.name().indexOf("Waterskin") >=0) {
var full = "3.0/3.0"
}
while ((flask.name().indexOf(full) < 0)&&((jGetDraggingItem().resName() == "bucket-water"))){
jSleep(100);
}
}
}
inventory.drop(bucket_coord);
jWaitDrop();
}
}
}
// Немного поправленная вторая половина функции drinkWater из jBotapi. Вместо ожидания прогресса, проверка на стамину и пустоту фляги.
function drinkFlask(){
var inventory = checkInventory();
var flasks = inventory.getItems("waterflask", "waterskin", "kuksa");
if (flasks.length > 0) {
var flask = flasks[0];
if (flask.isActual()) {
flask.iact();
if (jWaitPopup()) {
jSelectContextMenu("Drink");
while ((jGetStamina() <95)&&(flask.name().indexOf("Empty")<0)){
jSleep(100);
}
}
}
}
}
// Функция для совместимости с ботами. Делает тоже самое что и до переработки.
function drinkWater(){
fillFlask();
drinkFlask();
}
// Восполняет стамину в цикле. Удобно использовать для куксы.
function restoreStamina(){
while (jGetStamina()<95){
fillFlask();
drinkFlask();
}
}
// Функция набирает флягу на воде и пьет ее.
function drinkWaterFromWater(){
checkInventory();
var tile = jGetTileType(jCoord(0, 0));
// 1 - мелководье, 0 - глубоководье
if ((tile == 1)||(tile == 0)){
var inventory = jGetWindow("Inventory").getInventories()[0]
var flasks = inventory.getItems("waterflask", "waterskin", "kuksa");
if (flasks.length > 0) {
var flask = flasks[0];
var flask_coord = flask.coord();
flask.take();
jWaitDrag();
jAbsInteractClick(jMyCoords(),3,0);
jSleep(500);
inventory.drop(flask_coord);
jWaitDrop();
drinkFlask();
}
}
}
// Функция ждет, пока не заполнятся все слоты инвентаря персонажа.
function WaitFullInventory() {
while (jGetWindow("Inventory").getInventories()[0].freeSlots() !== 0){
jSleep(100);
}
}
// Функция копает под персонажем.
function digHere(){
jSendAction("dig");
jWaitCursor("dig");
jAbsClick(jMyCoords(),1,0);
WaitFullInventory();
resetCursor();
jAbsClick(jMyCoords(),1,0);
}
// Ждет пока количество предметов в инвентаре не поменятеся.
function inventoryItemsCountChange() {
var inventory = jGetWindow("Inventory").getInventories()[0];
var now = inventory.freeSlots();
while (inventory.freeSlots() == now){
jSleep(100);
}
return true;
}
// Дефолтная функция сброса курсора из jBotapi
function resetCursor() {
if (!jIsCursor("arw")) {
jAbsClick(jCoord(0, 0), 3, 0);
jWaitCursor("arw");
}
}
// Функция загрузки материалов в табличку.
function loadIntoTable(material){
for (var i = 0; i < material.length; i++){
material[i].transfer();
}
}
// Функция безопасного перемещения в координаты.
function safeWaitMove(coord) {
while (!jMyCoords().equals(coord)){
jSleep(100);
}
var counter = 0;
while (jIsMoving()){
if (counter > 10){
break;
}
jSleep(100);
counter++;
}
}
// Функция пытается распахать тайл по координатам. Проверка распашки через тип тайла.
function handsPlow(coord){
jSendAction("plow");
jWaitCursor("dig");
jAbsClick(coord,1,0);
safeWaitMove(jTilify(coord));
while (jGetTileType(jCoord(0,0)) !== 9){
jSleep(100);
}
}
// Функция ищет ближайший тайл из массива подходящий для распашки и возвращает его абсолютные координаты, если пахать в радиусе нечего - завершает скрипт.
function findPlowableTile(radius){
var tiles_id=new Array(10,11,13,14,15);
var tile = new Array();
var distance = new Array();
for (var i = 0; i < tiles_id.length; i++){
try {
tile[i] = jGetNearestTileAbs(radius, tiles_id[i]);
distance[i] = tile[i].dist(jMyCoords());
// jToConsole("tile with id "+tiles_id[i]+" have coordinates = "+tile[i]);
// jToConsole("distance to tile with id "+tiles_id[i]+" = "+distance[i]);
}
catch(NullPointerException){
tile[i] = -1;
distance[i] = -1;
// jToConsole("tile with id "+tiles_id[i]+" not exist");
}
}
var max_distance = 5500;
for (var i = 0; i < tiles_id.length; i++){
if ((distance[i] >= 0) && (distance[i]<max_distance)){
max_distance = distance[i];
var result_tile = tile[i];
}
}
if (max_distance == 5500){
jToConsole("No plowable tiles in range");
jExit();
} else {
return result_tile;
}
}
// Функция находит направление (сторону света) где находится объект.
function getDirectionToObject(object){
var offset_x = object.position().x - jMyCoords().x;
var offset_y = object.position().y - jMyCoords().y;
if ((offset_y <= 0)&&(Math.abs(offset_y)>=Math.abs(offset_x))){
// jToConsole("object location on North");
return jCoord(0,-1);
}
if ((offset_y > 0)&&(Math.abs(offset_y)>Math.abs(offset_x))){
// jToConsole("object location on South");
return jCoord(0,1);
}
if ((offset_x <= 0)&&(Math.abs(offset_y)<=Math.abs(offset_x))){
// jToConsole("object location on West");
return jCoord(-1,0);
}
if ((offset_x > 0)&&(Math.abs(offset_y)<Math.abs(offset_x))){
// jToConsole("object location on East");
return jCoord(1,0);
}
}
// Функция находит ближайший объект в радиусе и возвращает его. Если таких объектов в радиусе нет - возвращает -1
function findNearestObject(object_name, radius){
var objects = jGetObjects(radius, (0,0), object_name);
var distance = new Array();
for (var i = 0; i < objects.length; i++){
distance[i] = objects[i].position().dist(jMyCoords());
}
var min_distance = 5500;
for (var i = 0; i < objects.length; i++){
if ((distance[i] >= 0) && (distance[i]<min_distance)){
min_distance = distance[i];
var nearest_object = objects[i];
}
}
if (min_distance == 5500){
jToConsole("No objects in range");
return -1;
}
return nearest_object;
}
function getPlayerDirection(){
var player = jFindMapObjectNearAbs(jMyCoords(), 1, "borka")
if (player.hasLayer("head-0")){
jToConsole("SE");
return jCoord(1,1);
}
if (player.hasLayer("head-1")){
jToConsole("S");
return jCoord(0,1);
}
if (player.hasLayer("head-2")){
jToConsole("SW");
return jCoord(-1,1);
}
if (player.hasLayer("head-3")){
jToConsole("W");
return jCoord(-1,0);
}
if (player.hasLayer("head-4")){
jToConsole("NW");
return jCoord(-1,-1);
}
if (player.hasLayer("head-5")){
jToConsole("N");
return jCoord(0,-1);
}
if (player.hasLayer("head-6")){
jToConsole("NE");
return jCoord(-1,0);
}
if (player.hasLayer("head-7")){
jToConsole("E");
return jCoord(0,1);
}
}
Users browsing this forum: Claude [Bot] and 1 guest