System Control -
jhonyxakep - 03.03.2012
System Control Plugin
Версия 0.3
Автор: jhonyxakep (Андрей Недобыльский)
Mail:jhonyxakep@qip.ru
ICQ:354794596
Jabber:jhonyxakep@qip.ru
Описание:
Плагин использует библиотеку BASS (un4seen.com) для работы со звуковыми файлами.
В плагине собрано несколько очень полезных функций, отсутствующих в SA:MP.
Установка:
Windows:
Положите файлы из папки plugins в папку plugins на сервере.
В связи с особенностями сервера, файл bass.dll надо поместить в корневой каталог сервера (те там, где samp-server.exe), в системный каталог windows, или прописать пусть в переменных среды.
Linux:
Файл libbass.so надо положить в папки /lib/, /usr/lib/, /usr/local/lib/.
Пропишите плагин в секции plugins в конфиге SA:MP.
Для работы с функциями плагина подключите файл SystemControl.inc к вашему скрипту.
Quote:
0.3
исправлена проблема с функцией Sleep. На Linux работала в 10 раз меньше =)
Добавлены ListDirs, ListFiles и соответствующие коллбеки
Добавлены математические константы
|
Использование:
Функции:
ClearConsole(); - очищает консоль сервера. В Windows использует вызов CLS, в Linux - clear
system(file[]); - запускает внешнее приложение с ожиданием его завершения. Возвращает код завершения приложения. В Linux эквивалентно функции WinExec.
WinExec(file[],ShowParam); - запуск внешнего приложения без ожидания
В аргументе file указывается путь до приложения, которое надо запустить.
ShowParam принимает одну из констант:
PHP Code:
#define SW_HIDE 0
#define SW_SHOWNORMAL 1
#define SW_NORMAL 1
#define SW_SHOWMINIMIZED 2
#define SW_SHOWMAXIMIZED 3
#define SW_MAXIMIZE 3
#define SW_SHOWNOACTIVATE 4
#define SW_SHOW 5
#define SW_MINIMIZE 6
#define SW_SHOWMINNOACTIVE 7
#define SW_SHOWNA 8
#define SW_RESTORE 9
#define SW_SHOWDEFAULT 10
#define SW_FORCEMINIMIZE 11
#define SW_MAX 11
В Linux версии является оболочкой над функцией system, в этом случае аргумент ShowParam игнорируется
Подробнее о работе функции можно почитать на MSDN:
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
Sleep(milliseconds); - приостанавливает выполнение кода на указанное кол-во миллисекунд
Можно использовать в совокупности с плагинами мультипоточности.
В Linux использует usleep
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
GetCursorPos(&x,&y); - позволяет получить позицию курсора на экране (сервер)
GetCurPosX(); - получение позиции курсора по отдельности
GetCurPosY(); - получение позиции курсора по отдельности
Возвращают позицию курсора на сервере.
В Linux возвращают 0.
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
GetAudioURLFileLengthSec(URL[]); - возвращает длину аудио потока в секундах
GetAudioURLFileLengthBytes(URL[]); - возвращает длину аудио потока в байтах
Используют библиотеку BASS для работы. Позволяют получить длину аудио потока или файла с сервера.
Если поток не имеет длины функции возвращают -1, в противном случае GetAudioURLFileLengthSec возвращает длину в секундах, GetAudioURLFileLengthBytes - в байтах.
ListDirs(path[]); - листинг папок в указанной директории. Вызывает OnListDir при нахождении папки.
Пример:
PHP Code:
public OnFilterScriptInit()
{
ListDirs("."); //вывести список папок в текущей директории (папка сервера SA:MP)
return 1;
}
public OnListDir(dir[])
{
new string[35];
format(string,sizeof(string),"Найдена папка: %s",dir);
print(string);
return 1;
}
ListFiles(path[]); - листинг папок в указанной директории. Вызывает OnListFile при нахождении папки.
Пример:
PHP Code:
public OnFilterScriptInit()
{
ListFiles("."); //вывести список файлов в текущей директории (папка сервера SA:MP)
return 1;
}
public OnListFile(file[])
{
new string[35];
format(string,sizeof(string),"Найден файл: %s",dir);
print(string);
return 1;
}
Фильтр скрипт с примерами использования:
PHP Code:
/*
System Control Plugin
by jhonyxakep
Mail:jhonyxakep@qip.ru
ICQ:354794596
Jabber:jhonyxakep@qip.ru
*/
#include <a_samp>
#include "SystemControl"
public OnFilterScriptInit()
{
WinExec("notepad.exe",SW_NORMAL);//В Windows эта функция запустит блокнот, с показом окна в обычном режиме
//в Linux будет использован вызов функции system
//Функция system останавливает выполнение текущего процесса до завершения выполнения внешней программы
new string[35];
format(string,sizeof(string),"Stream Length: %d Seconds",GetAudioURLFileLengthSec("http://listen.radio-mixer.ru:8000/DNB")); //вернет -1
print(string);
format(string,sizeof(string),"Stream Length: %d Seconds", GetAudioURLFileLengthSec("http://upload.wikimedia.org/wikipedia/ru/4/4d/Omen.ogg")); //вернет 35 секунд
print(string);
return 1;
}
public OnPlayerText(playerid,text[])
{
return 1;
}
public OnPlayerUpdate(playerid)
{
ClearConsole(); //очистка консоли
new x, y;
GetCursorPos(x,y);//x,y содержит положение курсора на экране (пиксели), в Linux функция возвращает 0
new string[35];
format(string,sizeof(string),"X:%d Y:%d",x,y);
print(string);
return 1;
}
Колбеки:
public OnListDir(dir[]) - вызывается, при нахождении папки после вызова ListDirs
пример см. выше.
public OnListFile(file[]) - вызывается, при нахождении файла после вызова ListFiles
пример см. выше.
Константы:
Дополнительные математические константы:
PHP Code:
* M_E - e
* M_LOG2E - log2(e)
* M_LOG10E - log10(e)
* M_LN2 - ln(2)
* M_LN10 - ln(10)
* M_PI - pi
* M_PI_2 - pi/2
* M_PI_4 - pi/4
* M_1_PI - 1/pi
* M_2_PI - 2/pi
* M_2_SQRTPI - 2/sqrt(pi)
* M_SQRT2 - sqrt(2)
* M_SQRT1_2 - 1/sqrt(2)
Кто хочет увидеть больше системных, Windows, и других функций в этом плагине, пишите в комментариях, добавлю
Внутри архива присутствует исходной код, демонстрационный FilterScript, плагин для Windows и Linux и Include
Теперь плагин
кроссплатформенный
Закачка:
в прикреплении
Re: System Control (Только для Windows) -
GameMan - 03.03.2012
Типа для linux вообще никак? Или все таки можно?
Работа хорошая
Re: System Control (Только для Windows) -
azen - 03.03.2012
Хм, а все же под Линукс получится что-либо подобное сварганить?
Re: System Control (Только для Windows) -
jhonyxakep - 03.03.2012
Quote:
Типа для linux вообще никак? Или все таки можно?
|
Смотря какие функции. BASS можно, аналог Sleep тоже можно, позицию курсора надо думать, насчет WinExec конечно можно сделать для линукса с помощью другой функции fork, system, но работать оно уже не так будет. Да и обновления не кроссплатформеные получатся.
Quote:
Хм, а все же под Линукс получится что-либо подобное сварганить?
|
Уговорили =) Чуть позже, надо сначала разобраться с компиляцией плагинов под него.
Re: System Control (Только для Windows) -
Vinnyy - 03.03.2012
зачем делать чисто клиентские функции на сервере??
Re: System Control (Только для Windows) -
jhonyxakep - 03.03.2012
Quote:
автор.. ты м**ак...
зачем делать чисто клиентские функции на сервере??
|
Пфф... Потому что:
1. WinExec на клиенте запрещено делать этикой
2. Т.К. возникла необходимость именно в серверной реализации
3. Я не пишу клиентские плагины
Re: System Control (Только для Windows) -
Mutha_X - 03.03.2012
Не вижу здесь ничего чисто клиентского.
Плагин хорош, особенно в плане взятия размера аудио потока, пригодится для соседствующего релиза проигрывателя.
Такой вопрос: длина аудио потока вычисляется в отдельном потоке?
На счёт консоли: будет ли очистка от всего текста(или кусочно)?
Re: System Control (Только для Windows) -
xJester - 03.03.2012
Действительно стоящие:
PHP Code:
GetAudioURLFileLengthSec(URL[]); - возвращает длину аудио потока в секундах
GetAudioURLFileLengthBytes(URL[]); - возвращает длину аудио потока в байтах
Остальное Ctrl+A; Del; (:
Re: System Control (Только для Windows) -
jhonyxakep - 03.03.2012
Quote:
Такой вопрос: длина аудио потока вычисляется в отдельном потоке?
|
Увы нет. Насколько часто вы собираетесь определять длину потока? Вызов функции дает задержку примерно на 1 секунду.
Quote:
Остальное Ctrl+A; Del; (:
|
Не вам, так другим пригодится. Согласен, что положение курсора высчитывать на сервере - несколько глупо, но тоже можно найти свое применение. Например доступ к админке на сервере строго с определеным положением курсора, либо управление игровым сервером курсором. А так с вашим мнением можно весь WinAPI угробить =)
Quote:
На счёт консоли: будет ли очистка от всего текста(или кусочно)?
|
Сервер дублирует вывод текста в файл. Файл отчистить вряд ли получится, а вот отчистить само окно можно с помощью
PHP Code:
WinExec("CLS",SW_NORMAL);
Re: System Control (Только для Windows) -
jhonyxakep - 04.03.2012
Добавил для
linux
Quote:
На счёт консоли: будет ли очистка от всего текста(или кусочно)?
|
Добавил.
ЗЫ Как вы думаете, может стоит опубликовать енто дело в англиццком разделе?
Re: System Control (Только для Windows) -
Stepashka - 04.03.2012
Опубликуй.
Re: System Control (Только для Windows) -
jhonyxakep - 04.03.2012
Можно попросить модераторов убрать
из заголовка =)
Re: System Control (Только для Windows) -
OKStyle - 05.03.2012
Мне кажется, что из-за запуска exe-файлов, после публикации в основном разделе, автор получит бан.
Re: System Control (Только для Windows) -
jhonyxakep - 05.03.2012
Quote:
Мне кажется, что из-за запуска exe-файлов, после публикации в основном разделе, автор получит бан.
|
Прогоните поиском по форуму слово WinExec:
Enjoy!
Мало того это не имеет отношения ни к хакам памяти, ни к другим каким-то вещам.
Re: System Control (Только для Windows) -
OKStyle - 05.03.2012
Приходится надеяться на добросовестность скриптеров? Мне бесконечный цикл с запуском блокнота не хотелось бы получить, зайдя на сервер.
Куда полезнее сделать плагин, который серверно может проверить наличие и размер файла в директории с игрой.
Re: System Control (Только для Windows) -
Stepashka - 05.03.2012
Quote:
Originally Posted by OKStyle
Мне бесконечный цикл с запуском блокнота не хотелось бы получить, зайдя на сервер.
|
а причем здесь клиентская сторона, плагин серверный?!
Re: System Control -
jhonyxakep - 05.03.2012
Quote:
а причем здесь клиентская сторона, плагин серверный?!
|
Я в английском разделе, что-бы не случалось таких курьезов, написал, что плагин серверный =).
Re: System Control -
Stepashka - 05.03.2012
Quote:
Originally Posted by jhonyxakep
Я в английском разделе, что-бы не случалось таких курьезов, написал, что плагин серверный =).
|
ICQ мог не указывать, она популярна в основном только в России.
И почта на @qip.ru не кошерная
Re: System Control -
jhonyxakep - 05.03.2012
Quote:
ICQ мог не указывать, она популярна в основном только в России.
|
Большое заблуждение. Хотя бОльшее кол-во находится в России.
Quote:
И почта на @qip.ru не кошерная
|
А где кошерно? hotmail? свой домен?
Re: System Control -
Stepashka - 05.03.2012
Quote:
Originally Posted by jhonyxakep
Большое заблуждение. Хотя бОльшее кол-во находится в России.
|
Иностранцам лучше скайп давать, а лучше вообще ничего из мгновенного.
Quote:
Originally Posted by jhonyxakep
А где кошерно? hotmail? свой домен?
|
имя.фамилия@свой.домен - понтово и типа круто, на самом деле, гарантированная причина что все ваши письма будут попадать в спам, или автоматически, в 70% случаев, или получателями.
имя.фамилия@gmail.com - современно, функционально, объемно, за 5 баксов в год получаешь + 20Gb, гарантированно автоматические фильтры не зашлют вас в спам, много возможностей по настройке и гарантированная работы данного сервиса.