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

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