Здравствуйте, гость ( Вход | Регистрация )

52 страниц V  1 2 3 > »   
Ответить в эту темуОткрыть новую тему
> Упростить скрипт
veiron
сообщение 31.7.2013, 16:52
Сообщение #1


********

Master
Сообщений: 1.264
Регистрация: 22.5.2012
Группа: Пользователи
Наличность: 0
Из: Белоруссии
Пользователь №: 14.972



Цитата
/////////блок 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 строк. Подскажите, можно его как-то упростить и будет ли он от этого работать быстрее.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 31.7.2013, 17:05
Сообщение #2


***********

Модератор UOPilot
Сообщений: 9.462
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27674
Пользователь №: 11.279



Цитата
можно его как-то упростить

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

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

слышал, что длинные скрипты работают медленнее, но объемы не те. Подпрограммы по идее чуть замедляют, но там такие цифры, что будешь наносекунды мерить, что лучше.


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
veiron
сообщение 31.7.2013, 17:25
Сообщение #3


********

Master
Сообщений: 1.264
Регистрация: 22.5.2012
Группа: Пользователи
Наличность: 0
Из: Белоруссии
Пользователь №: 14.972



Цитата(DarkMaster @ 31.7.2013, 17:05) *

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

А есть ли смысл в gosub ставить, ведь если иф с цветом не найден и так ведь проскакивает быстро или нет ?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 31.7.2013, 17:48
Сообщение #4


***********

Модератор UOPilot
Сообщений: 9.462
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27674
Пользователь №: 11.279



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


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
veiron
сообщение 31.7.2013, 18:36
Сообщение #5


********

Master
Сообщений: 1.264
Регистрация: 22.5.2012
Группа: Пользователи
Наличность: 0
Из: Белоруссии
Пользователь №: 14.972



Цитата(DarkMaster @ 31.7.2013, 17:48) *

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

Про gosub я представлял. Я думал можно как то в фор это все оформить.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 31.7.2013, 19:15
Сообщение #6


***********

Модератор UOPilot
Сообщений: 9.462
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27674
Пользователь №: 11.279



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

Код

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. Тут немного тяжело советовать, т.к. варианты реализации чуть разные и они не подойдут для всех случаев, а что именно происходит и каков должен быть результат я же не вижу. Ну или полный скрипт тогда надо.

Сообщение отредактировал DarkMaster - 31.7.2013, 19:18


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
veiron
сообщение 31.7.2013, 19:15
Сообщение #7


********

Master
Сообщений: 1.264
Регистрация: 22.5.2012
Группа: Пользователи
Наличность: 0
Из: Белоруссии
Пользователь №: 14.972



Цитата(DarkMaster @ 31.7.2013, 19:12) *

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

Наверно все таки для меня проще будет ифом. Я даже представить не могу, как 15 разных координат, плюс 45 оттенков цвета можно запихнуть в фор.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 31.7.2013, 19:17
Сообщение #8


***********

Модератор UOPilot
Сообщений: 9.462
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27674
Пользователь №: 11.279



Про "короче не получится" я что-то начал писать другое и отвлекся. ) оно получится, но с ограничениями.


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
veiron
сообщение 31.7.2013, 19:23
Сообщение #9


********

Master
Сообщений: 1.264
Регистрация: 22.5.2012
Группа: Пользователи
Наличность: 0
Из: Белоруссии
Пользователь №: 14.972



И вот еще. У меня есть рабочий скрипт во вкладке 1. К примеру все с while их в скрипте 3 разных.
Код
while
скрипт 1
end_while
while
скрипт 2
end_while
while
скрипт 3
end_while


И еще есть вкладка со скриптом 2, которая проверяет на всякие баги сервера. И вот что происходит. Допустим слетел сервер игры в тот момент когда пилот выполняет действие во втором цикле. Вторая вкладка видит, что есть баг и обновляет браузер. Но рабочий скрипт, ведь во втором цикле остался. Можно как-то из второй вкладки переместить действие в первом скрипте?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 31.7.2013, 19:45
Сообщение #10


***********

Модератор UOPilot
Сообщений: 9.462
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27674
Пользователь №: 11.279



не понял. давайте еще раз, лучше примером про яблочки и зайчиков)

// есть подозрение, что второй скрипт, вторая вкладка и много чего "второго" было названо одинаково, а по факту является разными скриптами.


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
veiron
сообщение 31.7.2013, 20:13
Сообщение #11


********

Master
Сообщений: 1.264
Регистрация: 22.5.2012
Группа: Пользователи
Наличность: 0
Из: Белоруссии
Пользователь №: 14.972



Код
Вкладка 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 .
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 31.7.2013, 20:25
Сообщение #12


***********

Модератор UOPilot
Сообщений: 9.462
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27674
Пользователь №: 11.279



Цитата
Я так понимаю, надо сделать точки выхода с 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, но такого пока нет.


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
veiron
сообщение 31.7.2013, 20:35
Сообщение #13


********

Master
Сообщений: 1.264
Регистрация: 22.5.2012
Группа: Пользователи
Наличность: 0
Из: Белоруссии
Пользователь №: 14.972



Цитата(DarkMaster @ 31.7.2013, 20:25) *

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

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

Я с каждого while по goto start выходил, только в игре столько багов, что из 10 строк while становится 30 . Только про присваивать значение из скрипта не понял. И еще вопрос, в игре появились новые мобы, которые как то странно через какое-то время меняют цвет, может 10 раз быть один, а потом уже другой. Не подскажете, если не ифом буду цвет брать, а сделаю поиск через FindImage это избавит от нераспознования мобов.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 1.8.2013, 10:15
Сообщение #14


***********

Модератор UOPilot
Сообщений: 9.462
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27674
Пользователь №: 11.279



Цитата
Я с каждого 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


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
veiron
сообщение 1.8.2013, 18:28
Сообщение #15


********

Master
Сообщений: 1.264
Регистрация: 22.5.2012
Группа: Пользователи
Наличность: 0
Из: Белоруссии
Пользователь №: 14.972



Цитата(DarkMaster @ 1.8.2013, 10:15) *

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

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

Спасибо, даже и не думал, что так можно сделать. Может еще натолкнете на мысль как выполнить. Есть к примеру точка с цветом 64, 435 12776696, эта точка периодически меняет цвета на другие. И вот иногда браузер, просто тупо виснет и окно браузера становится как будто его заскринили. Чем можно отследить, если цвет не меняется более 5 минут в данной точку, значит выполняем обновление браузера. Понимаю, что надо что то типо таймера сделать, а вот как это будет выглядит даже представить не могу.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 1.8.2013, 18:30
Сообщение #16


***********

Модератор UOPilot
Сообщений: 9.462
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27674
Пользователь №: 11.279



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


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
veiron
сообщение 1.8.2013, 18:59
Сообщение #17


********

Master
Сообщений: 1.264
Регистрация: 22.5.2012
Группа: Пользователи
Наличность: 0
Из: Белоруссии
Пользователь №: 14.972



Цитата(DarkMaster @ 1.8.2013, 18:30) *

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

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


P.S разобрался. Спасибо. Как раз то что мне нужно.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
veiron
сообщение 2.8.2013, 13:11
Сообщение #18


********

Master
Сообщений: 1.264
Регистрация: 22.5.2012
Группа: Пользователи
Наличность: 0
Из: Белоруссии
Пользователь №: 14.972



Код
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 // ВРЕМЯ ПРОСТОЯ.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
WKnight
сообщение 2.8.2013, 13:49
Сообщение #19


********

Разработчик UO Pilot'а
Сообщений: 1.639
Регистрация: 9.1.2006
Группа: Пользователи
Наличность: 0
Пользователь №: 4.688



Цитата
if ( 2838386 = #color ) and ( 2838386 = #color )

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

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

Сделай предварительный вывод в лог обоих переменных, чтоб их значения при ошибке проверить.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
veiron
сообщение 2.8.2013, 14:15
Сообщение #20


********

Master
Сообщений: 1.264
Регистрация: 22.5.2012
Группа: Пользователи
Наличность: 0
Из: Белоруссии
Пользователь №: 14.972



Цитата(WKnight @ 2.8.2013, 13:49) *

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

Убрать уберу, а вот про то как разбить на 2 строки я не понял?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

52 страниц V  1 2 3 > » 
Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 16.4.2024, 14:39
Designed by Nickostyle