Коллекция функций / макросов

Защита для колбэка "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.
Reply

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

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

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.
Reply

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."...
Reply

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;
}
Reply

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

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 не регулируется самим игроком, это ид игрока, ид сессии, я уже где то об этом говорил.
Reply

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

Спасибо.
Reply

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

Склонение существительных с числительными
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/
Reply

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

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

Преобразование двухмерные координаты в одномерные. Вернёт число(позицию в спирали);
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;

Reply

Quote:

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

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

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

Quote:

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

Quote:

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

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

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

Quote:

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

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

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

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

Quote:

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

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

P.S.

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

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;
}
Reply

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);
}
Reply

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)
Reply

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);
}
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)