Перейти к содержанию
Форум шарда Middle-Earth
Авторизация  
imaborg

Full Exceptional Dwarven Platemail (комплект брони)

Рекомендуемые сообщения

Писал скрипт для производства полного комплекта экскептиональной брони и помещения её в мешок!

 

у меня слабый уровень скриптинга и никакой научной подготовки (учусь на юрфаке), прочитал пару раз все уроки на joko форуме, видел кучу разных скриптов и анализировал их.

помогите дописать этот скрипт!

 

sub main()

var i
var dwserial
var expserial
VAR FoodType='0x097B' # Тип еды                                                                               
            #'0x097B' - жаренная рыба                                
            #'0x09F2' - жаренное мясо                                
            #'0x171F' - бананы  

dim dwitem[7]
    dwitem[0]='0x1416' #Breastplate
    dwitem[1]='0x141A' #Legs
    dwitem[2]='0x1417' #Arms
    dwitem[3]='0x1419' #Helm
    dwitem[4]='0x1418' #Gloves
    dwitem[5]='0x1413' #Gorget
    dwitem[6]='0x1B76' #Shield
    
dim dwmenu[7]
    dwmenu[0]="'What' 'Armor' 'Select' 'Platemail' 'Select' 'Dwarven Platemail Breastplate'"
    dwmenu[1]="'What' 'Armor' 'Select' 'Platemail' 'Select' 'Dwarven Platemail Legs'"
    dwmenu[2]="'What' 'Armor' 'Select' 'Platemail' 'Select' 'Dwarven Platemail Arms'"
    dwmenu[3]="'What' 'Armor' 'Select' 'Helmets' 'Select' 'Dwarven Plate Helm'"
    dwmenu[4]="'What' 'Armor' 'Select' 'Platemail' 'Select' 'Dwarven Platemail Gloves'"
    dwmenu[5]="'What' 'Armor' 'Select' 'Platemail' 'Select' 'Platemail Gorget'"
    dwmenu[6]="'What' 'Shields' 'Select' 'Heater'"


uo.CancelMenu()
uo.CancelTarget()

  UO.Print("Укажите контейнер для FULL DW Exceptional комплекта!")
  UO.Exec('addobject Expbag')
    While UO.Targeting()
        Wait(300)
    Wend
    
  UO.Print("Укажите из какого металла будем ковать?")
  UO.Exec('addobject dwmetall')
    While UO.Targeting()
        Wait(300)
    Wend

if UO.GetQuantity('dwmetall') <= 150 then
uo.print("Недостаточное количество ингов в паке")
wait(100)
else
uo.print('Приступаем к ковке Dwarven Platemail Breastplate')

For i = 0 to 6
fulldw()
next 
  
endif
end sub

Sub fullDW()
while not UO.InJournal("exceptional")
    UO.DeleteJournal()
    UO.waitmenu("dwmenu[i]")   ##################################################################
    uo.waittargetobject('dwmetall')
    uo.useobject('^0x13E3')
            while not (UO.InJournal("You create") or UO.InJournal("You make") or UO.InJournal("You destroy"))
            wait(300)
            wend
        repeat
    uo.findtype('dwitem[i]','-1','Backpack')
    uo.waittargettype('0x0F51')
       UO.Usetype('0x0FBB')
    wait(4000)
    until uo.injournal("You could make some material from that.")
wend
  UO.Findtype('dwitem[i]','-1','Backpack')
  uo.MoveItem('finditem','-1','ExpBag')
  CheckLag()
  uo.print('Exceptional сделан!')
  uo.usetype('FoodType')
  wait(1000)
end sub

Sub CheckLag()
UO.DeleteJournal("Backpack")
UO.Click('backpack')
repeat
wait(100)
until UO.InJournal("Backpack")
end sub

 

 

как я только не вставлял этот dwmenu ничего не выходит((

 

возможные ошибки:

1. заменить пробелы на запятые или убрать " в

dwmenu[0]="'What' 'Armor' 'Select' 'Platemail' 'Select' 'Dwarven Platemail Breastplate'"

2. заменить uo.waitmenu("dwmenu") на uo.exec("waitmenu.............. или использовать uo.automenu

 

 

пс - наткнулся в стандартной документации на вот что

sub Craft(tool, resource, minresource, delay, menu1, choice1, menu2, choice2, menu3, choice3)
if menu1<>"" then UO.Exec("automenu '"+menu1+"' '"+choice1+"'")
if menu2<>"" then UO.Exec("automenu '"+menu2+"' '"+choice2+"'")
if menu3<>"" then UO.Exec("automenu '"+menu3+"' '"+choice3+"'")
while UO.Count(resource)>minresource
if UO.Count(tool) < 1 then
  UO.Print("Tool not found")
  return
end if
UO. Print("Resource "+STR(UO.Count(resource)))
wait(delay)
UO. waittargettype(resource)
UO.usetype(tool)
wend
UO.Print("Out of resource ("+STR(UO.Count(resource))+")")
end sub

 

не понимаю что означает и кроется за этим if menu1<>"" then и зачемто везде + ставит перед менюшками

 

может в этом ключ к успеху моего скрипта?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

uo.exec('waitmenu...

это порнуха приводящая к парсам....

 

Запомни, между значений в скобках всегда должны быть запятые.

dim dwmenu[7]

dwmenu[0]='What','Armor','Select','Platemail','Select','Dwarven Platemail Breastplate'

dwmenu[1]='What','Armor','Select','Platemail','Select','Dwarven Platemail Legs'

dwmenu[2]='What' 'Armor','Select','Platemail','Select','Dwarven Platemail Arms'

dwmenu[3]='What' 'Armor','Select','Helmets','Select','Dwarven Plate Helm'

dwmenu[4]='What' 'Armor','Select','Platemail','Select','Dwarven Platemail Gloves'

dwmenu[5]='What' 'Armor','Select','Platemail','Select','Platemail Gorget'

dwmenu[6]='What' 'Shields','Select','Heater'

 

В инжекте двойные и одинарные кавычки - это одно и тоже.. если ты открыл кавычки один раз, то вторые открывающие твои кавычки будут уже являтся символом переменной или значения.. что приведет к ошибке.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

чет я не догнал, для чего вводились

var dwserial

var expserial

 

и еще, кстати parse error выходит вот на этой строчке

dwmenu[0]='What','Armor','Select','Platemail','Select','Dwarven Platemail Breastplate'

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

я тут немного переработал его :) запускается без проблем, но...

делает грудак...

1) если экспет, то перетаскивает его в сумку, 4 раза жрет и выключается.

2) если не эксепт, то не плавит, продолжает делать дальше итд.

var food='0x097B'    # Тип еды                                                                               
                    #'0x097B' - жаренная рыба                                
                       #'0x09F2' - жаренное мясо                                
                    #'0x171F' - бананы  
sub fulldwpl()

var i
var time=0

dim dwitem[7]
    dwitem[0]='0x1416' #Breastplate
    dwitem[1]='0x141A' #Legs
    dwitem[2]='0x1417' #Arms
    dwitem[3]='0x1419' #Helm
    dwitem[4]='0x1418' #Gloves
    dwitem[5]='0x1413' #Gorget
    dwitem[6]='0x1B76' #Shield
    
dim dwtype1[7]
    dwtype1[0]='Armor'
    dwtype1[1]='Armor'
    dwtype1[2]='Armor'
    dwtype1[3]='Armor'
    dwtype1[4]='Armor'
    dwtype1[5]='Armor'
    dwtype1[6]='Shields'

dim dwtype2[7]
    dwtype2[0]='Platemail'
    dwtype2[1]='Platemail'
    dwtype2[2]='Platemail'
    dwtype2[3]='Helmets'
    dwtype2[4]='Platemail'
    dwtype2[5]='Platemail'
    dwtype2[6]='Heater'

dim dwtype3[6]
    dwtype3[0]='Dwarven Platemail Breastplate'
    dwtype3[1]='Dwarven Platemail Legs'
    dwtype3[2]='Dwarven Platemail Arms'
    dwtype3[3]='Dwarven Plate Helm'
    dwtype3[4]='Dwarven Platemail Gloves'
    dwtype3[5]='Platemail Gorget'
    

UO.canceltarget()    
UO.Print("Куда складывать броню?")
UO.addobject('bagexc')
While UO.Targeting()
    Wait(100)
Wend

uo.deletejournal()  
For i = 0 to 6
while not UO.InJournal('exceptional')
    UO.DeleteJournal()
    UO.waitmenu('What', dwtype1[i], 'Select', dwtype2[i], 'Select', dwtype3[i])
    uo.waittargettype('0x1BF2')
    uo.usetype('0x13E3')
    repeat
        wait(1000)
        time=time+1
    until uo.injournal("You create|You destroy|You make") or time > 20
    uo.findtype('0x13BB','-1','backpack')
        if uo.findcount() then
            uo.deletejournal()
            uo.waittargetobject(dwitem[i])
            uo.usetype('0x0FBB')
            wait(3000)
        endif
wend
UO.Findtype(dwitem[i])
uo.MoveItem('finditem','-1','bagexc')
uo.usetype(food)
wait(1000)
next
end sub

Sub eda()
uo.findtype(food)
if uo.findcount() then
    uo.usetype(food)
else
    uo.print("Нет еды!")
endif
end sub

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Жесть) последний скрипт перековеркан донельзя)))

1. после изготовления будет искать вещь с типом: 0x13BB и если найдет. то будет только ее плавить.

2. Нет условия для экзепт шмотки

3. функция финдтайп и перемещения не правильно описана...

4. зачем то делает юзтайп еды, если ниже идеть отдельный макрос под еду..

в общем писать остальное лень. Тот кто писал это макрос не читал мой анекдот про 2 стакана.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Жесть) последний скрипт перековеркан донельзя)))

1. после изготовления будет искать вещь с типом: 0x13BB и если найдет. то будет только ее плавить.

2. Нет условия для экзепт шмотки

3. функция финдтайп и перемещения не правильно описана...

4. зачем то делает юзтайп еды, если ниже идеть отдельный макрос под еду..

в общем писать остальное лень. Тот кто писал это макрос не читал мой анекдот про 2 стакана.

:D :D читал читал, вечером переделанный скину, пока у меня задача была из первого скрипта сделать хотя бы запускающийся)

потому что в первом во-первых, меню не работало в таком формате, а под общими кавычками он его не принимал. Во-вторых, массив вынесен был из функции fulldw() и он выдавал на этом ошибку...короче я кол-во функций сократил :))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

о! хоть что-то прояснилось у меня в голове)

я незнал что массив из функции выносить нельзя!

Спасиб!

 

По поводу лишних переменных -

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

 

Чтобы к примеру поставил скрипт, ушел) а он тебе 10 комплектов брони сделал! Конечно это рассчитано не на вышку, но кто знает у кого ее сколько))))

 

вообще изначально я начал писать ээтот скрипт для того чтобы один чел поставил вендора и продавал различные комплекты брони - от вауксита до вышки! А то ему лень вручную сидеть)

 

через пару часиков буду дома, попробую все это дописать!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

механизация процесса - это, конечно, хорошо. Но не до такой же степени)))

а моя модификация скрипта не такая безнадежная, как я думал :)) Он уже переходит на ноги...правда подглючивает вот таким образом:

1310471120-clip-31kb.jpg

Чего-то он начинает делать лишнее.

Я весь скидывать не буду - массивы итд все такое же осталось. Сам цикл скидываю только:

For i = 0 to 6
eda() ## хватит одного употребления пищи
while uo.count('0x1BF2') > 30 ## 29 ингов нужно для того, чтоб грудак сделать
uo.DeleteJournal()
uo.waitmenu('What', dwtype1[i], 'Select', dwtype2[i], 'Select', dwtype3[i])
uo.waittargettype('0x1BF2')
uo.usetype('0x13E3')
repeat
    wait(1000)
    time=time+1
until uo.injournal("You create|You destroy|You make") or time > 20
if uo.injournal('exceptional') then ## проверка на эксепт
    uo.findtype(dwitem[i])
    if uo.findcount() then
        uo.moveitem('finditem', 1, 'bagexc') ## тащит в сумку, если эксепт
        wait(300)
    endif
    uo.deletejournal()
    next
else
    uo.findtype(dwitem[i],'-1','backpack')
    if uo.findcount() then
        uo.waittargetobject('finditem')
        uo.usetype('0x0FBB') ## плавит, если неэксепт
        wait(3000)
    else 
        wait(100) ## на всяк случай, чтоб не проглючило, если не найдет то, что плавить нужно
    endif
wend
wait(1000)
end sub

хотелось бы узнать, что он лишнее делать пытается? Загвоздка осталась только с этим)

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Чтобы к примеру поставил скрипт, ушел) а он тебе 10 комплектов брони сделал! Конечно это рассчитано не на вышку, но кто знает у кого ее сколько))))

А что мешает перетаскивать все комплекты в один мешок то?) Геморроя меньше

 

2ZeFeaR:

А что тебе мешает некст в конце запихнуть? это же ничего не изменит, ибо если экзепт, то он перетаскивает... а если неэкзепт - плавит. Это как раз то, о чем я говорил... когда пишешь скрипт надо всегда прописать то, что должна делать программа, если что-то не произойдет...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
2ZeFeaR:

А что тебе мешает некст в конце запихнуть? это же ничего не изменит, ибо если экзепт, то он перетаскивает... а если неэкзепт - плавит. Это как раз то, о чем я говорил... когда пишешь скрипт надо всегда прописать то, что должна делать программа, если что-то не произойдет...

ну видимо я совсем дуб))) вроде все просто описываешь, а как до практики дело доходит, то вообще никак.

ок, на каждый if я поставил условие со своим else, пусть даже оно будет хотя бы wait(100).

Вот, что сейчас есть (убрал next из условия, добавил в конец и еще в одном месте endif дописал, ибо не хватало одного). Абсолютно не понимаю, почему он опять не хочет нормально работать. Сейчас распишу даже все:

var food='0x097B'    # Тип еды                                                                               
                    #'0x097B' - жаренная рыба                                
                       #'0x09F2' - жаренное мясо                                
                    #'0x171F' - бананы  
sub fulldwpl()

var i
var time=0

dim dwitem[7]
    dwitem[0]='0x1416' #Breastplate
    dwitem[1]='0x141A' #Legs
    dwitem[2]='0x1417' #Arms
    dwitem[3]='0x1419' #Helm
    dwitem[4]='0x1418' #Gloves
    dwitem[5]='0x1413' #Gorget
    dwitem[6]='0x1B76' #Shield
    
dim dwtype1[7]
    dwtype1[0]='Armor'
    dwtype1[1]='Armor'
    dwtype1[2]='Armor'
    dwtype1[3]='Armor'
    dwtype1[4]='Armor'
    dwtype1[5]='Armor'
    dwtype1[6]='Shields'

dim dwtype2[7]
    dwtype2[0]='Platemail'
    dwtype2[1]='Platemail'
    dwtype2[2]='Platemail'
    dwtype2[3]='Helmets'
    dwtype2[4]='Platemail'
    dwtype2[5]='Platemail'
    dwtype2[6]='Heater'

dim dwtype3[7]
    dwtype3[0]='Dwarven Platemail Breastplate'
    dwtype3[1]='Dwarven Platemail Legs'
    dwtype3[2]='Dwarven Platemail Arms'
    dwtype3[3]='Dwarven Plate Helm'
    dwtype3[4]='Dwarven Platemail Gloves'
    dwtype3[5]='Platemail Gorget'
    dwtype3[6]=0

UO.canceltarget()    
UO.Print("Куда складывать броню?")
UO.addobject('bagexc')
While UO.Targeting()
    Wait(100)
Wend

uo.deletejournal()  
For i = 0 to 6
eda()
while uo.count('0x1BF2') > 30 ## будет работать, пока в паке >30 ингов
uo.DeleteJournal()
uo.waitmenu('What', dwtype1[i], 'Select', dwtype2[i], 'Select', dwtype3[i]) ## выполняем меню с i от 0 до 6
uo.waittargettype('0x1BF2') ## инги
uo.usetype('0x13E3') ## молоток
repeat
    wait(1000)
    time=time+1
until uo.injournal("You create|You destroy|You make") or time > 20 ## ждет, пока будет в журнале упоминание о сделанном или простой
if uo.injournal('exceptional') then ## проверка на эксепт - перетаскиваем
    uo.findtype(dwitem[i])
    if uo.findcount() then
        uo.moveitem('finditem', 1, 'bagexc')
        wait(300)
              else
                            wait(100)
    endif
    uo.deletejournal()
else                                             ## или плавим, если неэксепт
    uo.findtype(dwitem[i],'-1','backpack')
    if uo.findcount() then
        uo.waittargetobject('finditem')
        uo.usetype('0x0FBB')
        wait(3000)
    else 
        wait(100)
    endif
endif
wend
next                                               ## i = i + 1
wait(1000)
end sub

Sub eda()
uo.findtype(food)
if uo.findcount() then
    uo.usetype(food)
else
    uo.print("Нет еды!")
endif
end sub

Итого, делает 3 раза: если эксепт, то переходит к след. детали, если неэксепт, то делает эту же, но после любой 3-й начинается эта ерунда, как на скрине выше (типа, делаю уже, автотаргет кэнселд) и все заканчивается парсер эррор через несколько секунд (~4-5).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

я тут одно пока только вижу, что next не там, по-моему...если после wend стоит, то в принципе вообще не должно выполняться i = i + 1, пока ингов не станет <30. next должно быть сразу после того, как uo.injournal("exceptional") и перетаскивание выполнится...

 

## обозначение переменных
## еда, простой (время), i

sub fulldwpl()
## описание массивов
while ингов > 30
for i = 0 to 6
## изготовление
if exceptional
## перетаскиваем
else
## плавим
endif
next # все таки сюда ли? Никак разобраться не могу..проверяется условие (если эксепт, все ок, перетаскивается и некст. А если неэксепт, то плавит и все равно некст делает. Или под фразой "А что тебе мешает некст в конце запихнуть? это же ничего не изменит, ибо если экзепт, то он перетаскивает... а если неэкзепт - плавит." ты что-то другое имел ввиду?
wend
end sub

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну я на самом деле ждал когда вы сами дойдете до этого...

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

 

к примеру:

sub fulldwpl()
## описание массивов
for i = 0 to 6
while ингов > 30 или переменная > 0
## изготовление
if exceptional
## перетаскиваем
## добавляем переменной значение 1
else
## плавим
endif
wend
## сбрасываем переменной значение 0
next 
end sub

 

как то так..)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а команда next сама, значит, не является одновременно аналогом выражения i = i + 1 и командой к переходу к началу цикла?

т.е., она в принципе такое же закрытие цикла, как wend для while и endif для if? И, чтобы менялось значение переменной надо дополнительно дописывать i = i + 1 в условии на эксепт? Просто я помню еще какой-то скрипт с циклом писал...там хватало просто next для перехода к следующему значению i.

 

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот, что пока имею:

var food='0x097B'    # Тип еды                                                                               
                    #'0x097B' - жаренная рыба                                
                   #'0x09F2' - жаренное мясо                                
                    #'0x171F' - бананы  
var i

sub fulldwpl()
var time=0

dim dwitem[7]
    dwitem[0]='0x1416' #Breastplate
    dwitem[1]='0x141A' #Legs
    dwitem[2]='0x1417' #Arms
    dwitem[3]='0x1419' #Helm
    dwitem[4]='0x1418' #Gloves
    dwitem[5]='0x1413' #Gorget
    dwitem[6]='0x1B76' #Shield
    
dim dwtype1[7]
    dwtype1[0]='Armor'
    dwtype1[1]='Armor'
    dwtype1[2]='Armor'
    dwtype1[3]='Armor'
    dwtype1[4]='Armor'
    dwtype1[5]='Armor'
    dwtype1[6]='Shields'

dim dwtype2[7]
    dwtype2[0]='Platemail'
    dwtype2[1]='Platemail'
    dwtype2[2]='Platemail'
    dwtype2[3]='Helmets'
    dwtype2[4]='Platemail'
    dwtype2[5]='Platemail'
    dwtype2[6]='Heater'

dim dwtype3[6]
    dwtype3[0]='Dwarven Platemail Breastplate'
    dwtype3[1]='Dwarven Platemail Legs'
    dwtype3[2]='Dwarven Platemail Arms'
    dwtype3[3]='Dwarven Plate Helm'
    dwtype3[4]='Dwarven Platemail Gloves'
    dwtype3[5]='Platemail Gorget'
    
UO.canceltarget()    
UO.Print("Куда складывать броню?")
UO.addobject('bagexc')
While UO.Targeting()
    Wait(100)
Wend

uo.deletejournal()
For i = 0 to 6
while uo.count('0x1BF2') > 30 or i > 0
eda()
uo.DeleteJournal()
uo.waitmenu('What', dwtype1[i], 'Select', dwtype2[i], 'Select', dwtype3[i])
uo.waittargettype('0x1BF2')
uo.usetype('0x13E3')
repeat
    wait(1000)
    time=time+1
until uo.injournal("You create|You destroy|You make") or time > 20
if uo.injournal("exceptional") then
    uo.findtype(dwitem[i])
    if uo.findcount() then
        uo.moveitem('finditem', 1, 'bagexc')
        i = i + 1
        wait(300)
    else
        wait(100)
    endif
    uo.deletejournal()
else
    uo.findtype(dwitem[i],'-1','backpack')
    if uo.findcount() then
        uo.waittargetobject('finditem')
        uo.usetype('0x0FBB')
        wait(3000)
    else 
        wait(100)
    endif
endif
wend
i = 0
next
end sub

Sub eda()
uo.findtype(food)
if uo.findcount() then
    uo.usetype(food)
else
    uo.print("Нет еды!")
endif
end sub

Пока не очень понятно, для чего сбрасывается значение после wend.

Да и скрипт все еще продолжает после 3-го раза выдавать 2 раза You're already doing something и 1 autotargetcancelled.

Заодно сократил 4-й массив (dwtype3), потому что там хитера нет, в принципе само меню ждет значение переменной там, но мб, если его не будет, то примет его за 0?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

блин да нет же... учись читать каждую строчку скрипта...

команда for i= 1 to 10 читается как: для i равное от 1 до 10

то есть у тебя начнется скрипт от того, что в строчке for i=1 to 10 переменной i присвоится значение 1 и будет выполнятся задача внутри for пока не дойдет до некста... как только дойдет до некста, то перейдет опять к фору, где автоматически i даст значение следующей переменной и так до тех пор пока не дойдет до нужного количества (в данном примере это 10).

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ок...вот, дошло до for

i присвоилось значение 0 (i = 0)

while выполняется (т.к. ингов >30)

в waitmenu вписываются соответствующие значения dwtype1[0] dwtype2[0] итд

выполняется изготовление

выполняется проверка на exceptional

- если эксепт, то ищется findtype(dwitem[0]), находится и перетаскивается, i присваивается новое значение 1 (i = 0 + 1), журнал трется, выходит из проверки на exceptional. Дальше он выходит из while или нет? Ведь выполняются оба условия...и ингов больше 30 (допустим) и i > 0 (на данный момент 1). По сути то именно сейчас ему пора дать команду некст, чтобы он с i = 1 начал цикл for заново.

- если неэксепт, то ищется findtype(dwitem[0]), находится и плавится, i все еще равно 0 (не меняется), выходит из проверки if на exceptional, из while не должно выходить, потому что ингов > 30 (допустим). Значит повторяется еще раз процесс изготовления с i = 0.

Давай пока на этом остановлюсь, правильно ли я суть выполнения скрипта понимаю? Курсивом выделил то, чего еще нет в скрипте.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

переменная в i присваивается в месте for... после некста макрос возвращается обратно к for и в i присваивается следующее значение.

по твоему циклу внутри ФОРа.

У тебя нет проверки на экзепт, ты проверяешь лишь журнал на наличие этой строчки, и если она есть, то просто перемещаешь вещь в сумку с экзептом... далее у тебя задача выйти из твоего цикла изготовлении вещи для того, чтоб перейти к следующей, а это можно достичь лишь когда скрипт дойдет до next и вернется к for меняя значение на следующее. Для этого тебе и нужна дополнительная переменная, которая будет изменяться при перемещении экзепт шмотки и которая будет обозначать что ты сделал вещь экзепт.

Если же экзепта не будет, то соответственно в переменной не будет значения и он будет продолжать делать вещь и плавить ее дальше...

 

Ну серьезно... уже же разжевал все... подумайте уже)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

дададада, я походу добил его))) теперь нет нахлестов в виде i'm already doing something, добавил несколько проверок на журнал и счетчик простоя сбрасываю после изготовления. Добавил несколько чисток журнала. И все работает.

Правда, щит не сделал из-за сокращения массива, сейчас поставил dwitem3[6] = 0 посмотрим, сделает ли так.

Да, сделало все, но после того, как щит сделался, выдало line 58: runtime error

на строке с меню...т.е. он продолжил выполнение цикла после i > 6 ?

var food='0x097B'    # Тип еды                                                                               
                    #'0x097B' - жаренная рыба                                
                   #'0x09F2' - жаренное мясо                                
                    #'0x171F' - бананы  
var i

sub fulldwpl()
var time=0
var p=0

dim dwitem[7]
    dwitem[0]='0x1416' #Breastplate
    dwitem[1]='0x141A' #Legs
    dwitem[2]='0x1417' #Arms
    dwitem[3]='0x1419' #Helm
    dwitem[4]='0x1418' #Gloves
    dwitem[5]='0x1413' #Gorget
    dwitem[6]='0x1B76' #Shield
    
dim dwtype1[7]
    dwtype1[0]='Armor'
    dwtype1[1]='Armor'
    dwtype1[2]='Armor'
    dwtype1[3]='Armor'
    dwtype1[4]='Armor'
    dwtype1[5]='Armor'
    dwtype1[6]='Shields'

dim dwtype2[7]
    dwtype2[0]='Platemail'
    dwtype2[1]='Platemail'
    dwtype2[2]='Platemail'
    dwtype2[3]='Helmets'
    dwtype2[4]='Platemail'
    dwtype2[5]='Platemail'
    dwtype2[6]='Heater'

dim dwtype3[7]
    dwtype3[0]='Dwarven Platemail Breastplate'
    dwtype3[1]='Dwarven Platemail Legs'
    dwtype3[2]='Dwarven Platemail Arms'
    dwtype3[3]='Dwarven Plate Helm'
    dwtype3[4]='Dwarven Platemail Gloves'
    dwtype3[5]='Platemail Gorget'
    dwtype3[6]=0
    
UO.canceltarget()    
UO.Print("Куда складывать броню?")
UO.addobject('bagexc')
While UO.Targeting()
    Wait(100)
Wend

uo.deletejournal()
For i = 0 to 6
while uo.count('0x1BF2') > 30 or p > 0
eda()
uo.DeleteJournal()
uo.waitmenu('What', dwtype1[i], 'Select', dwtype2[i], 'Select', dwtype3[i])
uo.waittargettype('0x1BF2')
uo.usetype('0x13E3')
repeat
    wait(1000)
    time=time+1
until uo.injournal("You create|You destroy|You make") or time > 20
time=0
if uo.injournal("exceptional") then
    uo.findtype(dwitem[i])
    if uo.findcount() then
        uo.moveitem('finditem', 1, 'bagexc')
        wait(300)
        p = p + 1
        i = i + 1
    else
        wait(100)
    endif
    uo.deletejournal()
else
    uo.findtype(dwitem[i])
    if uo.findcount() then
        uo.waittargetobject('finditem')
        uo.usetype('0x0FBB')
        repeat
            wait(3000)
        until uo.injournal("You could make")
    else 
        wait(100)
    endif
    uo.deletejournal()
endif
wend
next
end sub

Sub eda()
uo.findtype(food)
if uo.findcount() then
    uo.usetype(food)
else
    uo.print("Нет еды!")
endif
end sub

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сделай dwtype3[6]=''

хотя тебе все равно не поможет, так как по меню он должен будет найти еще один селект... которого не будет

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Не забываем выкладывать рабочий вариант скрипта Сюда ;)

все бы замечательно, но я пока не могу придумать, как Runtime error после изготовления последней вещи убрать. Так что для готовых скриптов он не подходит, хоть и выполняется полностью. Мессир то на отдыхе, но и его возня именно с этим скриптом замучила по-моему)))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ну задачу он свою выполняет) так что можно выложить я думаю, 1.0 версию)

 

к сожалению у меня нету игрового чара с прокаченным БС(( и возможности отладить скрипт мне не светит!

но можно сказать совместными усилиями мы написали его ГЫГ)

 

полюбому пригодиится комунить)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ребят, просто банальней сделайте массивы на каждую вещь с полным путем Waitmenu()

И будет вам щастье))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
Авторизация  

×
×
  • Создать...