PDA

Просмотр полной версии : [Мануал] Про filterscripts



Bib
10.12.2017, 08:36
Создание

Написание фильтрскриптов практически ничем не отличается от написания модов. Стоит лишь заменить паблики OnGameModeInit, OnGameModeExit на OnFilterScriptInit и OnFilterScriptExit соответственно.


https://image.prntscr.com/image/wCWtFqPiTjqWZALfv24VLA.png

Скомпилированные фильтрскрипты должны находится в папке filterscripts. А чтобы они выполнялись, в параметре filterscripts конфига сервера нужно указать их. Выполняться может не более 16 фильтрскриптов.


Применение

Фильтрскрипты используются для создания отдельных от мода систем. Они могут быть полностью независимыми от него(напр. маппинг) или частично зависимы(напр. работа).
Если первый случай, думаю, понятен. То второй лучше разобрать, на примере работы. Если игрок завершает работу, то он получает свою зарплату. А так как информация об игроке находится в моде, придётся обращаться к нему. Делается это при помощи нативной функции CallRemoteFunction, которая вызывает паблик в любом загруженном скрипте:


// фильтрскрипт
new pickup_zp;
new money_zp = 10_000;
public OnFilterScriptInit()
{
pickup_zp = CreatePickup(1274, 2, 0.0, 0.0, 9.0);
return 1;
}
public OnPlayerPickUpPickup(playerid, pickupid)
{
if(pickupid == pickup_zp)
{
CallRemoteFunction("AddPlayerMoney", "ii", playerid, money_zp);
}
return 1;
}

// мод
new player_money[MAX_PLAYERS];

forward AddPlayerMoney(playerid, money);
public AddPlayerMoney(playerid, money)
{
playey_money[playerid]+=money;
SetPlayerMoney(playerid, player_money[playerid]);
}



Порядок вызова

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

https://image.prntscr.com/image/jYkPdgzHRFSLVvjaUAaKhw.png
*Можно прервать дальнейший вызов колбека в следующих фильтрскриптах возвратив 0 или 1.

https://image.prntscr.com/image/juOjn4fdQCGOe81yEKcpZg.png
*(см. samp-wiki (http://wiki.sa-mp.com/), т.к. у каждого колбека это будет по разному)



Критика

Не рекомендуется использовать фильтрскрипты, поскольку велика вероятность того, что колбек не сработает должным образом из-за неверного возвращаемого значения.
Вместо них лучше писать инклуды и в них перехватывать вызов функций (http://pro-pawn.ru/showthread.php?10447).

Alexey Melnik
10.12.2017, 10:01
Не упомянута одна их важная особенность — они, в отличие от инклюдов, могут подгружаться и выгружаться прямо во время работы сервера

Bib
10.12.2017, 11:06
Да, я много чего не написал здесь. Мануал изначально должен был называться: "Все про filterscripts". Но когда я узнал о фреймворке SampSharp, то тут же забил на Pawn:pardon:.
Фильтрскрипты так-то очень нужны. Даже сейчас, когда пишу на C#, всё равно использую их для того чтобы пользоваться готовыми решениями написанными на Pawn

DeimoS
10.12.2017, 13:01
На порядке вызова и конкретно возвраты следовало сделать больший упор. И не в плане "критики", а объяснив какой логики нужно придерживаться при написании FS