Фишинг, Переделка скрипта
Ефрейтор (116480)11 лет
Ranger
Сообщений: 73
Рег. 19.08.2013
27 августа 2013 19:33
Сообщение #1
Косметически поправил, выложенный ранее, скрипт на Fishing. Убрал лишнее, добавил пару актуальных нынче записей.
Скрипт не крашит (проверял 8 часов), одевает удочку взамен сломанной.


var MaxFailure=8
sub FishingAround()
    var iX,iY
    for var iStep=0 to 1000
        for iX=-6 to 6
            for iY=-6 to 6
                if iX==0 and iY==0    then
                next
                end if
              GetAllFish(UO.GetX()+iX,UO.GetY()+iY)
            next
        next
    next
end sub

Sub GetAllFish(iX,iY)
    var counter=0
    repeat
        counter=counter+1
        UO.DeleteJournal()
        UO.WaitTargetTile(0,iX,iY,251)
        UO.UseType('0x0DBF')
        while not UO.InJournal('You pull out a') and not UO.InJournal('You fish a while, but fail to catch anything') and not UO.InJournal('There are no fish here.') and not UO.InJournal('Try fishing in water') and not UO.InJournal('Try fishing elsewhere') and not UO.InJournal('That is too far away') and not UO.InJournal('You cannot fish so close to yourself') and not uo.InJournal('*Your Fishing Pole destroyed!*')
            wait(100)
        wend
        if UO.InJournal('There are no fish here.') OR UO.InJournal('Try fishing elsewhere') OR UO.InJournal('That is too far away') OR UO.InJournal('You cannot fish so close to yourself') OR UO.InJournal('Try fishing in water') OR uo.InJournal('*Your Fishing Pole destroyed!*') then
            return
        end if
        if UO.InJournal('You pull out a') then
            counter=0
            GetFish()
        end if
    until UO.Injournal('There are no fish here.') OR UO.InJournal('Try fishing elsewhere') OR UO.InJournal('That is too far away') OR UO.InJournal('You cannot fish so close to yourself') OR UO.InJournal('Try fishing in water') OR uo.InJournal('*Your Fishing Pole destroyed!*') OR counter>MaxFailure
end sub

Sub GetFish()
    UO.set('finddistance',0)
    UO.IgnoreReset()
    UO.Ignore('self')
    UO.FindType(-1,-1,'ground')
    while UO.FindCount()>0
        UO.WaitTargetObject('finditem')
        UO.UseType('0x0F51')
        UO.Ignore('finditem')
        wait(500)
        UO.FindType(-1,-1,'ground')
    wend
    UO.Ignorereset()
    UO.Ignore('self')
    UO.FindType(-1,-1,'ground')
    while UO.FindCount()>0
        UO.Grab(0,'finditem')
        wait(100)
        UO.FindType(-1,-1,'ground')
    wend
    UO.Ignorereset()
end sub

13 лет
Ranger
Сообщений: 1043
Рег. 18.06.2011
27 августа 2013 20:10
Сообщение #2
Отступы то программой надо расставлять, а не руками пробелы протыкивать "шоб красиво было". То что он не крашит это чудо.

3 for
4 next
скрипту каюк будет по любому.
Разве под собой добывать нельзя? Если нельзя то это делается добавление в журнал, а не пропусканием координаты.

UO.FindType(-1,-1,'ground') - еще одна завалилочка. Подходишь к такому рыболову и кидаешь шкаф например. И чар крашит. Или не крашит но рыбу уже не будет собирать.
В общем зря "улучшал".
Полковник (18174768)14 летПрекрасная Леди
Urukhay
Сообщений: 961
Рег. 14.01.2010
27 августа 2013 20:16
Сообщение #3
Со специалистом не поспоришь...)))
13 лет
Ranger
Сообщений: 1043
Рег. 18.06.2011
27 августа 2013 20:23
Сообщение #4
        if UO.InJournal('There are no fish here.') OR UO.InJournal('Try fishing elsewhere') OR UO.InJournal('That is too far away') OR UO.InJournal('You cannot fish so close to yourself') OR UO.InJournal('Try fishing in water') OR uo.InJournal('*Your Fishing Pole destroyed!*') then
            return
        end if

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

Gajra :victory:
Ефрейтор (116480)11 лет
Ranger
Сообщений: 73
Рег. 19.08.2013
27 августа 2013 20:36
Сообщение #5
Задача была не создать полностью новый и идеальный скрипт, а поправить нерабочий и крашащий клиент, но имеющийся на форуме и качнуть фишинг.
Задача выполнена, остальное меня мало интересует =) Но благодарю за критику.

ЗЫ: Если скрипт не нравится - можно не пользоваться =)
Полковник (18174768)14 летПрекрасная Леди
Urukhay
Сообщений: 961
Рег. 14.01.2010
27 августа 2013 20:48
Сообщение #6
Большинство скриптов выложенных тут были написаны для старого клиента..оттого и косяки. Похвально, что найдя ошибки вы исправляете и выкладываете для других, не все же тут мега скриптёры)
Ефрейтор (116480)11 лет
Ranger
Сообщений: 73
Рег. 19.08.2013
27 августа 2013 20:55
Сообщение #7
Прежде всего для себя любимого.

Я не программист и не понимаю половину функций, но общая логика вполне понятна, от этого и отталкиваюсь.
13 лет
Ranger
Сообщений: 1043
Рег. 18.06.2011
27 августа 2013 22:50
Сообщение #8
По этому я не написал что "фууу гавно", а расписал что можно исправить для оптимизации.
Можно расписать более подробно если нужно.
Ефрейтор (116480)11 лет
Ranger
Сообщений: 73
Рег. 19.08.2013
27 августа 2013 23:00
Сообщение #9
Alucard,

Что именно поправить я понял. Как оптимизирую - добавлю в готовые.

Есть только одна загвоздка, хоть убей не понимаю чем не устраивает использование закрытия цикла в качестве пропуска координаты.
Крашит ,вроде, только не закрытый цикл.
13 лет
Ranger
Сообщений: 1043
Рег. 18.06.2011
27 августа 2013 23:16
Сообщение #10
Не не устраивает :)
Если работает - пользуйся. Просто с точки зрения программирования это не верно.
Лишние строки не красят скрипт который заявлен как ОПТИМИЗИРОВАННЫЙ.
У тебя 3 строки чтобы пропустить 1 точку. То же самое делается добавлением 1 сообщения в проверку. По этому и написал. Если бы чар тыкал в точку 0,0 и терялась конда то эти строки имели бы смысл. А так просто лишняя заусеница. Зачем было убирать лишнее тогда?
Ефрейтор (116480)11 лет
Ranger
Сообщений: 73
Рег. 19.08.2013
27 августа 2013 23:21
Сообщение #11
Alucard,

Вот так и знал, что ты просто зануда =)

В готовых добью, хотя полная оптимизация ИМХО полная автоматизация, но я против этого в УО.
13 лет
Ranger
Сообщений: 1043
Рег. 18.06.2011
27 августа 2013 23:28
Сообщение #12
:derisive:

Мой вариант. Делает примерно то же самое. Работает с берега. С лодки не пробовал по причине отсутствия.

PS Не принимай на свой счет но у вас тут модно все что продержалось хотя бы пару минут запущенным кидать в "готовые" :spiteful:

PPS не путай понятия "скрипт-автомат" и "оптимизация кода скрипта". :dirol: Про первое я не говорил.
Ефрейтор (116480)11 лет
Ranger
Сообщений: 73
Рег. 19.08.2013
27 августа 2013 23:31
Сообщение #13

var MaxFailure=8
sub FishingAround()
   var iX,iY
   for var iStep=0 to 1000
      for iX=-6 to 6
         for iY=-6 to 6
            GetAllFish(UO.GetX()+iX,UO.GetY()+iY)
         next
      next
   next
end sub

Sub GetAllFish(iX,iY)
   var counter=0
   repeat
      counter=counter+1
      UO.DeleteJournal()
      UO.WaitTargetTile(0,iX,iY,251)
      UO.UseType('0x0DBF')
      while not UO.InJournal('You pull out a') and not UO.InJournal('You fish a while, but fail to catch anything') and not UO.InJournal('There are no fish here.') and not UO.InJournal('Try fishing in water') and not UO.InJournal('Try fishing elsewhere') and not UO.InJournal('That is too far away') and not UO.InJournal('You cannot fish so close to yourself') and not uo.InJournal('*Your Fishing Pole destroyed!*')
         wait(100)
      wend
      if UO.InJournal('You pull out a') then
         counter=0
         GetFish()
      end if
   until UO.Injournal('There are no fish here.') OR UO.InJournal('Try fishing elsewhere') OR UO.InJournal('That is too far away') OR UO.InJournal('You cannot fish so close to yourself') OR UO.InJournal('Try fishing in water') OR uo.InJournal('*Your Fishing Pole destroyed!*') OR counter>MaxFailure
end sub

Sub GetFish()
   UO.set('finddistance',0)
   UO.IgnoreReset()
   UO.Ignore('self')
   UO.FindType(-1,-1,'ground')
   while UO.FindCount()>0
      UO.WaitTargetObject('finditem')
      UO.UseType('0x0F51')
      UO.Ignore('finditem')
      wait(500)
      UO.FindType(-1,-1,'ground')
   wend
   UO.Ignorereset()
   UO.Ignore('self')
   UO.FindType(-1,-1,'ground')
   while UO.FindCount()>0
      UO.Grab(0,'finditem')
      wait(100)
      UO.FindType(-1,-1,'ground')
   wend
   UO.Ignorereset()
end sub


Окончательный вариант. На проблему шкафа клал половой огран, пускай массив сами прикручивают кому шкафы ставят, дело 2 секунд.

ЗЫ: Я никогда не против критики обоснованной, но ты все равно зануда...Не принимай на свой счет(с)
13 лет
Ranger
Сообщений: 1043
Рег. 18.06.2011
27 августа 2013 23:34
Сообщение #14
Цитата: Id
Окончательный вариант. На проблему шкафа клал половой огран.

="Нате жрите и не пиZ@uте."
ок, ок. Я и так тут сегодня чето расписался :boredom: Закидывай в "готовые". Споки.
Ефрейтор (116480)11 лет
Ranger
Сообщений: 73
Рег. 19.08.2013
27 августа 2013 23:50
Сообщение #15
Alucard,

Не, ну действительно. Какова вероятность того, что кто то будет специально таскать с собой шкаф и искать одинокого фишера ?

Меня больше убивает, что я вообще повелся на трололо критику =)
Старший Лейтенант (6395350)12 лет
Necromancer
Сообщений: 5530
Рег. 27.08.2012
27 августа 2013 23:53
Сообщение #16
Id,
ты не прав. это не тролль критика, а обыкновенные советы на будущее
Ефрейтор (116480)11 лет
Ranger
Сообщений: 73
Рег. 19.08.2013
28 августа 2013 00:01
Сообщение #17
Mitako,

Ноуоффенс, но советы лучше давать когда их спрашивают.

В данном случае была критика рабочего скрипта и занудство, что меня, честно говоря, по-хорошему повеселило =)
Старший Лейтенант (6395350)12 лет
Necromancer
Сообщений: 5530
Рег. 27.08.2012
28 августа 2013 00:29
Сообщение #18
Цитата: Id
Ноуоффенс, но советы лучше давать когда их спрашивают.

ты не подозревал об ошибке, поэтому и спросить не мог
Ефрейтор (116480)11 лет
Ranger
Сообщений: 73
Рег. 19.08.2013
28 августа 2013 02:01
Сообщение #19
Mitako,

Fascinating!
11 лет
Vampire
Сообщений: 190
Рег. 23.07.2013
31 августа 2013 19:33
Сообщение #20
Ловит рыбу и в паке заберает...


sub FishingAround()
   VAR Ms0 = "You can't see"       ; ?? ????? ????? ?????
   VAR Ms1 = "You can't fish under the ship" ; ?? ????? ?????? ?????
   VAR Ms2 = "You are too far away"    ; ??????
   VAR Ms3 = "There are no fish here"    ; ????????? ???
   VAR Ms4 = "You fish a while, but fail to catch anything" ; ????
   VAR Ms5 = "You pull out"       ; ?????? ???-??
   VAR Ms6 = "Try fishing"    ; ?? ????? ?????? ?????
   VAR k, t, v, x, y
   VAR MaxTime = 800
   For y = -4 To 4
      For x = -4 To 4
         k = 0
         repeat
            If UO.Dead() Then
               return
            Endif
            DeleteJournal(ms0)
            DeleteJournal(ms1)
            DeleteJournal(ms2)
            DeleteJournal(ms3)
            DeleteJournal(ms4)
            DeleteJournal(ms5)
            DeleteJournal(ms6)
            t = UO.Timer()
            If UO.Waiting() Then
               UO.CancelTarget()
            Endif
            UO.WaitTargetTile( '0', STR( UO.GetX() + x ), STR( UO.GetY() + y ), '251')
            UO.UseObject( UO.GetSerial( UO.ObjAtLayer( 'Lhand' ) ) )
            repeat
               wait(100)
            until UO.InJournal(ms0) OR UO.InJournal(ms1) OR UO.InJournal(ms2) OR UO.InJournal(ms3) OR UO.InJournal(ms4) OR UO.InJournal(ms5) OR UO.InJournal(ms6) OR ((t + MaxTime) < UO.Timer())
            k = k + 1
            If UO.InJournal(ms5) Then
               k = 0
            Endif
            If UO.Dead() Then
               return
            Endif
            If UO.InJournal( ms5 ) Then
               GetResultFish()
            Endif
         until UO.InJournal(ms0) OR UO.InJournal(ms1) OR UO.InJournal(ms2) OR UO.InJournal(ms3) OR (k > 6)
         If UO.Dead() Then
            return
         Endif
      Next
   Next
endsub

Sub GetResultFish()
; ------- ???? -------
   DIM Fish[18]
   Fish[0]  = '0x170B' ; ??????
   Fish[1]  = '0x170F' ; ?????
   Fish[2]  = '0x170D' ; ????????
   Fish[3]  = '0x1711' ; ??????
   Fish[4]  = '0x09CC' ; ??? ???? 1
   Fish[5]  = '0x09CD' ; ??? ???? 2
   Fish[6]  = '0x09CE' ; ??? ???? 3
   Fish[7]  = '0x09CF' ; ??? ???? 4
   Fish[8]  = '0x0FC4' ; ???????, ??? 1
   Fish[9]  = '0x0FC5' ; ???????, ??? 2
   Fish[10] = '0x0FC6' ; ???????, ??? 3
   Fish[11] = '0x0FC7' ; ???????, ??? 4
   Fish[12] = '0x0FC8' ; ???????, ??? 5
   Fish[13] = '0x0FC9' ; ???????, ??? 6
   Fish[14] = '0x0FCA' ; ???????, ??? 7
   Fish[15] = '0x0FCB' ; ???????, ??? 8
   Fish[16] = '0x0FCC' ; ???????, ??? 9
   Fish[17] = '0x14ED' ; ?????
   VAR Razmer = 17    ; ?????? ??????? - 1
   VAR Scissor = '0x0F9E' ; ??? ??????
   VAR Bandag = '0x0E21'    ; ??? ??????
   VAR i
; ???? ??? ? ??? ???????? ??? ??????, ???? ???? ??????????????
; ? ?????????? ? ????. ????? ?????? ?????? ??????? ?????? ? ??????.
   For i = 0 To Razmer
      UO.FindType( Fish[i], '-1', 'ground' )
      If UO.FindCount() > 0 Then
         If i < 4 Then
          ; ?????
            UO.WaitTargetObject( 'finditem' )
            UO.UseType( Scissor )
            Wait( 3000 )
            UO.FindType( Bandag )
         Endif
         UO.Grab( '0', 'finditem' )
         Wait( 2000 )
         If i > 7 AND i < 17 Then
          ; ???????
            UO.UseObject( 'finditem' )
            wait(1000)
         Endif
      Endif
   Next
endsub

sub Food()
VAR food = '0x097A'
    while NOT UO.Dead()
    UO.DeleteJournal()
    UO.WaitTargetObject(0x40002877)
    UO.UseType(food)
    repeat
        wait(500)
    until UO.InJournal('You burn') OR UO.InJournal('You put')

    wend
end sub

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



Sub DeleteJournal( string1 )
   VAR nom = UO.InJournal( string1 )
   If nom > 0 Then
      UO.SetJournalLine( Nom - 1, 'string replaced' )
      DeleteJournal( string1 )
   Endif
endsub
Последние посетители (0):

 
Сейчас: 23 ноября 2024 01:01