Подсчет кол-ва

Ask for help

Moderators: Murderator+, Murderator

Post Reply
Blood Slayer
Posts: 124
Joined: 2005-07-14 20:53:05
Contact:

Подсчет кол-ва

Post by Blood Slayer »

Есть имя вщи - вещь [5] , таких вещей в паке, ну очень много и цифра разная, как посчитать, сколько всего их. К примеру в мешке : вещь [5] - 3 штучки, вещь [15] 1 штука, вещь [2] две штуки.
Понятно что кликаю на вещь дергаю из журнала цифру, но не совсем ясно как посчитать.
Я пока только учусь :oops:

http://www.surfjunky.com/?r=BloodSlayer
Mirage
Posts: 2802
Joined: 2009-05-28 09:58:28
Location: Иваново
Contact:

Re: Подсчет кол-ва

Post by Mirage »

Если я правильно понял вопрос то чем не устраивает вариант:

Code: Select all

sub podschet()
   var fl=1
   var tip,name="",chis=0
   uo.print('Conteiner dly podscheta?')
   uo.exec('addobject cont')
   while uo.targeting()
      wait(100)
   wend
   uo.textclear()
   uo.textopen()
   uo.useobject('cont')
   wait(1000)
   while fl==1
      uo.findtype('-1','-1','cont')
      if uo.findcount() then
         uo.click('finditem')
         while name==""
            name=uo.getname('finditem')
            wait(10)
         wend
         tip=uo.GetGraphic('finditem')
         uo.findtype(tip,'-1','cont')
         while uo.findcount()
            chis=uo.getquantity('finditem')+chis
            uo.ignore('finditem')
            uo.findtype(tip,'-1','cont')
         wend
         uo.textprint(name+"  общее количество:  "+str(chis))
      else
         fl=0
      endif
      name=""
      chis=0
   wend
   uo.ignorereset()
endsub
?
an Empty bottle общее количество: 1
157 Arrows общее количество: 157
100 Black Pearl общее количество: 100
100 Spider s Silk общее количество: 100
200 Eye of Newt общее количество: 200
100 Nightshade общее количество: 100
a Quest Book общее количество: 2
50000 coins общее количество: 470000 <=====
a Long Ship общее количество: 1
Blood Slayer
Posts: 124
Joined: 2005-07-14 20:53:05
Contact:

Re: Подсчет кол-ва

Post by Blood Slayer »

Mirage wrote:Если я правильно понял вопрос то чем не устраивает вариант:

Code: Select all

sub podschet()
   var fl=1
   var tip,name="",chis=0
   uo.print('Conteiner dly podscheta?')
   uo.exec('addobject cont')
   while uo.targeting()
      wait(100)
   wend
   uo.textclear()
   uo.textopen()
   uo.useobject('cont')
   wait(1000)
   while fl==1
      uo.findtype('-1','-1','cont')
      if uo.findcount() then
         uo.click('finditem')
         while name==""
            name=uo.getname('finditem')
            wait(10)
         wend
         tip=uo.GetGraphic('finditem')
         uo.findtype(tip,'-1','cont')
         while uo.findcount()
            chis=uo.getquantity('finditem')+chis
            uo.ignore('finditem')
            uo.findtype(tip,'-1','cont')
         wend
         uo.textprint(name+"  общее количество:  "+str(chis))
      else
         fl=0
      endif
      name=""
      chis=0
   wend
   uo.ignorereset()
endsub
?
an Empty bottle общее количество: 1
157 Arrows общее количество: 157
100 Black Pearl общее количество: 100
100 Spider s Silk общее количество: 100
200 Eye of Newt общее количество: 200
100 Nightshade общее количество: 100
a Quest Book общее количество: 2
50000 coins общее количество: 470000 <=====
a Long Ship общее количество: 1


Ну как бы uo.getquantity в моё случае не конает, так как количество просто "зашито" в имя. Просто идет название - вещь(1), вещь(2). Тип у них одинаковый, но вот в названии меняется только цифра. И как сложить эти цифры из имени, я пока чет не догнал.


Вообщем в журнале запись - You see: dtom(1). Причем цифра 1, это не кол-во итемов а просто имя. Вот как из журнала выдернуть именно то что в скобках и загнать в переменную.
Я пока только учусь :oops:

http://www.surfjunky.com/?r=BloodSlayer
Mirage
Posts: 2802
Joined: 2009-05-28 09:58:28
Location: Иваново
Contact:

Re: Подсчет кол-ва

Post by Mirage »

Ну тогда вот такой скрипт тебе будет полезнее.
Положим есть предмет - лопата с 20 кондой
Так как конда пишется в квадратный скобках то отлов идет текста написанного внутри них:

Code: Select all

VAR ob = '0x40E56F9B' ; ID предмета
VAR X=20 ; требуемое количество
sub ItemCond()
var name
UO.TextOpen()
UO.TextClear()
uo.DeleteJournal( )
UO.Click( ob )
wait(1000)
name = UO.GetName( ob )
name = explode (name, '[', 1)
name = explode (name, ']', 0)
if val(name) == X then ; изменить на нужный знак
UO.TextPrint( name )
else
UO.TextPrint( 'Не равно заданному значению.' )
endif
endsub

Sub explode( string, pattern, num )
var i, counter = 0, entry = 0
for i=0 to strlen( string ) -strlen( pattern )
   if mid( string, i, strlen( pattern ) ) == pattern then
      counter = counter + 1
      if num == counter-1 then
         return mid( string, entry, i-entry )
      endif
      entry = i + strlen( pattern )
   endif
next
if entry == 0 then
   return false
endif
return mid( string, entry, strlen(string)-entry )
endsub

Скрипт выдаст число с которым можно проводить математические операции.

Code: Select all

VAR ob = '0x40CB5744'
VAR X
sub ItemCond()
var name
UO.TextOpen()
UO.TextClear()
uo.DeleteJournal( )
UO.Click( ob )
wait(1000)
name = UO.GetName( ob )
name = explode (name, '[', 1)
name = explode (name, ']', 0)
X=val(name)
X=X+X
UO.TextPrint( x )
endsub
Blood Slayer
Posts: 124
Joined: 2005-07-14 20:53:05
Contact:

Re: Подсчет кол-ва

Post by Blood Slayer »

Code: Select all

name = UO.GetName( ob )
name = explode (name, '[', 1)
name = explode (name, ']', 0)
X=val(name)
X=X+X


Вот за это спасибо :) А то я уже было думал фак перечитывать.
Я пока только учусь :oops:

http://www.surfjunky.com/?r=BloodSlayer
Blood Slayer
Posts: 124
Joined: 2005-07-14 20:53:05
Contact:

Re: Подсчет кол-ва

Post by Blood Slayer »

Так терь фигня в том, что запись такого рода оказалась (сразу чет не посмарел) - dtom[1 inerf] Ну вообщем число чет не получается дернуть все равно. Терь надо исключить inerf из скобок или как подругому?
Я пока только учусь :oops:

http://www.surfjunky.com/?r=BloodSlayer
Blood Slayer
Posts: 124
Joined: 2005-07-14 20:53:05
Contact:

Re: Подсчет кол-ва

Post by Blood Slayer »

Code: Select all

sub schet()
var tip = 'тип вещи'
var bag, name, ob
var X = 0
   uo.exec('addobject bag')
   while uo.targeting()
      wait(100)
   wend
         repeat
            Uo.UseObject('bag')
               wait(50)
                  Uo.FindType(tip,'-1','bag')
                     If Uo.FindCount() then
                       ob = Uo.GetSerial('finditem')
                       Uo.Click( ob )
                          wait(300)
                        name = UO.GetName( ob )
                     name = explode (name, '[', 1)
                     name = explode (name, ']', 0)
                     X = val(name)
                     X = X + X
                     Uo.Ignore( ob )
                     ob = 0
                     Uo.Print(''+str(x))
                  else
                     Uo.Print("Íå íàéäåí " +str(tip))
                  end if
            wait(50)
      until NOT Uo.Count(tip,'-1','bag')
Uo.Print("Âñåãî " +str(x))
end sub


Похоже эксплоде не срабатывает.
Я пока только учусь :oops:

http://www.surfjunky.com/?r=BloodSlayer
Mirage
Posts: 2802
Joined: 2009-05-28 09:58:28
Location: Иваново
Contact:

Re: Подсчет кол-ва

Post by Mirage »

для dtom[1 inerf]

Code: Select all

                     name = explode (name, '[', 1)
                     name = explode (name, 'iner', 0)

результат будет = 1
Blood Slayer
Posts: 124
Joined: 2005-07-14 20:53:05
Contact:

Re: Подсчет кол-ва

Post by Blood Slayer »

Mirage wrote:для dtom[1 inerf]

Code: Select all

                     name = explode (name, '[', 1)
                     name = explode (name, 'iner', 0)

результат будет = 1


Спасиб, мираж я сам разобрался, правдо ни сразу :) Но все равно спасибо тебе. Ток чет скрипт мой все равно не пашет :)

Code: Select all

sub schet()
var tip = ''
var bag, name, ob
var X = 0
   uo.exec('addobject bag')
   while uo.targeting()
      wait(100)
   wend
         repeat
            Uo.UseObject('bag')
               wait(50)
                  Uo.FindType(tip,'-1','bag')
                     If Uo.FindCount() then
                       ob = Uo.GetSerial('finditem')
                       Uo.Click( ob )
                        name = UO.GetName( ob )
                           name = explode (name, '[', 1)
                           name = explode (name, 'inerf', 0) # После этой строки проц просто под 80% начинает гудеть
                     X = val(name)
                     X = X + X
                     Uo.Ignore( ob )
                     ob = 0
                  else
                     Uo.Print("Íå íàéäåí " +str(tip))
                  end if
            wait(50)
      until NOT Uo.Count(tip,'-1','bag')
Uo.Print("Âñåãî " +str(x))
end sub
Я пока только учусь :oops:

http://www.surfjunky.com/?r=BloodSlayer
Mirage
Posts: 2802
Joined: 2009-05-28 09:58:28
Location: Иваново
Contact:

Re: Подсчет кол-ва

Post by Mirage »

Bank Cheque [53290255gp]

Code: Select all

VAR ob = '0x40E56F9B' ; ID предмета
VAR X
sub ItemCond()
var name
UO.TextOpen()
UO.TextClear()
uo.DeleteJournal( )
UO.Click( ob )
wait(1000)
name = UO.GetName( ob )
name = explode (name, '[', 1)
name = explode (name, ']', 0)
X = val(name)
UO.TextPrint( X )
endsub

Sub explode( string, pattern, num )
var i, counter = 0, entry = 0
for i=0 to strlen( string ) -strlen( pattern )
   if mid( string, i, strlen( pattern ) ) == pattern then
      counter = counter + 1
      if num == counter-1 then
         return mid( string, entry, i-entry )
      endif
      entry = i + strlen( pattern )
   endif
next
if entry == 0 then
   return false
endif
return mid( string, entry, strlen(string)-entry )
endsub


результат
53290255


Если в скрипте исправить
name = explode (name, '[', 1)
name = explode (name, 'gp', 0)
то однокуйственно
результат
53290255


PS Возможно у тебя в названии пробел - Попробуй поставить
name = explode (name, '[', 1)
name = explode (name, ' inerf', 0)
Если не поможет попробую позже твой вариант посмотреть.
Mirage
Posts: 2802
Joined: 2009-05-28 09:58:28
Location: Иваново
Contact:

Re: Подсчет кол-ва

Post by Mirage »

Итак вот рабочий вариант:

Code: Select all

sub schet()
   var bag, name, cond, ob
   var X = 0
   var Y = 0
   UO.IgnoreReset()
   UO.TextOpen()
   UO.TextClear()
   uo.DeleteJournal( )
   uo.exec('addobject bag')
   while uo.targeting()
      wait(100)
   wend
   Uo.UseObject('bag')
   wait(1000)
   UO.FindType( -1, -1,'bag')
   repeat
      ob = Uo.GetSerial('finditem')
      Uo.Click( ob )
      wait(500)
      name = UO.GetName( ob )
      cond = name
      cond = explode (cond, '[', 1)
      cond = explode (cond, ']', 0)
      X = X+val(cond)
      Y=Y+1
      UO.TextPrint('Название= ' +name +'. Прочность= ' +cond)
      Uo.Ignore( ob )
      UO.FindType( -1, -1,'bag')
      wait(500)
   until NOT Uo.FindCount()
   UO.TextPrint("Всего объектов = " +str(Y))
   UO.TextPrint("Общая прочность = " +str(X))
end sub
Sub explode( string, pattern, num )
   var i, counter = 0, entry = 0
   for i=0 to strlen( string ) -strlen( pattern )
      if mid( string, i, strlen( pattern ) ) == pattern then
         counter = counter + 1
         if num == counter-1 then
            return mid( string, entry, i-entry )
         endif
         entry = i + strlen( pattern )
      endif
   next
   if entry == 0 then
      return false
   endif
   return mid( string, entry, strlen(string)-entry )
endsub


Запустив скрипт и кликнув на мешок в котором находятся предметы С КОНДОЙ получим результат
Название= Sloted Katana [30]. Прочность= 30
Название= Knowledge Hat [20]. Прочность= 20
Название= Fence hammer [70]. Прочность= 70
Название= Lizard Beads [20]. Прочность= 20
Название= Ranger leggings [98]. Прочность= 98
Название= Chest of Brilliance [100]. Прочность= 100
Название= Sloted Hammer [30]. Прочность= 30
Название= Bloody Demon [53987505gp]. Прочность= 53987505gp
Название= Sloted Bow [30]. Прочность= 30
Всего объектов = 9
Общая прочность = 53987903

Почему с кондой? Потому что если там будет лежать например "80 Sulphorous Ash" то скрипт уйдет в бесконечность.
Blood Slayer
Posts: 124
Joined: 2005-07-14 20:53:05
Contact:

Re: Подсчет кол-ва

Post by Blood Slayer »

Спасибо за все отвенты :) Вообщем проблема оказалась в том что там ни [] такие скобки а () обычные :) скрипт работает.


Всего объектов = 236
Общие Кол-во = 774

Еще задержку можно уменьшить до 25Ю либо просто сделать проверку на журнал, итогда будет считать на максимальной скорости.
Я пока только учусь :oops:

http://www.surfjunky.com/?r=BloodSlayer
Mirage
Posts: 2802
Joined: 2009-05-28 09:58:28
Location: Иваново
Contact:

Re: Подсчет кол-ва

Post by Mirage »

на 56 сфере запущенной на локальной машине задержка меньше 200 вызывает частую не работу скрипта.
Сумка не успевает открыться, инфа про объект не обновилась после клика...
Post Reply