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

2 страниц V  1 2 >  
Ответить в эту темуОткрыть новую тему
> Misc Uopilot - GML Прибамбасы к пилоту
EL-GReeN
сообщение 29.7.2012, 19:58
Сообщение #1


*****

Journeyman
Сообщений: 474
Регистрация: 18.7.2011
Группа: Пользователи
Наличность: 0
Из: Россия
Пользователь №: 13.815
Возраст: 32



Misc Uopilot ловит из буфера спец ключ misc и то что после него исполняет, функции и синтаксис должны быть на GML (это JS подобный язык в движке Game Maker).

Окошко с возможностью отображения 4х строк на своей поверхности(IMG:style_emoticons/default/sad.gif)скрипт пример выполняется при запущенной программе)

Код
set linedelay 20
set clipboard misc window_set_showborder(0) //Границы вокруг окна (0-1).
set clipboard misc window_set_rectangle(600,0,400,20) //Позиция и растягивание размера окна (x, y, w, h).
set clipboard misc window_set_stayontop(1) //Поверх всего (0-1).
set clipboard misc t1x=4; t1y=2; t1t='Хп:' //Обьект текст1 (t1x=x, t1y=y, t1t=text)
set clipboard misc t2x=100; t2y=2; t2t='Мп:' //Обьект текст2
set clipboard misc t3x=200; t3y=2; t3t='Стам:' //Обьект текст3
set clipboard misc t4x=300; t4y=2; t4t='Голд:' //Обьект текст4
set #hp 0
:re2
set clipboard misc t1t='Хп: ' + '#hp' //Динамическое изменение текста1
wait 100
set #hp #hp + 5
if #hp < 101
goto re2
end_if
end_script

Вариант 2:
Код
set linedelay 2
set #handleWin findwindow (Misc_uopilot) //Получение хендла окна миска
set #result setwindowtext (#handleWin, misc window_set_showborder(0)) //Границы вокруг окна (0-1).
set #result setwindowtext (#handleWin, misc window_set_rectangle(600,0,400,20)) //Позиция и растягивание размера окна (x, y, w, h).
set #result setwindowtext (#handleWin, misc window_set_stayontop(1)) //Поверх всего (0-1).
set #result setwindowtext (#handleWin, misc t1x=4; t1y=2; t1t='Хп:') //Обьект текст1 (t1x=x, t1y=y, t1t=text)
set #result setwindowtext (#handleWin, misc t2x=100; t2y=2; t2t='Мп:') //Обьект текст2
set #result setwindowtext (#handleWin, misc t3x=200; t3y=2; t3t='Стам:') //Обьект текст3
set #result setwindowtext (#handleWin, misc t4x=300; t4y=2; t4t='Голд:') //Обьект текст4
set #hp 0
:re2
set #result setwindowtext (#handleWin, misc t1t='Хп: ' + '#hp') //Динамическое изменение текста1
wait 100
set #hp #hp + 5
if #hp < 101
goto re2
end_if
end_script


Выключается нажатием искейпа если активно его окно, либо из скрипта:

Код
set clipboard misc game_end()


Изменение размера окна:

Код
set clipboard misc room_set_width(0,400) //Ширина (0, w).
wait 20
set clipboard misc room_set_height(0,20) //Высота (0, h).
wait 20
set clipboard misc room_restart()//Перезапуск окна, после этого все настройки сбиваются, поэтому делается в первую очередь.
wait 20
end_script


Выполнение(IMG:style_emoticons/default/sad.gif)способ 1)

Выполнение кода в миске происходит 1 раз при таком обращении:
Код
set clipboard misc room_set_height(0,20)
или в альтернативном:
set #handleWin findwindow (Misc_uopilot) //Получение хендла окна миска
set #result setwindowtext (#handleWin, misc e_stp0='draw_rect_screen(1100,0,1150,20)')

(Функция room_set_height(0,20) заносится в строковую переменную и выполняется, после чего переменная очищается(это может быть и не функция а большой кусок кода))
Для многократного выполнения есть спец переменные в которых код не очищается и выполняется 1 раз каждый шаг, шаг можно изменить, и пока он по умолчанию 5мс (200 раз в секунду=фпс 200)
Обычные функции требующие постоянного выполнения должны быть в событии Step:
e_stp0, e_stp1, e_stp2... e_stp10
Функции рисования должны быть в событии Draw:(за исключением функций рисования вне окна, они могут быть в step)
e_drw0, e_drw1, e_drw2... e_drw10
Также есть таймерные события отличающиеся от step только тем что выполняются раз в 10, 100, 1000 шагов(IMG:style_emoticons/default/sad.gif)для повышения производительности)
e_slow10
e_slow100
e_slow1000
Таким образом можно засунуть свой код в строковую переменную(например e_slow10), обработчик будет постоянно его выполнять до тех пор пока не завершена программа или не будет очищена переменная:
Код
set clipboard misc e_slow10='room_set_height(0,20)'
set clipboard misc e_slow10=''


Выполнение(IMG:style_emoticons/default/sad.gif)способ 2)

Отличие лишь в том что при таком обращении код помещается не в буфер а в заголовок окна миска, где он успешно отлавливается и выполняется, затем заголовок возвращается в исходное состояние:(misc_uopilot).
Код
set linedelay 0
set #handleWin findwindow (Misc_uopilot) //Получение хендла окна миска
set #result setwindowtext (#handleWin, misc e_stp0='draw_rect_screen(1100,0,1150,20)') //Установка кода в качестве заголовка, через несколько мс вернется обратно
//Обратная связь
set $x 100
set #result setwindowtext (#handleWin, misc clipboard_set_text(string(random($x)))// Ответ будет в буфере
set #result setwindowtext (#handleWin, misc room_caption=string(random($x))//Ответ будет в заголовке
wait 2
set $x2 GetWindowtext (#handleWin) //Получаем ответ из заголовка, можно не успеть забрать или опоздать, до изменения заголовка обратно
wait 20
get clipboard $x //Получаем ответ из буфера, намного надежнее
msg $x $x2
end_script


Графика на экране:

Есть функции рисования которых нет в документации (потому что они из дллки), полезны тем что в отличие от стандартных позволяют рисовать вне окна то есть в любом месте экрана: (линии, текст, прямоугольники)
Код
set linedelay 20
set clipboard misc set_pen(1,c_red) //Установка ширины линии и цвета(ширина, цвет).
set clipboard misc set_brush(c_lime) //Установка цвета прямоугольника(цвет).
set clipboard misc e_slow100='draw_rect_screen(1100,0,1150,20)' //Функция рисования прямоугольников на экране(лево, право, верх, низ).
set clipboard misc e_drw0='draw_rect_screen(1155,0,1175,20)'
set clipboard misc e_slow10='draw_line_screen(10,10,300,10)' //Функция рисования линий на экране(x1, y1, x2, y2).
set clipboard misc e_stp0='draw_text_screen(1000,1,"Misc Uopilot",c_aqua)'//Функция рисования текста на экране(x, y, текст, цвет).
//еще есть рисование текстуры но по крайней мере у меня оно начинает глючить через несколько минут
//set clipboard misc pic = load_bitmap("1test.bmp") //Загрузка текстуры.
//set clipboard misc e_stp1='draw_bitmap_screen(pic,400,0)'//Функция рисования текстуры на экране(x, y, текст, цвет).
end_script


Пример обратной связи:

Код
set $x 100
set clipboard misc clipboard_set_text(string(random($x)))
wait 20
get clipboard $x
set clipboard ""
msg $x
end_script


Скачать Misc Uopilot и документацию:


Дополнительное дополнение добавленное позже:

Дополнительно по миску, это отдельная программка, может взаимодействовать с пилотом, скомпилирована в движке game maker 8.0(или 8.1) .
Миск может ВСЕ что есть в этом движке через выполнение кода движка (GML внутренний язык движка для программирования), именно этот код посылается из пилота в миск.
Из этого следует, что для того что бы хорошо понять как работать с миском нужно знать этот движок.
Если вы не знаете этот двиг, вы все равно можете хорошо понять что к чему если вы программист, по примерам, по приложенной документации движка.
Если вы не знаете ни движок ни программирование (нормальное), вы не сможете хорошо понять как использовать миск, если только не потратите много времени на осознание и медитацию над пилотом и GM (время может быть меньше если вы уже знаете пилот, javascript и зашкаливает мотивация).
Под "хорошо понять что к чему" имеется ввиду возможность делать действительно сложные вещи, такие как сеть, навороченный интерфейс или сложная игровая графика с логикой.

Развивать миск можно но только в направлении уменьшения кода задач пользователей и удобства.

http://rutracker.org/forum/viewtopic.php?t=2573603 Game Maker v8.0 Pro


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


***********

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



А более приземленно можно пояснить что это такое? Возможность выполнить произвольный ява подобный код?

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


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


*********

ex-Moderator UOPilot
Сообщений: 2.440
Регистрация: 8.10.2010
Группа: Пользователи
Наличность: 0
Из: Киев
Пользователь №: 13.093



Мне тоже и интересно - что там есть такого, чего нет в пилоте? В чем практическое удобство применения?
Кстати, при частом обращении к буферу обмена в пилоте иногда вылетает ошибка (по крайней мере, раньше было)...

Сообщение отредактировал Zeleax - 29.7.2012, 22:26


--------------------
Полезные советы - читать всем! UOWiki
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
EL-GReeN
сообщение 29.7.2012, 22:32
Сообщение #4


*****

Journeyman
Сообщений: 474
Регистрация: 18.7.2011
Группа: Пользователи
Наличность: 0
Из: Россия
Пользователь №: 13.815
Возраст: 32



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

А более приземленно можно пояснить что это такое? Возможность выполнить произвольный ява подобный код?

Да, можно много чего придумать полезного, графика, сеть, только есть проблемка с подлагиванием буфера пока ничего не идет в голову чем скоростным его можно заменить для обмена данными.
Вырезка из документации по функциям:
Функции обработки вещественных чисел:

random(x) Возвращает случайное вещественное число между 0 и x. Число всегда меньше чем x.
random_set_seed(seed) Устанавливает начальное число (целое число), который используется для генерации случайного числа. Может использоваться, чтобы повторить некоторую случайную последовательность.
random_get_seed() Возвращает текущее начальное число.
randomize() Устанавливает начальное число на случайное число.
choose(val1,val2,val3,...) Возвращает одно из выбранных аргументов произвольно. Функция может иметь вплоть до 16 аргументов.
abs(x) Возвращает абсолютную величину x.
sign(x) Возвращает знак числа x. (-1, 0 или 1).
round(x) Возвращает x, округлённый до самого близкого целого числа.
floor(x) Возвращает пол x, то есть x округлённый до ближайшего целого числа, которое меньше x.
ceil(x) Возвращает потолок x, то есть x округлённый до ближайшего целого числа, которое больше x.
frac(x) Возвращает дробную часть x, то есть часть, стоящую позади десятичной точки.
sqrt(x) Возвращает квадратный корень из x. X должен быть неотрицательным.
sqr(x) Возвращает x*x.
power(x,n) Возвращает x в степени n.
exp(x) Возвращает e в степени x.
ln(x) Возвращает натуральный логарифм от x.
log2(x) Возвращает логарифм от x по основанию 2.
log10(x) Возвращает логарифм от x по основанию 10.
logn(n,x) Возвращает логарифм от x по основанию n.
sin(x) Возвращает синус x (в радианах).
cos(x) Возвращает косинус x (в радианах).
tan(x) Возвращает тангенс x (в радианах).
arcsin(x) Возвращает арксинус x.
arccos(x) Возвращает арккосинус x.
arctan(x) Возвращает арктангенс x.
arctan2(y,x) Возвращает точное значение арктангенса x/y.
degtorad(x) Преобразовывает градусы в радианы.
radtodeg(x) Преобразовывает радианы в градусы.
min(val1,val2,val3,...) Возвращает минимум величин. Функция может иметь вплоть до 16 аргументов. Они должны или быть всеми реальными величинами или являться всеми строками.
max(val1,val2,val3,...) Возвращает максимум величин. Функция может иметь вплоть до 16 аргументов. Они должны или быть всеми реальными величинами или являться всеми строками.
mean(val1,val2,val3,...) Возвращает среднее число величин. Функция может иметь вплоть до 16 аргументов. Они должны быть всеми реальными величинами.
median(val1,val2,val3,...) Возвращает величины медианы, то есть, среднюю величину. (Когда количество аргументов чётное, то возвращается меньшее значение двух средних величин.) Функция может иметь вплоть до 16 аргументов. Они должны все быть реальными величинами.
point_distance(x1,y1,x2,y2) Возвращает расстояние между точкой (x1,y1) и (x2,y2).
point_direction(x1,y1,x2,y2) Возвращает угол (в градусах) между осью X и вектором с началом в точке (x1,y1) и окончанием в точке (x2,y2).
lengthdir_x(len,dir) Возвращает горизонтальный x-компонент вектора определённый указанной длиной и направлением.
lengthdir_y(len,dir) Возвращает горизонтальный y-компонент вектора определённый указанной длиной и направлением.
is_real(x) Возвращает, если x реальная величина (по сравнению со строкой).
is_string(x) Возвращает, если x является строкой (по сравнению с реальной величиной).


Функции обработки строковых переменных:

chr(val) Возвращает символ с ASCI кодом val.
ord(str) Возвращает ASCI код первого символа в строке str.
real(str) Если в строковой переменной содержится число, то данная функция переводит его в вещественный тип и возвращает полученную строку.
string(val) Переводит значение вещественной переменной в стандартный строковый формат (без чисел после запятой, если число целое; и с двумя числами, если дробное) и возвращает полученное число.
string_format(val,tot,dec) Переводит значение val в строку в Ваш собственный формат: tot - указывает общее число мест и dec - указывает количество чисел после запятой.
string_length(str) Возвращает количество символов в строке.
string_pos(substr,str) Возвращает начальную позицию подстроки substr в строке str или 0, если указанная подстрока не встречается.
string_copy(str,index,count) Возвращает подстроку, содержащуюся в строке str, начинающуюся с позиции index, и общей длинной count.
string_char_at(str,index) Возвращает символ, находящийся в позиции index строки str.
string_delete(str,index,count) Возвращает строку str, из которой удалена подстрока, которая начинается с позиции index и общей длиной count.
string_insert(substr,str,index) Возвращает строку str, в которую вставлена подстрока substr, начинается с указанной позиции index.
string_replace(str,substr,newstr) Возвращает строку str, в которой первая встречающаяся подстрока substr будет заменена на подстроку newstr.
string_replace_all(str,substr,newstr) Возвращает строку str, в которой все встречающиеся подстроки substr заменены подстрокой newstr.
string_count(substr,str) Возвращает число, которое показывает, сколько раз подстрока substr встречается в строке str string_lower(str) Возвращает строку str, записанную маленькими буквами.
string_upper(str) Возвращает строку str, записанную большими буквами.
string_repeat(str,count) Возвращает строку, которая состоит из строки str, повторяющейся count раз.
string_letters(str) Возвращает строку str, выбрасывая из неё все числа.
string_digits(str) Возвращает строку str, выбрасывая из неё все буквенные символы.
string_lettersdigits(str) Возвращает строку str, выбрасывая из неё всё, что не является буквенным символом либо числом.

Следующие функции имеют отношение к буферу обмена для содержания текста.


clipboard_has_text() Возвращает, если текст присутствует в буфере.
clipboard_get_text() Возвращает текущий текст в буфер.
clipboard_set_text(str) Устанавливает строку str в буфер.


--------------------
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 29.7.2012, 22:34
Сообщение #5


***********

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



Дык есть плагины, которые позволяют передавать стринги.


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


*****

Journeyman
Сообщений: 474
Регистрация: 18.7.2011
Группа: Пользователи
Наличность: 0
Из: Россия
Пользователь №: 13.815
Возраст: 32



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

А сниффер из этого можно соорудить, который будет взаимодействовать с пилотом?)

Только соединение с другими настроенными копиями, и даже в таком виде это сложно) хотя там тоже есть дллки и расширения, в общем проще для пилота сделать дллку но нужен хакер для этого.
Цитата(DarkMaster @ 29.7.2012, 23:34) *

Дык есть плагины, которые позволяют передавать стринги.

Заточенные под пилот?


--------------------
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 29.7.2012, 23:59
Сообщение #7


***********

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



EL-GReeN, я те в глаз дам. Сейчас сижу смотрю на функции с числами и чую до рассвета буду писать аналоги на пилотовских подпрограммах) Реле сцуко щелкнуло... теперь не успокоюсь...


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


*****

Journeyman
Сообщений: 474
Регистрация: 18.7.2011
Группа: Пользователи
Наличность: 0
Из: Россия
Пользователь №: 13.815
Возраст: 32



Цитата(DarkMaster @ 30.7.2012, 0:24) *

Опыт моего программирования полный смех.
Все что тут нужно, это повешать хук на процесс.

Аналогично, ушел гуглить "хук"... оно же низкоуровневое, что делает не возможным его создание в гмл если только дллками которые и так доступны в пилоте.
Цитата(DarkMaster @ 30.7.2012, 0:59) *

EL-GReeN, я те в глаз дам. Сейчас сижу смотрю на функции с числами и чую до рассвета буду писать аналоги на пилотовских подпрограммах) Реле сцуко щелкнуло... теперь не успокоюсь...

ИМХО больше строк не значит лучше, например в исходнике миска всего 3 коротких куска кода, а все благодаря скрытию движком возможности ковыряния в атомах:
gml

obj0

Create:
draw_set_font(font0)
t1x=0
t1y=0
t1t='0'
t2x=-100
t2y=-100
t2t='0'
t3x=-100
t3y=-100
t3t='0'
t4x=-100
t4y=-100
t4t='0'

Step:
if clipboard_has_text()//если в буфере не пусто
{
bfr = clipboard_get_text();
if string_pos('misc',bfr) = 1 //если в буфере есть ключ misc
{
bfr = string_delete(bfr,1,5);
clipboard_set_text('')
execute_string(bfr)
}
}

Draw:
draw_text(t1x,t1y,t1t)
draw_text(t2x,t2y,t2t)
draw_text(t3x,t3y,t3t)
draw_text(t4x,t4y,t4t)


--------------------
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Zeleax
сообщение 30.7.2012, 11:28
Сообщение #9


*********

ex-Moderator UOPilot
Сообщений: 2.440
Регистрация: 8.10.2010
Группа: Пользователи
Наличность: 0
Из: Киев
Пользователь №: 13.093



А не лучше ли направить усилия на разработку соответствующих dll для пилота?


--------------------
Полезные советы - читать всем! UOWiki
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
EL-GReeN
сообщение 30.7.2012, 12:24
Сообщение #10


*****

Journeyman
Сообщений: 474
Регистрация: 18.7.2011
Группа: Пользователи
Наличность: 0
Из: Россия
Пользователь №: 13.815
Возраст: 32



Цитата(Zeleax @ 30.7.2012, 12:28) *

А не лучше ли направить усилия на разработку соответствующих dll для пилота?

Скажу честно не умею и нет желания ковыряться в атомах, надеюсь WKnight починит тормознутость буфера


--------------------
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
WKnight
сообщение 30.7.2012, 12:31
Сообщение #11


********

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



Начиная с версии 1.07 beta x, пилот умеет общаться с внешней программой injection версии 309.05+ посредством, если не ошибаюсь, глобальных атомов. Возможно это можно как-то прикрутить.

Цитата
Скажу честно не умею и нет желания ковыряться в атомах
Dll с атомами никак не связано, и атомы имхо попроще длл будут (IMG:style_emoticons/default/smile.gif)


Буфер сегодня ковырял, подозреваю что ускорить его маловероятно, ибо я только присваиваю и забираю текст как из обычной переменной.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Zeleax
сообщение 30.7.2012, 12:37
Сообщение #12


*********

ex-Moderator UOPilot
Сообщений: 2.440
Регистрация: 8.10.2010
Группа: Пользователи
Наличность: 0
Из: Киев
Пользователь №: 13.093



Цитата(WKnight @ 30.7.2012, 12:31) *
Буфер сегодня ковырял, подозреваю что ускорить его маловероятно, ибо я только присваиваю и забираю текст как из обычной переменной.

Добавить бы в пилоте обработчик ошибок, чтоб пилот не вылетал с алертами при ошибках чтения/записи буфера и в/из файла. Также можно добавить системную переменную IOError (если =0, то последняя операция ввода-вывода прошла успешно, иначе = код ошибки)

Кстати, а что за глобальные атомы? И в какой версии Delphi наверняка скомпилится dll из
https://forum.uokit.com/index.php?s=&am...st&p=156310
?


--------------------
Полезные советы - читать всем! UOWiki
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
WKnight
сообщение 30.7.2012, 12:58
Сообщение #13


********

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



Буфер как-раз по этому поводу и ковырял.

Есть зарезервированная переменная 'errorlevel', по возможности использую ее, чтоб левые не заводить.

Атомы это некие флажки в операционной системе. Я их очень давно ковырял, поэтому навскидку не смогу объяснить с чем их едят, гугл поможет (IMG:style_emoticons/default/smile.gif) Добавляются командой в дельфи GlobalAddAtom. Можно начать с нее.

Пишу в седьмой.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
EL-GReeN
сообщение 30.7.2012, 16:10
Сообщение #14


*****

Journeyman
Сообщений: 474
Регистрация: 18.7.2011
Группа: Пользователи
Наличность: 0
Из: Россия
Пользователь №: 13.815
Возраст: 32



Добавил еще 1 способ обращения через заголовок, ответ можно брать оттуда же но это нестабильно так как можно не успеть или опоздать забрать так что лучше ответ делать и забирать через буфер


--------------------
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 2.8.2012, 3:56
Сообщение #15


***********

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



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


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


*****

Journeyman
Сообщений: 474
Регистрация: 18.7.2011
Группа: Пользователи
Наличность: 0
Из: Россия
Пользователь №: 13.815
Возраст: 32



Предлагаю эту тему оставить как есть найти не проблема, такой оформленный пост пойдет?:
GML Прибамбасы к пилоту

Misc Uopilot ловит из буфера спец ключ misc и то что после него исполняет, функции и синтаксис должны быть на GML (это JS подобный язык в движке Game Maker).
Все скрипты примеры выполняется при запущенной программе.

Окошко с возможностью отображения 4х строк на своей поверхности:
Код
set linedelay 20
set clipboard misc window_set_showborder(0) //Границы вокруг окна (0-1).
set clipboard misc window_set_rectangle(600,0,400,20) //Позиция и растягивание размера окна (x, y, w, h).
set clipboard misc window_set_stayontop(1) //Поверх всего (0-1).
set clipboard misc t1x=4; t1y=2; t1t='Хп:' //Обьект текст1 (t1x=x, t1y=y, t1t=text)
set clipboard misc t2x=100; t2y=2; t2t='Мп:' //Обьект текст2
set clipboard misc t3x=200; t3y=2; t3t='Стам:' //Обьект текст3
set clipboard misc t4x=300; t4y=2; t4t='Голд:' //Обьект текст4
set #hp 0
:re2
set clipboard misc t1t='Хп: ' + '#hp' //Динамическое изменение текста1
wait 100
set #hp #hp + 5
if #hp < 101
goto re2
end_if
end_script

Вариант 2:
Код
set linedelay 2
set #handleWin findwindow (Misc_uopilot) //Получение хендла окна миска
set #result setwindowtext (#handleWin, misc window_set_showborder(0)) //Границы вокруг окна (0-1).
set #result setwindowtext (#handleWin, misc window_set_rectangle(600,0,400,20)) //Позиция и растягивание размера окна (x, y, w, h).
set #result setwindowtext (#handleWin, misc window_set_stayontop(1)) //Поверх всего (0-1).
set #result setwindowtext (#handleWin, misc t1x=4; t1y=2; t1t='Хп:') //Обьект текст1 (t1x=x, t1y=y, t1t=text)
set #result setwindowtext (#handleWin, misc t2x=100; t2y=2; t2t='Мп:') //Обьект текст2
set #result setwindowtext (#handleWin, misc t3x=200; t3y=2; t3t='Стам:') //Обьект текст3
set #result setwindowtext (#handleWin, misc t4x=300; t4y=2; t4t='Голд:') //Обьект текст4
set #hp 0
:re2
set #result setwindowtext (#handleWin, misc t1t='Хп: ' + '#hp') //Динамическое изменение текста1
wait 100
set #hp #hp + 5
if #hp < 101
goto re2
end_if
end_script


Выключается нажатием искейпа если активно его окно, либо из скрипта:
Код
set clipboard misc game_end()


Изменение размера окна миска:
Код
set clipboard misc room_set_width(0,400) //Ширина (0, w).
wait 20
set clipboard misc room_set_height(0,20) //Высота (0, h).
wait 20
set clipboard misc room_restart()//Перезапуск окна, после этого все настройки сбиваются, поэтому делается в первую очередь.
wait 20
end_script


Выполнение:
Выполнение кода в миске происходит 1 раз при таком обращении:
Код
set clipboard misc room_set_height(0,20)
или в альтернативном:
set #handleWin findwindow (Misc_uopilot) //Получение хендла окна миска
set #result setwindowtext (#handleWin, misc e_stp0='draw_rect_screen(1100,0,1150,20)')

(Функция room_set_height(0,20) заносится в строковую переменную и выполняется, после чего переменная очищается(это может быть и не функция а большой кусок кода))
Для многократного выполнения есть спец переменные в которых код не очищается и выполняется 1 раз каждый шаг, шаг можно изменить, и пока он по умолчанию 5мс (200 раз в секунду=фпс 200)
Обычные функции требующие постоянного выполнения должны быть в событии Step:
e_stp0, e_stp1, e_stp2... e_stp10
Функции рисования должны быть в событии Draw:(за исключением функций рисования вне окна, они могут быть в step)
e_drw0, e_drw1, e_drw2... e_drw10
Также есть таймерные события отличающиеся от step только тем что выполняются раз в 10, 100, 1000 шагов(IMG:style_emoticons/default/sad.gif)для повышения производительности)
e_slow10
e_slow100
e_slow1000
Таким образом можно засунуть свой код в строковую переменную(например e_slow10), обработчик будет постоянно его выполнять до тех пор пока не завершена программа или не будет очищена переменная:
Код
set clipboard misc e_slow10='room_set_height(0,20)'
set clipboard misc e_slow10=''


Выполнение(IMG:style_emoticons/default/sad.gif)способ 2)
Отличие лишь в том что при таком обращении код помещается не в буфер а в заголовок окна миска, где он успешно отлавливается и выполняется, затем заголовок возвращается в исходное состояние:(misc_uopilot).
Код
set linedelay 0
set #handleWin findwindow (Misc_uopilot) //Получение хендла окна миска
set #result setwindowtext (#handleWin, misc e_stp0='draw_rect_screen(1100,0,1150,20)') //Установка кода в качестве заголовка, через несколько мс вернется обратно
//Обратная связь
set $x 100
set #result setwindowtext (#handleWin, misc clipboard_set_text(string(random($x)))// Ответ будет в буфере
set #result setwindowtext (#handleWin, misc room_caption=string(random($x))//Ответ будет в заголовке
wait 2
set $x2 GetWindowtext (#handleWin) //Получаем ответ из заголовка, можно не успеть забрать или опоздать, до изменения заголовка обратно
wait 20
get clipboard $x //Получаем ответ из буфера, намного надежнее
msg $x $x2
end_script


Графика на экране:
Есть функции рисования которых нет в документации (потому что они из дллки), полезны тем что в отличие от стандартных позволяют рисовать вне окна то есть в любом месте экрана: (линии, текст, прямоугольники)
Код
set linedelay 20
set clipboard misc set_pen(1,c_red) //Установка ширины линии и цвета(ширина, цвет).
set clipboard misc set_brush(c_lime) //Установка цвета прямоугольника(цвет).
set clipboard misc e_slow100='draw_rect_screen(1100,0,1150,20)' //Функция рисования прямоугольников на экране(лево, право, верх, низ).
set clipboard misc e_drw0='draw_rect_screen(1155,0,1175,20)'
set clipboard misc e_slow10='draw_line_screen(10,10,300,10)' //Функция рисования линий на экране(x1, y1, x2, y2).
set clipboard misc e_stp0='draw_text_screen(1000,1,"Misc Uopilot",c_aqua)'//Функция рисования текста на экране(x, y, текст, цвет).
//еще есть рисование текстуры но по крайней мере у меня оно начинает глючить через несколько минут
//set clipboard misc pic = load_bitmap("1test.bmp") //Загрузка текстуры.
//set clipboard misc e_stp1='draw_bitmap_screen(pic,400,0)'//Функция рисования текстуры на экране(x, y, текст, цвет).
end_script


Пример обратной связи:
Код
set $x 100
set clipboard misc clipboard_set_text(string(random($x)))
wait 20
get clipboard $x
set clipboard ""
msg $x
end_script


Скачать Misc Uopilot и документацию:
Misc_uopilot.7z:
http://zalil.ru/33626056
Game_Maker8_Документация_ru_en.7z:
http://zalil.ru/33622973


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


***********

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



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


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


********

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



Цитата
Добавить бы в пилоте обработчик ошибок, чтоб пилот не вылетал с алертами при ошибках чтения/записи буфера и в/из файла.
Буфер поправлен, а про какие операции с файлами и какие именно ошибки идет речь?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Zeleax
сообщение 3.8.2012, 9:13
Сообщение #19


*********

ex-Moderator UOPilot
Сообщений: 2.440
Регистрация: 8.10.2010
Группа: Пользователи
Наличность: 0
Из: Киев
Пользователь №: 13.093



Да это я для обощения ситуации написал. Траблов вроде не было


--------------------
Полезные советы - читать всем! UOWiki
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
asdvo1ty
сообщение 4.9.2012, 12:38
Сообщение #20


***

Novice
Сообщений: 68
Регистрация: 11.11.2011
Группа: Пользователи
Наличность: 0
Пользователь №: 14.240
Возраст: 18



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

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

 

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