-
Про filterscripts
Создание
Написание фильтрскриптов практически ничем не отличается от написания модов. Стоит лишь заменить паблики OnGameModeInit, OnGameModeExit на OnFilterScriptInit и OnFilterScriptExit соответственно.
Скомпилированные фильтрскрипты должны находится в папке filterscripts. А чтобы они выполнялись, в параметре filterscripts конфига сервера нужно указать их. Выполняться может не более 16 фильтрскриптов.
Применение
Фильтрскрипты используются для создания отдельных от мода систем. Они могут быть полностью независимыми от него(напр. маппинг) или частично зависимы(напр. работа).
Если первый случай, думаю, понятен. То второй лучше разобрать, на примере работы. Если игрок завершает работу, то он получает свою зарплату. А так как информация об игроке находится в моде, придётся обращаться к нему. Делается это при помощи нативной функции CallRemoteFunction, которая вызывает паблик в любом загруженном скрипте:
PHP код:
// фильтрскрипт
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]);
}
Порядок вызова
- Фильтрскрипты вызываются в том порядке, который вы указывали в конфиге.
- *Изначально колбеки могут вызываться из мода или фильтрскриптов.
- *Можно прервать дальнейший вызов колбека в следующих фильтрскриптах возвратив 0 или 1.
*(см. samp-wiki, т.к. у каждого колбека это будет по разному)
Критика
Не рекомендуется использовать фильтрскрипты, поскольку велика вероятность того, что колбек не сработает должным образом из-за неверного возвращаемого значения.
Вместо них лучше писать инклуды и в них перехватывать вызов функций.
-
Не упомянута одна их важная особенность — они, в отличие от инклюдов, могут подгружаться и выгружаться прямо во время работы сервера
-
Да, я много чего не написал здесь. Мануал изначально должен был называться: "Все про filterscripts". Но когда я узнал о фреймворке SampSharp, то тут же забил на Pawn:pardon:.
Фильтрскрипты так-то очень нужны. Даже сейчас, когда пишу на C#, всё равно использую их для того чтобы пользоваться готовыми решениями написанными на Pawn
-
На порядке вызова и конкретно возвраты следовало сделать больший упор. И не в плане "критики", а объяснив какой логики нужно придерживаться при написании FS