Доступ к готовым решениям

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

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

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

Мануал InfoBox как в сингле GTA:SA

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

Handnn

Дебютант
Здравствуйте, уважаемые пользователи.

Хочу вам представить систему информационных окошек с помощью, как в одиночной игре(InfoBox). Возможно вы уже видели что-то подобное, но моя система более облегчена и приближена к оригиналу.
ВНИМАНИЕ: Код использует нестандартные инклуды. (foreach)
И так начнём:

Добавляем ко всем new:
PHP:
new PlayerText:INFO_BOX[2];
new bool:ShowInfoBox[MAX_PLAYERS];
Добавляем ко всем forward:
PHP:
forward OnInfoBoxUpdate();
Добавляем в public OnGameModeInit:

PHP:
SetTimer("OnInfoBoxUpdate", 1000, true);
Добавляем в public OnPlayerConnect:

PHP:
CreateInfoBox(playerid, 450, 100);
ShowInfoBox[playerid] = false;
Создаём public OnInfoBoxUpdate:
PHP:
public OnInfoBoxUpdate()
{
    foreach(new i : Player)
    {
        if(ShowInfoBox[i])
        {
            if(GetPVarInt(i,"InfoBox") < gettime())
                {
                    PlayerTextDrawHide(i, INFO_BOX[1]);
                PlayerTextDrawHide(i, INFO_BOX[0]);
                ShowInfoBox[i] = false;
            }
        }
    }
}
Добавляем ко всем stock:
PHP:
stock CreateInfoBox(playerid, Float:posX, Float:posY)
{
    INFO_BOX[0] = CreatePlayerTextDraw(playerid, posX, posY, "usebox"); SetPlayerTextDrawSettings(playerid, INFO_BOX[0],0,6.5, 185+posX,0, 1, 0, 0,0,110, 0,0, false, true, false);
    INFO_BOX[1] = CreatePlayerTextDraw(playerid, posX, posY+0.5, "");  SetPlayerTextDrawSettings(playerid, INFO_BOX[1],0.42,2, 0,0, 1, 1, 0xB6B2B5FF,0,0, 0,0, false, false, true);
    return true;
}

stock DrawInfoBoxForPlayer(playerid, message[], time)
{
    new lines;
    for(new i = 0; i < strlen(message); i++)
    {
         switch(message[i])
         {
            case 'n': lines++;
        }
    }
    PlayerTextDrawLetterSize(playerid, INFO_BOX[0], 0, (lines+1) * 2.16);
    PlayerTextDrawSetString(playerid,  INFO_BOX[1], message);
    PlayerTextDrawShow(playerid, INFO_BOX[1]);
    PlayerTextDrawShow(playerid, INFO_BOX[0]);
    SetPVarInt(playerid,"InfoBox",gettime() + time);
    ShowInfoBox[playerid] = true;
    return true;
}

stock SetPlayerTextDrawSettings(playerid, PlayerText:TextDraw, Float:Lsize1, Float:Lsize2, Float:Tsize1, Float:Tsize2, Alignment, Font, Color1, Color2, Color3, Shadows, Outline, bool:Selectable, bool:UseBox, bool:Proportional)
{
    PlayerTextDrawLetterSize(playerid,         TextDraw, Lsize1, Lsize2);
    if(Tsize1 == 0 && Tsize2 == 0){}
    else PlayerTextDrawTextSize(playerid, TextDraw, Tsize1, Tsize2);
    PlayerTextDrawAlignment(playerid,        TextDraw, Alignment);
    PlayerTextDrawFont(playerid,            TextDraw, Font);
    PlayerTextDrawColor(playerid,            TextDraw, Color1);
    PlayerTextDrawBackgroundColor(playerid,    TextDraw, Color2);
    PlayerTextDrawBoxColor(playerid,        TextDraw, Color3);
    PlayerTextDrawSetShadow(playerid,        TextDraw, Shadows);
    PlayerTextDrawSetOutline(playerid,        TextDraw, Outline);
    PlayerTextDrawSetSelectable(playerid,    TextDraw, Selectable);
    PlayerTextDrawUseBox(playerid,            TextDraw, UseBox);
    PlayerTextDrawSetProportional(playerid,    TextDraw, Proportional);
    return true;
}
Пример вызова нашего InfoBox №1:
PHP:
DrawInfoBoxForPlayer(playerid, "ВПРАВО, ВНИЗ, ВЛЕВО,~n~ВВЕРХ и W,A,S,D - для~n~передвижения персонажа.", 5);////DrawInfoBoxForPlayer(playerid,"ваш текст",время в секундах);
Пример вызова нашего InfoBox №2(Более понятный):
PHP:
new str[64];

strcat(str, "ВПРАВО, ВНИЗ, ВЛЕВО,~n~");
strcat(str, "ВВЕРХ и W,A,S,D - для,~n~");
strcat(str, "передвижения персонажа.");

DrawInfoBoxForPlayer(playerid, str, 5);////DrawInfoBoxForPlayer(playerid,"ваш текст",время в секундах);
Доп. информация:

Максимальная длина строчки 22-23 символа. Для перехода текста на новую строчку использовать "~n~".
~r~ Красный
~g~ Зеленый
~b~ Синий
~w~ Белый
~y~ Желтый
~p~ Фиолетовый
~l~ Черный
~h~ Делает цвет текста ярче (использование несколько раз сделает текст белым, не работает с черным)

PHP:
DrawInfoBoxForPlayer(playerid, "текст~w~~y~~n~текст", 5);


Скрины:



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