Forum in READ ONLY mode! All questions and discussions on Discord official server, invite link: https://discord.gg/VxsGzJ7

Не заводится.

тут можно задать вопрос по скриптингу
nah nah
Developer
Developer
Posts: 414
Joined: 13.07.2011 11:23
Contact:

Re: Не заводится.

Post by nah nah »

Code: Select all

ItemAnything = {'Forge': {'Serial': 0x40005E0C, 'X': 522, 'Y': 994}, 'Bank': {'Serial': 0x00086286, 'X': 554, 'Y': 992}, 'Gate of Life': {'Serial': 0x40005E1B, 'X': 535, 'Y': 991}}   

def FindRoute(x, y, prec):
  Direction = {'0': ('y'), '1': ('y', 'x'), '2': ('x'), '3': ('y', 'x'), '4': ('y'), '5': ('y', 'x'), '6': ('x'), '7': ('y', 'x')}
  nx = GetX(Self())
  ny = GetY(Self())
  while Dist(nx, ny, x, y) > 300:
    for i in range(300):
      dx = nx - x
      dy = ny - y      
      if 'y' in Direction[str(CalcDir(x, y))]:
        ny += Sign(dy)
      if 'x' in Direction[str(CalcDir(x, y))]:
        nx += Sign(dx)
    newMoveXY(nx, ny, 0, 50, 0)
  newMoveXY(x, y, 0, prec, 0)

for x, y in (ItemAnything['Bank']['X'], ItemAnything['Bank']['Y'], GetX(ItemAnything['Bank']['Serial']), GetY(ItemAnything['Bank']['Serial'])):
  FindRoute(x, y, 1)
TypeError: 'int' object is not iterable для строки

Code: Select all

for x, y in (ItemAnything['Bank']['X'], ItemAnything['Bank']['Y'], GetX(ItemAnything['Bank']['Serial']), GetY(ItemAnything['Bank']['Serial'])):
Даже не представляю куда копать :oops:
CFA
Developer
Developer
Posts: 492
Joined: 20.04.2006 6:03
Contact:

Re: Не заводится.

Post by CFA »

Code: Select all

for x, y in (ItemAnything['Bank']['X'], ItemAnything['Bank']['Y'], GetX(ItemAnything['Bank']['Serial']), GetY(ItemAnything['Bank']['Serial'])):
ты итерируешь tuple из 4 чисел. на каждой итерации ты получаешь только одно число, а хочешь положить его в две переменных.

Code: Select all

for x, y in ( (ItemAnything['Bank']['X'], ItemAnything['Bank']['Y']), (GetX(ItemAnything['Bank']['Serial']), GetY(ItemAnything['Bank']['Serial'])) ):
так должно работать.
nah nah
Developer
Developer
Posts: 414
Joined: 13.07.2011 11:23
Contact:

Re: Не заводится.

Post by nah nah »

CFA wrote:GetX, GetY вернут 0, если "Banker" находится далеко и стелс его "не видит", и GetDistance(Banker) в таком случае вернет -1. Таким образом цикл
А CountEx считает то, что в слое, если указать на чара?
Должен.
на CountEx(-1, -1, Self()) возвращает 0 :(
FindTypeEx(-1, -1. Self(), True) записывает в FindCount() и то, что в банке.

Допустим в паке лежит 1 молоток, ещё 1 в руке и 2 в банке. Чтобы посчитать суммарное кол-во в паке и на чаре, но не в банке, мне надо перебирать слои и искать в сумке, потом складывать.

Code: Select all

def myCount(Type, Color):
  ItemCount = 0
  for layer in RhandLayer(), LhandLayer():
    if ObjAtLayer(layer) != 0 and GetType(ObjAtLayer(layer)) == Type and GetColor(ObjAtLayer(layer)) == Color:
      ItemCount += 1
  FindTypeEx(Type, Color, Backpack(), False)
  return ItemCount + FindCount()
Нет ли более легкого способа? Может в стелсе есть такая функция, но она секретная и в вики её нет? :roll:
nah nah
Developer
Developer
Posts: 414
Joined: 13.07.2011 11:23
Contact:

Re: Не заводится.

Post by nah nah »

Есть какой-либо способ опеределить, пришёл гамп, который мне нужен или нет?
Спасибо за те ответы, за которые я ещё не поблагадорил :)
Alex
Moderator
Moderator
Posts: 351
Joined: 07.04.2005 4:41

Re: Не заводится.

Post by Alex »

nah nah wrote:Есть какой-либо способ опеределить, пришёл гамп, который мне нужен или нет?
я просто ставлю ловушку WaitGump на нужный гамп, и дальше WaitJournalLine с таймаутом, если по таймауту отвалимся, значит не пришел
Новый стелс лежит тут. Стелс это произведение искусства! :)
nah nah
Developer
Developer
Posts: 414
Joined: 13.07.2011 11:23
Contact:

Re: Не заводится.

Post by nah nah »

Code: Select all

def FindRoute(x, y, prec):
  Direction = {'0': ('y'), '1': ('y', 'x'), '2': ('x'), '3': ('y', 'x'), '4': ('y'), '5': ('y', 'x'), '6': ('x'), '7': ('y', 'x'), '100': ()}
  while not Connected():
    pass
  print('x ' + str(x) + ' y ' + str(y))
  while Dist(GetX(Self()), GetY(Self()), x, y) > 100:
    nx, ny = GetX(Self()), GetY(Self())
    for i in range(299):
      while not Connected():
        pass
      dx, dy = (x - nx), (y - ny)
      if 'y' in Direction[str(CalcDir(nx, ny, x, y))]:
        ny += Sign(dy)
      if 'x' in Direction[str(CalcDir(nx, ny, x, y))]:
        nx += Sign(dx)
    newMoveXY(nx, ny, 0, 50, 0)
  newMoveXY(x, y, 0, prec, 0)

ItemAnything = {'Bank': {'Serial': 0x00086286, 'X': 549, 'Y': 991}}   

FindRoute(ItemAnything['Bank']['X'], ItemAnything['Bank']['Y'], 1)
FindRoute(GetX(ItemAnything['Bank']['Serial']), GetY(ItemAnything['Bank']['Serial']), 1)
Когда запускаю, ни куда не идёт. Координаты чара на момент запуска - (790,938), FindRoute должно заставить чара идти на (549,991), что она и делает, но newMoveXY(nx, ny, 0, 50, 0) просто ни чего не делает.
CFA
Developer
Developer
Posts: 492
Joined: 20.04.2006 6:03
Contact:

Re: Не заводится.

Post by CFA »

Попробуй уменьшить максимальную дистанцию ходьбы до 200. По моему билд с увеличенной дистанцией не выкладывался.
nah nah
Developer
Developer
Posts: 414
Joined: 13.07.2011 11:23
Contact:

Re: Не заводится.

Post by nah nah »

Спасибо! Я не смог вспомнить откуда у меня информация про 300 тайлов =)
CFA
Developer
Developer
Posts: 492
Joined: 20.04.2006 6:03
Contact:

Re: Не заводится.

Post by CFA »

nah nah wrote:Спасибо! Я не смог вспомнить откуда у меня информация про 300 тайлов =)
Я тут где-то говорил, и вроде даже в вики исправил 200 на 300.

Кстати такие вот циклы, без задержек очень не рекомендуется делать. И в питоне и в паскале.

Code: Select all

      while not Connected():
        pass
Sorme.it
Neophyte
Neophyte
Posts: 46
Joined: 24.05.2013 9:02

Re: Не заводится.

Post by Sorme.it »

Code: Select all

Procedure GoToDest(dest : String);
var BtoCX, BtoCY : Array of Integer;
    i, a, b : Integer;
Begin
  BtoCX := [2512, 2515, 2521, 2528, 2528, 2553, 2556, 2558, 2558, 2567];
  BtoCY := [553, 544, 538, 538, 501, 501, 504, 503, 496, 483];
  If dest = 'bank' then
  Begin
    a := -9; b := -1;
  End
  else
  Begin
    a := 1; b := 9;
  End;
  For i := a to b do
  Begin
    newMoveXY(BtoCX[ABS(i)], BtoCY[ABS(i)], false, 1, true);
  End;
End;
кто объяснит как работает эта процедура ????
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Re: Не заводится.

Post by Vizit0r »

индийский код.

это такое хождение по массиву координат.

в нормальном виде это должно быть что-то типа

Code: Select all

Procedure GoToDest(dest : String);
var BtoCX, BtoCY : Array of Integer;
    i, a, b : Integer;
Begin
  BtoCX := [2512, 2515, 2521, 2528, 2528, 2553, 2556, 2558, 2558, 2567];
  BtoCY := [553, 544, 538, 538, 501, 501, 504, 503, 496, 483];
  If dest = 'bank' then
    newMoveXY(BtoCX[9], BtoCY[9], false, 1, true)
  else
    For i := 1 to 9 do
      newMoveXY(BtoCX[i], BtoCY[i], false, 1, true);
End;
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Sorme.it
Neophyte
Neophyte
Posts: 46
Joined: 24.05.2013 9:02

Re: Не заводится.

Post by Sorme.it »

есть еще вопрос - в скрипте объявлена константа кирки

Code: Select all

  t_Pickaxe = $0E85;
это типовой тип кирок, практически на всех шардах такой тип.
Вопрос : почему имея в паке разные кирки ( например простую и обсидиан ) чар не берет обсидиановую в руки ? Тип одинаковый .
User avatar
Vizit0r
Developer
Developer
Posts: 3958
Joined: 24.03.2005 17:05
Contact:

Re: Не заводится.

Post by Vizit0r »

где ссылка на тип-то?
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Sorme.it
Neophyte
Neophyte
Posts: 46
Joined: 24.05.2013 9:02

Re: Не заводится.

Post by Sorme.it »

все , сделал уже =)
Post Reply