Ativa o menu
Toggle preferences menu
Alternar menu pessoal
Não autenticado(a)
Your IP address will be publicly visible if you make any edits.

Web Client: mudanças entre as edições

De Imperial Wiki
Matthews (discussão | contribs)
Criar página em branco
 
Matthews (discussão | contribs)
Sem resumo de edição
Linha 1: Linha 1:


const axeGraphic = 0xF47; //(!) Check this by get in-game target info
const woodGraphic = 0x1BDD
//Uncomment to ignore
const arrIgnoreWood = [
  // 0x0,  //Plain
  // 0x7DA, //Oak
  // 0x4A7, //Ash
  // 0x4A8, //Yew
  // 0x4AA, //Bloodwood
  // 0x4A9, //Heartwood
  // 0x47F, //Frostwood
]
const arrIgnoreRes = [
  // 0x2F5F, //Switch
  // 0x318F, //Bark Fragment
  // 0x3191, //Luminescent Fungi
  // 0x3190, //Parasitic Plant
  // 0x3199, //Brilliant Amber
]
const arrOffset = [[1, 1], [1, 0], [0, 1], [0, 0]]
const arrWood = [0xcd8, 0xcd3, 0xce6, 0xce3, 0xcd0, 0xccd, 0xcda, 0xcdd, 0xce0]
const arrDir = [Directions.Up, Directions.North, Directions.Right, Directions.East, Directions.Down, Directions.South, Directions.West, Directions.Left]
const getDirection = (angle) =>
  arrDir[Math.round(angle / 45) % 8]
const getDistance = (x1, y1, x2, y2) =>
  Math.max(Math.abs(x1 - x2), Math.abs(y1 - y2))
const getAngle = (x1, y1, x2, y2) => {
  var dy = y2 - y1
  var dx = x2 - x1
  var n = Math.atan2(dy, dx) * (180 / Math.PI)
  return (n < 0) ? (n + 360) : n
}
const getAngleDrift = (d, a) => {
  let n = Math.random() > 0.5 ? (a - d) : (a + d)
  return (n < 0) ? (n + 360) : n
}
const movePlayerSteps = (n, angle) => {
  let d = getDirection(angle)
  for (let i = 0; i < n; i++) {
    player.walk(d)
    sleep(100)
  }
}
const movePlayerToItem = (x, y) => {
  let px, py
  let moveBugCount = 0
  let distance = getDistance(player.x, player.y, x, y)
  while (distance > 1) {
    movePlayerSteps(1, getAngle(x, y, player.x, player.y))
    distance = getDistance(player.x, player.y, x, y)
    if (px == player.x && py == player.y) {
      moveBugCount++
      if (moveBugCount > 5) {
        movePlayerSteps(5, getAngleDrift(90, getAngle(x, y, player.x, player.y)))
        moveBugCount = 0
      }
    }
    px = player.x
    py = player.y
  }
}
const dropItemGround = (serial) =>
  arrOffset.some(([x, y]) => {
    player.moveItemOnGroundOffset(serial, x, y, 0)
    sleep(500)
   
    return (player.backpack.contents.some(item => item.serial == serial) == false)
  })
const chopItem = (serial) => {
  player.useType(axeGraphic);
  target.waitTargetEntity(serial, 3000)
  sleep(300)
}
const chopTree = (x, y, graphic) => {
  player.useType(axeGraphic);
  target.wait();
  target.terrainWithOffset(x, y, 0, graphic);
  sleep(1000)
}
const chopTreeFull = (x, y, graphic) => {
  let c = 10
  while c > 0 && !journal.containsText('There\'s not enough wood here') {
    chopTree(x, y, graphic)
    c--
  }
}
const release = () => {
  let arrDrop = []
  player.backpack.contents.forEach(item => {
    let f = item.graphic == woodGraphic
    if ((f && (arrIgnoreWood.some(n => n == item.hue))) || (arrIgnoreRes.some(n => n == item.graphic))) {
      arrDrop.push(item.serial)
    } else if f {
      chopItem(item.serial)
    }
  })
  arrDrop.forEach(n => dropItemGround(n))
}
const szudzikPair = (x, y) =>
  (x >= y ? (x * x) + x + y : (y * y) + x)
const spiral = (sx, sy, cb) => {
  let x = 0
  let y = 0
  let dx = 0
  let dy = -1
  let n = 0
  let max = Math.pow(Math.max(sx, sy), 2)
  for (let i = 0; i < max; i++) {
    if ((-sx / 2 < x && x <= sx / 2) && (-sy / 2 < y && y <= sy / 2)) {
      if (cb(x, y) == true) {
        break
      }
    }
    if ((x == y) || (x < 0 && x == -y) || (x > 0 && x == 1 - y)) {
      [dx, dy] = [-dy, dx];
    }
    x = x + dx;
    y = y + dy;
  }
}
//
journal.clear()
while (true) {
  spiral(35, 35, (dx, dy) => {
    if player.weight >= player.weightMax {
      return true
    }
    let x = player.x + dx
    let y = player.y + dy
    let id = szudzikPair(x, y)
    if ignoreList.contains(id) {
      return false
    }
    let item = client.getTerrainList(x, y)
    if (item.length < 2 || !arrWood.some(i => i == item[1].graphic)) {
      ignoreList.add(id)
      return false
    }
    movePlayerToItem(x, y)
    chopTreeFull(item[1].x - player.x, item[1].y - player.y, item[1].graphic)
    release()
    ignoreList.add(id)
    journal.clear()
    return true
  })
  if player.weight >= player.weightMax {
    break
  }
  sleep(1000)
}
https://play.classicuo.org/?shard=67

Edição das 03h51min de 24 de fevereiro de 2025

const axeGraphic = 0xF47; //(!) Check this by get in-game target info


const woodGraphic = 0x1BDD

//Uncomment to ignore const arrIgnoreWood = [

 // 0x0,   //Plain
 // 0x7DA, //Oak
 // 0x4A7, //Ash
 // 0x4A8, //Yew
 // 0x4AA, //Bloodwood
 // 0x4A9, //Heartwood
 // 0x47F, //Frostwood

]

const arrIgnoreRes = [

 // 0x2F5F, //Switch
 // 0x318F, //Bark Fragment
 // 0x3191, //Luminescent Fungi
 // 0x3190, //Parasitic Plant
 // 0x3199, //Brilliant Amber

]

const arrOffset = [[1, 1], [1, 0], [0, 1], [0, 0]]

const arrWood = [0xcd8, 0xcd3, 0xce6, 0xce3, 0xcd0, 0xccd, 0xcda, 0xcdd, 0xce0]

const arrDir = [Directions.Up, Directions.North, Directions.Right, Directions.East, Directions.Down, Directions.South, Directions.West, Directions.Left]

const getDirection = (angle) =>

 arrDir[Math.round(angle / 45) % 8]

const getDistance = (x1, y1, x2, y2) =>

 Math.max(Math.abs(x1 - x2), Math.abs(y1 - y2))

const getAngle = (x1, y1, x2, y2) => {

 var dy = y2 - y1
 var dx = x2 - x1
 var n = Math.atan2(dy, dx) * (180 / Math.PI)
 return (n < 0) ? (n + 360) : n

}

const getAngleDrift = (d, a) => {

 let n = Math.random() > 0.5 ? (a - d) : (a + d)
 return (n < 0) ? (n + 360) : n

}

const movePlayerSteps = (n, angle) => {

 let d = getDirection(angle)
 for (let i = 0; i < n; i++) {
   player.walk(d)
   sleep(100)
 }

}

const movePlayerToItem = (x, y) => {

 let px, py
 let moveBugCount = 0
 let distance = getDistance(player.x, player.y, x, y)
 while (distance > 1) {
   movePlayerSteps(1, getAngle(x, y, player.x, player.y))
   distance = getDistance(player.x, player.y, x, y)
   if (px == player.x && py == player.y) {
     moveBugCount++
     if (moveBugCount > 5) {
       movePlayerSteps(5, getAngleDrift(90, getAngle(x, y, player.x, player.y)))
       moveBugCount = 0
     }
   }
   px = player.x
   py = player.y
 }

}

const dropItemGround = (serial) =>

 arrOffset.some(([x, y]) => {
   player.moveItemOnGroundOffset(serial, x, y, 0)
   sleep(500)
   
   return (player.backpack.contents.some(item => item.serial == serial) == false)
 })

const chopItem = (serial) => {

 player.useType(axeGraphic);
 target.waitTargetEntity(serial, 3000)
 sleep(300)

}

const chopTree = (x, y, graphic) => {

 player.useType(axeGraphic);
 target.wait();
 target.terrainWithOffset(x, y, 0, graphic);
 sleep(1000)

}

const chopTreeFull = (x, y, graphic) => {

 let c = 10
 while c > 0 && !journal.containsText('There\'s not enough wood here') {
   chopTree(x, y, graphic)
   c--
 }

}

const release = () => {

 let arrDrop = []
 player.backpack.contents.forEach(item => {
   let f = item.graphic == woodGraphic
   if ((f && (arrIgnoreWood.some(n => n == item.hue))) || (arrIgnoreRes.some(n => n == item.graphic))) {
     arrDrop.push(item.serial)
   } else if f {
     chopItem(item.serial)
   }
 })
 arrDrop.forEach(n => dropItemGround(n))

}

const szudzikPair = (x, y) =>

 (x >= y ? (x * x) + x + y : (y * y) + x)

const spiral = (sx, sy, cb) => {

 let x = 0
 let y = 0
 let dx = 0
 let dy = -1
 let n = 0
 let max = Math.pow(Math.max(sx, sy), 2)
 for (let i = 0; i < max; i++) {
   if ((-sx / 2 < x && x <= sx / 2) && (-sy / 2 < y && y <= sy / 2)) {
     if (cb(x, y) == true) {
       break
     }
   }
   if ((x == y) || (x < 0 && x == -y) || (x > 0 && x == 1 - y)) {
     [dx, dy] = [-dy, dx];
   }
   x = x + dx;
   y = y + dy;
 }

}


// journal.clear()

while (true) {

 spiral(35, 35, (dx, dy) => {
   if player.weight >= player.weightMax {
     return true
   }
   let x = player.x + dx
   let y = player.y + dy
   let id = szudzikPair(x, y)
   if ignoreList.contains(id) {
     return false
   }
   let item = client.getTerrainList(x, y)
   if (item.length < 2 || !arrWood.some(i => i == item[1].graphic)) {
     ignoreList.add(id)
     return false
   }
   movePlayerToItem(x, y)
   chopTreeFull(item[1].x - player.x, item[1].y - player.y, item[1].graphic)
   release()
   ignoreList.add(id)
   journal.clear()
   return true
 })


 if player.weight >= player.weightMax {
   break
 }
 sleep(1000)

}





https://play.classicuo.org/?shard=67