Yoko

All sides of Injection
It is currently 2024-03-29 07:46:47

All times are UTC+02:00




Post new topic  Reply to topic  [ 8 posts ] 
Author Message
PostPosted: 2013-08-06 14:25:52 
Offline
User avatar

Joined: 2013-07-27 15:27:11
Posts: 14
Доброго времени суток!

Есть скрипт, который должен определять количество определенного предмета в контейнере. Если меньше чем указано, то идет процедура:
A = Заданное количество - Найденное количество
Взять количество предметов, которого не хватает.

Вот сам скрипт:
Code:
Sub Take(Type, Color, From, To, Quantity)
   Var A = 0

   UO.FindType(Type, Color, To)
   If UO.FindCount() < Quantity Then
      A = Quantity - UO.GetQuantity('finditem')

      UO.FindType(Type, Color, From)
      If UO.FindCount() Then
         UO.Grab(A, 'finditem')
         Wait(500)
      Else
         UO.Print('Запрашиваемый предмет не найден.')
      Endif
   Endif
End Sub


Проблема в том, что одну половину предметов он берет столько, сколько надо, а вторую берет все, что найдет в контейнере.

В чем заключается ошибка данного скрипта?

_________________
Будь осторожен в своих суждениях о людях. Скорее всего, ты ошибаешься.


Top
   
PostPosted: 2013-08-06 14:48:49 
Offline
User avatar

Joined: 2009-05-28 09:58:28
Posts: 2802
Location: Иваново
Тут есть небольшая хитрость.
1) если ты используешь Grab без setreceivingcontainer то значит берешь всегда в пак чара. Тогда первая часть скрипта лишком большая.
Code:
   UO.FindType(Type, Color, To)
   If UO.FindCount() < Quantity Then
      A = Quantity - UO.GetQuantity('finditem')

заменяется 1 строкой
Code:
 A = Quantity - UO.count(Type, Color)


2) если ты пишешь универсальную перемещалку то надо либо извращаться с setreceivingcontainer либо взять более новую функцию uo.moveitem - если она работает естественно.
3) у тебя предмет тягается только 1 раз - а может лаг пролететь. Я бы перемещал через цикл пока предмет не переместится. Как то вот так:

Code:
Sub GET(item, cont, min, max) ; предмет, откуда, минимум, сколько брать 
   If UO.Count( item ) < min Then
      UO.FindType( item, '-1', cont )  ; рассчитано на ЛЮБОЙ цвет
      if UO.FindCount() > 0 Then
         uo.charprint(printcolour,'Сырья в сундуке: '+Str(UO.GetQuantity('finditem')) ) 
         itemM=UO.GetSerial('finditem')
         timemove=UO.Timer()
         while UO.ContainerOf(itemM)==cont && timemove+20>UO.Timer()  ; проверка на перемещение предмета.
            uo.moveitem('finditem', max, 'backpack')
            wait(300)
         wend
      else
         uo.charprint(printcolour, 'Полностью кончилось сырье' )
         UO.CancelMenu()
         MyTerminate()
      endif
   Endif
end sub

Тут нет проверки цвета и добора предметов до определенного количества.

_________________
Image
YokoInjection CodeSweeper
Ошибка "Unhandled exception in parser"
Стрелялка для олдов.


Top
   
PostPosted: 2013-08-06 19:45:39 
Offline
User avatar

Joined: 2013-07-27 15:27:11
Posts: 14
1. SetReceivingContainer прописывается в первой части скрипта, чтобы каждый лишний раз не прописывал.

Есть ли разница между
Code:
A = Quantity - UO.GetQuantity('finditem')

и
Code:
A = Quantity - UO.Count(Type, Color)

Если контейнер, где строка определяет количество, находится в личном рюкзаке?

2. К сожалению UO.MoveItem работает некорректно, поэтому приходиться извращаться.

3. Добавил проверку на то, в каком контейнере лежит предмет, как в твоем скрипте.
При запуске скрипта инжект выдает ошибку "Parse Error" на строку:
Code:
While UO.ContainerOf( Item ) == To


Собственно вот скрипт целиком
Code:
;==============================================================================;
   Var Reagents = '0x407D0DEC'; ID контейнера с реагентами
   Var Potions  = '0x40B04AA4'; ID контейнера с эликсирами
;------------------------------------------------------------------------------;
   Var TContainer = '0x0E76'; Тип контейнера для реагентов
   Var CContainer = '0x0481'; Цвет контейнера для реагентов
;------------------------------------------------------------------------------;
   Var Container, Item, A = 0
;==============================================================================;

sub Move()
   UO.FindType(TContainer, CContainer, 'backpack')
   If UO.FindCount() > 0 Then
      Container = UO.GetSerial('finditem')

      UO.Set('quiet', '1')
      UO.SetReceivingContainer( Container )

      Take('0x0F7A', '-1', Reagents, Container, 50); Black Pearl
      Take('0x0F7B', '-1', Reagents, Container, 50); Blood Moss
      Take('0x0F84', '-1', Reagents, Container, 50); Garlic
      Take('0x0F85', '-1', Reagents, Container, 50); Ginseng
      Take('0x0F86', '-1', Reagents, Container, 50); Mandrake Root
      Take('0x0F88', '-1', Reagents, Container, 50); Nightshade
      Take('0x0F8C', '-1', Reagents, Container, 50); Sulphorous Ash
      Take('0x0F8D', '-1', Reagents, Container, 50); Spider's Silk

      UO.UnsetReceivingContainer()
      UO.Set('quiet', '0')
   Else
      UO.Print('Контейнер для реагентов не найден.')
   Endif

   Take('0x0E24', '0x05BD', Potions, 'backpack', 10); Greater Agility Potion
   Take('0x0E24', '0x0060', Potions, 'backpack', 5);  Invisibility Potion
   Take('0x0E24', '0x0676', Potions, 'backpack', 5);  Total Refresh Potion
End Sub

Sub Take(Type, Color, From, To, Quantity)
   UO.FindType(Type, Color, To)
   If UO.FindCount() < Quantity Then
      Item = UO.GetSerial('finditem')
      A = Quantity - UO.GetQuantity( Item )

      UO.FindType(Type, Color, From)
      If UO.FindCount() Then
         While UO.ContainerOf( Item ) == To
            UO.Grab(A, Item)
            Wait(500)
         Wend
      Else
         UO.Print('Запрашиваемый предмет не найден.')
      Endif
   Endif
End Sub


Как быть? Мне кажется, что эта строка:
Code:
A = Quantity - UO.GetQuantity( Item )

Не всегда сбрасывает количество предыдущего предмета, таким образом плюсует и берет больше, чем насчитал.

_________________
Будь осторожен в своих суждениях о людях. Скорее всего, ты ошибаешься.


Top
   
PostPosted: 2013-08-06 21:06:47 
Offline
User avatar

Joined: 2009-05-28 09:58:28
Posts: 2802
Location: Иваново
Code:
   UO.FindType(Type, Color, To)
   If UO.FindCount() < Quantity Then
      Item = UO.GetSerial('finditem')
      A = Quantity - UO.GetQuantity( Item )

в твоем случае одно и тоже что и
Code:
A = Quantity - UO.Count(Type, Color)

Плюсы первого - им можно искать не только в паке чара, плюсы второго кроме краткости - он отображает ВСЕ предметы данного цвета/типа в бэкпаке (хотя это может быть и минус). Если в паке лежит 3 кучи по 100 золотых скрипт скажет что 300 гп.
Первый будет работать с любой одной кучей => 100 золотых.
Про ошибку гляну - клиента под рукой нет.

UO.MoveItem - сервер не бестуо? Версия клиента какая?

_________________
Image
YokoInjection CodeSweeper
Ошибка "Unhandled exception in parser"
Стрелялка для олдов.


Top
   
PostPosted: 2013-08-06 21:14:06 
Offline
User avatar

Joined: 2013-07-27 15:27:11
Posts: 14
Mirage, вот как оно работает, понятно. Спасибо.
Да, сервер The Best UO. Версия инжекта YokoInj 710.16

_________________
Будь осторожен в своих суждениях о людях. Скорее всего, ты ошибаешься.


Top
   
PostPosted: 2013-08-06 21:43:25 
Offline
User avatar

Joined: 2009-05-28 09:58:28
Posts: 2802
Location: Иваново
на 710.16 вроде побороли проблему с мувитемом. ХЗ - надо тестить у меня чар на сервере голый :mrgreen:

Проверь вот такой добор регов.

Code:
sub dobor_regs()
   var n, x, y = 20, z
   var BEKBag = 'backpack'  ; сумка куда добирать
   var REGBag = '0x40F5BB50' ; сумка с регами/банк
   Dim r[8]
   r[1] = '0x0F88'
   r[2] = '0x0F86'
   r[3] = '0x0F8D'
   r[4] = '0x0F8C'
   r[5] = '0x0F84'
   r[6] = '0x0F85'
   r[7] = '0x0F7B'
   r[8] = '0x0F7A'
   uo.useobject(BEKBag)
   wait(300)
   uo.useobject(REGBag)
   wait(300)
   For n = 1 To 8
      UO.FindType( r[n] , -1 ,'my')
      x = UO.GetQuantity('finditem')
      if x>y then
         z = x - y
         UO.FindType( r[n] , -1 ,'my')
         UO.MoveItem( 'finditem', str(z) , REGBag)
         wait(500)
      endif
      if x<y then
         z = y - x
         UO.FindType( r[n] , -1 ,REGBag)
         UO.MoveItem( 'finditem', str(z) , BEKBag)
         wait(500)
      endif
   next
end sub


Надо вам Славу пытать чего он там такого наваял. У меня на 56b сфере (и ночной и стабильной) и вашем клиенте MoveItem работает без багов, но с паузой в >300 мсек

_________________
Image
YokoInjection CodeSweeper
Ошибка "Unhandled exception in parser"
Стрелялка для олдов.


Top
   
PostPosted: 2013-08-06 22:42:10 
Offline
User avatar

Joined: 2013-07-27 15:27:11
Posts: 14
Mirage, команда UO.MoveItem к сожалению до сих пор насилует сервер, поэтому придется извращаться дальше.

Насчет твоего скрипта.
Не хотелось бы использовать данный метод, так как количество и цвета динамичные, не смотря на то, что решением данной проблемы я поделился ссылкой в своей предыдущей теме.

Как бы там ни было, хочется допилить свой скрипт. Свое все таки роднее, правильно? (;

_________________
Будь осторожен в своих суждениях о людях. Скорее всего, ты ошибаешься.


Top
   
PostPosted: 2013-08-07 07:11:09 
Offline
User avatar

Joined: 2009-05-28 09:58:28
Posts: 2802
Location: Иваново
у тебя в скрипте из за граба сбита логика.
Code:
UO.FindType(Type, Color, To)
   If UO.FindCount() < Quantity Then
      Item = UO.GetSerial('finditem')
      A = Quantity - UO.GetQuantity( Item )

      UO.FindType(Type, Color, From)
      If UO.FindCount() Then ; <========   ниже добавь  Item = UO.GetSerial('finditem')
            UO.Grab(A, Item)
            Wait(500)
      Else
граб пытается двинуть предмет который ты нашел у себя в сумке. Попробуй Item = UO.GetSerial('finditem') добавить еще раз и посмотри будет ли сбиваться.

или даже вот так
Code:
UO.FindType(Type, Color, To)
   If UO.FindCount() < Quantity Then
      A = Quantity - UO.GetQuantity( 'finditem' )

      UO.FindType(Type, Color, From)
      If UO.FindCount() Then
            UO.Grab(A, 'finditem')
            Wait(500)
      Else

_________________
Image
YokoInjection CodeSweeper
Ошибка "Unhandled exception in parser"
Стрелялка для олдов.


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 8 posts ] 

All times are UTC+02:00


Who is online

Users browsing this forum: No registered users and 22 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB® Forum Software © phpBB Limited