Многие ищут всякие функции для создания сервера и т.д, давайте без оффтопа и флуда, просто выклыдываем свои функции,макросы,массивы или из интернета и пишим для чего они предназначены, это намного облегчит поиск. Так-же в этой теме предлогаю чтобы любой мог написать функции которая ему нужна (если ещё её не выкладывали) это также позволит пополнять список функций.
Например: WriteLog("Тестируем лог\n","test.log"); В файл с именем "test.log" в скриптфайлах, допишется строка "Тестируем лог" Если этого файла нет - он автоматически будет создан
Действие '/me'
Code
stock MeAction(playerid,string[],Float:radius) { new p = GetMaxPlayers(); for(new i; i < p; i++) { if(IsPlayerNearPlayer(playerid,i,radius)) SendClientMessage(i,0xC2A2DAAA,string); } return 1; }
Возвращает имя игрока
Code
stock FirstName(string[]) { new end = strfind(string,"_",true), result[MAX_PLAYER_NAME]; strmid(result,string,0,end,MAX_PLAYER_NAME); return result; }
:: Предистория :: Когда-то в далеком прошлом я почувствовал острую нехватку функционала стандартных таймеров: нехватка идентификационного номера таймера в теле функции. Тогда ещё не было никаких Y_LESS'овских решений. Незадолго до этого я разработал собственное решение, которое решило и упростило задачу в управлении таймерами для меня. Этот мини-инклуд полностью работает на директивах препроцессора и двух созданных переменных в нем.
:: Функции :: timerFInit:funcname<interval>[types]({Float,_}:...); timerInit:funcname<interval>; timerDestroy:<timerid>; getWorkTimers(); getCountTimers();
:: Аргументы :: funcname - Название функции; interval - Интервал активации таймерной функции; types - Типы для аргументов таймерной функции: i\d Десятичное число. a Массив, где следующий параметр (тип, аргумент) должен указывать на размер массива. s Строка. f Вещественное число или число с точкой. b Булевое значение (false or true); timerid - Идентификационный номер таймера;
:: Ипользование :: Создание простых таймерных функций без аргументов осуществляется методом timerInit:
// Создаем вызов таймерной функции, в которой прописываем проверку на удаление таймера через 10 секунд. timer:testCheck( ) { static count; if( ++count == 10 ) timerDestroy:<this>; }
Также, можно присвоить, как и обычным образом какой-либо переменной айди созданного таймера:
Code
new ourTime = timerInit:testCheck<1000>; // Создаем обычный таймер с интервалом 1000 миллисекунд. timerDestroy:<ourTime>; // Уничтожаем таймер сразу после создания.
Теперь создадим таймер с передачей аргументов, с помощью метода timerFInit:
Code
main() { timerFInit:testCheck<1000>[df](10, 15.0); // Создаем таймер с интервалом 1000 миллисекунд, куда отправляем два аргумента (десятичное число и число с дробью). }
// Создаем вызов таймерной функции c аргументами, таймер которой будет уничтожаем, если аргумент value будет равен 10. timerF:testCheck( value, Float: floValue ) { if( value == 10 ) timerDestroy:<this>; }
Функция getWorkTimers() - возвращает текущее количество рабочих таймеров; Функция getCountTimers() - возвращает количество таймеров, которые были созданы за текущую работу сессии мода;
:: Примечание :: Для корректного использования данных методов вы должны полностью изменить все таймеры на методы данного инклуда, в противном случаи правильная работа не гарантируется. Также неизвестный исход с работой в фильтрскриптах, а также их влияния.
:: Скачать :: Скачать библиотеку упрощенных таймерных функций можно по ссылке - http://solidfiles.com/d/44e1fac553/ Для работы подключите инклуд с помощью директивы препроцессора #include: #include <timers.inc> UPD: Убраны повторы в таймерах. Для создания одиночного вызова используйте процедуру в конце функции тела таймера destroyTimer:<this>;
Русскоязычныи портал о MTA/GTA-IV-MP | http://multi-theft-auto.ru
Сообщение отредактировал toneysix - Воскресенье, 11.12.2011, 16:15
Fiskar чтобы понять суть таких вещей, требуется более активная и широкая работа в данной деятельности. Я все прекрасно расписал и привел примеры, даже написал предысторию, в которой четко и ясно написаны главные причины, поразившие на создание данного инклуда и упростившие мои задачи с работой таймеров в разы, главным преимуществом которой является возможность ликвидации таймера непосредственно в самой функции таймера, единым методом, без создания кучи идентификационных массивов с таймером на каждого игрока, который привязывается к нему, или к какому-то другому действию. P.S: Для сравнения ещё раз:
Code
new playerTimer[MAX_PLAYERS char]; playerTimer{playerid} = SetTimerEx("checkOnce", 1000, true, "dd", playerid, 10); forward checkOnce( const playerid, const value ); public checkOnce( const playerid, const value ) { if ( !IsPlayerConnected ( playerid ) || value == 10 ) // Проверка действительности выполнения тех или иных условий для существования таймера. { KillTimer(playerTimer{playerid}); playerTimer{playerid} = 0; return; } // Действие... }
Мой метод:
Code
timerFInit:checkOnce<1000>[dd](playerid, 10);
timerF:checkOnce( playerid, value ) { if ( !IsPlayerConnected ( playerid ) || value == 10 ) // Проверка действительности выполнения тех или иных условий для существования таймера. { timerDestroy:<this>; return; } // Действие... }
Русскоязычныи портал о MTA/GTA-IV-MP | http://multi-theft-auto.ru
Сообщение отредактировал toneysix - Понедельник, 12.12.2011, 00:15
#define AddScoreToPlayer(%0,%1) SetPlayerScore(%0,GetPlayerScore(%0)+%1) Прибавление игроку одного очка, синтаксис: ID игрока, сколько очков прибавить. #define ShowMessageDialog(%0,%1,%2,%3,%4) ShowPlayerDialog(%0,%1,0,%2,%3,%4,"") Вывод диалога с сообщением, синтаксис: ID игрока, ID диалога, Заголовок, Текст, Кнопка.
Пара моих функций. Аналог функции strtok. Но в 2 раза быстрее + seperator. strvag(const string[], &index, seperator=' ') - Возвращает значение строки до seperator (стандартно - ' ' (пробела)).
Аналогичная функция, но без возможности установить seperator (запись идёт до пробела). strvagns(res[], const string[], &index) - Записывает в res[] значение строки до пробела.
Скорость аналогична функции strvag. Аналог этой функции u_strtok, но эта функция немного быстрее. Цель создания этих 2-х функций, это сделать функции быстрее стандартных и уже всем привычных strtok и strcharsplit а так же u_strtok. Функций, быстрее этих, пока не видел.