Page 1 of 1
Подсчет кол-ва
Posted: 2010-12-13 02:41:29
by Blood Slayer
Есть имя вщи - вещь [5] , таких вещей в паке, ну очень много и цифра разная, как посчитать, сколько всего их. К примеру в мешке : вещь [5] - 3 штучки, вещь [15] 1 штука, вещь [2] две штуки.
Понятно что кликаю на вещь дергаю из журнала цифру, но не совсем ясно как посчитать.
Re: Подсчет кол-ва
Posted: 2010-12-13 08:54:42
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
Re: Подсчет кол-ва
Posted: 2010-12-13 11:44:06
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, это не кол-во итемов а просто имя. Вот как из журнала выдернуть именно то что в скобках и загнать в переменную.
Re: Подсчет кол-ва
Posted: 2010-12-13 14:09:08
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
Re: Подсчет кол-ва
Posted: 2010-12-13 15:14:31
by Blood Slayer
Code: Select all
name = UO.GetName( ob )
name = explode (name, '[', 1)
name = explode (name, ']', 0)
X=val(name)
X=X+X
Вот за это спасибо

А то я уже было думал фак перечитывать.
Re: Подсчет кол-ва
Posted: 2010-12-13 15:41:06
by Blood Slayer
Так терь фигня в том, что запись такого рода оказалась (сразу чет не посмарел) - dtom[1 inerf] Ну вообщем число чет не получается дернуть все равно. Терь надо исключить inerf из скобок или как подругому?
Re: Подсчет кол-ва
Posted: 2010-12-13 16:13:01
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
Похоже эксплоде не срабатывает.
Re: Подсчет кол-ва
Posted: 2010-12-13 18:20:32
by Mirage
для dtom[1 inerf]
Code: Select all
name = explode (name, '[', 1)
name = explode (name, 'iner', 0)
результат будет = 1
Re: Подсчет кол-ва
Posted: 2010-12-14 00:04:58
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
Re: Подсчет кол-ва
Posted: 2010-12-14 08:18:03
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)
Если не поможет попробую позже твой вариант посмотреть.
Re: Подсчет кол-ва
Posted: 2010-12-14 12:54:07
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" то скрипт уйдет в бесконечность.
Re: Подсчет кол-ва
Posted: 2010-12-14 13:07:21
by Blood Slayer
Спасибо за все отвенты

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

скрипт работает.
Всего объектов = 236
Общие Кол-во = 774
Еще задержку можно уменьшить до 25Ю либо просто сделать проверку на журнал, итогда будет считать на максимальной скорости.
Re: Подсчет кол-ва
Posted: 2010-12-14 14:18:07
by Mirage
на 56 сфере запущенной на локальной машине задержка меньше 200 вызывает частую не работу скрипта.
Сумка не успевает открыться, инфа про объект не обновилась после клика...