Доступ к архиву

Переход в группу "Пользователь"

300.00
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

[Урок] Clickable textdraws(0.3e R4)

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

Den_Wilson

Изучающий
Пользователь
Регистрация
31 Дек 2010
Сообщения
174
Лучшие ответы
0
Репутация
138
Только краткая инструкция о том, как взаимодействовать с textdraws. Вопросы можете в разделе комментариев.

Примечание: Это руководство предполагает, что вы уже знаете, как создать textdraws Начало возможность нажать textdraws вводится в 0.3e RC4. Это означает, что вам нужно SA-MP 0.3e RC4 или выше, чтобы получить эту работу (клиент и сервер). В этом уроке мы будем воссоздать это простое меню телепорта я сделал с :


Я не собираюсь рассказывать вам, как создать эти textdraws, это зависит от вас. Начнем с инициализации нашей textdraws и их установки. Это всего лишь вставить копию от редактора TextDraw.


PHP:
#include <a_samp>
new Text:teleportBox;
new Text:teleportLS;
new Text:teleportSF;
new Text:teleportLV;
public OnFilterScriptInit()
{
    print("\n--------------------------------------");
    print(" Textdraw teleporting - tut for showing\n  how textdraw selecting works");
    print("--------------------------------------\n");
    
    teleportBox = TextDrawCreate(320.000000, 143.000000, "~n~Teleport menu~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~~n~_");
    TextDrawAlignment(teleportBox, 2);
    TextDrawBackgroundColor(teleportBox, 255);
    TextDrawFont(teleportBox, 2);
    TextDrawLetterSize(teleportBox, 0.500000, 1.000000);
    TextDrawColor(teleportBox, -1);
    TextDrawSetOutline(teleportBox, 0);
    TextDrawSetProportional(teleportBox, 1);
    TextDrawSetShadow(teleportBox, 1);
    TextDrawUseBox(teleportBox, 1);
    TextDrawBoxColor(teleportBox, 255);
    TextDrawTextSize(teleportBox, 45.000000, 115.000000);

    teleportLS = TextDrawCreate(320.000000, 180.000000, "Los Santos~n~Airport");
    TextDrawAlignment(teleportLS, 2);
    TextDrawBackgroundColor(teleportLS, 255);
    TextDrawFont(teleportLS, 2);
    TextDrawLetterSize(teleportLS, 0.260000, 0.799999);
    TextDrawColor(teleportLS, -1);
    TextDrawSetOutline(teleportLS, 0);
    TextDrawSetProportional(teleportLS, 1);
    TextDrawSetShadow(teleportLS, 1);

    teleportSF = TextDrawCreate(320.000000, 205.000000, "San Fierro~n~Airport");
    TextDrawAlignment(teleportSF, 2);
    TextDrawBackgroundColor(teleportSF, 255);
    TextDrawFont(teleportSF, 2);
    TextDrawLetterSize(teleportSF, 0.260000, 0.799999);
    TextDrawColor(teleportSF, -1);
    TextDrawSetOutline(teleportSF, 0);
    TextDrawSetProportional(teleportSF, 1);
    TextDrawSetShadow(teleportSF, 1);

    teleportLV = TextDrawCreate(320.000000, 230.000000, "Las Venturas~n~Airport");
    TextDrawAlignment(teleportLV, 2);
    TextDrawBackgroundColor(teleportLV, 255);
    TextDrawFont(teleportLV, 2);
    TextDrawLetterSize(teleportLV, 0.260000, 0.799999);
    TextDrawColor(teleportLV, -1);
    TextDrawSetOutline(teleportLV, 0);
    TextDrawSetProportional(teleportLV, 1);
    TextDrawSetShadow(teleportLV, 1);
    return 1;
}
Для того, чтобы сделать textdraws интерактивными, мы должны использовать TextDrawSetSelectAble. Этот код будет идти в нижней части OnGameModeInit:

PHP:
TextDrawSetSelectable ( teleportBox, false) ; 
TextDrawSetSelectable ( teleportLS, true) ; 
TextDrawSetSelectable ( teleportSF, true) ; 
TextDrawSetSelectable ( teleportLV, true) ;
Я использую FS для этого урока, так что мне нужно, убить textdraws когда я выключу скрипт.

PHP:
public OnFilterScriptExit()
{
    TextDrawDestroy(teleportBox);
    TextDrawDestroy(teleportLS);
    TextDrawDestroy(teleportSF);
    TextDrawDestroy(teleportLV);
    return 1;
}
Я использую команду, чтобы принести меню телепорта. Я использую STRCMP. В этой команде мы будем показывать textdraws игроку:

PHP:
public OnPlayerCommandText(playerid, cmdtext[])
{
    if (!strcmp("/teleport", cmdtext, true))
    {
        TextDrawShowForPlayer(playerid, teleportBox); // Показать окно
        TextDrawShowForPlayer(playerid, teleportLS);  // Показать LS вариант
        TextDrawShowForPlayer(playerid, teleportSF);  // Показать SF вариант
        TextDrawShowForPlayer(playerid, teleportLV);  // Показать LV вариант

        SelectTextDraw(playerid, 0xA3B4C5FF); // / / Разрешить игроку выбрать textdraws 
            / / второй параметр . цвет которой TextDraw оказывается при наведении мыши на него 
            / / Вы можете использовать COLOR_RED также, что это ваш выбор. 
        return 1;
    }
    return 0;
}
Я надеюсь, вы поняли. Игрок теперь может выбрать textdraws (Или по крайней мере, textdraws мы позволили ему выбрать использование TextDrawSetSelectable). После того как он выбрал и нажал на TextDraw мы должны выбрать его до щелчка. Я отправлю основной код:

PHP:
public OnPlayerClickTextDraw(playerid, Text:clickedid)
{
    if(clickedid == teleportLS) // если игрок нажал на teleportLS TextDraw, телепортировать для LS. 
    {
        SetPlayerPos(playerid, 1630.2030,-2328.9673,13.5469);
        SetPlayerFacingAngle(playerid, 0.9392);
    }
    else if(clickedid == teleportSF) // если игрок нажал на teleportLS TextDraw, телепортировать для SF. 
    {
        SetPlayerPos(playerid, -1424.6083, -290.9622, 14.1484);
        SetPlayerFacingAngle(playerid, 134.9570);
    }
    else if(clickedid == teleportLV) // если игрок нажал на teleportLS TextDraw, телепортировать для LV. 
    {
        SetPlayerPos(playerid, 1688.7990, 1447.7753, 10.7675);
        SetPlayerFacingAngle(playerid, 267.3902);
    }

                     // Скрыть textdraws после того, как игрок телепортироволся.
    TextDrawHideForPlayer(playerid, teleportBox);
    TextDrawHideForPlayer(playerid, teleportLS);
    TextDrawHideForPlayer(playerid, teleportSF);
    TextDrawHideForPlayer(playerid, teleportLV);

    CancelSelectTextDraw(playerid); // Все разработанные отлично, теперь остановить игрок сможет выбрать shizzle
    return 1;
}
"Готово", можно сказать. Однако, есть глюк при использовании CancelSelectTextDraw: Он призывает OnPlayerClickTextDraw. Этот код может привести к бесконечному циклу.

Я надеюсь, вы узнали что-то из этого учебника. Если у вас еще есть вопросы, пожалуйста, напишите их в этой теме.

Автор: взял урок из
Перевод: Den_Wilson, где то есть корявый перевод.

Он работает только на версии Samp 0.3e R4
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу