Re: Коллекция функций / макросов -
-Stranger- - 22.12.2012
Защита для колбэка "
OnDialogResponse".
В самое его начала вставляем следующий код:
PHP код:
if(playerid == INVALID_PLAYER_ID || IsPlayerConnected(playerid) == 0) return 1;
if(dialogid < 1 || dialogid > 32767) return 1;
new itr = -1;
while(inputtext[++itr])
{
switch(inputtext[itr])
{
case 0x25: inputtext[itr] = 0x23; // Меняем '%' на '#'.
case 0x00 .. 0x1F: inputtext[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 k, z=1;
//================= Находим виток
if(x > 0)k=x; else k=-x;
if(y > 0){if(y > k)k=y;} else if(y < -k) k=-y;
//================= Находим позицию начала витка
for(new j; j < k; j++) z+=j*8;
//================= Находим позицию в витке и прибавляем к начальной позиции.
if(y == k) return z+=(k*7)+x;
if(y == -k) return z+=(k*3)-x;
if(x == -k) return z+=(k*5)+y;
return z+=k-y;
}
Преобразование одномерные координаты в двухмерные. Вернёт число(x,y);
PHP Code:
stock GetXYPosFrom(spiral, &x,&y)
{
new k, z=1;
//================= Находим начало нового витка
for(; z < spiral; k++) z+=k*8;
if(!k){x=0; y=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
Начнем с того, что я у вас не спрашивал совета, а задал четкий вопрос.
Вы в какой реальности находитесь?
Кривые руки дадут сбой на любых архитектурах, даже если имеются идентичные библиотеки.
А то, что на одной архитектуре работает, а на другой нет, - в первую очередь различие в архитектурах (Капитан Очевидность).
Вы еще скажите, что код сервера одинаков в бинарниках под 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);
}