Page 1 of 1

Помощь в написании скрипта для вора

Posted: 2011-12-05 04:01:26
by talomon
Уважаемые,

Нужна помощь в написании скрипта для вора.
Суть: снупится вражий бэкпак, потом запускается скрипт, находит в бэкпаке контейнеры (backpack, sack, pouch итд) и открывает их все подряд даблкликом, включая контейнеры которые есть внутри этих контейнеров
вопросы:
1) как реализовать поиск объектов по типу в последнем открытом паке?
2) как реализовать поиск объектов в найденном в предыдущем пункте паке? проблема в том, что могут быть инклюдные паки пустые или полные, и тогда, по сути, при открытии пустого пака скрипт может тормознуться, т.к. в нём инклюдов нет, в этом случае хотелось бы чтобы он возвращался в предыдущий по списку не открытый пак
3) есть ли возможность отслеживать на программном уровне открыт пак или нет?

заранее спасибо за ответы и надеюсь на вашу помощь :)

Re: Помощь в написании скрипта для вора

Posted: 2011-12-05 05:29:52
by ZeroDX
1 и 2 Пример рекурсии

Code: Select all

sub LootGround()
  UO.Set('finddistance', '2')
  LootContainer('ground')
  UO.Set('finddistance', '12')
Endsub

sub LootWithoutCut()
  var i, id_Corpse, t_Corpse = '0x2006', t_Dagger = '0x0F51'
  UO.Set('finddistance', '2')
  UO.FindType(t_Corpse, -1, 'ground')
  If UO.FindCount() then
    id_Corpse = UO.GetSerial('finditem')
    LootContainer(id_Corpse)
    Wait(100)
   else
    UO.Print('Нет трупа')
  Endif
  UO.Set('finddistance', '12')
Endsub

sub LootWithCut()
  var i, id_Corpse, t_Corpse = '0x2006', t_Dagger = '0x0F51'
  UO.SetArm('Weapon')
  UO.Set('finddistance', '1')
  UO.FindType(t_Corpse, -1, 'ground')
  If UO.FindCount() then
    id_Corpse = UO.GetSerial('finditem')
    UO.WaitTargetObject(id_Corpse)
    UO.UseType(t_Dagger)
    Wait(100)
    UO.Arm('Weapon')
    LootContainer(id_Corpse)
   else
    UO.Print('Нет трупа')
  Endif
  UO.Set('finddistance', '12')
Endsub

Sub LootContainer(id)
  var id_ReagentsBag = '0x40004762', id_SpecialRegsBag = '0x4000BF80', id_OtherBag = '0x40004767', id_RecContainer, Pause = 1100, t_Scissors = '0x0F9E', i, j
  Dim t_Items[4]
    t_Items[0] = '0x1078 0x0EED 0x0F3F 0x1BFB ' ; Это кладём в пак, включая шкуры
    t_Items[1] = '0x0F88 0x0F7A 0x0F86 0x0F8C 0x0F8D 0x0F85 0x0F84 0x0F7B ' ; Это в мешок с регами
    t_Items[2] = '0x0FAB 0x0F0F 0x0F10 0x0F11 0x0F13 0x0F15 0x0F16 0x0F18 0x0F25 0x0F26 0x14EB 0x0E34 0x1BD1 ' ; Это в мешок для всякой всячины
    t_Items[3] = '0x0F87 0x0F90 0x0F82 0x0F81 0x0F8E 0x0F78 0x0F80 0x0F7E 0x0F91 ' ; Это в мешок для некрорегов и костей
    t_Items[4] = '0x09AB 0x0E7C 0x0E40 0x0E41 0x0E42 0x0E43 0x0E75 0x0E76 ' ; Это типы сундуков мешков паков и проч.
  UO.UseObject(id)
  Wait(500)
  For i = 0 to 3
    For j = 1 to GetWordAmount(t_Items[i], ' ')
      Repeat
        UO.FindType(GetWord(t_Items[i], j, ' '), -1, id)
        If UO.FindCount() then
          If i == 0 then
            id_RecContainer = UO.GetSerial('backpack')
          Endif
          If i == 1 then
            id_RecContainer = id_ReagentsBag
          Endif
          If i == 2 then
            id_RecContainer = id_OtherBag
          Endif
          If i == 3 then
            id_RecContainer = id_SpecialRegsBag
          Endif
          UO.MoveItem('finditem', -1, id_RecContainer)
          Wait(Pause)
          If i == 0 and j == 1 then
            UO.FindType(GetWord(t_Items[i], j, ' '), -1, 'backpack')
            If UO.FindCOunt() then
              UO.WaitTargetObject('finditem')
              UO.UseType(t_Scissors)
              Wait(100)
             else
              UO.Print('Странно... Надо увеличить задержку =)')
            Endif
          Endif
        Endif
      Until not UO.FindCount()
    Next
  Next
  For j = 1 to GetWordAmount(t_Items[4], ' ')
    Repeat
      UO.FindType(GetWord(t_Items[4], j, ' '), -1, id)
      If UO.FindCount() then
        LootContainer(UO.GetSerial('finditem'))
       else
        Wait(100)
      Endif
    Until not UO.FindCount()
  Next
  UO.Ignore(id)
Endsub


3)

Code: Select all

Sub ContainerCheck(id)
  UO.UseObject(id)
  Wait(100)
  If UO.GetSerial('lastcontainer') == id then
    Return 1
  Endif
  Return 0
Endsub

Re: Помощь в написании скрипта для вора

Posted: 2011-12-05 18:14:44
by talomon
Спасибо, но не совсем понял как можно реализовать такой механизм:
открыл пак- нашёл в нём допустим 3 пака( а,б и в)- открыл пак а, он пустой- вернулся в главный пак-- открыл пак б-- в паке б есть 3 пака б1,б2 и б3---открыл б1, пустой-- вернулся в б, открыл б2-пустой--вернулся в б3-открыл б3-пустой---вернулся в главный, открыл в, в нём в1 и в2--- открыл в1, в нём в1.1 и в1.2 ну и т.д.

как задать плавующее значение переменной количества паков (заранее неизвестно сколько паков всего будет) и как возвращаться к предыдущим? задавать им id?

Re: Помощь в написании скрипта для вора

Posted: 2011-12-05 20:23:35
by Mirage
сори оффтоп но пипец смелый и удачливый вор такой :wink:

Re: Помощь в написании скрипта для вора

Posted: 2011-12-06 06:42:26
by ZeroDX
Этот кусок ищет контейнеры по типу, если нашла, запускает сама себя на лут найденого контейнера, ищет контейнеры в нём и тд пока не закончатся контейнеры

Code: Select all

  For j = 1 to GetWordAmount(t_Items[4], ' ')
    Repeat
      UO.FindType(GetWord(t_Items[4], j, ' '), -1, id)
      If UO.FindCount() then
        LootContainer(UO.GetSerial('finditem'))
       else
        Wait(100)
      Endif
    Until not UO.FindCount()
  Next
  UO.Ignore(id)