Помощь - Поиск - Пользователи - Календарь
Полная версия: Упростить скрипт
UoKit.com Форумы > Кликер > UO Pilot
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21
veiron
Цитата
/////////блок 1
if 357, 431 12316912 or 357, 431 11075325 or 357, 431 9566451
set #tx 356 + random (3)
set #ty 426 + random (3)
set #tm 1
left #tx #ty
end_if

/////////блок 15
if 436, 385 7798269 or 436, 385 7798269 or 436, 385 5170675
set #rx 356 + random (3)
set #ry 426 + random (3)
set #rm 1
left #rx #ry
end_if


Скрипт состоит из вот таких 15 ифоф, всего 90 строк. Подскажите, можно его как-то упростить и будет ли он от этого работать быстрее.
DarkMaster
Цитата
можно его как-то упростить

разве что:
set #rx 356 + random (3)
set #ry 426 + random (3)
set #rm 1
left #rx #ry
будет выглядеть, как gosub, но только при условии, что результат будет перезаписываться каждый раз при новом входе в подпрограмму.

Цитата
будет ли он от этого работать быстрее

слышал, что длинные скрипты работают медленнее, но объемы не те. Подпрограммы по идее чуть замедляют, но там такие цифры, что будешь наносекунды мерить, что лучше.
veiron
Цитата(DarkMaster @ 31.7.2013, 17:05) *

разве что:
set #rx 356 + random (3)
set #ry 426 + random (3)
set #rm 1
left #rx #ry
будет выглядеть, как gosub, но только при условии, что результат будет перезаписываться каждый раз при новом входе в подпрограмму.
слышал, что длинные скрипты работают медленнее, но объемы не те. Подпрограммы по идее чуть замедляют, но там такие цифры, что будешь наносекунды мерить, что лучше.

А есть ли смысл в gosub ставить, ведь если иф с цветом не найден и так ведь проскакивает быстро или нет ?
DarkMaster
ты попросил сократить скрипт. Мой вариант из 4 строк делает одну. gosub внутри ифа точно так же (не)вызовется в зависимости от ложности ифа.
veiron
Цитата(DarkMaster @ 31.7.2013, 17:48) *

ты попросил сократить скрипт. Мой вариант из 4 строк делает одну. gosub внутри ифа точно так же (не)вызовется в зависимости от ложности ифа.

Про gosub я представлял. Я думал можно как то в фор это все оформить.
DarkMaster
Можно и фором. Но надо подумать есть ли смысл. Можно создать длиннющий массив с цветами и координатами, и фором подставлять их внутрь ифа. Более структурированно - да. Но с чем будет проще общаться при редактировании большой вопрос. Т.е. будет что-то вроде:

Код

set %a [ 1 1 ] x1
set %a [ 1 2 ] y1
set %a [ 1 3 ] c1
set %a [ 2 1 ] x2
set %a [ 2 2 ] y2
set %a [ 2 3 ] c2

for #i 1 size (%a) 1
     if %a [ #i 1 ] %a [ #i 2 ] %a [ #i 3 ]
          set #tx 356 + random (3)
          set #ty 426 + random (3)
          set #tm 1
          left #tx #ty
     end_if
end_for

Тут сейчас еще пробежит Zeleax или Wkight и тыкнут котенка(меня) в то, как правильно объявлять массивы с новым функционалом, а я буду скромно смотреть в пол и объяснять, что больших массивов последнее время я не имел.

Ну и учти этот блок переберет все эти циклы сразу. Т.е. адекватно вызывать все это кусками не получится. Можно менять границы for при входах, но это уже будет изврат. Имхо тогда лучше к gosub. Тут немного тяжело советовать, т.к. варианты реализации чуть разные и они не подойдут для всех случаев, а что именно происходит и каков должен быть результат я же не вижу. Ну или полный скрипт тогда надо.
veiron
Цитата(DarkMaster @ 31.7.2013, 19:12) *

Можно и фором. Но надо подумать есть ли смысл. Можно создать длиннющий массив с цветами и координатами, и фором подставлять их внутрь ифа. Короче не получится. Более структурированно - да. Но с чем будет проще общаться при редактировании большой вопрос. Т.е. будет что-то вроде:

Наверно все таки для меня проще будет ифом. Я даже представить не могу, как 15 разных координат, плюс 45 оттенков цвета можно запихнуть в фор.
DarkMaster
Про "короче не получится" я что-то начал писать другое и отвлекся. ) оно получится, но с ограничениями.
veiron
И вот еще. У меня есть рабочий скрипт во вкладке 1. К примеру все с while их в скрипте 3 разных.
Код
while
скрипт 1
end_while
while
скрипт 2
end_while
while
скрипт 3
end_while


И еще есть вкладка со скриптом 2, которая проверяет на всякие баги сервера. И вот что происходит. Допустим слетел сервер игры в тот момент когда пилот выполняет действие во втором цикле. Вторая вкладка видит, что есть баг и обновляет браузер. Но рабочий скрипт, ведь во втором цикле остался. Можно как-то из второй вкладки переместить действие в первом скрипте?
DarkMaster
не понял. давайте еще раз, лучше примером про яблочки и зайчиков)

// есть подозрение, что второй скрипт, вторая вкладка и много чего "второго" было названо одинаково, а по факту является разными скриптами.
veiron
Код
Вкладка 1  //  основного скрипта
:start
while 1  
  left 1 1
end_while
while 2
  left 2 2
end_while
while 3
  left 3 3
end_while
goto start

Вкладка 2  // проверяем не слетел или завис браузер
while 413, 485 7226929
send f5
wait 10000
end_while


Браузер завис. В тот момент когда пилот выполнял цикл while 2 . Вкладка 2 видя зависание обновляет браузер. И игра после обновления становится на главной странице, где бы не находился персонаж во время зависания. Я так понимаю, надо сделать точки выхода с while или можно как то указать из второй вкладки, что скрипт работает не в том while .
DarkMaster
Цитата
Я так понимаю, надо сделать точки выхода с while

имено так. Поскольку while спокойно прерывается по goto, то я бы просто сделал goto start, если это начало скрипта. Если это не начало скрипта, то можно все равно выйти по goto, но на мой взгляд это свинство кодинга и от этого надо отходить. В таком случае можно сделать простенькое условие:
Код
set #break 0

while 1  and #break = 0
  left 1 1
end_while

while 1 and #break = 0
       .....
       if видим главную страницу
            set #break 1
       end_if
end_while

while 3 and #break = 0
  left 3 3
end_while

кстати вот от этого можно уйти:
Код
if видим главную страницу
       set #break 1
end_if

Можно просто присваивать значение #break из скрипта, контролирующего браузер. По факту как раз и получим управление из второй вкладки. Я понимаю, что ты бы хотел что-то вроде оператора break.1, но такого пока нет.
veiron
Цитата(DarkMaster @ 31.7.2013, 20:25) *

кстати вот от этого можно уйти:
Код
if видим главную страницу
       set #break 1
end_if

Можно просто присваивать значение #break из скрипта, контролирующего браузер.

Я с каждого while по goto start выходил, только в игре столько багов, что из 10 строк while становится 30 . Только про присваивать значение из скрипта не понял. И еще вопрос, в игре появились новые мобы, которые как то странно через какое-то время меняют цвет, может 10 раз быть один, а потом уже другой. Не подскажете, если не ифом буду цвет брать, а сделаю поиск через FindImage это избавит от нераспознования мобов.
DarkMaster
Цитата
Я с каждого while по goto start выходил, только в игре столько багов, что из 10 строк while становится 30 .

Значит ты перешел на новую, правильную стадию скриптописания и стремишься к стабильности. Тут только поздравить могу и посочувствовать. Это самая большая беда для меня до сих пор. Компенсация всех багов у меня определяет до 80% кода...
Цитата
Не подскажете, если не ифом буду цвет брать, а сделаю поиск через FindImage это избавит от нераспознования мобов.

Думаю да, если задать deviation. Ну либо просто найди диапазоны цветов и дальше сидеть на ифах ничего не переписывая. С финдимиджем пока поаккуратнее, утечки памяти все еще убивают пилот при его использовании. Если задача полной автономии или хотя бы на ночь оставлять, то лучше на ифах, если есть возможность. Самого очень сильно замучил этот момент.

Цитата
Только про присваивать значение из скрипта не понял.
Код

// Первый скрипт
set #break 0

while 1  and #break = 0
  left 1 1
end_while

while 1 and #break = 0
  left 2 2
end_while

while 3 and #break = 0
  left 3 3
end_while

// Второй скрипт

Вкладка 2  // проверяем не слетел или завис браузер
while 413, 485 7226929
     send f5
     wait 10000
     set #break.1 1 // УПРАВЛЕНИЕ ПЕРВЫМ СКРИПТОМ
end_while
veiron
Цитата(DarkMaster @ 1.8.2013, 10:15) *

Компенсация всех багов у меня определяет до 80% кода...

А я думал, что только у меня так))
Цитата
while 1 and #break = 0
set #break.1 1 // УПРАВЛЕНИЕ ПЕРВЫМ СКРИПТОМ

Спасибо, даже и не думал, что так можно сделать. Может еще натолкнете на мысль как выполнить. Есть к примеру точка с цветом 64, 435 12776696, эта точка периодически меняет цвета на другие. И вот иногда браузер, просто тупо виснет и окно браузера становится как будто его заскринили. Чем можно отследить, если цвет не меняется более 5 минут в данной точку, значит выполняем обновление браузера. Понимаю, что надо что то типо таймера сделать, а вот как это будет выглядит даже представить не могу.
DarkMaster
В полезных советах "детектор движений мышки". Только вместо позиции мышки снимай get color'ом цвет.
veiron
Цитата(DarkMaster @ 1.8.2013, 18:30) *

В полезных советах "детектор движений мышки". Только вместо позиции мышки снимай get color'ом цвет.

Что то у меня ни чего не выходит, с мышкой работает а с гетколорам нет.


P.S разобрался. Спасибо. Как раз то что мне нужно.
veiron
Код
get color #color 99, 203
set #timerAFK timer + 400000
:start
get color #color 99, 203
if ( 2838386 = #color ) and ( 2838386 = #color )
    if #timerAFK < timer
    set logging #timerAFK > timer
    wait 50
       goto переход
    end_if
else
    set #timerAFK timer + 400000 // ВРЕМЯ ПРОСТОЯ
end_if
goto start

Подскажите, что с кодом не так. Периодически выскакивает ошибка (строка 12, Символ не распознан (pos:1) Вот на этой строке появляется ошибка ---> set #timerAFK timer + 400000 // ВРЕМЯ ПРОСТОЯ.
WKnight
Цитата
if ( 2838386 = #color ) and ( 2838386 = #color )

Зачем 2 раза одно и тоже проверять?
Цитата
set #timerAFK timer + 400000 // ВРЕМЯ ПРОСТОЯ

Убери коментарий, вплоть до пробелов.
Разбей строку на две.

Сделай предварительный вывод в лог обоих переменных, чтоб их значения при ошибке проверить.
veiron
Цитата(WKnight @ 2.8.2013, 13:49) *

set #timerAFK timer + 400000 // ВРЕМЯ ПРОСТОЯ

Убрать уберу, а вот про то как разбить на 2 строки я не понял?
Zeleax
Цитата(veiron @ 2.8.2013, 14:15) *

Убрать уберу, а вот про то как разбить на 2 строки я не понял?

Код
set #mytimer timer
log мой таймер: #mytimer
log AFK: #timerAFK
set #timerAFK #mytimer + 400000 // ВРЕМЯ ПРОСТОЯ
veiron
Цитата(WKnight @ 2.8.2013, 13:49) *

Сделай предварительный вывод в лог обоих переменных, чтоб их значения при ошибке проверить.

Код
11:36:15 17 (Таймер.txt, 25): Мой таймер: 1221379
11:36:15 17 (Таймер.txt, 26): AFK: 1621192
11:36:15 17 (Таймер.txt, 25): Мой таймер: 1221629
11:36:15 17 (Таймер.txt, 26): AFK: 1621441
11:36:15 17 (Таймер.txt, 25): Мой таймер: 1221909
11:36:15 17 (Таймер.txt, 26): AFK: 1621691
11:36:16 17 (Таймер.txt, 25): Мой таймер: 1222190
11:36:16 17 (Таймер.txt, 26): AFK: 1621987
11:36:16 17 (Таймер.txt, 25): Мой таймер: 1222487
11:36:16 17 (Таймер.txt, 26): AFK: 1622253
11:36:16 17 (Таймер.txt, 27): set - (27): Символ не распознан (pos:1)


Вот, что показывает лог, в когда ошибка.
Zeleax
хм, странно...

Давайте сюда скрипт в измененном виде, снова глянем
veiron
Цитата(Zeleax @ 5.8.2013, 11:59) *

хм, странно...

Давайте сюда скрипт в измененном виде, снова глянем

Код
get color #color 99, 203  //  страница хранителя, справа от кнопки домой.
set #timerAFK timer + 400000
:start
get color #color 99, 203  
if ( 2838386 = #color )
    if #timerAFK < timer
    set logging #timerAFK > timer
    wait 50
       left 436, 833
    end_if
else
set #mytimer timer
log мой таймер: #mytimer
log AFK: #timerAFK
set #timerAFK #mytimer + 400000 // ВРЕМЯ ПРОСТОЯ
    set #timerAFK timer + 400000
end_if
goto start
Zeleax
в самом низу нужно строчку закомментить (3-ю снизу):
//set #timerAFK timer + 400000
veiron
Цитата(Zeleax @ 5.8.2013, 12:23) *

в самом низу нужно строчку закомментить (3-ю снизу):
//set #timerAFK timer + 400000

Закомментил,пробую. И еще одна болячка появилась. Вот скрипт:

Код
Left_Down 260 227              // Нажимаем кнопку
Set #t random(5) + 5 // задаем длительность задержки
Wait #t
Left_Up 260 227

Скрипт работает, может работать и час, потом вдруг, тупо пилот виснет на строчке Wait #t. Таблички с ошибкой не появляется. Лечиться только нажатием стоп и заново надо нажимать старт в пилот. Не встречалось вам такое.
Zeleax
не встречалось.
Попробуйте перед wait #t вставить строку
log #t
veiron
Цитата(Zeleax @ 5.8.2013, 12:58) *

не встречалось.
Попробуйте перед wait #t вставить строку
log #t

Попробую. После закомментирования строки скрипт работает пока без ошибки. Эту строку можно вообще удалить, она не нужна?
Zeleax
Цитата(veiron @ 5.8.2013, 13:01) *

Попробую. После закомментирования строки скрипт работает пока без ошибки. Эту строку можно вообще удалить, она не нужна?

да
veiron
Цитата(Zeleax @ 5.8.2013, 13:35) *

да

Похоже вылечили вы этот скрипт. Уже час работает и ни одной ошибки. Спасибо за помощь.
Zeleax
Цитата(veiron @ 5.8.2013, 13:56) *

Похоже вылечили вы этот скрипт. Уже час работает и ни одной ошибки. Спасибо за помощь.

smile.gif
veiron
Похоже рано я обрадовался. Проблема с таймером все таки осталась. И вот что получается. Запускаю только 1 скрипт этого таймера. Все работает отлично. Но как только в другой вкладке запускаю скрипт где есть тоже таймер, не важно что у него другая переменная, через какое-то время выскакивает ошибка. Решил попробовать вот что, взял скрипт этого таймера и поместил в две разные вкладки в пилоте. Запускаю по очереди, все работает, как только запускаю 2 вкладки одновременно через разное время выскакивает ошибка. Если 1 скрипт с таймером, а другой нет, все работает без ошибок. Теперь беру этот скрипт и вставляю его в 8 разных пилотов и происходит чудо, все работает без ошибок. Может подскажите как такое вылечить?

Р.S Проверил на 4 компах и одна и та же проблема.
DarkMaster
оба скрипта в студию.
вообще этот скрипт у меня работал по нескольку месяцев без глюков 24/7 в паре с огромным количеством таймеров. И все-таки нужен вывод в лог при ошибке.
veiron
Цитата(DarkMaster @ 6.8.2013, 6:15) *

оба скрипта в студию.
вообще этот скрипт у меня работал по нескольку месяцев без глюков 24/7 в паре с огромным количеством таймеров. И все-таки нужен вывод в лог при ошибке.

Код
get color #color 99, 203  //  страница хранителя, справа от кнопки домой.
set #timerAFK timer + 400000
:start
get color #color 99, 203  
if ( 2838386 = #color )
    if #timerAFK < timer
    set logging #timerAFK > timer
    wait 50
       left 436, 833
    end_if
else
set #mytimer timer
log мой таймер: #mytimer
log AFK: #timerAFK
set #timerAFK #mytimer + 400000 // ВРЕМЯ ПРОСТОЯ
end_if
goto start

Вот скрипт. Ставлю его в разные вкладки. Да и лог в этой теме я выкладывал уже. Может из за винды сбой. Когда пробовал на разных компах, единственное что у них одинаковое, так это винда.
DarkMaster
а второй то вместе с которым сбоит?
veiron
Цитата(DarkMaster @ 6.8.2013, 6:22) *

а второй то вместе с которым сбоит?

Поставте этот, только в разных вкладках пилота.
DarkMaster
запустил 8 вкладок, задержка 0, пока работает. Нашел очень странный баг:
Копирую твой скрипт, в пилот, в пилоте выделяю скрипт, копирую, запускаю, вставляю в новую вкладу, указатель хода скрипта бегает по незапущному скрипту. Вылечить можно только остановкой и перезапуском ИСХОДНОГО скрипта...
veiron
Цитата(DarkMaster @ 6.8.2013, 7:08) *
Нашел очень странный баг:
Копирую твой скрипт, в пилот, в пилоте выделяю скрипт, копирую, запускаю, вставляю в новую вкладу, указатель хода скрипта бегает по незапущному скрипту. Вылечить можно только остановкой и перезапуском ИСХОДНОГО скрипта...


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

Цитата(DarkMaster @ 6.8.2013, 7:08) *

запустил 8 вкладок, задержка 0, пока работает.

А у меня работает но недолго. Единственное что вчера разобрался, что если поставлю скрипт не в разные вкладки, а в разные пилоты, тогда все работает без ошибок.
DarkMaster
пока шуршит
veiron
Цитата(DarkMaster @ 6.8.2013, 7:37) *

пока шуршит

Запустил пилот не с рабочего стола, а с другого диска. тоже пока работает. как только включаю на рабочем столе, то ошибка тут как тут.
DarkMaster
нефиг ему делать в виндовых папках. уже не первая проблема с ними.
veiron
Цитата(DarkMaster @ 6.8.2013, 7:46) *

нефиг ему делать в виндовых папках. уже не первая проблема с ними.

Зато как удобно. всегда под рукой на рабочем столе.
DarkMaster
для этого есть ярлыки. Если хочешь, то можешь провести три забавных эксперемента:
1) В корень диска С запихай много мусорных файлов, перезагрузись. Время загрузки очень сильно увеличится.
2) Закинь папку на рабочий стол с фотографиями. Пару гигов, много файлов - время загрузки заметно увеличится.
3) Открой фотографии из папки на рабочем столе стандартным просмотрщиком рисунков, листай фотографии. Каждая фотография будет прогружаться с задержкой.

Ну не в состоянии винда нормально это пережевывать. Рабочий нагружать ну совсем не стоит.
xolost
Цитата(DarkMaster @ 6.8.2013, 8:08) *

Нашел очень странный баг:
Копирую твой скрипт, в пилот, в пилоте выделяю скрипт, копирую, запускаю, вставляю в новую вкладу, указатель хода скрипта бегает по незапущному скрипту. Вылечить можно только остановкой и перезапуском ИСХОДНОГО скрипта...


Наверное он из той же оперы, что и у меня находилось.
Изменяю что-то в скрипте, сохраняю скрипт, жму даже сохранить настройки пилота. Запускаю. Скрипт работает, но только БЕЗ последних изменений, словно в памяти всё ещё держит старый. И только переоткрытие пилота помогает.

У меня теперь даже паранойя на эту тему. Изменил что-то - сразу закрываю пилот и открываю по новой.
Без понятия от чего он появляется. Но был уже на всех системах на разных компах.
veiron
Цитата(DarkMaster @ 6.8.2013, 8:06) *

1) В корень диска С запихай много мусорных файлов, перезагрузись. Время загрузки очень сильно увеличится.

Не замечал, у меня диск С 130 гигов, из них занято 90.
Цитата
2) Закинь папку на рабочий стол с фотографиями. Пару гигов, много файлов - время загрузки заметно увеличится.

Все это уже лежит давно на рабочем столе.
Цитата
3) Открой фотографии из папки на рабочем столе стандартным просмотрщиком рисунков, листай фотографии. Каждая фотография будет прогружаться с задержкой.

Так всегда и делаю. вроде нормально открываются.

P.S даже интересно, пойду все с диска С уберу и посмотрю что изменится.
DarkMaster
Цитата
Не замечал, у меня диск С 130 гигов, из них занято 90.

тут скорее вопрос не в занятости, а именно в количестве файлов в корне. У меня nvidea как-то дровишки туда распаковала и не удалила темпы. Почувствовал при первой же перезагрузке.
WKnight
Цитата
Изменяю что-то в скрипте, сохраняю скрипт, жму даже сохранить настройки пилота. Запускаю. Скрипт работает, но только БЕЗ последних изменений, словно в памяти всё ещё держит старый.

В новой версии есть такой пункт "Исправил сохранение изменений в скрипте, при добавлении нового скрипта кнопкой "+". "
Очень похоже на описанное.
xolost
Цитата(WKnight @ 6.8.2013, 14:00) *

В новой версии есть такой пункт "Исправил сохранение изменений в скрипте, при добавлении нового скрипта кнопкой "+". "
Очень похоже на описанное.

Действительно похоже.
Но я пока 2.32 не юзаю, не знаю бывает ли там такое(
veiron
Цитата(DarkMaster @ 6.8.2013, 11:42) *

тут скорее вопрос не в занятости, а именно в количестве файлов в корне. У меня nvidea как-то дровишки туда распаковала и не удалила темпы. Почувствовал при первой же перезагрузке.

Ради интереса переустановил винду. Изменений сильных не заметил. А вот проблема с пилотом как была так и осталась вылетает ошибка при включении таймера.
DarkMaster
пилот переместил?

// Можно было не переустанвливать, а просто забить корень С пустыми тхт файлами.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Русская версия Invision Power Board © 2001-2024 Invision Power Services, Inc.