Перетаскивание в мешок. Срочно помогите ОТЦЫ!

Anything and all.

Moderators: Murderator+, Murderator

Post Reply
KuKuRuZ@
Posts: 14
Joined: 2005-05-04 16:52:49

Перетаскивание в мешок. Срочно помогите ОТЦЫ!

Post by KuKuRuZ@ »

Вот такенная проблемка возникла.
Своял я скрипт на БК чтоб он лики делал. Берёт с сундука 6 логов и одну нитку(у нас на шарде дается лук из этих ресурсов) он крафтиться и падает обратно в сундук. Но проблемка в том, что сундук не безграничен (255 итемов). Мне нужно чтоб он искал в сундуке мишки и складывал туда луки, пока не дойдет до 255 луков в мешке, потом он их начинает складывать в другой мешок (мешков в сундуке целая куча).

Вот мой скрипт:

sub bowcraft()
VAR Sunduk = '0x400D2C79'
VAR Logi = '0x1BDD'
VAR Spool = '0x0FA0'
VAR Bow = '0x13B1'
VAR Kolvo = 6
VAR Kolvo2 = 1
VAR k = 0, j, dagger
dagger = UO.ObjAtLayer( 'Rhand' )
UO.SetGlobal( 'instrtype', UO.GetGraphic( dagger ) )
###############################################################

If UO.Count( Logi ) == 0 Then
UO.FindType( Logi, -1, Sunduk )
If UO.FindCount() == 0 Then
UO.Print("Logs not found, script terminated")
Return

else
UO.Grab( Str( Kolvo ), 'finditem' )
wait(500)
while UO.Count( Logi ) < Kolvo
wait(100)
wend
Endif
Endif
##############################################################
If UO.Count( Spool ) == 0 Then
UO.FindType( Spool, -1, Sunduk )
If UO.FindCount() == 0 Then
UO.Print("Spool not found, script terminated")
Return
Endif
Endif
UO.Grab( Str( Kolvo2 ), 'finditem' )
wait(500)
while UO.Count( Spool ) < Kolvo2
wait(100)
wend

##############################################################
UO.DeleteJournal()
UO.CancelMenu()
UO.WaitTargetType( Logi )
UO.UseObject( dagger )
UO.WaitMenu ('What do you want to carve', 'bow' )
k = 0
while NOT UO.InJournal('You put') AND NOT UO.InJournal('fail') AND ( k < 50 )
k = k + 1
wait(300)
wend
If UO.Count( Bow ) > 0 then
UO.FindType( Bow, -1, -1 )
UO.MoveItem( 'finditem', 0, Sunduk )
wait(500)
while UO.Count( Bow ) > 0
wait(100)
wend
UO.Print( 'Bow moved' )
Endif
Wend
end sub


Зарание спасиба!!! Очень нужно!
Last edited by KuKuRuZ@ on 2005-05-11 13:37:07, edited 1 time in total.
Sfagnum
Expert!
Posts: 1284
Joined: 2004-07-04 00:14:58
Contact:

Re: Перетаскивание в мешок. Срочно помогите ОТЦЫ!

Post by Sfagnum »

KuKuRuZ@ wrote:Очень нужно!
если б нужно было б поискал бы аналогичные скрипты. ищи по necklace
KuKuRuZ@
Posts: 14
Joined: 2005-05-04 16:52:49

Re: Перетаскивание в мешок. Срочно помогите ОТЦЫ!

Post by KuKuRuZ@ »

Sfagnum wrote:
KuKuRuZ@ wrote:Очень нужно!
если б нужно было б поискал бы аналогичные скрипты. ищи по necklace


А бес перетаскивание мешков можно? Хотя в скрипте непонял совсем не чего. Я тока учусь...

Вот что у меня получилось тока непашет :)

sub bowcraft()
VAR Sunduk = '0x400D2C79'
VAR Logi = '0x1BDD'
VAR Spool = '0x0FA0'
VAR Bow = '0x13B1'
VAR Bag = '0x0E76'
VAR Kolvo = 6
VAR Kolvo2 = 1
VAR k = 0, j, dagger
var BagSer, i=0, fizl=0, control=5, time, z
dagger = UO.ObjAtLayer( 'Rhand' )
UO.SetGlobal( 'instrtype', UO.GetGraphic( dagger ) )
###############################################################

If UO.Count( Logi ) == 0 Then
UO.FindType( Logi, -1, Sunduk )
If UO.FindCount() == 0 Then
UO.Print("Logs not found, script terminated")
Return

else
UO.Grab( Str( Kolvo ), 'finditem' )
wait(500)
while UO.Count( Logi ) < Kolvo
wait(100)
wend
Endif
Endif
##############################################################
If UO.Count( Spool ) == 0 Then
UO.FindType( Spool, -1, Sunduk )
If UO.FindCount() == 0 Then
UO.Print("Spool not found, script terminated")
Return
Endif
Endif
UO.Grab( Str( Kolvo2 ), 'finditem' )
wait(500)
while UO.Count( Spool ) < Kolvo2
wait(100)
wend

##############################################################
UO.DeleteJournal()
UO.CancelMenu()
UO.WaitTargetType( Logi )
UO.UseObject( dagger )
UO.WaitMenu ('What do you want to carve', 'bow' )
k = 0
while NOT UO.InJournal('You put') AND NOT UO.InJournal('fail') AND ( k < 50 )
k = k + 1
wait(300)
wend
If UO.Count( Bow ) > 0 then
UO.FindType( Bow, -1, -1 )
UO.MoveItem( 'finditem', 0, 'Bag' )
wait(500)
while UO.Count( Bow ) > 0
wait(100)
wend
UO.Print( 'Bow moved' )
if UO.InJournal("Too many items") then
NewBag()
endif
Endif
Wend
end sub

sub NewBag()
Open('Sunduk')
UO.FindType('Bag', -1, 'Sunduk')
UO.Print('Ok')
if UO.FindCount() < 1 then
end if
BagSer=UO.GetSerial('finditem')
wait(1000)
end sub
KuKuRuZ@
Posts: 14
Joined: 2005-05-04 16:52:49

Post by KuKuRuZ@ »

Сделайте пжалста! А то совсем не соображаю...
KuKuRuZ@
Posts: 14
Joined: 2005-05-04 16:52:49

Re: Перетаскивание в мешок. Срочно помогите ОТЦЫ!

Post by KuKuRuZ@ »

Sfagnum wrote:


Вот что у меня получилось. Но вот он только всё время выводит ошибку и ссылается на BagSer в 84 строке (Line 84: Veriable undefined - BagSer) BagSer=UO.GetSerial( 'finditem' )

Вот скрипт который получился....

sub bowcraft()
VAR Sunduk = '0x400D2C79'
VAR Sunduk2 = '0x4009B2BC'
VAR Logi = '0x1BDD'
VAR Spool = '0x0FA0'
VAR Bow = '0x13B1'
VAR Bag = '0x0E76'
VAR Kolvo = 6
VAR Kolvo2 = 1
VAR k = 0, j, dagger
var BagSer, i=0, fizl=0, control=5, time, z
dagger = UO.ObjAtLayer( 'Rhand' )
UO.SetGlobal( 'instrtype', UO.GetGraphic( dagger ) )
###############################################################
NewBag()
If UO.Count( Logi ) == 0 Then
UO.FindType( Logi, -1, 'Sunduk' )
If UO.FindCount() == 0 Then
UO.Print("Logs not found, script terminated")
Return

else
UO.Grab( Str( Kolvo ), 'finditem' )
wait(500)
while UO.Count( Logi ) < Kolvo
wait(100)
wend
Endif
Endif
##############################################################
If UO.Count( Spool ) == 0 Then
UO.FindType( Spool, -1, Sunduk )
If UO.FindCount() == 0 Then
UO.Print("Spool not found, script terminated")
Return
Endif
Endif
UO.Grab( Str( Kolvo2 ), 'finditem' )
wait(500)
while UO.Count( Spool ) < Kolvo2
wait(100)
wend

##############################################################
UO.DeleteJournal()
UO.CancelMenu()
UO.WaitTargetType( Logi )
UO.UseObject( dagger )
UO.WaitMenu ('What do you want to carve', 'bow' )
k = 0
while NOT UO.InJournal('You put') AND NOT UO.InJournal('fail') AND ( k < 50 )
k = k + 1
wait(300)
wend
If UO.Count( Bow ) > 0 then
UO.FindType( Bow, -1, -1 )
UO.MoveItem( 'finditem', '0', 'BagSer' )
wait(500)
while UO.Count( Bow ) > 0
wait(100)
if UO.InJournal("Too many items") then
NewBag()
endif

wend
UO.Print( 'Bow moved' )
Endif
Wend
end sub

sub Open(Container)
UO.DeleteJournal()
UO.UseObject(Container)
wait(500)
end sub

sub NewBag()
Open('Sunduk')
Open('Sunduk2')
UO.FindType('Bag', -1, 'Sunduk')
UO.Print('Ok')
if UO.FindCount() < 1 then
end if
BagSer=UO.GetSerial('finditem')
UO.MoveItem('BagSer', 0, 'Sunduk2')
wait(1000)
end sub
Destruction
Junior Expert
Posts: 3221
Joined: 2004-06-24 22:08:56

Post by Destruction »

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

По поводу перекида кхм..

Code: Select all

var btype = 0x0000#Тип сумки.
var bag = uo.findtype(btype)
...
....

if uo.getName() lalala  = 255 then
uo.ignore(bag)
bag = uo.findtype(btype)
endif

...
....
YokoInjection CodeSweeper
Function not found?
Possession of mathematics at the level of art - a gift that is only available for election.
Sorry for my clumsy English.
Telegram: @tatikom
Sfagnum
Expert!
Posts: 1284
Joined: 2004-07-04 00:14:58
Contact:

Post by Sfagnum »

Destruction wrote:Нуу, то, что он путает строки - я заметил давно, может вовсе и не та ошибка, о которой тв всех заставляешь думать :)

По поводу перекида кхм..

Code: Select all

var btype = 0x0000#Тип сумки.
var bag = uo.findtype(btype)
...
....

if uo.getName() lalala  = 255 then
uo.ignore(bag)
bag = uo.findtype(btype)
endif

...
....
не путай человека. с этим там всё норм ошибка тут:

Code: Select all

 UO.MoveItem('BagSer', 0, 'Sunduk2') 
надо:

Code: Select all

UO.MoveItem(BagSer, 0, 'Sunduk2') 
т.к. это переменная, а не объект.
KuKuRuZ@
Posts: 14
Joined: 2005-05-04 16:52:49

Post by KuKuRuZ@ »

Sfagnum wrote:не путай человека. с этим там всё норм ошибка тут:

Code: Select all

 UO.MoveItem('BagSer', 0, 'Sunduk2') 
надо:

Code: Select all

UO.MoveItem(BagSer, 0, 'Sunduk2') 
т.к. это переменная, а не объект.

Теперь таже ошибка тока в этой строке которую ты написал. Line 85: Veriable undefined - BagSer
Sfagnum
Expert!
Posts: 1284
Joined: 2004-07-04 00:14:58
Contact:

Post by Sfagnum »

ну есстественно :)

Code: Select all

VAR Bag = '0x0E76'
var BagSer
эти переменные вынеси из процедуры - они должны быть видны по всему скрипту, а не только в 1ой прцедуре. ;)
и тут:

Code: Select all

UO.FindType('Bag', -1, 'Sunduk') 
аналогичная вышеописаной ошибка.

ЗЫ будь внимательнее при копировании кусков скрипта. ничего просто так не делается ;)
Destruction
Junior Expert
Posts: 3221
Joined: 2004-06-24 22:08:56

Post by Destruction »

Sfagnum wrote:
Destruction wrote:Нуу, то, что он путает строки - я заметил давно, может вовсе и не та ошибка, о которой тв всех заставляешь думать :)

По поводу перекида кхм..

Code: Select all

var btype = 0x0000#Тип сумки.
var bag = uo.findtype(btype)
...
....

if uo.getName() lalala  = 255 then
uo.ignore(bag)
bag = uo.findtype(btype)
endif

...
....
не путай человека. с этим там всё норм ошибка тут:

Code: Select all

 UO.MoveItem('BagSer', 0, 'Sunduk2') 
надо:

Code: Select all

UO.MoveItem(BagSer, 0, 'Sunduk2') 
т.к. это переменная, а не объект.


Ну я хз, я чужое кхм, так и хочется сказать про экскрименты... не очень люблю читать, вот прочел первый пост и написал решение, самое простое тип :evil:
YokoInjection CodeSweeper
Function not found?
Possession of mathematics at the level of art - a gift that is only available for election.
Sorry for my clumsy English.
Telegram: @tatikom
KuKuRuZ@
Posts: 14
Joined: 2005-05-04 16:52:49

Post by KuKuRuZ@ »

New Error :)

Теперь нехочет логи падла брать :) Грит логи нот фаунд, хотя раньше брал!
var BagSer
VAR Bag = '0x0E76'
sub bowcraft()
VAR Sunduk = '0x400D2C79'
VAR Sunduk2 = '0x4009B2BC'
VAR Logi = '0x1BDD'
VAR Spool = '0x0FA0'
VAR Bow = '0x13B1'
VAR Kolvo = 6
VAR Kolvo2 = 1
VAR k = 0, j, dagger
dagger = UO.ObjAtLayer( 'Rhand' )
UO.SetGlobal( 'instrtype', UO.GetGraphic( dagger ) )
###############################################################
While TRUE
NewBag()
If UO.Count( Logi ) == 0 Then
UO.FindType( Logi, -1, 'Sunduk' )
If UO.FindCount() == 0 Then
UO.Print("Logs not found, script terminated")
Return

else
UO.Grab( Str( Kolvo ), 'finditem' )
wait(500)
while UO.Count( Logi ) < Kolvo
wait(100)
wend
Endif
Endif
##############################################################
If UO.Count( Spool ) == 0 Then
UO.FindType( Spool, -1, Sunduk )
If UO.FindCount() == 0 Then
UO.Print("Spool not found, script terminated")
Return
Endif
Endif
UO.Grab( Str( Kolvo2 ), 'finditem' )
wait(500)
while UO.Count( Spool ) < Kolvo2
wait(100)
wend

##############################################################
UO.DeleteJournal()
UO.CancelMenu()
UO.WaitTargetType( Logi )
UO.UseObject( dagger )
UO.WaitMenu ('What do you want to carve', 'bow' )
k = 0
while NOT UO.InJournal('You put') AND NOT UO.InJournal('fail') AND ( k < 50 )
k = k + 1
wait(300)
wend
If UO.Count( Bow ) > 0 then
UO.FindType( Bow, -1, -1 )
UO.MoveItem( 'finditem', '0', 'BagSer' )
wait(500)
while UO.Count( Bow ) > 0
wait(100)
if UO.InJournal("Too many items") then
NewBag()
endif

wend
UO.Print( 'Bow moved' )
Endif
Wend
end sub

sub Open(Container)
UO.DeleteJournal()
UO.UseObject(Container)
wait(500)
end sub

sub NewBag()
Open('Sunduk')
Open('Sunduk2')
UO.FindType(Bag, -1, 'Sunduk')
UO.Print('Ok')
if UO.FindCount() < 1 then
end if
BagSer=UO.GetSerial('finditem')
UO.MoveItem(BagSer, 0, 'Sunduk2')
wait(1000)
end sub
Sfagnum
Expert!
Posts: 1284
Joined: 2004-07-04 00:14:58
Contact:

Post by Sfagnum »

Destruction wrote:Ну я хз, я чужое кхм, так и хочется сказать про экскрименты... не очень люблю читать, вот прочел первый пост и написал решение, самое простое тип :evil:
ну так и не вводи в заблуждение ;)
просто этот код тож не мой просто я его причёсывал и юзаю достаточно регулярно... поэтому в курсе...

2 KuKuRuZ@

Code: Select all

if UO.FindCount() < 1 then
end if
этот изврат либо убери, либо верни к исходному варианту.
KuKuRuZ@
Posts: 14
Joined: 2005-05-04 16:52:49

Post by KuKuRuZ@ »

это не менят положения, всё равно логи брать не хочет :(
KuKuRuZ@
Posts: 14
Joined: 2005-05-04 16:52:49

Post by KuKuRuZ@ »

Теперь такая ощибка. Он при каждом крафте лука берёт новую сумку и пихает туда лук...

Мне нужно чтоб он перемещал сумку и клал туда луки пока она не заполниться. потому как я немогу удержать все 255 луков...

var BagSer
VAR Bag = '0x0E76' ## Òèï ñóìêè

###################################

sub bowcraft()

wait(500)
VAR Sunduk = '0x400D2C79' ## Ñåðèéíèê ñóíäóêà
VAR Sunduk2 = '0x4009B2BC' ## Ñåðèéíèê ñóíäóêà 2
VAR Logi = '0x1BDD' ## Òèï ëîãîâ

###############################################################################


VAR Spool = '0x0FA0' ## Òèï íèòîê

###############################################################################

VAR Bow = '0x13B1' ## Òèï ëóêîâ
VAR Kolvo = 6 ## Êîëè÷åñòâî ëîãîâ êîòîðîå áåð¸ì

###############################################################################

VAR Kolvo2 = 1 ## Êîëè÷åñòâî íèòîê êîòîðîå áåð¸ì

###############################################################################

VAR k = 0, j, dagger
dagger = UO.ObjAtLayer( 'Rhand' )
UO.SetGlobal( 'instrtype', UO.GetGraphic( dagger ) )

## Òóò ìû áåð¸ì ëîãè
While TRUE
NewBag()
If UO.Count( Logi ) == 0 Then
UO.FindType( Logi, -1, Sunduk )
If UO.FindCount() == 0 Then
UO.Print("Logs not found, script terminated")
return
else
UO.Grab( Str( Kolvo ), 'finditem' )
wait(500)
while UO.Count( Logi ) < Kolvo
wait(100)
wend
Endif
Endif
###############################################################################

If UO.Count( Spool ) == 0 Then
UO.FindType( Spool, -1, Sunduk )
If UO.FindCount() == 0 Then
UO.Print("Spool not found, script terminated")
return
Endif
Endif
UO.Grab( Str( Kolvo2 ), 'finditem' )
wait(500)
while UO.Count( Spool ) < Kolvo2
wait(100)
wend
###############################################################################
UO.DeleteJournal()
UO.CancelMenu()
UO.WaitTargetType( Logi )
UO.UseObject( dagger )
UO.WaitMenu ('What do you want to carve', 'bow' )
k = 0
while NOT UO.InJournal('You put') AND NOT UO.InJournal('fail') AND ( k < 50 )
k = k + 1
wait(300)
wend
If UO.Count( Bow ) > 0 then
UO.FindType( Bow, -1, -1 )
UO.MoveItem( 'finditem', 0, BagSer )
wait(500)
while UO.Count( Bow ) > 0
wait(100)
if UO.InJournal("Too many items") then
NewBag()
endif
wend
UO.Print( 'Bow moved' )
Endif
Wend
end sub

sub NewBag()
UO.UseObject('0x400D2C79')
UO.UseObject('0x4009B2BC')
UO.FindType(Bag, -1, '0x400D2C79')
UO.Print('Ok')
BagSer=UO.GetSerial('finditem')
UO.MoveItem(BagSer, 0, '0x4009B2BC')
wait(1000)
end sub
Sfagnum
Expert!
Posts: 1284
Joined: 2004-07-04 00:14:58
Contact:

Post by Sfagnum »

KuKuRuZ@ wrote:Теперь такая ощибка. Он при каждом крафте лука берёт новую сумку и пихает туда лук...

Code: Select all

While TRUE
NewBag()
местами поменяй

и повторяю для группы "Д", не подумайте что плохого, для "Думающих". не путай объекты и переменные!
KuKuRuZ@
Posts: 14
Joined: 2005-05-04 16:52:49

Post by KuKuRuZ@ »

Скрипт готов на готов на 90%, осталось наверное :) одна ошибка. Вот он крафтит, крафтит, в вот в мешке переполнение и он берёт новый мешок... а потом ещё ещё ещё... Пока не перетащит все мешки. Я имею ввиду то что он не крафтит, а просто в цыкле начинает перетаскивать мешки....

var BagSer
VAR Bag = '0x0E76' ## Òèï ñóìêè

###################################

sub bowcraft()

wait(500)
VAR Sunduk = '0x400D2C79' ## Ñåðèéíèê ñóíäóêà
VAR Sunduk2 = '0x4009B2BC' ## Ñåðèéíèê ñóíäóêà 2
VAR Logi = '0x1BDD' ## Òèï ëîãîâ

###############################################################################

ôóíêöèþ
VAR Spool = '0x0FA0' ## Òèï íèòîê

###############################################################################

VAR Bow = '0x13B1' ## Òèï ëóêîâ
VAR Kolvo = 6 ## Êîëè÷åñòâî ëîãîâ êîòîðîå áåð¸ì

###############################################################################


VAR Kolvo2 = 1 ## Êîëè÷åñòâî íèòîê êîòîðîå áåð¸ì

###############################################################################

VAR k = 0, j, dagger
dagger = UO.ObjAtLayer( 'Rhand' )
UO.SetGlobal( 'instrtype', UO.GetGraphic( dagger ) )

## Òóò ìû áåð¸ì ëîãè
NewBag()
UO.FindType( Bow, -1, -1 )
uo.moveitem('finditem',0,BagSer)
While TRUE
if uo.count(Logi) <> 6 then
uo.findtype('0x1BDD', -1, -1)
UO.MoveItem( 'finditem', 0, Sunduk )
endif
wait(500)
If UO.Count( Logi ) == 0 Then
UO.FindType( Logi, -1, Sunduk )
If UO.FindCount() == 0 Then
UO.Print("Logs not found, script terminated")
return
else
UO.Grab( Str( Kolvo ), 'finditem' )
wait(500)

wend
Endif
Endif
###############################################################################

If UO.Count( Spool ) == 0 Then
UO.FindType( Spool, -1, Sunduk )
If UO.FindCount() == 0 Then
UO.Print("Spool not found, script terminated")
return
Endif
Endif
UO.Grab( Str( Kolvo2 ), 'finditem' )
wait(500)
while UO.Count( Spool ) < Kolvo2
wait(100)
wend
###############################################################################
UO.DeleteJournal()
UO.CancelMenu()
UO.WaitTargetType( Logi )
UO.UseObject( dagger )
UO.WaitMenu ('What do you want to carve', 'bow' )
k = 0
while NOT UO.InJournal('You put') AND NOT UO.InJournal('fail') AND ( k < 50 )
k = k + 1
wait(300)
wend
If UO.Count( Bow ) > 0 then
UO.FindType( Bow, -1, -1 )
UO.MoveItem( 'finditem', 0, BagSer )
wait(500)
while UO.Count( Bow ) > 0
wait(100)
if UO.InJournal("Too many items") then
NewBag()
UO.FindType( Bow, -1, -1 )
uo.moveitem('finditem',0,BagSer)
endif
wend
UO.Print( 'Bow moved' )
Endif
Wend
end sub

sub NewBag()
UO.UseObject('0x400D2C79')
UO.UseObject('0x4009B2BC')
UO.FindType('0x0E76', -1, '0x400D2C79')
UO.Print('Ok')
BagSer=UO.GetSerial('finditem')
UO.MoveItem(BagSer, 0, '0x4009B2BC')
wait(1000)
end sub
Sfagnum
Expert!
Posts: 1284
Joined: 2004-07-04 00:14:58
Contact:

Post by Sfagnum »

KuKuRuZ@ wrote:Скрипт готов на готов на 90%, осталось наверное :) одна ошибка. Вот он крафтит, крафтит, в вот в мешке переполнение и он берёт новый мешок... а потом ещё ещё ещё... Пока не перетащит все мешки. Я имею ввиду то что он не крафтит, а просто в цыкле начинает перетаскивать мешки....

Code: Select all

If UO.Count( Bow ) > 0 then 
UO.FindType( Bow, -1, -1 )
UO.MoveItem( 'finditem', 0, BagSer )
wait(500)
while UO.Count( Bow ) > 0
wait(100)
if UO.InJournal("Too many items") then
NewBag()
UO.FindType( Bow, -1, -1 )
uo.moveitem('finditem',0,BagSer)
endif
wend
UO.Print( 'Bow moved' )
Endif
ну ты и переврал скрипт то....
замени на это выделенный кусок.

Code: Select all

   while UO.Count( Bow ) > 0
      UO.FindType( Bow, -1, -1 )
      UO.DeleteJournal()
      UO.MoveItem( 'finditem', 0, BagSer )
      wait(500)
      if UO.InJournal("Too many items") then
         NewBag()
      endif
   UO.Print( 'Bow moved' )
   wend
а проблема у тебя была из-за того что ты не удалял сообщение "Too many items" из журнала.
Post Reply