Нужные функций для скриптинга

Статус
В этой теме нельзя размещать новые ответы.

kaZax

samp.work
Автор темы
Проверенный
150
23
Список функций которые необходимы для оптимизаций кода, да и самому удобно.
Возможно эти функций вы видели раннее где - то.
Просьба баянистов пройти мимо.
1. Функция Name(playerid);
Возвращает ник игрока.
Для того чтобы каждый раз не создавать переменную и использовать функцию GetPlayerName.
Сама функция:
PHP:
stock Name(playerid)
{
    new nick[MAX_PLAYER_NAME];
    GetPlayerName(playerid,nick,MAX_PLAYER_NAME);
    return nick;
}
Использование:
PHP:
public OnPlayerConnect(playerid)
{
    new str[128];
    format(str,sizeof(str),"Игрок %s подключился к серверу",Name(playerid));
    SendClientMessageToAll(0xFFFFFFFF, str);
    return 1;
}
2. Функция SetPlayerPosEx(playerid,Float:X,Float:Y,Float:Z,interior,virtualword);
Для того чтобы не использовать в одном месте:
PHP:
    SetPlayerPos(playerid,x,y,z);
    SetPlayerInterior(playerid,interior);
    SetPlayerVirtualWorld(playerid, vw);
Мы будем использовать только одну строчку:
PHP:
SetPlayerPosEx(playerid,x,y,z,interior,virtualword);
Сама функция:
PHP:
stock SetPlayerPosEx(playerid, Float:x ,Float:y,Float:z,interior = 0,vw = 0)
{
    SetPlayerPos(playerid,x,y,z);
    SetPlayerInterior(playerid,interior);
    SetPlayerVirtualWorld(playerid, vw);
}
3. Функция strravn(str1[],str2[]); Автор функций: ]EC[Ze[R]0
Мы всегда когда сравниваем 2 строк через функцию strcmp то всегда путаемся.
Этой функцией мы просто забудем об strcmp.
Если 1 строка равен 2 строке то возвращает 1. Если не равны то 0.
Сама функция:
PHP:
stock strravn(str1[],str2[])
{
    if(strlen(str1)!=strlen(str2))return 0;
    for(new i;i<strlen(str1);i++)
    {
        if(str1[i]!=str2[i]) return 0;
    }
    return 1;
}
Использование:
PHP:
new author[] = {"kaZax"};
new site[] = {"BlastHack.Net"};
if(strravn(author,site) == 0)print("Строка author и строка site не совпадают");
else print("Строка author и строка site совпадают");
4. Функция IsVehicleInRangeOfPoint(vehicleid, Float:radi, Float:x, Float:y, Float:z);
Наверно все знаю функцию IsPlayerInRangeOfPoint которая узнает находится ли игрок в определенном радиусе заданных координат.
Это функция узнается находится ли авто в определенном радиусе заданных координат.
Если авто находится там где задано то возвращает 1, если нет то 0.
Сама функция:
PHP:
stock IsVehicleInRangeOfPoint(vehicleid, Float:radi, Float:x, Float:y, Float:z)
{
    new Float:oldposx, Float:oldposy, Float:oldposz;
    new Float:tempposx, Float:tempposy, Float:tempposz;
    GetVehiclePos(vehicleid, oldposx, oldposy, oldposz);
    tempposx = (oldposx -x);
    tempposy = (oldposy -y);
    tempposz = (oldposz -z);
    if (((tempposx < radi) && (tempposx > -radi)) && ((tempposy < radi) && (tempposy > -radi)) && ((tempposz < radi) && (tempposz > -radi)))return 1;
    return 0;
}
Использование:
PHP:
if(IsVehicleInRangeOfPoint(GetPlayerVehicleID(playerid), 100.0, 2140.6333,-1165.3265,23.9922))print("Авто игрока находится возле авторынка.")

Тему написал специально для BH: kaZax
Если вы ищите функцию, то напишите это в этой теме.
 
  • Нравится
Реакции: Dimoz, itsLegend и kane

Kemper

Известный
7
0
Ужас, ужас..

Не самые лучшие варианты. Предлагаю альтернативные реализации:
Первая функция:
Код:
new name[MAX_PLAYERS][MAX_PLAYER_NAME];
 
#define Name(%0) name[%0]
 
public OnPlayerConnect(playerid) {
˜    GetPlayerName(playerid, name[playerid], MAX_PLAYER_NAME);
}

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

Вторая функция:
По ней нареканий нет.

Третья функция:
Реализуется без цикла, одним макросом.
Код:
#define strravn(%0,%1) (strcmp(%0,%1,0)==0)
Опять же, использование осталось прежним

Четвертая функция:
Тут задействуем нативную функцию GetVehicleDistanceFromPoint. И опять же, элементарно делаем через макрос
Код:
#define IsVehicleInRandeOfPoint(%0,%1,%2,%3,%4) (GetVehicleDistanceFromPoint(%0,%2,%3,%4)<%1)

Вот как бы и всё :)
 

kaZax

samp.work
Автор темы
Проверенный
150
23
PHP:
new name[MAX_PLAYERS][MAX_PLAYER_NAME];
 
#define Name(%0) name[%0]
 
public OnPlayerConnect(playerid) {
˜    GetPlayerName(playerid, name[playerid], MAX_PLAYER_NAME);
}
От этого больше нагрузки чем от возвращение строки.
С остальными согласен. Так будет лучше.
 
Статус
В этой теме нельзя размещать новые ответы.