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

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


********

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



Всех с Новым годом. Подскажите, можно как то упростить скрипт
Код
set #handleWin findwindow  ($opera)
set #handleWin GetWindow (#handleWin CHILD)
set #handleWin GetWindow (#handleWin CHILD)
set workwindow #handleWin
left 34, 34
set #handleWin findwindow  ($glavnaj)
set #handleWin GetWindow (#handleWin CHILD)
set #handleWin GetWindow (#handleWin NEXT)
set workwindow #handleWin
Left 256,35
set #handleWin findwindow  ($igra)
set workwindow #handleWin
left 456,78
set #handleWin findwindow  ($total)
set #handleWin GetWindow (#handleWin CHILD)
set #handleWin GetWindow (#handleWin CHILD)
set #handleWin GetWindow (#handleWin CHILD)
set #handleWin GetWindow (#handleWin CHILD)
set workwindow #handleWin
left 345,89
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 1.1.2013, 21:33
Сообщение #2


***********

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



ничего ты с этим не сделаешь. путь к конечным окнам везде разный.


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


********

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



Цитата(DarkMaster @ 1.1.2013, 22:33) *

ничего ты с этим не сделаешь. путь к конечным окнам везде разный.


Может, что то можно в начали скрипта прописать, а тут потом вставлять одной строкой. как то так
Код

// хэндл 1
// хэндл 2
// хэндл 3
// хэндл 4

хэндл 1 одной строкой
left 34, 34
хэндл 2 одной строкой
Left 256,35
хэндл 3 одной строкой
left 456,78
хэндл 4 одной строкой
left 345,89
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 1.1.2013, 22:23
Сообщение #4


***********

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



можешь сделать подпрограммы gosub


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


********

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



Цитата(DarkMaster @ 1.1.2013, 23:23) *

можешь сделать подпрограммы gosub

у меня скрипт на 8000 строк, ни чего с пилотом не случится если я пропишу gosub и он будет перескакивать через 7000 строк, а потом назад воращаться?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 1.1.2013, 22:31
Сообщение #6


***********

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



Не должно. Размер несколько смущает. Есть подозрение, что его можно порезать раз в 10 для начала)


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


********

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



Цитата(DarkMaster @ 1.1.2013, 23:31) *

Не должно. Размер несколько смущает. Есть подозрение, что его можно порезать раз в 10 для начала)


Так вот и хочу порезать, что бы меньше стал. И так если бы не gosub он был бы 16000.

а gosub b goto это не одно и тоже??
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 1.1.2013, 23:31
Сообщение #8


***********

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



почти. Вход у них одинаковый - на метку. Но, если вход был по gosub, то скрипт наткнувшись на return вернется в основной скрипт. Goto - перешел и забыл. Не используй goto - это величайший враг читаемости скрипта.


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


********

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



Цитата(DarkMaster @ 2.1.2013, 0:31) *

почти. Вход у них одинаковый - на метку. Но, если вход был по gosub, то скрипт наткнувшись на return вернется в основной скрипт. Goto - перешел и забыл. Не используй goto - это величайший враг читаемости скрипта.


Спасибо, учту.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
xolost
сообщение 2.1.2013, 1:59
Сообщение #10


******

Expert
Сообщений: 517
Регистрация: 17.6.2012
Группа: Пользователи
Наличность: 0
Пользователь №: 15.035



Цитата(DarkMaster @ 1.1.2013, 23:31) *

Не должно. Размер несколько смущает. Есть подозрение, что его можно порезать раз в 10 для начала)


Цитата(veiron @ 1.1.2013, 23:37) *

Так вот и хочу порезать, что бы меньше стал. И так если бы не gosub он был бы 16000.


Мой первый скрипт был на 2000 срочек.
Затем я понял что его можно оптимизировать до 1500
затем до 1300
а потом сразу до 300.

Со временем, вас ожидает тоже самое))))
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 2.1.2013, 2:38
Сообщение #11


***********

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



Вообще очень тяжело представляю себе скрипт даже на 2к строк(нормально написанный) с аптаймом хотя бы в неделю. Обойти все фичи и глюки пилота, особенно на последних версиях, еще не так тяжело. Но вот обойти все лаги, вылеты, провисоны, регулярные перезапуски клиентов уже тяжело. Причем тяжело это из-за того, что каждое действие требует контроля на корректность прохождения, каждый контроль, каждое ожидание требует аварийного выхода(зачастую сложно понять какой кусок перезапускать). 100% операторов while должные иметь аварийные выходы, а зачастую несколько. Контроль вылетов с ошибками клиентов, проблемы запуска клиента, сложности с интернетом, многооконки, распараллеливания. Все это в итоге достаточно тяжело преврать в полностью вылизанный механизм. Были, конечно, творения очень объемные, но чем дальше, тем больше понимаю, что писать надо модульно и раскидывая действия по разным скриптам, иначе контроля лагов и вылетов нормального не будет. В итоге размер скриптов очень сильно уменьшился(правда не размер проектов).


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


******

Expert
Сообщений: 517
Регистрация: 17.6.2012
Группа: Пользователи
Наличность: 0
Пользователь №: 15.035



Цитата(DarkMaster @ 2.1.2013, 3:38) *

Вообще очень тяжело представляю себе скрипт даже на 2к строк(нормально написанный) с аптаймом хотя бы в неделю. Обойти все фичи и глюки пилота, особенно на последних версиях, еще не так тяжело. Но вот обойти все лаги, вылеты, провисоны, регулярные перезапуски клиентов уже тяжело. Причем тяжело это из-за того, что каждое действие требует контроля на корректность прохождения, каждый контроль, каждое ожидание требует аварийного выхода(зачастую сложно понять какой кусок перезапускать). 100% операторов while должные иметь аварийные выходы, а зачастую несколько. Контроль вылетов с ошибками клиентов, проблемы запуска клиента, сложности с интернетом, многооконки, распараллеливания. Все это в итоге достаточно тяжело преврать в полностью вылизанный механизм. Были, конечно, творения очень объемные, но чем дальше, тем больше понимаю, что писать надо модульно и раскидывая действия по разным скриптам, иначе контроля лагов и вылетов нормального не будет. В итоге размер скриптов очень сильно уменьшился(правда не размер проектов).


Понимаю тебя Дарк, вот поэтому последний месяц я чисто вылизываю текущий скрипт, и процентов на 10 новый функционал. В итоге, на сегодняшний день мест уже не вижу, из-за которых скрипт может остановится. Ну это так любой проект по сути и делается. Отладка много времени занимает, все места в итоге находят и отлаживают.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
veiron
сообщение 2.1.2013, 8:07
Сообщение #13


********

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



Цитата(DarkMaster @ 2.1.2013, 3:38) *

100% операторов while должные иметь аварийные выходы, а зачастую несколько.

Вот на этих while у меня основные тормоза. это как несколько выходов?

Цитата(DarkMaster @ 2.1.2013, 3:38) *

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

Модульно и раскидывая действия по разным скриптам это как ??
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
veiron
сообщение 2.1.2013, 8:20
Сообщение #14


********

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



Цитата(xolost @ 2.1.2013, 2:59) *

Мой первый скрипт был на 2000 срочек.
Затем я понял что его можно оптимизировать до 1500
затем до 1300
а потом сразу до 300.

Со временем, вас ожидает тоже самое))))


Даже не представляю, как это можно осуществить. Вроде все нужное, а при тормозах, и новых строк добавить вроде надо. Тут уже, не до уменьшения, а наооборот, к увеличению дело идет.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 2.1.2013, 14:04
Сообщение #15


***********

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



Цитата
Вот на этих while у меня основные тормоза. это как несколько выходов?

Как while у меня имеет примерно такой вид:
Код
set #timerBreak timer + 20000
while #x #y #c and #timerBreak > timer
    if еще какое-нибудь экзотическое условие может быть
       break
    end_if
    gosub antiFreeze // Подпрограмма с единым набором общих глюков
end_while


Плюс к этому будет крутиться глобальный контроль работы скрипта в парралельном скрипте. Как правило ориентрируясь на отсечки об успешном выполнении. Если нет успешного выполнения несколько минут, то terminate клиент и пошли по новой запускать.

Сообщение отредактировал DarkMaster - 2.1.2013, 16:05


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


********

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



Цитата(DarkMaster @ 2.1.2013, 15:04) *

Как while у меня имеет примерно такой вид:
Код
set #timerBreak timer + 20000
while #x #y #c  и timer and #timerBreak > timer
    if еще какое-нибудь экзотическое условие может быть
       break
    end_if
    gosub antiFreeze // Подпрограмма с единым набором общих глюков
end_while


Плюс к этому будет крутиться глобальный контроль работы скрипта в парралельном скрипте. Как правило ориентрируясь на отсечки об успешном выполнении. Если нет успешного выполнения несколько минут, то terminate клиент и пошли по новой запускать.


у мененя while ( $а = 0 ) , а откуда у Вас взялись #x #y #c , и что это за команда #timerBreak и почему стоит не <> 0 или 1, а какой то timer. И как это глобальный контроль в паралельном скрипте, он что запущен и может вмешиваться в работу основного скрипта?

Сейчас посмотрел на Вики, там даже нет такого как : timerBreak и timer . Про timerBreak и timer разобрался, у меня доже скрипт есть такой. а вот зачем столько #x #y #c после while так и не понял?

Сообщение отредактировал veiron - 2.1.2013, 16:19
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 2.1.2013, 16:54
Сообщение #17


***********

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



Цитата
#x #y #c

координаты цвет
Цитата
#timerBreak

обычная переменная, может быть любой.
Цитата
какой то timer

таймер содержит в себе время работы скрипта. это зарезервированная переменная.
Цитата
как это глобальный контроль в паралельном скрипте, он что запущен и может вмешиваться в работу основного скрипта?

самый простой вариант основной скрипт содержит в себе счетчик, каждый цикл прибваляет единичку. Если скрипт котнроля видит на протяжении определенного времени, что число не изменяется - скрипт повис, делаем перезапуск/или меняем переменную в основном скрипт. Вспомним gosub antiFreeze, он содержится во всех циклах. Таким образом мы можем дать команду выполнить какое-либо действие скрипту просто изменив одно из условий в подпрограмме. Например:
Код
set #lag 0
set #return 0

:start
while
    ...
    ...
    gosub antiFreeze
    if #return = 1
        set #return 0
        goto start
    end_if
end_while
goto start

:antiFreeze
if #lag > 0
    terminate имя_окна
    gosub launchWindow // подпрограмма запуска клиента
        set #lag 0
        set #return 1
end_if
return


Сообщение отредактировал DarkMaster - 2.1.2013, 17:17


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


********

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



Теперь понял, что за #x #y #c, к Вас стоит, у меня просто все на картинках. С цветом мне не нравится делать. Получается в каждом while стоит gosub и всегда происходит по нему переход или переход происходит только когда что то пошло не так.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 2.1.2013, 17:15
Сообщение #19


***********

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



Переход по gosub будет происходить всегда, а внутри самой подпрограммы уже определяется пошло ли что-то не так и что с этим делать.


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


********

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



Код
set #lag 0
set #return 0

:start
while
    ...
    ...
    gosub antiFreeze
        if #return = 1
            set #return 0
            goto start
        end_if
end_while
goto start

:antiFreeze
if #lag > 0
    terminate имя_окна
    gosub launchWindow // подпрограмма запуска клиента
        set #lag 0
        set #return 1
end_if
return


Мне такое еще трудно понять. Смысл вроде и понимаю, а как это прикрутить себе не пойму.



Цитата(DarkMaster @ 2.1.2013, 18:15) *

Переход по gosub будет происходить всегда, а внутри самой подпрограммы уже определяется пошло ли что-то не так и что с этим делать.


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

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

 

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