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

    Статус
    Оффлайн
    Регистрация
    22.12.2015
    Сообщений
    157
    Репутация:
    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,487
    Репутация:
    276 ±
    Где то была подобная темка.
    В #1 посте strlen будет вызываться от 0 до n'ое, то есть при каждой итерации цикла.
    Value your freedom or you will lose it, teaches history. "Don't bother us with politics," respond those who don't want to learn. (c) Richard Stallman

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

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

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

    Статус
    Оффлайн
    Регистрация
    22.12.2015
    Сообщений
    157
    Репутация:
    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
    Сообщений
    217
    Репутация:
    39 ±
    fwriterus реализовывал через макрос MX_Master.

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

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

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

    Статус
    Оффлайн
    Регистрация
    09.09.2015
    Сообщений
    541
    Репутация:
    78 ±
     Действие у определенного объекта
    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
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Лучше бы добавляли новые функции прямо в шапку темы и как-то их сортировали для удобства поиска нужных
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

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

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

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

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

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

    Steve Pavlina

 

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

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

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

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

Ваши права

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