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

попробуй
Reply
#42

не будет

"Подкиньте функцию нахождения высшего значения из массива / переменной.
у меня есть, но хотелось бы максимально оптимизированную"
stock max(num[]) {
new max=0;
for(new i=sizeof(num);i>-1;i--)
if (num[i] > max)
max=num[i];
}
оптимизированней не придумаешь
Reply
#43

фенкс, уряя )

ошибки там, с типом задания переменных.
Reply
#44

Quote:
Originally Posted by [JIeXa
]
не будет
Ну почему же. Здесь запустится бесконечный цикл, только когда n станет меньше либо равной нулю — никакого действия производится не будет, а просто запуск функции. Вроде бы так.
Reply
#45

нет... там стоит return, поэтому он хоть как завершится
и вообще, лучше не использовать эту фигню(рекурсию), чтоб проблем не было
Reply
#46

Quote:
Originally Posted by [JIeXa
]
нет... там стоит return, поэтому он хоть как завершится
и вообще, лучше не использовать эту фигню(рекурсию), чтоб проблем не было
А, ну да, он же убьет очередной проход до вызова след. прохода. Я протупил, пардон.
Reply
#47

Превращение строки с HEX в число HEX
pawn Код:
stock HexToInt(string[]) {
 if (string[0]==0) return 0;
 new i;
 new cur=1;
 new res=0;
 for (i=strlen(string);i>0;i--) {
  if (string[i-1]<58) res=res+cur*(string[i-1]-48); else res=res+cur*(string[i-1]-65+10);
  cur=cur*16;
 }
 return res;
}
Превращение RGB и альфа-канала в HEX
pawn Код:
stock RGBAToHex( red, green, blue, alpha )
return (red * 16777216) + (green * 65536) + (blue * 256) + alpha;
Reply
#48

pawn Код:
&#1055;оказывает ник убийцы / хп / броню /оружие с которого убил/ и расстояние
#include <a_samp>
#define FILTERSCRIPT
#define DIALOG_RULES 2
#pragma tabsize 0
forward Float:GetDistanceBetweenPlayers(p1,p2);
stock Float:GetDistanceBetweenPlayers(p1,p2)
{
new Float:x11,Float:y11,Float:z11,Float:x3,Float:y3,Float:z3;
if (!IsPlayerConnected(p1) || !IsPlayerConnected(p2))
{
return -1.00;
}
GetPlayerPos(p1,x11,y11,z11);
GetPlayerPos(p2,x3,y3,z3);
return floatsqroot(floatpower(floatabs(floatsub(x3,x11)),2)+floatpower(floatabs(floatsub(y3,y11)),2)+floatpower(floatabs(floatsub(z3,z11)),2));
}
public OnPlayerDeath(playerid, killerid, reason)
{
for(new i = 0; i < GetMaxPlayers(); i++)
{
if(IsPlayerConnected(i) && i != playerid)
{
new deathreason[20];
new PlayerNamea[30];
new string[256];
new Float:h;
new Float:a;
new n[30];
new msg[150];
GetPlayerHealth(killerid,h);
GetPlayerArmour(killerid,a);
GetPlayerName(killerid,n,30);
GetWeaponName(reason,deathreason, 20);
//if(killerid != INVALID_PLAYER_ID && reason != 255)
//{
//}
//else{
format(PlayerNamea,sizeof PlayerNamea," Инфо ",PlayerNamea);
msg="У вашего убийцы [%s] \nосталось [%d] XP \n и [%d] AR\n у бил вас с[%s]\n с расстояния [%d].";
format(string,sizeof string,msg,n,floatround(h),floatround(a),deathreason,floatround(GetDistanceBetweenPlayers(i,playerid)));
ShowPlayerDialog(playerid,DIALOG_RULES,0,PlayerNamea,string,"OK","ОТМЕНА");
//}
}
}
return 1;
}
Reply
#49

Зачем кнопки ОК, Отмена? Отменить убийство?) "нет, я не убивал его!!! верните все назаааад нееееееет"
Reply
#50

pawn Код:
stock Float:GetAngleToPoint(Float:x1, Float:y1, Float:x2, Float:y2)
{
    new
        Float:Angle;
       
    Angle = atan2(y2 - y1, x2 - x1) + 270;
    return Angle < 360 ? Angle : Angle - 360;
}

stock GetPlayerCameraLookAt(playerid, &Float:X, &Float:Y, &Float:Z)
{
    new
        Float:CamX, Float:CamY, Float:CamZ,
        Float:FrX, Float:FrY, Float:FrZ;

    GetPlayerCameraPos(playerid, CamX, CamY, CamZ);
    GetPlayerCameraFrontVector(playerid, FrX, FrY, FrZ);

    X = FrX + CamX;
    Y = FrY + CamY;
    Z = FrZ + CamZ;
}
Reply
#51

функция генирирования пароля (по умолчанию пароль 8ми значный)

Код:
#define MAX_PASWORD_LENGTH 30

stock GeneratePassword(passlength=8)
{
	new tmp[MAX_PASWORD_LENGTH];
	if(passlength <= MAX_PASWORD_LENGTH)
	{
		for(new i = 0; i < passlength; i++)
		{
	  	new mode = random(3);
	  	if(mode == 0) tmp[i] = random('z' - 'a') + 'a';
	  	else if(mode == 1) tmp[i] = toupper(random('z' - 'a') + 'a');
	  	else if(mode == 2) valstr(tmp[i],random(9));
		}
	}
	return tmp;
}
пример использования:

Код:
print(GeneratePassword());
print(GeneratePassword(10));
Reply
#52

Функция которой так всем не хватало =) наверно

Эта функция научит компьютер говорить "ПО РУССКИ"

Вы наверно часто сталкивались с проблемой када говорило "На сервере 21 игроков"

А эта функция вернет один из предложенных ей вариантов

Код
Код:
stock GetNeededWord(number,word1[],word2[],word3[]) // by Romanius
{
	new ostatok = number % 100;
	new out[50];
	
	if((ostatok > 10) && (ostatok < 20)) strcat(out,word3);
	else
	{
	  switch(ostatok % 10)
	  {
	    case 0: strcat(out,word3);
	    case 1: strcat(out,word1);
			case 2..4: strcat(out,word2);
			case 5..9: strcat(out,word3);
			default: strcat(out,word1);
	  }
	}
	return out;
}
Расмотрим ее использование

number - это число для которого нужно найти слово
word1[] - слово №1
word2[] - слово №2
word3[] - слово №3

Пример использования:
Код:
new conectedplayers = 0;

public OnPlayerConnect(playerid)
{
  conectedplayers++;
  format(str,sizeof(str),"На сервере %d %s",conectedplayers,GetNeededWord(conectedplayers,"игрок","игрока","игроков"));
  SendClientMessageToAll(0xFFFFFFAA,str);
}

public OnPlayerDisconnect(playerid)
{
  conectedplayers--;
  format(str,sizeof(str),"На сервере осталось %d %s",conectedplayers,GetNeededWord(conectedplayers,"игрок","игрока","игроков"));
  SendClientMessageToAll(0xFFFFFFAA,str);
}
Reply
#53

вахаха, "Игроков на сервере: %d" не устраивает? Ну ты эстэт ))
Reply
#54

а есть функция узнать цвет тачки?
Reply
#55

pawn Код:
stock GetNeededWordEx(number,word[])
{
    new ostatok = number % 100;
    new out[50];
     strcat(out,word);

    if((ostatok > 10) && (ostatok < 20)) strcat(out,"ов");
    else
    {
      switch(ostatok % 10)
      {
        case 0: strcat(out,"ов");
            case 2..4: strcat(out,"а");
            case 5..9: strcat(out,"ов");
      }
    }
    return out;
}
Как вариант можно еще так )))
Reply
#56

Quote:

одно я могу сказать, точно про обратный отсчет, его надо русскими буквами писать, но по-белорусски (: тры, дуа, адын, ПОНЕСЛАСЯ

Нет я использовал не для этого в одном месте показывало через сколько начнется такая - то гонка ну предположим через 1 час 23 минуты (время игровое )
Reply
#57

Запрет на нажимание кнопок, кроме входа в машину (т.е. это единственный обход, но и его можно заплатать):

pawn Код:
stock Freeze(playerid, value){
switch(value){
case 0:ApplyAnimation(playerid,"GYMNASIUM","Pedals_fast",4.1,0,1,1,1,value);
case 1:ApplyAnimation(playerid,"GYMNASIUM","Pedals_fast",4.1,0,1,1,1,value);}
return 1;}
В отличии от обычного фриза в игрока можно стрелять и ему будет наносится урон + мало читеров догадается как его снять

UPD by stels:
Quote:
Originally Posted by s3ap
единственный обход, но и его можно заплатать
Quote:
Originally Posted by stels
А именно - закрыть все машины для игрока
Reply
#58

Quote:

А именно - закрыть все машины для игрока Cheesy

Не прокатит ибо игрок всё равно побежит к машине пробуя её открыть

Quote:

public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
return 1;
}

Reply
#59

Прокатит. Т.к. он не побежит пробывать открывать. Пробует он только когда на пассажирское место.
И if(ispassenger){new Float:X, Float:Y, Float:Z; GetPlayerPos(playerid, X, Y, Z); SetPlayerPos(playerid, X, Y, Z); Freeze(playerid, true);}
Reply
#60

Quote:
Originally Posted by s3ap
Прокатит. Т.к. он не побежит пробывать открывать. Пробует он только когда на пассажирское место.
И if(ispassenger){new Float:X, Float:Y, Float:Z; GetPlayerPos(playerid, X, Y, Z); SetPlayerPos(playerid, X, Y, Z); Freeze(playerid, true);}
Код:
public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
  if(IsPlayerFreezed(playerid)){
   TogglePlayerControllable(playerid,0);
   TogglePlayerControllable(playerid,1);
  }
  return 1;
}
и все, ни куда не побежит.
Reply


Forum Jump:


Users browsing this thread: 6 Guest(s)