MoveObject и Create3DTextLabel в SA:MP

8 октября 2012
TheDuke


Учебник по MoveObject и Create3DTextLabel
Чтобы создать движение/лейбл, вам понадобится MC (в прошлом уроке про него писал). Двигать объекты можно не только по позиции Z, но и по позициям X и Y.
Начнём учебник с Create3DTextLabel – самое простое в Pawn (ну естественно после создания и вставки в мод объекта/карты).
Например, вот вам самый простой код:
Create3DTextLabel("Верхняя строка\\nНовая строка\\nЕщё одна",COLOR_RED,pX, pY, pZ, VD,Int);

В этот код входят:
Create3DTextLabel – команда создания 3Д Лейбла;
("…"…); – внутренняя функция. «;» - всегда нужна в каждом коде.
Описание внутренней функции:
«"» - в кавычках обычно находится текст, выводимый в игру. В данном случае 3D Лейбл будет иметь в себе текст: «Верхняя строка» «Новая строка» «Ещё одна»
Ну, соответственно текст «Верхняя строка» и прочие будут текстом, выводимым в игре.
Код «\\n» означает переход на следующую строку. В основном используется в диалоговых окнах.
COLOR_RED – цвет текста. Цвет так же можно настроить функцией {ColorID}. Например {FFFF00} – красный цвет. Цвета в коде выглядят примерно так:
{FFFF00}Верхняя строка\\n{FFF000}Новая строка

Чтобы компилировалось без ошибки цвета (неопределённый символ COLOR_RED), в начало мода, ко всем #define добавим:
#define COLOR_RED 0xFF0000AA

Цвета можно узнать вот здесь.
Следующее, это pX – позиция X, например pX=186.82 – наземное движение влево/вправо по отношению севера (N) игры.
pY – позиция Y, например pY=296.25 – наземное движение вперёд/назад по отношению к N игры
pZ – позиция Z, например pZ=12.78 – высота
VD – дистанция просмотра. Я ставлю обычно 50.0, и мне нормально видно текст.
Int – виртуальный мир. По умолчанию ставится «0»
Как обычно, пример:
Create3DTextLabel("{FFFFFF}ID Дома: {F2FF00}1\\n{FFFFFF}Владелец: {FF8000}Server\\n{FFFFFF}Энтерабельность: {0080FF}По команде",COLOR_RED,2442.4746, -1387.7323, 22.9918,50.0,0);

Этот текст появится где-то недалеко от базы Биг Смоука и автомойки в Лос-Сантосе над Гроув Стрит.


MoveObject
Движение объектов тоже довольно просто освоить. Я пока знаю 2 метода движения объектов, но буду использовать более простой метод – Открытие ворот по таймеру:
Ко всем «new» добавьте:
new obj;forward objclose();

В public OnGameModeInit() (иногда можно через FS делать, тогда там к public OnFilterScriptInit()) к объектам добавляем:
obj = CreateObject(968, 0, 0, 5, 0.00, 0.00, 0.00);

В public OnPlayerCommandText(playerid, cmdtext[]) добавляем команду:
{if (strcmp (cmdtext, "/ololo", true) == 0)        {        MoveObject (obj, 0, 0, 15, 3);        SetTimer ("objclose", 5000, 0);        return 1;        }

Дальше после движения создаём новый паблик:
public objclose(){    MoveObject (obj, 0, 0, 5, 3);}

Объясню:
new obj; - добавляем ко всем new – это функция добавления чего-либо нового, в данном случае новым будет являться объект (obj можете поменять на своё)
forward objclose(); - добавляем ко всем forward – это функция создания нового паблика (насколько я знаю) (objclose можете поменять на своё)
obj = CreateObject(968, 0, 0, 5, 0.00, 0.00, 0.00); - создание нового объекта (название зависит от того, какой текст записан в new)
if (strcmp (cmdtext, "/ololo", true) == 0) – команда, для ввода (ololo можно изменить текст на свой (например /open))
MoveObject (obj, 0, 0, 15, 3); - движение объекта (obj зависит от new). Последняя цифра в этом коде (3) означает скорость движения объекта.
SetTimer ("objclose", 5000, 0); - установка таймера (5000 = 5 секундам, измерение идёт в миллисекундах)
В MoveObject(obj, 0, 0, 15, 3); подразумевается, что вы уже умеете пользоваться координатами (но если кто-то не знает, то первый 0 – pX, второй 0 – pY, 15 (в закрытом варианте 5) – это pZ, а следующее – 3 - я писал выше, это скорость движения).
Также вы можете оставить перед таймером (SetTimer) строку, и написать что-то типа SendClientMessage:
SendClientMessage(playerid,COLOR_RED,"Текст");

Вместо слова «Текст» вы можете вставить что угодно, но я например вставлю «Вы подняли фиговину. Через 5 секунд она закроется». Получилось вот так:
SendClientMessage(playerid,COLOR_RED," Вы подняли шлагбаум. Через 5 секунд она закроется ");

Не следует забывать про таймер. Если вы не знаете, на какое количество времени поставили таймер, то можете вместо «5 секунд» написать «несколько секунд».
На этом мой небольшой урок закончен. Простите, что нет скриншотов, но думаю, тут они не нужны.
Удачи в создании движения объектов и 3Д текстовых лейблов.
By Duke Thealter (Егор) специально для LC
Рейтинг: 0 (0 голосов)
(признано в России экстремистской организацией)