SA-MP Forums Archive
[Plugin] System Control - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Русский/Russian (https://sampforum.blast.hk/forumdisplay.php?fid=32)
+----- Forum: Релизы/Releases (https://sampforum.blast.hk/forumdisplay.php?fid=66)
+----- Thread: [Plugin] System Control (/showthread.php?tid=322695)

Pages: 1 2


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 xy;
    
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

Можно попросить модераторов убрать
Quote:

(Только для Windows)

из заголовка =)


Re: System Control (Только для Windows) - OKStyle - 05.03.2012

Мне кажется, что из-за запуска exe-файлов, после публикации в основном разделе, автор получит бан.


Re: System Control (Только для Windows) - jhonyxakep - 05.03.2012

Quote:

Мне кажется, что из-за запуска exe-файлов, после публикации в основном разделе, автор получит бан.

Прогоните поиском по форуму слово WinExec:
Quote:
http://forum.sa-mp.com/showthread.ph...hlight=WinExec
Enjoy!

Мало того это не имеет отношения ни к хакам памяти, ни к другим каким-то вещам.


Re: System Control (Только для Windows) - OKStyle - 05.03.2012

Приходится надеяться на добросовестность скриптеров? Мне бесконечный цикл с запуском блокнота не хотелось бы получить, зайдя на сервер.

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


Re: System Control (Только для Windows) - Stepashka - 05.03.2012

Quote:
Originally Posted by OKStyle
View Post
Мне бесконечный цикл с запуском блокнота не хотелось бы получить, зайдя на сервер.
а причем здесь клиентская сторона, плагин серверный?!


Re: System Control - jhonyxakep - 05.03.2012

Quote:

а причем здесь клиентская сторона, плагин серверный?!

Я в английском разделе, что-бы не случалось таких курьезов, написал, что плагин серверный =).


Re: System Control - Stepashka - 05.03.2012

Quote:
Originally Posted by jhonyxakep
View Post
Я в английском разделе, что-бы не случалось таких курьезов, написал, что плагин серверный =).
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
View Post
Большое заблуждение. Хотя бОльшее кол-во находится в России.
Иностранцам лучше скайп давать, а лучше вообще ничего из мгновенного.
Quote:
Originally Posted by jhonyxakep
View Post
А где кошерно? hotmail? свой домен?
имя.фамилия@свой.домен - понтово и типа круто, на самом деле, гарантированная причина что все ваши письма будут попадать в спам, или автоматически, в 70% случаев, или получателями.
имя.фамилия@gmail.com - современно, функционально, объемно, за 5 баксов в год получаешь + 20Gb, гарантированно автоматические фильтры не зашлют вас в спам, много возможностей по настройке и гарантированная работы данного сервиса.