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 5 guests