Антарес. Сбор обычных регов.

Anything and all.

Moderators: Murderator+, Murderator

Post Reply
slonopotam
Posts: 270
Joined: 2006-08-05 14:09:06
Contact:

Антарес. Сбор обычных регов.

Post by slonopotam »

Скрипт на сбор обычных регов в Египте и Анхельме.
Для работы скрипта биндим 2 кнопки. Sbor для собирания, Razbor для переработки. Когда написал, был сам в ужосе от скорости 8)



Code: Select all

Sub Sbor()
UO.Set('finddistance','3')
UO.FindType('0x18DF','-1','ground')
If UO.FindCount() > 0 Then
M()
Else
wait(50)
End if
wait(50)
UO.FindType('0x18E5','-1','ground')
If UO.FindCount() > 0 Then
N()
Else
wait(50)
End if
wait(100)
UO.FindType('0x18E1','-1','ground')
If UO.FindCount() > 0 Then
Gar()
Else
wait(50)
End if
wait(50)
UO.FindType('0x18E9','-1','ground')
If UO.FindCount() > 0 Then
Gi()
Else
wait(50)
End if
end sub
Sub M()
UO.Set('finddistance','3')
UO.FindType('0x18DF','-1','ground')
while UO.FindCount()
UO.UseObject('finditem')
UO.FindType('0x18DF','-1','ground')
UO.Ignore('finditem')
wend
UO.Ignorereset()
end sub
Sub N()
UO.Set('finddistance','3')
UO.FindType('0x18E5','-1','ground')
while UO.FindCount()
UO.UseObject('finditem')
UO.FindType('0x18E5','-1','ground')
UO.Ignore('finditem')
wend
UO.Ignorereset()
end sub
Sub Gar()
UO.Set('finddistance','3')
UO.FindType('0x18E1','-1','ground')
while UO.FindCount()
UO.UseObject('finditem')
UO.FindType('0x18E1','-1','ground')
UO.Ignore('finditem')
wend
UO.Ignorereset()
end sub
Sub Gi()
UO.Set('finddistance','3')
UO.FindType('0x18E9','-1','ground')
while UO.FindCount()
UO.UseObject('finditem')
UO.FindType('0x18E9','-1','ground')
UO.Ignore('finditem')
wend
UO.Ignorereset()
end sub
sub Razbor()
UO.FindType('0x18DD','-1','backpack')
If UO.FindCount() > 0 Then
Rm()
Else
wait(50)
End if
UO.FindType('0x18E7','-1','backpack')
If UO.FindCount() > 0 Then
Rn()
Else
wait(50)
End if
UO.FindType('0x18E3','-1','backpack')
If UO.FindCount() > 0 Then
Rgar()
Else
wait(50)
End if
UO.FindType('0x18EB','-1','backpack')
If UO.FindCount() > 0 Then
Rgi()
Else
wait(50)
End if
endsub
Sub Rm()
UO.FindType('0x18DD','-1','backpack')
while UO.FindCount()
UO.UseObject('finditem')
UO.FindType('0x18DD','-1','backpack')
UO.Ignore('finditem')
wend
UO.Ignorereset()
end sub
Sub Rn()
UO.FindType('0x18E7','-1','backpack')
while UO.FindCount()
UO.UseObject('finditem')
UO.FindType('0x18E7','-1','backpack')
UO.Ignore('finditem')
wend
UO.Ignorereset()
end sub
Sub Rgar()
UO.FindType('0x18E3','-1','backpack')
while UO.FindCount()
UO.UseObject('finditem')
UO.FindType('0x18E3','-1','backpack')
UO.Ignore('finditem')
wend
UO.Ignorereset()
end sub
Sub Rgi()
UO.FindType('0x18EB','-1','backpack')
while UO.FindCount()
UO.UseObject('finditem')
UO.FindType('0x18EB','-1','backpack')
UO.Ignore('finditem')
wend
UO.Ignorereset()
end sub
ДРВ
Spoiler
_________________
Антарес
Spoiler|Gostrabaiter|Umhra|Slog
Scripts Writer
Posts: 2259
Joined: 2005-04-19 18:00:29
Location: Московская область
Contact:

Re: Антарес. Сбор обычных регов.

Post by Scripts Writer »

slonopotam wrote:Скрипт на сбор обычных регов в Египте и Анхельме.
Для работы скрипта биндим 2 кнопки. Sbor для собирания, Razbor для переработки. Когда написал, был сам в ужосе от скорости 8)



Code: Select all

Sub Sbor()
UO.Set('finddistance','3')
UO.FindType('0x18DF','-1','ground')
If UO.FindCount() > 0 Then
M()
Else
wait(50)
End if
wait(50)
UO.FindType('0x18E5','-1','ground')
If UO.FindCount() > 0 Then
N()
Else
wait(50)
End if
wait(100)
UO.FindType('0x18E1','-1','ground')
If UO.FindCount() > 0 Then
Gar()
Else
wait(50)
End if
wait(50)
UO.FindType('0x18E9','-1','ground')
If UO.FindCount() > 0 Then
Gi()
Else
wait(50)
End if
end sub
Sub M()
UO.Set('finddistance','3')
UO.FindType('0x18DF','-1','ground')
while UO.FindCount()
UO.UseObject('finditem')
UO.FindType('0x18DF','-1','ground')
UO.Ignore('finditem')
wend
UO.Ignorereset()
end sub
Sub N()
UO.Set('finddistance','3')
UO.FindType('0x18E5','-1','ground')
while UO.FindCount()
UO.UseObject('finditem')
UO.FindType('0x18E5','-1','ground')
UO.Ignore('finditem')
wend
UO.Ignorereset()
end sub
Sub Gar()
UO.Set('finddistance','3')
UO.FindType('0x18E1','-1','ground')
while UO.FindCount()
UO.UseObject('finditem')
UO.FindType('0x18E1','-1','ground')
UO.Ignore('finditem')
wend
UO.Ignorereset()
end sub
Sub Gi()
UO.Set('finddistance','3')
UO.FindType('0x18E9','-1','ground')
while UO.FindCount()
UO.UseObject('finditem')
UO.FindType('0x18E9','-1','ground')
UO.Ignore('finditem')
wend
UO.Ignorereset()
end sub
sub Razbor()
UO.FindType('0x18DD','-1','backpack')
If UO.FindCount() > 0 Then
Rm()
Else
wait(50)
End if
UO.FindType('0x18E7','-1','backpack')
If UO.FindCount() > 0 Then
Rn()
Else
wait(50)
End if
UO.FindType('0x18E3','-1','backpack')
If UO.FindCount() > 0 Then
Rgar()
Else
wait(50)
End if
UO.FindType('0x18EB','-1','backpack')
If UO.FindCount() > 0 Then
Rgi()
Else
wait(50)
End if
endsub
Sub Rm()
UO.FindType('0x18DD','-1','backpack')
while UO.FindCount()
UO.UseObject('finditem')
UO.FindType('0x18DD','-1','backpack')
UO.Ignore('finditem')
wend
UO.Ignorereset()
end sub
Sub Rn()
UO.FindType('0x18E7','-1','backpack')
while UO.FindCount()
UO.UseObject('finditem')
UO.FindType('0x18E7','-1','backpack')
UO.Ignore('finditem')
wend
UO.Ignorereset()
end sub
Sub Rgar()
UO.FindType('0x18E3','-1','backpack')
while UO.FindCount()
UO.UseObject('finditem')
UO.FindType('0x18E3','-1','backpack')
UO.Ignore('finditem')
wend
UO.Ignorereset()
end sub
Sub Rgi()
UO.FindType('0x18EB','-1','backpack')
while UO.FindCount()
UO.UseObject('finditem')
UO.FindType('0x18EB','-1','backpack')
UO.Ignore('finditem')
wend
UO.Ignorereset()
end sub


В ужасе от :
табуляции
синтаксиса
структуры скрипта
нерациональности

Ты если пишешь- то старайся придерживаться стандартов хотя бы каких-нибудь.
Критерии скрипта в одной из тем Yoko.

То что ты написал- ИМХО первый блин.
I'm
Expert!
Posts: 1396
Joined: 2004-10-15 22:38:04
Location: Moscow City.
Contact:

Post by I'm »

Кхм.. не согласен.
О каких стандартах вообще может идти речь?
Каждый пишет как хочет и как ЕМУ удобно.
The End.
omi4
Posts: 457
Joined: 2005-07-10 21:53:05

Post by omi4 »

достаточно 10 строк

Code: Select all

sub Sbor()
   UO.Set('finddistance','3')
   for var i = 6367 to 6377
      while UO.GetSerial("~" + UO.Int2Hex(i))
         UO.UseObject("finditem")
         wait(100)
      wend
   next
   UO.Set('finddistance','16')
end sub

лень двигатель прогресса
Scripts Writer
Posts: 2259
Joined: 2005-04-19 18:00:29
Location: Московская область
Contact:

Post by Scripts Writer »

I'm wrote:Кхм.. не согласен.
О каких стандартах вообще может идти речь?
Каждый пишет как хочет и как ЕМУ удобно.


Согласен-но смысл тогда выкладывать сюда "это" ?!
Ради похвалы? Не вижу здесь ничего такого.

Другой вопрос если человек учится писать скрипты и хочет выкладывать сюда какие-никакие ,но свои скрипты которые мб кому то помогут. Тогда надо воспринимать критику + учиться правильно писать и оформлять скрипты с самого начала. Критерии скрипта -универсальность, простота в настройках, отсутствие длительных wait'ов(если без них нельзя)(тоесть проверки на месаги из журнала), отсутствие lclick, динамические задержки, чеклаг ... Вобщем думаю понятно.

Опять же I'm- смотря какую цель преследует человек.
Если только показать свои труды- флаг в руки.
omi4
Posts: 457
Joined: 2005-07-10 21:53:05

Post by omi4 »

Программирование это не искусство, авангардизм не может улучшить результат.
Код должен быть кратким, понятным (всем кто его понять способен).
От этого можно отступать ради оптимизации, если она того стоит.
Вот и все правила.

Чтобы было более понятно, напишем что ни будь маленькое и показательное.
Раз тема про лут напишем лут. А то некоторые уже логику считают, лишней.
Пропагандируя втыкание кусков из одних скриптов в другие.

Code: Select all

sub mLoot()
   UO.Set("grabdelay", 100)
   UO.MoveItem("<0x0EED", 0, "backpack")
   UO.FindType(-1, -1, "lastcontainer")
   while UO.FindCount()
      i = UO.Hex2Int(UO.GetGraphic("finditem"))
      if 7982 < i < 8044 || 3846 < i < 3853 || 3960 < i < 3984 || i == 5360 ||  3856 < i < 3885 || 5136 < i < 5141 || 7026 < i< 7035  then
         UO.MoveItem("finditem", 0, "backpack")
      endif
      UO.Ignore("finditem")
      UO.FindType(-1, -1, "lastcontainer")
   wend
   UO.IgnoreReset()
   UO.Set("grabdelay", 0)
endsub


Всего 15 строк, только не сильно понятно…. Зато кратко.

Улучшим читаемость, в ущерб оптимальности…

Code: Select all

sub Loot()
   UO.Set("grabdelay", 100)
   UO.MoveItem("<0x0EED", 0, "backpack")
   UO.FindType(-1, -1, "lastcontainer")
   while UO.FindCount()
      i = UO.Hex2Int(UO.GetGraphic("finditem"))
      ;  |    scroll      |      Potions     |      Reagents    |     Deeds
      if 7982 < i < 8044 || 3846 < i < 3853 || 3960 < i < 3984 || i == 5360 then
         UO.MoveItem("finditem", 0, "backpack")
      endif
      ;  |    Gems       |       Plate      |      Shields
      if 3856 < i < 3885 || 5136 < i < 5141 || 7026 < i< 7035 then
         UO.MoveItem("finditem", 0, "backpack")
      endif
      UO.Ignore("finditem")
      UO.FindType(-1, -1, "lastcontainer")
   wend
   UO.IgnoreReset()
   UO.Set("grabdelay", 0)
endsub


UO.FindType() является медленной и прожорливой командой, запускать ее 200 раз ламерство. Массив на 200 итемов занимает 201 строку, столько букв писать, должно быть, лень и с читабельностью понты.
Никогда не используйте куски чужих скриптов, только алгоритм. Лень сама активизирует мозг(если он есть).
I'm
Expert!
Posts: 1396
Joined: 2004-10-15 22:38:04
Location: Moscow City.
Contact:

Post by I'm »

Для автора данного топика на данном "этапе" такое написание приемлимо. С точки зрения более зрелых товарищей в этой области это не так вот и все :)
+ только теперь он узнал о своих "ошибках" => узнал для себя что-то новое и учтет это в своих последующих скриптах.
The End.
slonopotam
Posts: 270
Joined: 2006-08-05 14:09:06
Contact:

Post by slonopotam »

Да да. Исправлюсь. :D
ДРВ
Spoiler
_________________
Антарес
Spoiler|Gostrabaiter|Umhra|Slog
Post Reply