SA-MP Forums Archive
Коллекция функций / макросов - 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)
+---- Thread: Коллекция функций / макросов (/showthread.php?tid=118026)

Pages: 1 2 3 4 5 6 7 8 9 10 11 12 13 14


Re: Коллекция функций / макросов - -Stranger- - 22.12.2012

Защита для колбэка "OnDialogResponse".

В самое его начала вставляем следующий код:
PHP код:
if(playerid == INVALID_PLAYER_ID || IsPlayerConnected(playerid) == 0) return 1;
if(
dialogid || dialogid 32767) return 1;
new 
itr = -1;
while(
inputtext[++itr])
{
    switch(
inputtext[itr])
    {
        case 
0x25inputtext[itr] = 0x23// Меняем '%' на '#'.
        
case 0x00 .. 0x1Finputtext[itr] = 0x3F// Меняем 'Управляющие символы' на '?'.
    
}

Так-же есть смысл, сразу после защиты, сделать такую строчку:
PHP код:
if(dialogid == *любой свободный ID*) return 1
И все диалоги, которые не нужно обрабатывать, ссылать на указанный ID.


Re: Коллекция функций / макросов - Barabashka - 22.12.2012

Защита от чего собственно?


Re: Коллекция функций / макросов - White_116 - 22.12.2012

по ид не актуально, значит то символов при дальнейшей обработки текста.


Re: Коллекция функций / макросов - Stepashka - 22.12.2012

pawn Код:
if(playerid == INVALID_PLAYER_ID || IsPlayerConnected(playerid) == 0) return 1;
вторая проверка исключает первую, если в IsPlayerConnected передать INVALID_PLAYER_ID она вернет 0.
pawn Код:
if(dialogid < 1 || dialogid > 32767) return 1;
вообще бред сивой кобылы, я могу устанавливать любой идишник диалога в диапазоне integer переменной, кроме 0.


Re: Коллекция функций / макросов - -Stranger- - 22.12.2012

Stepashka, Данная защита написана, используя официальную wiki: https://sampwiki.blast.hk/wiki/ShowPlayerDialog , а именно "An ID to assign this dialog to, so responses can be processed. Max dialogid is 32767. Using negative values will close any open dialog."...


Re: Коллекция функций / макросов - Makar93 - 11.01.2013

Quote:
Originally Posted by -Stranger-
Посмотреть сообщение
Stepashka, Данная защита написана, используя официальную wiki: https://sampwiki.blast.hk/wiki/ShowPlayerDialog , а именно "An ID to assign this dialog to, so responses can be processed. Max dialogid is 32767. Using negative values will close any open dialog."...
А не проще?
Код:
switch(dialogid)
{
case 1:
....
default: return 1;
}



Re: Коллекция функций / макросов - DrSlett - 14.01.2013

Quote:
Originally Posted by Makar93
Посмотреть сообщение
А не проще?
Код:
switch(dialogid)
{
case 1:
....
default: return 1;
}
Не имеет значения, эффект от использования будет тот же.


Re: Коллекция функций / макросов - AirKite - 14.01.2013

Quote:
Originally Posted by Stepashka
Посмотреть сообщение
pawn Код:
if(playerid == INVALID_PLAYER_ID || IsPlayerConnected(playerid) == 0) return 1;
вторая проверка исключает первую, если в IsPlayerConnected передать INVALID_PLAYER_ID она вернет 0.
pawn Код:
if(dialogid < 1 || dialogid > 32767) return 1;
вообще бред сивой кобылы, я могу устанавливать любой идишник диалога в диапазоне integer переменной, кроме 0.
И первая проверка и вторая бред. dialogid действительно ограничен максимальным значением "32767", но каков повод это число вообще проверять, если даже было бы возможно передать свыше данного значения. Ну и потом, аргумент playerid не регулируется самим игроком, это ид игрока, ид сессии, я уже где то об этом говорил.


Re: Коллекция функций / макросов - Richard_Gere - 02.03.2013

Вот еще функция для определния перевернуто ли авто
https://sampforum.blast.hk/showthread.php?tid=167669&langid=4


Re: Коллекция функций / макросов - XemyL - 02.03.2013

Спасибо.


Re: Коллекция функций / макросов - Richard_Gere - 02.03.2013

Ты мне помог, я тебе. В расчете


Re: Коллекция функций / макросов - Richard_Gere - 16.03.2013

Склонение существительных с числительными
pawn Code:
stock abs(value) return ((value < 0 ) ? (-value) : (value));
stock pluralForm(n, form1[], form2[], form5[], output[], size)
{
    n = abs(n) % 100;
    new n1 = n % 10;
    if (10 < n < 20) return format(output, size, form5);
    if (1 < n1 < 5) return format(output, size, form2);
    if (n1 == 1) return format(output, size, form1);
    return format(output, size, form5);
}

//Пример
new textpatr[10];
pluralForm(24, "патрон", "патрона", "патронов", textpatr, sizeof(textpatr)); // патрона
pluralForm(25, "патрон", "патрона", "патронов", textpatr, sizeof(textpatr)); // патронов
pluralForm(21, "патрон", "патрона", "патронов", textpatr, sizeof(textpatr)); // патрон
Источник: http://habrahabr.ru/post/37579/


Re: Коллекция функций / макросов - White_116 - 01.04.2013

Сидел скучал на паре. Может кому-то пригодится.
Переводим двухмерные координаты в одномерные. Основан на спиралевидном наращивании.

Его преимущество: "бесконечность", в то время, когда у змейки нужно задавать определённые границы.

Преобразование двухмерные координаты в одномерные. Вернёт число(позицию в спирали);
PHP Code:
stock GetSpiralPosFrom(x,y)
{
    new 
kz=1;
//=================    Находим виток
    
if(0)k=x; else k=-x;
    if(
0){if(k)k=y;} else if(< -kk=-y;
//=================    Находим позицию начала витка
    
for(new jkj++) z+=j*8;
//=================    Находим позицию в витке и прибавляем к начальной позиции.
    
if(== k)    return z+=(k*7)+x;
    if(
== -k)    return z+=(k*3)-x;
    if(
== -k)    return z+=(k*5)+y;
    return 
z+=k-y;

Преобразование одномерные координаты в двухмерные. Вернёт число(x,y);
PHP Code:
stock GetXYPosFrom(spiral, &x,&y)
{
    new 
kz=1;
//=================    Находим начало нового витка
    
for(; spiralk++) z+=k*8;
    if(!
k){x=0y=0; return 1;} else k--;
//=================    Находим позицию в витке
    
z-=(k*2); if(spiral >= z){y=k;    x=spiral-z-k;    return 1;}
    
z-=(k*2); if(spiral >= z){x=-k;    y=spiral-z-k;    return 1;}
    
z-=(k*2); if(spiral >= z){y=-k;    x=k-(spiral-z);    return 1;}
    
z-=(k*2); if(spiral >= z){x=k;    y=k-(spiral-z);    return 1;}
    return 
1;




Re: Коллекция функций / макросов - ZN-Freedom - 01.08.2013

Quote:

PS strfind никогда не имела никаких проблем, вас наи...обманули

А вы сами тестировали? Или получается, я сам себя нае... обманул, когда на windows strfind работала отлично, а на linux'е давала крэш?

Повторюсь для вас, "узко видящий", что strfind могла быть пофикшена.

Quote:

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

Quote:

В строку ты можешь указать хоть все анимации

Вы так наивно полагаете, что многие поймут это, и будут записывать анимации в одну строку?
Вы явно никогда не писали документацию.


Re: Коллекция функций / макросов - Stepashka - 01.08.2013

Quote:
Originally Posted by ZN-Freedom
Посмотреть сообщение
А вы сами тестировали? Или получается, я сам себя нае... обманул, когда на windows strfind работала отлично, а на linux'е давала крэш?
крепление рук проверте.
Quote:
Originally Posted by ZN-Freedom
Посмотреть сообщение
Повторюсь для вас, "узко видящий", что strfind могла быть пофикшена.
Может ещё раз прочтете: "strfind ни когда не имела ни каких проблем".
Quote:
Originally Posted by ZN-Freedom
Посмотреть сообщение
Вы так наивно полагаете, что многие поймут это, и будут записывать анимации в одну строку?
Вы явно никогда не писали документацию.
А вы явно не работали с бекендами сайтов, где перечислить через запятую, пробел или перенос строки проще чем передавать массив.
И поверьте людей куда проще заставить писать одну строку с кучей параметров разделенных чем-либо, чем научить создавать массивы.
А если человек не может понять что передавать в функцию из 5 строк - он явно ошибся деятельностью.


Re: Коллекция функций / макросов - ZN-Freedom - 01.08.2013

Quote:

крепление рук проверте.

Начнем с того, что я у вас не спрашивал совета, а задал четкий вопрос.
Вы в какой реальности находитесь?

Кривые руки дадут сбой на любых архитектурах, даже если имеются идентичные библиотеки.
А то, что на одной архитектуре работает, а на другой нет, - в первую очередь различие в архитектурах (Капитан Очевидность).
Вы еще скажите, что код сервера одинаков в бинарниках под windows и linux.

Ради интереса, можете выставить в strfind аргумент pos = -1 (не в вашей функции, естественно).
И сравнить ее работу на разных системах.

Quote:

А если человек не может понять что передавать в функцию из 5 строк - он явно ошибся деятельностью.

Я повторюсь - надо описание конкретное составлять.
Вы либо не писали документацию, либо вам не попадались кастомеры, которые предоставляли продукт с исходным кодом без нее же.

P.S.

Предлагаю перебраться в личку.
Тема хорошая, и нашими разговорами не хотелось бы ее засирать.


Re: Коллекция функций / макросов - OKStyle - 05.08.2013

pawn Код:
stock IsPlayerOnTheGround(playerid) // by horr0r
{
    new Float:vl[3];
    GetPlayerVelocity(playerid, vl[0], vl[1], vl[2]);
    return floatabs(vl[2]) > 0.0 ? 0 : 1;
}



Re: Коллекция функций / макросов - Stepashka - 05.08.2013

Quote:
Originally Posted by OKStyle
Посмотреть сообщение
pawn Код:
stock IsPlayerOnTheGround(playerid) // by horr0r
{
    new Float:vl[3];
    GetPlayerVelocity(playerid, vl[0], vl[1], vl[2]);
    return floatabs(vl[2]) > 0.0 ? 0 : 1;
}
Интересно, можно упростить:
pawn Код:
IsPlayerOnTheGround(playerid)
{
    new Float:vl;
    GetPlayerVelocity(playerid, _, _, vl);
    return !floatcmp(vl, 0.0);
}



Re: Коллекция функций / макросов - stabker - 06.08.2013

Quote:
Originally Posted by Stepashka
Посмотреть сообщение
Интересно, можно упростить:
pawn Код:
IsPlayerOnTheGround(playerid)
{
    new Float:vl;
    GetPlayerVelocity(playerid, _, _, vl);
    return !floatcmp(vl, 0.0);
}
error 034: argument does not have a default value (argument 2)


Re: Коллекция функций / макросов - Stepashka - 06.08.2013

Quote:
Originally Posted by stabker
Посмотреть сообщение
error 034: argument does not have a default value (argument 2)
Странно, вот:
pawn Код:
IsPlayerOnTheGround(playerid) {
    new Float:vl, Float:fv;
    GetPlayerVelocity(playerid, fv, fv, vl);
    return !floatcmp(vl, 0.0);
}