 |
|
 |
|
|
|
Последние Файлы GTA 4 |
Последние Файлы GTA-MP |
Реклама |
|
|
|
|
|
Функции,макросы,массивы
| |
| Fus1 | Дата: Пятница, 23.09.2011, 01:11 | Сообщение # 1 |
|
Группа:
Продвинутые
Сообщений: 2704
Награды: 121
Город: Melbourne Australia
Репутация: 3103
Замечания: 0%
Статус: 
| Прошу поднять и закрепить тему.
Многие ищут всякие функции для создания сервера и т.д, давайте без оффтопа и флуда, просто выклыдываем свои функции,макросы,массивы или из интернета и пишим для чего они предназначены, это намного облегчит поиск. Так-же в этой теме предлогаю чтобы любой мог написать функции которая ему нужна (если ещё её не выкладывали) это также позволит пополнять список функций.
Извлекаем левую часть строки в leftside Code stock bool: GetLeftString(const string[],const center[],leftside[],sizeof_leftside) { strmid(leftside,string,0,strfind(string,center,true),sizeof_leftside); return true; }
Извлекаем правую часть строки в rightside Code stock bool: GetRightString(const string[],const center[],rightside[],sizeof_rightside) { strmid(rightside,string,strfind(string,center,true)+1,strlen(string),sizeof_rightside); return true; }
Записывает в лог русскими буквами (кириллица) Code stock fwriteRUS(File:file,string[]) { for(new i ; i < strlen(string); i++) fputchar(file,string[i],false); return 1; }
Функция дописывает строку string в файл filename Code stock WriteLog(string[],filename[]) { new File:hFile; hFile = fopen(filename, io_append); fwriteRUS(hFile, string); fclose(hFile); return 1; } Quote Например: 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; }
Возвращает фамилию игрока Code stock LastName(string[]) { new start = strfind(string,"_",true), result[MAX_PLAYER_NAME]; strmid(result,string,start+1,strlen(string),MAX_PLAYER_NAME); return result; }
Возвращает скорость транспортного средства Code stock GetVehicleSpeed(carid) { new Float:Vx,Float:Vy,Float:Vz,Float:rtn; GetVehicleVelocity(carid,Vx,Vy,Vz); rtn = floatsqroot(Vx*Vx+Vy*Vy+Vz*Vz); return floatround(rtn * 100); }
Узнать наибольшее ИД автомобиля Code stock GetMaxVehicleID() { for(new i = 1; i < MAX_VEHICLES; i ++) { if(GetVehicleModel(i) < 400 || GetVehicleModel(i) > 611) return i-1; } return MAX_VEHICLES; }
Сообщение отредактировал Fus1 - Пятница, 23.09.2011, 01:11 |
| |
|
|
| psycho | Дата: Пятница, 09.12.2011, 19:23 | Сообщение # 16 |
|
16 | 13
Группа:
I'm V.I.P.
Сообщений: 327
Награды: 11
Репутация: 645
Замечания: 20%
Статус: 
| Code stock SetIntAndPlayerPos(playerid, int, Float:posx, Float:posy, Float:posz) { SetPlayerInterior(playerid, int); SetPlayerPos(playerid, posx, posy, posz); } Даёт игроку не только позицию,но ещё и инт сразу,удобно юзать.
|
| |
|
|
| toneysix | Дата: Воскресенье, 11.12.2011, 15:32 | Сообщение # 17 |
|
Джэдай
Группа:
I'm V.I.P.
Сообщений: 1731
Награды: 77
Город: Салават
Репутация: 1825
Замечания: 0%
Статус: 
| :: Предистория :: Когда-то в далеком прошлом я почувствовал острую нехватку функционала стандартных таймеров: нехватка идентификационного номера таймера в теле функции. Тогда ещё не было никаких 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: Code main() { timerInit:testCheck<1000>; // Создаем обычный таймер с интервалом 1000 миллисекунд. }
// Создаем вызов таймерной функции, в которой прописываем проверку на удаление таймера через 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 |
| |
|
|
| Молорище | Дата: Воскресенье, 11.12.2011, 23:52 | Сообщение # 18 |
|
Молор
Группа:
Продвинутые
Сообщений: 427
Награды: 11
Город: Санкт Петербург
Замечания: 0%
Статус: 
| Я не понял... Чем это лучше например SetTimerEx? По мне ничем...
Мне нечего делать.
|
| |
|
|
| toneysix | Дата: Понедельник, 12.12.2011, 00:05 | Сообщение # 19 |
|
Джэдай
Группа:
I'm V.I.P.
Сообщений: 1731
Награды: 77
Город: Салават
Репутация: 1825
Замечания: 0%
Статус: 
| 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 |
| |
|
|
| Великс | Дата: Среда, 21.12.2011, 22:26 | Сообщение # 20 |
|
Мастер джэдай
Группа:
Модераторы
Сообщений: 3931
Награды: 287
Город: Мухосранск
Репутация: 8429
Замечания: 0%
Статус: 
| #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 диалога, Заголовок, Текст, Кнопка.
[cut=freestyle] ПРИНЕСЛА СОРОКА В РОТЕ ПРИВОРОТ , СВЯЗАЛАСЬ НА ШЕЕ ЛОЗА И БЫЛ ПОЛНЫЙ ПИ**ЕЦ, ОСЕНЬ С ЗИМОЙ, ЛЕТО С ВЕСНОЙ, ГУСЬ С ЛИСОЙ, ЕБ**ИСЬ ВО ТЬМЕ НОЧНОЙ. УЗЕЛ ЗАВЯЗАЛСЯ, ПЕПЕЛ РАЗМЕТАЛСЯ И ЛИСА ЗАБЕРЕМЕНЕЛА. ВМЕСТЕ ВЕК ВЕКОВАТЬ, ПУТУ НЕ РАЗВЯЗАТЬ. ТРАВА ПЕРЕПЛЕТИСЬ, УЗЕЛ ЗАВОРОЖИСЬ. ЛЕНАРУ ДАЙ УМА И ЛЕНУ НА ВЕЛЕ НЕ ОТРАЗИСЬ,ЕБ*СЬ ЕБ*СЬ ЕБ*СЬ © Хасан [/cut]
|
| |
|
|
| psycho | Дата: Пятница, 30.12.2011, 15:08 | Сообщение # 21 |
|
16 | 13
Группа:
I'm V.I.P.
Сообщений: 327
Награды: 11
Репутация: 645
Замечания: 20%
Статус: 
| Макросы: Добавляет указанное значение к PVar'у. Code #define AddPVarInt(%0,%1,%2) SetPVarInt(%0, %1, GetPVarInt(%0, %1) + %2)
Пример использования: Code SetPVarInt(playerid,"Velix", 5); AddPVarInt(playerid,"Velix",5);
Сообщение отредактировал Princip - Суббота, 31.12.2011, 11:58 |
| |
|
|
| Великс | Дата: Пятница, 30.12.2011, 15:12 | Сообщение # 22 |
|
Мастер джэдай
Группа:
Модераторы
Сообщений: 3931
Награды: 287
Город: Мухосранск
Репутация: 8429
Замечания: 0%
Статус: 
| Code stock SetVehicleSpeed(vehicleid, Float:speed) { new Float:x1, Float:y1, Float:z1, Float:x2, Float:y2, Float:z2, Float:a; GetVehicleVelocity(vehicleid, x1, y1, z1); GetVehiclePos(vehicleid, x2, y2, z2); GetVehicleZAngle(vehicleid, a); a = 360 - a; x1 = (floatsin(a, degrees) * (speed/100) + floatcos(a, degrees) * 0 + x2) - x2; y1 = (floatcos(a, degrees) * (speed/100) + floatsin(a, degrees) * 0 + y2) - y2; SetVehicleVelocity(vehicleid, x1, y1, z1); } Устанавливает скорость транспорта.
[cut=freestyle] ПРИНЕСЛА СОРОКА В РОТЕ ПРИВОРОТ , СВЯЗАЛАСЬ НА ШЕЕ ЛОЗА И БЫЛ ПОЛНЫЙ ПИ**ЕЦ, ОСЕНЬ С ЗИМОЙ, ЛЕТО С ВЕСНОЙ, ГУСЬ С ЛИСОЙ, ЕБ**ИСЬ ВО ТЬМЕ НОЧНОЙ. УЗЕЛ ЗАВЯЗАЛСЯ, ПЕПЕЛ РАЗМЕТАЛСЯ И ЛИСА ЗАБЕРЕМЕНЕЛА. ВМЕСТЕ ВЕК ВЕКОВАТЬ, ПУТУ НЕ РАЗВЯЗАТЬ. ТРАВА ПЕРЕПЛЕТИСЬ, УЗЕЛ ЗАВОРОЖИСЬ. ЛЕНАРУ ДАЙ УМА И ЛЕНУ НА ВЕЛЕ НЕ ОТРАЗИСЬ,ЕБ*СЬ ЕБ*СЬ ЕБ*СЬ © Хасан [/cut]
|
| |
|
|
| DiSE | Дата: Вторник, 17.01.2012, 17:05 | Сообщение # 23 |
|
Группа:
I'm V.I.P.
Сообщений: 1759
Награды: 23
Город: Уфа
Репутация: 337
Замечания: 80%
Статус: 
| Code GivePlayerWeaponEx(...) { if (numargs() % 2 == 0) return 0; for (new i = 1; i < numargs(); i++) { if (getarg(i + 1) && getarg(i)) { GivePlayerWeapon(getarg(0), getarg(i), getarg(i + 1)); i++; } } return 1; }
хоть сколько оружия можно прописать. Типа GivePlayerWeaponEx(игрок,29,450,30,894,24,15)
Функцию оптимизировал Stepashka, разработал sk47
Сообщение отредактировал DiSE - Вторник, 17.01.2012, 21:00 |
| |
|
|
| Великс | Дата: Пятница, 27.01.2012, 23:23 | Сообщение # 24 |
|
Мастер джэдай
Группа:
Модераторы
Сообщений: 3931
Награды: 287
Город: Мухосранск
Репутация: 8429
Замечания: 0%
Статус: 
| Code stock intIns(iNum1, iNum2, iPos) { static iLength[2] ; iLength[0] = intLen(iNum1); iLength[1] = intLen(iNum2); if((0 <= (iLength[0] + iLength[1]) <= 9) && (0 <= (iLength[0] -= iPos) <= 9)) { iLength[0] = floatround(floatpower(10.0, iLength[0])); iLength[1] = floatround(floatpower(10.0, iLength[1])); return ((((iNum1 / iLength[0]) * iLength[1]) + iNum2) * iLength[0]) + (iNum1 % iLength[0]); } return 0; }
http://pastebin.com/z1GJ4CDb
Вставляет одно число, в другое, и выводит конечный результат.
iNum1 - Число 1. iNum2 - Число 2. iPos - Позиция для вставки.
Работает только на целых цислах.
Пример: Code printf("%d", intIns(1245, 3, 2)); // Выведет 12345 printf("%d", intIns(666666, 999, 3)); // Выведет 666999666
Автор: RyDeR`
[cut=freestyle] ПРИНЕСЛА СОРОКА В РОТЕ ПРИВОРОТ , СВЯЗАЛАСЬ НА ШЕЕ ЛОЗА И БЫЛ ПОЛНЫЙ ПИ**ЕЦ, ОСЕНЬ С ЗИМОЙ, ЛЕТО С ВЕСНОЙ, ГУСЬ С ЛИСОЙ, ЕБ**ИСЬ ВО ТЬМЕ НОЧНОЙ. УЗЕЛ ЗАВЯЗАЛСЯ, ПЕПЕЛ РАЗМЕТАЛСЯ И ЛИСА ЗАБЕРЕМЕНЕЛА. ВМЕСТЕ ВЕК ВЕКОВАТЬ, ПУТУ НЕ РАЗВЯЗАТЬ. ТРАВА ПЕРЕПЛЕТИСЬ, УЗЕЛ ЗАВОРОЖИСЬ. ЛЕНАРУ ДАЙ УМА И ЛЕНУ НА ВЕЛЕ НЕ ОТРАЗИСЬ,ЕБ*СЬ ЕБ*СЬ ЕБ*СЬ © Хасан [/cut]
|
| |
|
|
| Великс | Дата: Понедельник, 19.03.2012, 21:00 | Сообщение # 25 |
|
Мастер джэдай
Группа:
Модераторы
Сообщений: 3931
Награды: 287
Город: Мухосранск
Репутация: 8429
Замечания: 0%
Статус: 
| Code #define IsASemi(%0) ((%0) == 403 || (%0) == 514 || (%0) == 515 || (%0) == 443) #define IsATrailor(%0) ((%0) == 435 || (%0) == 450 || (%0) == 584 || (%0) == 591 || (%0) == 606 || (%0) == 607 || (%0) == 608 || (%0) == 610 || (%0) == 611) #define IsACopCar(%0) ((%0) == 523 || (%0) == 427 || (%0) == 490 || (%0) == 528 || (%0) == 596 || (%0) == 598 || (%0) == 597 || (%0) == 599 || (%0) == 601) #define IsAMotorBike(%0) ((%0) == 462 || (%0) == 448 || (%0) == 581 || (%0) == 522 || (%0) == 461 || (%0) == 521 || (%0) == 523 || (%0) == 463 || (%0) == 586 || (%0) == 468) #define IsABike(%0) ((%0) == 809 || (%0) == 481 || (%0) == 510) #define IsAPizzaBike(%0) ((%0) == 448) #de[code]fine IsAFireTruck(%0) ((%0) == 407 || (%0) == 544) #define IsATaxi(%0) ((%0) == 438 || (%0) == 420) #define IsABus(%0) ((%0) == 431 || (%0) == 437) #define IsAAmbulance(%0) ((%0) == 416) #define IsALimo(%0) ((%0) == 409) #define IsAPlane(%0) ((%0) == 460 || (%0) == 476 || (%0) == 511 || (%0) == 512 || (%0) == 513 || (%0) == 519 || (%0) == 520 || (%0) == 553 || (%0) == 577 || (%0) == 592 || (%0) == 593) #define IsAHeli(%0) ((%0) == 542 || (%0) == 425 || (%0) == 417 || (%0) == 487 || (%0) == 488 || (%0) == 497 || (%0) == 563 || (%0) == 447 || (%0) == 469) #define IsABoat(%0) ((%0) == 472 || (%0) == 473 || (%0) == 493 || (%0) == 595 || (%0) == 484 || (%0) == 430 || (%0) == 453 || (%0) == 452 || (%0) == 446 || (%0) == 454) #define IsATrashTruck(%0) ((%0) == 408) Нашел на оффе, куча проверок на модели авто. Надеюсь как использовать объяснять не надо?
[cut=freestyle] ПРИНЕСЛА СОРОКА В РОТЕ ПРИВОРОТ , СВЯЗАЛАСЬ НА ШЕЕ ЛОЗА И БЫЛ ПОЛНЫЙ ПИ**ЕЦ, ОСЕНЬ С ЗИМОЙ, ЛЕТО С ВЕСНОЙ, ГУСЬ С ЛИСОЙ, ЕБ**ИСЬ ВО ТЬМЕ НОЧНОЙ. УЗЕЛ ЗАВЯЗАЛСЯ, ПЕПЕЛ РАЗМЕТАЛСЯ И ЛИСА ЗАБЕРЕМЕНЕЛА. ВМЕСТЕ ВЕК ВЕКОВАТЬ, ПУТУ НЕ РАЗВЯЗАТЬ. ТРАВА ПЕРЕПЛЕТИСЬ, УЗЕЛ ЗАВОРОЖИСЬ. ЛЕНАРУ ДАЙ УМА И ЛЕНУ НА ВЕЛЕ НЕ ОТРАЗИСЬ,ЕБ*СЬ ЕБ*СЬ ЕБ*СЬ © Хасан [/cut]
|
| |
|
|
| Dima-kun | Дата: Вторник, 04.06.2013, 17:14 | Сообщение # 26 |
|
Группа:
Разработчики
Сообщений: 6269
Награды: 72
Репутация: 3512
Замечания: 0%
Статус: 
| Мой набор макросов для работы с PVar'ами. Установка: - скопировать файл в pawno/includes; - в начале скрипта: #include . Использование: Integer: Установить значение: si:pvarname[playerid](1234); Узнать значение: gi:pvarname[playerid] (Результат:1234) Float: Установить значение: psf:varname[playerid](1234.5678); Узнать значение: gf:pvarname[playerid] (Результат:1234.5678) String: Установить значение: ss:pvarname[playerid]("Some Text"); Узнать значение: gs:pvarname[playerid] (Результат:Some Text) Удалить PVar: delpvar:pvarname[playerid];
Мои работы: [INC] Сборник d_includes [LAST],[FS] New Demage Effect,[FS]Авто-Поворотники, [FS]mp3player,[FS] Fun Chat Game,[FS] Car Buy Syst,[FS] Anti-AirBrk,[INC] d_setpos, [GM] Game Move v0.1,[FS+include]Super-Armour [0.3z],[FS + Include] Multi Checkpoints
|
| |
|
|
| Vagrant | Дата: Понедельник, 09.12.2013, 12:07 | Сообщение # 27 |
|
Уважаемый человек
Группа:
I'm V.I.P.
Сообщений: 904
Награды: 21
Город: Находка
Репутация: 489
Замечания: 0%
Статус: 
| Пара моих функций. Аналог функции strtok. Но в 2 раза быстрее + seperator. strvag(const string[], &index, seperator=' ') - Возвращает значение строки до seperator (стандартно - ' ' (пробела)). Код stock strvag(const string[], &index, seperator=' ') { new res[20],i,k = string[index]; for(;k != seperator;index++,i++,k = string[index]) switch(k) { case '\0','\n','\r': break; default: res[i] = string[index]; } i = 0; index++; return res; } Аналогичная функция, но без возможности установить seperator (запись идёт до пробела). strvagns(res[], const string[], &index) - Записывает в res[] значение строки до пробела. Код stock strvagns(res[], const string[], &index) { new i,k = string[index]; for(;k != ' ' && k != '\0';k = string[++index],i++) res[i] = string[index]; res[i] = '\0'; i = 0; index++; } Скорость аналогична функции strvag. Аналог этой функции u_strtok, но эта функция немного быстрее. Цель создания этих 2-х функций, это сделать функции быстрее стандартных и уже всем привычных strtok и strcharsplit а так же u_strtok. Функций, быстрее этих, пока не видел.
Человек учась ходить падает, и только падая, он учится ходить! Мои работы: [GM] W.F.S.A. V. 1.0 - 100% [GM] San Fierro Enigmatic (TDM) V. 1.0 - 100% [FS] Clan House V. 1.0 - 100% [FS] Save Car Tun System V. 1.0 - 100% [FS] Vagrant Anti-CapsLock V. 2.1 - 100% [FS] Vagrant Anti-Advertise V. 1.1, V. 2.0 - 100% [APP] SA-MP Interior Viewer V. 1.0 - 100%
Принимаю заказы на помощь в скриптинге!
Сообщение отредактировал Vagrant - Понедельник, 09.12.2013, 12:10 |
| |
|
|
|
 |
|
 | |
| |
|