Page 1 of 2

редакция скрипта, сортировка по паку

Posted: 2011-11-16 12:16:21
by Gromiz
решил весь автолоад прогнать через http://nmy.id.lv/codesweeper.htm, прибраться так сказать.

так вот там есть 1 мой скрипт, который давно составлялся. Сам скрипт работает и ошибок не вылетает, но codesweeper ругается на структуру скрипта, может я что-то не так синтаксис сделал?
не пугайтесь объема скрипта, хоть он и большой, но в нем просто повторяются блоки.


описание скрипта:
расставляет необходимые нам предметы по координатам в бекпаке, если нет предмета к расстановке, то переходит следующему пункту.

Code: Select all

sub Sort_new()
   DIM R[1]
   DIM D[1]
   DIM B[1]
   DIM Z[1]
   var c
   R[1] = 0x0A3E # Ящик с регами
   D[1] = 0x14FB # отмычки
   B[1] = 0x0EFA # книга магии
   Z[1] = 0x0F9E # ножницы
   # Ящик с регами
   wait(100)
   for c=1 to 1
      UO.FindType(R[c],"0","backpack")
      if UO.FindCount()>0 Then
         UO.MoveItem("finditem","0","backpack","150","40","0")
         wait(100)
      Endif
      wait(100)
      # Отмычки
      wait(100)
      for c=1 to 1
         UO.FindType(D[c],"0","backpack")
         if UO.FindCount()>0 Then
            UO.MoveItem("finditem","0","backpack","65","40","0")
            wait(100)
         Endif
         wait(100)
         # Книга магии
         wait(100)
         for c=1 to 1
            UO.FindType(B[c],"0","backpack")
            if UO.FindCount()>0 Then
               UO.MoveItem("finditem","0","backpack","50","40","0")
               wait(100)
            Endif
            wait(100)
            # Ножницы
            wait(100)
            for c=1 to 1
               UO.FindType(Z[c],"0","backpack")
               if UO.FindCount()>0 Then
                  UO.MoveItem("finditem","0","backpack","95","40","0")
                  wait(100)
               Endif
               wait(100)

               # Rune
               wait(100)
               UO.FindType('0x1F14','0x048D',"0","backpack")
               if UO.FindCount()>0 Then
                  UO.MoveItem("finditem","0","backpack","130","43","0")
                  wait(100)
               Endif
               wait(100)
               uo.print(' -= Done =- ')
            End sub

Re: редакция скрипта, сортировка по паку

Posted: 2011-11-16 12:57:47
by ZeroDX
Не закрытые for
Пример

Code: Select all

For a = 1 to 3
  b = b + 1
Next

Re: редакция скрипта, сортировка по паку

Posted: 2011-11-16 13:01:55
by Mirage
Зашибись. Обманул программу :lol:
В структуре скрипта ошибка которую указали выше.
НО она не КРИТИЧНА так как переменная не перещелкивается - это частный случай, синоним var :mrgreen:

Вобще весь скрипт можно заменить на

Code: Select all

sub sort()
   uo.exec ("moveitem '_0x0EFA' '0' 'backpack' 25 20 0");spellbook
   uo.exec ("moveitem '_0x0F9E' '0' 'backpack' 40 20 0");Silver Scissors
   uo.exec ("moveitem '_0x1012' '0' 'backpack' 25 20 0");Key
   uo.exec ("moveitem '_0x1012' '0' 'backpack' 25 23 0");Key
   uo.exec ("moveitem '_0x0E9B' '0' 'backpack' 50 20 0");ступка
   uo.exec ("moveitem '0x40380220' '0' 'backpack' 170 20 0");руна
   uo.exec ("moveitem '0x40F03AEC' '0' 'backpack' 150 20 0");руна
   uo.exec ("moveitem '0x40F03791' '0' 'backpack' 160 20 0");руна
   uo.exec ("moveitem '^0x0A3E' '0' 'backpack' 160 170 0");сундук
end sub
(старый вариант - новый не нашел :roll: )

Re: редакция скрипта, сортировка по паку

Posted: 2011-11-16 13:32:09
by Gromiz
ZeroDX wrote:Не закрытые for
Пример

Code: Select all

For a = 1 to 3
  b = b + 1
Next


спасибо, теперь все красиво :)


Mirage wrote: uo.exec ("moveitem '_0x0EFA' '0' 'backpack' 25 20 0");spellbook


Зашибись, опять двадцать пять.
весь мой гемор в сотню строчек уместил в 1. :lol:
спасибо, это еще лучше

Re: редакция скрипта, сортировка по паку

Posted: 2011-11-16 13:44:44
by Gromiz
хотя не, оно по цвету не ищет :(

Re: редакция скрипта, сортировка по паку

Posted: 2011-11-16 15:18:36
by Mirage
Только что сам понял что скрипт работает с любым цветом не различая заданного :mrgreen:
Да и фиг с ним.

Code: Select all

               UO.FindType('0x1F14','0x048D',"0","backpack")
               if UO.FindCount()>0 Then
                  UO.MoveItem("finditem","0","backpack","130","43","0")
                  wait(100)
               Endif

ниже моих строк добавить и все.

А вот нашел нонешний вариант:

Code: Select all

sub sort()
   uo.moveitem ('_0x0EFA', '0', 'backpack', 25, 20, 0);spellbook
   uo.moveitem ('_0x0F9E', '0', 'backpack', 40, 20, 0);Silver Scissors
   uo.moveitem ('_0x1012', '0', 'backpack', 25, 20, 0);Key
   uo.moveitem ('_0x1012', '0', 'backpack', 25, 23, 0);Key
   uo.moveitem ('_0x0E9B', '0', 'backpack', 50, 20, 0);ступка
   uo.moveitem ('^0x0A3E', '0', 'backpack', 160, 170, 0);сундук
   uo.moveitem ('0x40380220', '0', 'backpack', 170, 20, 0);руна
   uo.moveitem ('0x40F03AEC', '0', 'backpack', 150, 20, 0);руна
   uo.moveitem ('0x40F03791', '0', 'backpack', 160, 20, 0);руна
end sub
Пофигу на цвет, руны по ID задаются :mrgreen:

Re: редакция скрипта, сортировка по паку

Posted: 2011-11-16 15:50:37
by ZeroDX
Это всё ньюби вещи? Если руны слутают - будет не очень удобно каждый раз залезать в скрипт и править id
Можно же сделать что-то универсальное и громоздкое в 300 строк, и не парится с id. Если принципиально какая руна где лежит - можно сортировать по имени.

Re: редакция скрипта, сортировка по паку

Posted: 2011-11-17 08:16:07
by Gromiz
удобнее покрас использовать для этого, поиск по цвету и нужен ))

Re: редакция скрипта, сортировка по паку

Posted: 2011-11-17 10:27:38
by Mirage
на вкус и цвет как говорится. Просто мне не очень понятно - зачем рунки сортировать если они покрашены и зачем красить если они отсортированы? :|

Re: редакция скрипта, сортировка по паку

Posted: 2011-11-18 11:38:10
by Gromiz
я просто еще 4 вида бутылок "подшиваю" в сумке, а они отличаются, только цветом.
блиин, жаль в эту строчку не добавляется цвет, вообще шикарно было бы

Re: редакция скрипта, сортировка по паку

Posted: 2011-11-18 21:15:42
by Sirocco
вторая цифра это цвет.

Re: редакция скрипта, сортировка по паку

Posted: 2011-11-18 21:43:13
by ZeroDX
вторая цифра это количество

Re: редакция скрипта, сортировка по паку

Posted: 2011-11-18 21:51:32
by Sirocco
возможно я ошибся.
вывод тут один - пользуйтесь универсальными ф-циями с параметрами.

Re: редакция скрипта, сортировка по паку

Posted: 2011-11-20 11:33:42
by Gromiz
хмм, скрипт не всегда с первого раза расставляет итемы по координатам :(
иногда приходиться запускать по 2-3 раза, чтобы все итемы расставлял.

никто не сталкивался и в чем может быть проблема? (про скрипт из 1го поста)

Re: редакция скрипта, сортировка по паку

Posted: 2011-11-20 13:51:11
by ZeroDX
Он их не находит или просто не передвигает? Если второй вариант, то на сервере может стоять защита от быстрого перемещения итемов
+1 :roll: Увеличить паузу до 500-700 мсек ©Mirage

Re: редакция скрипта, сортировка по паку

Posted: 2011-11-21 13:55:05
by Gromiz
не передвигает, в паке они есть.
увеличил задержку - полет нормальный.

Re: редакция скрипта, сортировка по паку

Posted: 2011-11-21 22:53:12
by ZeroDX
Как вариант...

Code: Select all

sub perekladka3()
  var i, moveDelay = 1100
  Dim Slot[8]
    Slot[0] = '0x0EFA -1 25 20 0 '    ;SpellBook
    Slot[1] = '0x1012 -1 35 20 0 '    ;Key
    Slot[2] = '0x1012 -1 38 20 0 '    ;Key
    Slot[3] = '0x0E9B -1 50 20 0 '    ;Mortar
    Slot[4] = '0x1F14 -1 140 20 0 '   ;Rune
    Slot[5] = '0x0F7B -1 150 20 0 '   ;Rune
    Slot[6] = '0x0F7B -1 160 20 0 '   ;Rune
    Slot[7] = '0x0F7B -1 170 20 0 '   ;Rune
  For i = 0 to 7
    UO.FindType(GetWord(Slot[i], 1, ' '), GetWord(Slot[i], 2, ' '), 'backpack')
    If UO.FindCount() then
      UO.Print(UO.GetSerial('finditem'))
      UO.MoveItem('finditem', -1, 'backpack', GetWord(Slot[i], 3, ' '), GetWord(Slot[i], 4, ' '), GetWord(Slot[i], 5, ' '))
      UO.Ignore('finditem')
      Wait(moveDelay)
    Endif
  Next
  UO.IgnoreReset()
Endsub

Sub GetWord(str, num, div)
  var tmpst, i, dlin, kol = 0, start = 0
  dlin = len(str)
  For i = 0 to dlin - 1
    If mid(str, i, 1) == div or i == dlin - 1 then
      kol = kol + 1
      If kol == num then
        tmpst = mid(str, start, i - start)
        Return tmpst
       else
        While mid(str, i, 1) == div
          i = i + 1
        Wend
        If kol == num - 1 then
          start = i
        Endif
      Endif
    Endif
  Next
  tmpst = ''
  Return tmpst
Endsub


Строки массива:
1) Тип 2) Цвет 3-5) Координаты в паке
В конце строки обязательно должен стоять пробел

В скрипте есть гетворд эдреда

p.s. когда тестил, вместо типов рун засунул тип блуд моса... работает =)
pss с дрв постоянно дискает

Re: редакция скрипта, сортировка по паку

Posted: 2011-11-21 23:09:58
by Mirage
Вот ты черт - я забыл про getword... И главное ведь когда я спрашивал про массив с элементом в виде координат "X Y Z" никто не подсказал.
ZeroDX респект и уважуха за вариант.
Ушел переписывать свои координатные скрипты :roll:

Re: редакция скрипта, сортировка по паку

Posted: 2011-11-21 23:15:18
by ZeroDX
Этот гетворд немного подделан, в оригинале нельзя было указать разделитель. Я не помню зачем я его переделал...
Вспомнил.. что-то там связанное с названиями скиллов.

Code: Select all

var string = 'Animal Lore@Animal Taming@'
  UO.Print(GetWord(string, 1, '@'))
Endsub

Re: редакция скрипта, сортировка по паку

Posted: 2011-11-22 06:56:53
by Sirocco
Ненормальные люди, вы действительно считаете, что ф-ция гетворд работает быстрее чем простая ф-ция с аргументами?