Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 15
  1. #1
    Аватар для Иван Бубнов
    Пользователь

    Статус
    Оффлайн
    Регистрация
    22.12.2015
    Сообщений
    159
    Репутация:
    8 ±

    Полезные функции/макросы

    Здесь будут выложены множества полезных функций/макросов.

    Список таких работ:
     FlipVehicle(vehicleid)

    PHP код:
    #define FlipVehicle(%0) new Float:A; GetVehicleZAngle(%0, A); SetVehicleZAngle(%0, A); 
    Переворачивает машину обратно на колеса (изменение угла поворота транспорта ставит транспорт на колеса).

    Пример использования:
    PHP код:
    CMD:flip(playeridparams[])
    {
        if(
    GetPlayerState(playerid) == 2)
           
    FlipVehicle(GetPlayerVehicleID(playerid));
        return 
    1;

     spawnFreezeTime(playerid)
    многие сталкивались с проблемой когда при спавне игрок проваливался сквозь пол, из за того что не прогрузились объекты. Можно сделать обычный фриз, но не всем игрокам с хорошим интернетом нравится ждать 2 -3 секунды когда все сразу прогружается.
    PHP код:
    #define spawnFreezeTime(%0); SetPVarInt(%0,"spawnFreezeTime", gettime()+(GetPlayerPing(%0) < 101) ? (1) : ((GetPlayerPing(%0) > 100 && GetPlayerPing(%0) < 201) ? (2) : (3))), TogglePlayerControllable(%0,false); 
    В секундный таймер:
    PHP код:
    if(GetPVarInt(playerid"spawnFreezeTime") >= gettime()) ClearAnimations(playerid), TogglePlayerControllable(playeridtrue), DeletePVar(playerid"spawnFreezeTime"); 
    Автор: Шуруп (LC)
     ParseReferences
    Узнаем никнейм игрока через символ @[ид игрока]
    PHP код:
    ParseReferences(const text[], output[], size sizeof(output))
    // by Daniel_Cortez \\pro-pawn.ru
        
    static size_m_1nickname_pos1nickname_pos2ref_idpos1pos2c;
        
    size_m_1 size 1;
        
    pos1 0pos2 strlen(output);
        for(;;)
        {
            if(
    text[pos1] == '@')
            {
                
    nickname_pos1 pos1nickname_pos2 pos2;
                
    ref_id 0;
                while(
    '0' <= (text[++pos1]) <= '9')
                    
    ref_id ref_id 10 + ('0');
                if ((
    pos1 == nickname_pos1+1) || (== IsPlayerConnected(ref_id)))
                    
    output[pos2++] = '@'pos1 nickname_pos1 1;
                else
                    
    pos2 += GetPlayerName(
                        
    ref_id,
                        
    output[nickname_pos2],
                        
    size nickname_pos2
                    
    );
            }
            else if((
    output[pos2++] = text[pos1++]) == '\0')
                break;
            if(
    pos2 == size_m_1)
            {
                
    output[pos2] = '\0';
                break;
            }
        }

    Пример использования:
    PHP код:
    public OnPlayerText(playeridtext[])
    {
        new 
    PlayerName[MAX_PLAYER_NAME];
        for(new 
    strfind(text"@"true), 0tmp[4]; != -1strfind(text"@"truei))
        {
            ++
    i0;
            while(
    48 <= text[i] <= 57 && != 4tmp[a++] = text[i++];
            if(
    tmp[0] == EOS) continue;
            
    GetPlayerName(strval(tmp), PlayerNamesizeof(PlayerName));
            
    strdel(text1i);
            
    strins(textPlayerName1128);
        }
        
    GetPlayerName(playeridPlayerNamesizeof(PlayerName));
        
    format(text128"%s: {FFFFF}%s"PlayerNametext);
        
    SendClientMessageToAll(GetPlayerColor(playerid), text);
        return 
    0;

     IsVehicleInRangeOfPoint(vehicleid)
    PHP код:
    #define IsVehicleInRangeOfPoint(%0,%1,%2,%3,%4) %1 >= GetVehicleDistanceFromPoint(%0,%2,%3,%4) ? true : false 
     IsPlayerInWater(playerid)
    PHP код:
    stock IsPlayerInWater(playerid)
    //Узнает в воде ли человек //by Sd
        
    new anim GetPlayerAnimationIndex(playerid);
        if (((
    anim >=  1538) && (anim <= 1542)) || (anim == 1544) || (anim == 1250)) return 1;
        return 
    0;

     SetVehicleSpeed(vehicleid, Float:speed)
    PHP код:
    stock SetVehicleSpeed(vehicleidFloat:speed)
    {
    //by HoRRoR
        
    new Float:cr[4];
        
    GetVehicleZAngle(vehicleidcr[0]);
        
    GetVehicleVelocity(vehicleidcr[1], cr[2], cr[3]); //чтобы сохранить Z велосити.
        
    SetVehicleVelocity(vehicleidfloatsin(-cr[0],degrees)*(speed/99), floatcos(-cr[0],degrees)*(speed/99), cr[3]);
        return 
    1;

     fwriterus
    PHP код:
    bool:fwriterus(File:wrstring[])
    {
    //by Владокс
        
    if(!wr) return false//если файл не открыт возвращаем ложь
        
    for(new istring[i]; i++)
        {
            
    fputchar(wrstring[i], false); //кладем в файл с выключенным utf8
        
    }
        return 
    1//успешно записали, возвращаем правду

     Функция для вычисления макс. пассажирских мест

    PHP код:
    stock GetMaxPassengers(vModel)
    {
    //by Владокс
        
    if(<= (vModel -= 400) <= 211)
        {
            static 
    seekBlock_vSeats[27] =
            {
                
    0x103311130x113111310x113313130x801333010x1381F1100x10311103,
                
    0x10001F100x111133110x131133110x311011000x300013010x11031311,
                
    0x111113310x100131110x011311000x111111100x111000310x11130221,
                
    0x331133110x111111010x331011330x101001F00x031331110xFF11113F,
                
    0x133301110xFF1311110x0000FF3F
            
    };

            return ((
    seekBlock_vSeats[vModel >>> 3] >>> ((vModel 7) << 2)) & 15);
        }
        return 
    15;


    Если ваш код содержит не более чем 20-и строк, то Welcome!

    Тема находится под властью правил форума и правил этого раздела!
    Последний раз редактировалось Иван Бубнов; 19.03.2016 в 20:36.

  2. #2
    Аватар для $continue$
    Заблокирован

    Статус
    Оффлайн
    Регистрация
    02.08.2014
    Адрес
    г. Киров (aka Вятка)
    Сообщений
    1,466
    Репутация:
    265 ±
    Где то была подобная темка.
    В #1 посте strlen будет вызываться от 0 до n'ое, то есть при каждой итерации цикла.

  3. #3
    Аватар для Иван Бубнов
    Пользователь

    Статус
    Оффлайн
    Регистрация
    22.12.2015
    Сообщений
    159
    Репутация:
    8 ±
    Не нашел.
    Последний раз редактировалось Иван Бубнов; 19.03.2016 в 20:21.

  4. #4
    Аватар для Иван Бубнов
    Пользователь

    Статус
    Оффлайн
    Регистрация
    22.12.2015
    Сообщений
    159
    Репутация:
    8 ±
     Очищаем кил-лист.

     Для всех.
    PHP код:
    #define ClearDeathMessages() for(new f; f<6;f++)SendDeathMessage(INVALID_PLAYER_ID, INVALID_PLAYER_ID, WEAPONSTATE_UNKNOWN) 

     Персонально
    PHP код:
    #define ClearDeathMessageToPlayer(%0) for(new f; f<6;f++)SendDeathMessageToPlayer(%0, INVALID_PLAYER_ID, INVALID_PLAYER_ID, WEAPONSTATE_UNKNOWN) 

     Возвращаем случайное число из заданных аргументов.

    Автор: sk47
    PHP код:
    stock randomEx(...)
    {
        new 
    result,rand random(numargs());
        for(new 
    ii<numargs(); i++)
        {
            if(
    == randresult getarg(i);
        }
        return 
    result;

    Пример использования:
    PHP код:
    main()
        
    printf("Результат: %i"randomEx(23610)); 
    Выведет в консоль одно из чисел 2, 3, 6, 10

     Получаем точку впереди другой точки основываясь на угле поворота и дистанции.

    PHP код:
    stock GetXYInFrontOfPoint(Float:xFloat:y, &Float:x2, &Float:y2Float:AFloat:distance)
    {
        
    x2 + (distance floatsin(-Adegrees));
        
    y2 + (distance floatcos(-Adegrees));

    Последний раз редактировалось Иван Бубнов; 19.03.2016 в 21:12.

  5. #5
    Аватар для TheMallard
    Пользователь

    Статус
    Оффлайн
    Регистрация
    08.12.2015
    Адрес
    San Fierro
    Сообщений
    214
    Репутация:
    38 ±
    fwriterus реализовывал через макрос MX_Master.

  6. #6
    Аватар для Иван Бубнов
    Пользователь

    Статус
    Оффлайн
    Регистрация
    22.12.2015
    Сообщений
    159
    Репутация:
    8 ±
    Цитата Сообщение от TheMallard Посмотреть сообщение
    fwriterus реализовывал через макрос MX_Master.
    Но Владокс указал что он и есть автор.

  7. #7
    Аватар для m1n1vv
    Пользователь

    Статус
    Оффлайн
    Регистрация
    09.09.2015
    Сообщений
    336
    Репутация:
    43 ±
     Действие у определенного объекта
    PHP код:
    stock GetClosestObj(playeridFloatdist)
    {
        new 
    Float:xFloat:yFloat:z;
        for(new 
    0MAX_OBJECTSi++)
        {
            if(
    GetObjectModel(i) == 0) continue;
            
    GetObjectPos(i,x,y,z);
            if(
    IsPlayerInRangeOfPoint(playerid,dist,x,y,z))
            return 
    i;
        }
        return -
    1;


     Действие у определенного транспорта
    PHP код:
    stock GetClosestCar(playeridFloatdist

        new 
    FloatxFloatyFloatz
        for(new 
    0MAX_VEHICLESi++)
        { 
            if(
    GetVehicleModel(i) == 0) continue;
            
    GetVehiclePos(ixyz); 
            if(
    IsPlayerInRangeOfPoint(playeriddistxyz)) 
            return 
    i;
        }
        return -
    1


     Для создания действия перед игроком
    PHP код:
    stock GetPlayerTurn(playerid, &Floatx, &Floaty, &FloatzFloatdistance ,turn)
    {
        new 
    FloatangleFloatdis;
        
    dis dis/distance;
        
    GetPlayerPos(playeridxyz),GetPlayerFacingAngle(playeridangle);
        
    += (dis floatsin(-angle+turndegrees)),+= (dis floatcos(-angle+turndegrees));
        return 
    1;


     Позиция игрока с его углом
    PHP код:
    stock SetPlayerPosAndAngle(playeridFloatxFloatyFloatzFloata)
    {
        
    SetPlayerPos(playeridxyz);
        
    SetPlayerFacingAngle(playerida);


  8. #8
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    4,353
    Репутация:
    1633 ±
    Лучше бы добавляли новые функции прямо в шапку темы и как-то их сортировали для удобства поиска нужных
    Связаться со мной можно в личных сообщениях этой группы

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  9. Пользователь сказал cпасибо:
    [ForD] (22.03.2016)
  10. #9
    Аватар для Иван Бубнов
    Пользователь

    Статус
    Оффлайн
    Регистрация
    22.12.2015
    Сообщений
    159
    Репутация:
    8 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Лучше бы добавляли новые функции прямо в шапку темы и как-то их сортировали для удобства поиска нужных
    Представь какой список будет допустим через год если я вообще буду через год здесь сидеть?

  11. #10
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    4,353
    Репутация:
    1633 ±
    Цитата Сообщение от Иван Бубнов Посмотреть сообщение
    Представь какой список будет допустим через год если я вообще буду через год здесь сидеть?
    Ну а представь сколько тут страниц получится через год и как удобно среди них будет искать нужную функцию... Для того тебе и даны спойлеры ведь. Можешь делать не одну-две вкладки, а больше, делая подгруппы в группах. Либо же попроси модератора почистить тему и закрыть, а сам для каждой группы создай отдельный пост и уже с отдельными постами работай. Но если твои сообщения с функциями будут на разных страницах, да ещё и вперемешку с обсуждениями, типа этого - тема вообще нечитабельна будет
    Связаться со мной можно в личных сообщениях этой группы

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

 

 
Страница 1 из 2 12 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •