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

Тема: Лазаем по лестницам и стенам

  1. #1
    Проверенный Аватар для OKStyle
    Регистрация
    26.04.2010
    Адрес
    Россия, Оренбург
    Возраст
    35
    Сообщений
    6,398
    Репутация: 532

    Звание: - луч света в тёмном царстве

    Сообщение Лазаем по лестницам и стенам

    Суть системы: игрок может лазать по лестницам и стенам, по любым поверхностям и вообще везде, где вы захотите. Реализовано в виде связки анимций, телепорта и работы с текстдравами. Пока готовится к релизу мой ФС, решил накидать такое решение, чтобы потом не было вопросов типа: "как добавить ещё лестницы?", "как выставить угол?" и т.п. Конструктив системы был взят с моего решения Chinatown Wars Teleport.

    Для начала создадим необходимые переменные. У нас это связка текстдравов и координаты одной из поверхностей.

    new Text:BlackScreen[6], Float:LadderCoords[2][4] = {
    {-1844.9794, 581.0343, 35.1683, 237.8849}, // подножие поверхности
    {-1844.0436, 580.2306, 242.0142, 237.8849} // конечная точка
    };


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

    Создадим текстдравы, элементы которых мы обозначили выше. На всякий пожарный добавил пикап с инфой (здание находится в СФ - с чёрными стенами, возле Cluckin' Bell):
    CreatePickup(1239, 23, -1844.9794, 581.0343, 35.1683, -1);
    Create3DTextLabel("Встаньте на пикап\nи нажмите ~k~~SNEAK_ABOUT~", 0x008080FF, -1844.9794, 581.0343, 35.1683, 40.0, 0, 0);
    BlackScreen[0] = TextDrawCreate(642.0, 1.0, "~n~");
    TextDrawLetterSize(BlackScreen[0], 0.5, 49.5);
    TextDrawUseBox(BlackScreen[0], 1);
    TextDrawBoxColor(BlackScreen[0], 0x000000AA);
    TextDrawTextSize(BlackScreen[0], -2.0, 0.0);

    BlackScreen[1] = TextDrawCreate(642.0, 1.0, "~n~");
    TextDrawLetterSize(BlackScreen[1], 0.5, 49.5);
    TextDrawUseBox(BlackScreen[1], 1);
    TextDrawBoxColor(BlackScreen[1], 0x000000BB);
    TextDrawTextSize(BlackScreen[1], -2.0, 0.0);

    BlackScreen[2] = TextDrawCreate(642.0, 1.0, "~n~");
    TextDrawLetterSize(BlackScreen[2], 0.5, 49.5);
    TextDrawUseBox(BlackScreen[2], 1);
    TextDrawBoxColor(BlackScreen[2], 0x000000CC);
    TextDrawTextSize(BlackScreen[2], -2.0, 0.0);

    BlackScreen[3] = TextDrawCreate(642.0, 1.0, "~n~");
    TextDrawLetterSize(BlackScreen[3], 0.5, 49.5);
    TextDrawUseBox(BlackScreen[3], 1);
    TextDrawBoxColor(BlackScreen[3], 0x000000DD);
    TextDrawTextSize(BlackScreen[3], -2.0, 0.0);

    BlackScreen[4] = TextDrawCreate(642.0, 1.0, "~n~");
    TextDrawLetterSize(BlackScreen[4], 0.5, 49.5);
    TextDrawUseBox(BlackScreen[4], 1);
    TextDrawBoxColor(BlackScreen[4], 0x000000EE);
    TextDrawTextSize(BlackScreen[4], -2.0, 0.0);

    BlackScreen[5] = TextDrawCreate(642.0, 1.0, "~n~");
    TextDrawLetterSize(BlackScreen[5], 0.5, 49.5);
    TextDrawUseBox(BlackScreen[5], 1);
    TextDrawBoxColor(BlackScreen[5], 0x000000FF);
    TextDrawTextSize(BlackScreen[5], -2.0, 0.0);


    Кому нужно - напишите отдельный код выгрузки текстдравов, пикапа и 3д-текста.

    Теперь самое интересное. У меня начало движения начинается по нажатию клавиши (можете сделать и команду).
    if(newkeys & KEY_WALK) // если клавиша - идти пешком
    {
    for(new i = 0; i < sizeof(LadderCoords); i++) // пробегаемся по массиву с координатами
    {
    if(IsPlayerInRangeOfPoint(playerid, 1, LadderCoords[i][0], LadderCoords[i][1], LadderCoords[i][2])) // если находимся в радиусе ближайших координат
    {
    SetPlayerPos(playerid, LadderCoords[i][0], LadderCoords[i][1], LadderCoords[i][2]); // выравниваем позицию
    SetCameraBehindPlayer(playerid); // сбрасываем камеру
    SetPVarInt(playerid, "Iteration", 15); // выставляем задержку перед телепортом на конечные координаты
    SetTimerEx("Ladder", 100, 0, "i", playerid); // запускаем систему подъёма
    SetPVarInt(playerid, "LadderID", i); // указываем порядковый номер лестницы/поверхности
    break; // обрываем цикл, т.к. ближайшие координаты найдены и нужные нам действия уже выполняются
    }
    }
    }


    Ну и сами управляющие таймеры:
    forward Ladder(playerid);
    public Ladder(playerid)
    {
    new iter = GetPVarInt(playerid, "Iteration"), ladderid = GetPVarInt(playerid, "LadderID");
    if(iter > 0)
    {
    switch(iter)
    {
    case 12:
    {
    new Float:a;
    GetPlayerFacingAngle(playerid, a);
    if(a > LadderCoords[ladderid][3] - 181.0 && a < LadderCoords[ladderid][3] + 1.0) // если угол в правую сторону
    {
    SetPlayerFacingAngle(playerid, LadderCoords[ladderid][3] + 90.0); // выставляем нужный угол для адекватной анимации
    ApplyAnimation(playerid, "DOZER", "DOZER_Align_LHS", 3.5, 0, 1, 1, 1, 1000, 1);
    }
    else
    {
    SetPlayerFacingAngle(playerid, LadderCoords[ladderid][3] - 90.0);
    ApplyAnimation(playerid, "DOZER", "DOZER_Align_RHS", 3.5, 0, 1, 1, 1, 1000, 1);
    }
    SetTimerEx("NoAnim", 1000, 0, "i", playerid); // выставляем таймер сброса анимации, чтобы не было фриза по её окончанию
    }
    case 6: TextDrawShowForPlayer(playerid, BlackScreen[0]); // отсюда начинается затемнение экрана текстдравами
    case 5:
    {
    TextDrawHideForPlayer(playerid, BlackScreen[0]);
    TextDrawShowForPlayer(playerid, BlackScreen[1]);
    }
    case 4:
    {
    TextDrawHideForPlayer(playerid, BlackScreen[1]);
    TextDrawShowForPlayer(playerid, BlackScreen[2]);
    }
    case 3:
    {
    TextDrawHideForPlayer(playerid, BlackScreen[2]);
    TextDrawShowForPlayer(playerid, BlackScreen[3]);
    }
    case 2:
    {
    TextDrawHideForPlayer(playerid, BlackScreen[3]);
    TextDrawShowForPlayer(playerid, BlackScreen[4]);
    }
    case 1:
    {
    TextDrawHideForPlayer(playerid, BlackScreen[4]);
    TextDrawShowForPlayer(playerid, BlackScreen[5]);
    SetPlayerPos(playerid, LadderCoords[ladderid + 1][0], LadderCoords[ladderid + 1][1], LadderCoords[ladderid + 1][2]); // Выставляем игроку конечную позицию
    }
    }
    SetPVarInt(playerid, "Iteration", iter - 1); // понижаем итерацию (круг обхода таймера)
    SetTimerEx("Ladder", 100, 0, "i", playerid); // заново запускаем таймер
    }
    else if(iter == 0) // если итерации закончились
    {
    SetPlayerFacingAngle(playerid, LadderCoords[ladderid][3]); // выставляем нужный угол (обычно такой же, как и в начальной точке)
    TextDrawHideForPlayer(playerid, BlackScreen[5]); // прячем текстдрав
    ApplyAnimation(playerid, "PED", "CLIMB_Stand", 4.1, 0, 1, 1, 1, 1000, 1); // проигрываем конечную анимацию
    SetTimerEx("NoAnim", 500, 0, "i", playerid); // выставляем таймер очистки анимации
    DeletePVar(playerid, "LadderID"); // Удаляем ненужные PVar'ы
    DeletePVar(playerid, "Iteration");
    }
    return 1;
    }
    forward NoAnim(playerid);
    public NoAnim(playerid) return ClearAnimations(playerid);


    Вот и вся система. Аналогов, особенного такого уровня, не существует.

    P.S. Анимация может на сработать с первого раза, поэтому читаем топик: http://pawno.su/showthread.php?71264

    Автор: OKStyle

    Код:
    Applications
    Pawno Rus No 217 [28.06.2008] SA-MP 0.3e Rcon Edition Rus [16.09.2010] Win-server Autostarter [31.01.2011]
    
    Gamemodes
    Public Enemy LS/SF/LV [25.07.2010] TDM Style []
    
    Filterscripts
    Sex            [05.07.2008] Showgirls                 [24.05.2010] Equip                     [02.02.2011] Jellyfisher               [11.02.2012] Tank Lights System [14.03.2013]
    All Animations [13.07.2008] Colored Healthbar         [08.06.2010] Exclusive Clothes         [07.03.2011] Parking                   [12.02.2012] TextDraw Captcha   [22.03.2013]
                                Pay'n'Spray Colors Menu   [23.06.2010] 0.2.2 Class Selection     [07.03.2011] Serial ID Ban             [31.03.2012]
                                Wedding                   [28.06.2010] Other Chatname            [09.03.2011] Advanced Weapons          [02.04.2012]
                                Rusty Brown's Ring Donuts [29.06.2010] Top View                  [09.03.2011] Ingame Map Editor         [01.05.2012]
                                                                       Rainbow Tab               [10.03.2011] Colored Checkpoints       [10.05.2012]
                                                                       Textdraw Intro            [03.09.2011] Experience & Level System [22.07.2012]
                                                                       Kickstart Challange       [06.09.2011] Target Message System     [17.11.2012]
                                                                       Love Fist Concert         [09.10.2011]
                                                                       3D Info                   [12.10.2011]
                                                                       Vehicle Bonus Return      [13.10.2011]
                                                                       Rockstar Logos Collection [16.10.2011]
                                                                       Textures Ingame Editor    [16.10.2011]
                                                                       Map-Radar                 [17.10.2011]
    
    Maps
    Military Vehicle Interior  [06.04.2012]
    Barracks Soldiers Interior [07.04.2012]
    Barracks Officers Interior [08.04.2012]
    
    Include
    FD ASM - форматированный диалог на #emit [31.03.2013]
    






  2. #2
    Проверенный Аватар для SanStar
    Регистрация
    02.09.2011
    Адрес
    СПб
    Возраст
    28
    Сообщений
    517
    Репутация: 49

    Звание: на пути к лучшему

    Re: Лазаем по лестницам и стенам

    Охринеть! Круто, ставлю +, однозначно!
    Старик SA:MP.
    RP: Alex_James | DM: SanStar.
    [GM] InCity RolePlay

  3. #3
    Вежливые Люди Аватар для Roka_Kuroki
    Регистрация
    28.03.2011
    Адрес
    москва
    Возраст
    28
    Сообщений
    2,434
    Репутация: 185

    Звание: - весьма и весьма положительная личность

    Re: Лазаем по лестницам и стенам

    Не успел свой fs выкинуть :3

  4. #4
    Активный пользователь Аватар для thecool
    Регистрация
    07.02.2011
    Адрес
    Украина, Киев
    Сообщений
    1,097
    Репутация: 94

    Звание: скоро придёт к известности

    Re: Лазаем по лестницам и стенам

    Отличная идея, и хорошая реализация (плюс не могу дать, пишет Вы должны добавить отзыв кому-то ещё..... позже дам)
    Веб-сервис для владельцев серверов/игроков Мониторинг САМП серверов - MP-Serv.net

  5. #5
    Проверенный Аватар для Engineer:
    Регистрация
    20.09.2011
    Адрес
    Украина.
    Возраст
    31
    Сообщений
    1,319
    Репутация: 180

    Звание: - весьма и весьма положительная личность

    Re: Лазаем по лестницам и стенам

    Круто +6

    ________________ Сообщение добавлено в [11:06] ________ Предыдущее сообщение в [11:05] ________________

    Цитата Сообщение от Александо Посмотреть сообщение
    Круто +6
    блин не выходит
    Вы должны добавить отзыв кому-то ещё, прежде чем сможете снова добавить его OKStyle.

  6. #6
    Активный пользователь Аватар для Динар
    Регистрация
    14.05.2011
    Адрес
    Уфа
    Возраст
    32
    Сообщений
    1,146
    Репутация: 69

    Звание: скоро придёт к известности

    Re: Лазаем по лестницам и стенам

    Пусть в 0.3f замутят скин человека паука и будет с этим решением лазить по крышам и ходить по стенкам))))

  7. #7
    Активный пользователь Аватар для skelet
    Регистрация
    08.07.2010
    Адрес
    Россия/Абакан
    Сообщений
    376
    Репутация: 6

    Звание: пока не определено

    Re: Лазаем по лестницам и стенам

    Отлично. Я тебе на корабль залазить могу) + выдал.
    __________________________________________________ _____________
    Я в павно с 08.07.2010
    А научился мало :D

  8. #8
    Активный пользователь Аватар для Solo322
    Регистрация
    15.11.2011
    Адрес
    Крым
    Возраст
    31
    Сообщений
    165
    Репутация: 17

    Звание: на пути к лучшему

    Re: Лазаем по лестницам и стенам

    Отличная работа)

  9. #9
    кабанчик :3
    Регистрация
    20.01.2012
    Сообщений
    1,513
    Репутация: 231

    Звание: - весьма и весьма положительная личность

    Re: Лазаем по лестницам и стенам

    о_О , +++++++
    ...

  10. #10
    Ich liebe Deutschland Аватар для Фора
    Регистрация
    19.07.2010
    Сообщений
    3,615
    Репутация: 284

    Звание: как роза среди колючек

    Re: Лазаем по лестницам и стенам

    Круто, но еще бы видео

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

Ваши права

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