Page 1 of 1

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

Posted: 2006-11-27 08:24:22
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

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

Posted: 2006-11-27 14:52:28
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.

То что ты написал- ИМХО первый блин.

Posted: 2006-11-27 15:38:09
by I'm
Кхм.. не согласен.
О каких стандартах вообще может идти речь?
Каждый пишет как хочет и как ЕМУ удобно.

Posted: 2006-11-27 15:40:40
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

лень двигатель прогресса

Posted: 2006-11-27 15:54:09
by Scripts Writer
I'm wrote:Кхм.. не согласен.
О каких стандартах вообще может идти речь?
Каждый пишет как хочет и как ЕМУ удобно.


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

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

Опять же I'm- смотря какую цель преследует человек.
Если только показать свои труды- флаг в руки.

Posted: 2006-11-27 19:59:41
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 строку, столько букв писать, должно быть, лень и с читабельностью понты.
Никогда не используйте куски чужих скриптов, только алгоритм. Лень сама активизирует мозг(если он есть).

Posted: 2006-11-27 20:28:35
by I'm
Для автора данного топика на данном "этапе" такое написание приемлимо. С точки зрения более зрелых товарищей в этой области это не так вот и все :)
+ только теперь он узнал о своих "ошибках" => узнал для себя что-то новое и учтет это в своих последующих скриптах.

Posted: 2006-11-29 04:55:05
by slonopotam
Да да. Исправлюсь. :D