Переміщення об'єктів та створення 3D текстових міток у SA:MP

Посібник по MoveObject та Create3DTextLabel
Щоб створити рух/лейбл, вам знадобиться MC (в минулому уроці про нього писав). Рухати об'єкти можна не тільки по позиції Z, але і по позиціях X і Y.
Почнемо посібник з Create3DTextLabel – найпростіше в Pawn (ну, звісно, після створення і вставки в мод об'єкта/карти).
Наприклад, ось вам найпростіший код:
В цей код входять:
Create3DTextLabel – команда створення 3Д Лейбла;
("…"…); – внутрішня функція. «;» - завжди потрібна в кожному коді.
Опис внутрішньої функції:
«"» - в лапках зазвичай знаходиться текст, що виводиться у гру. У даному випадку 3D Лейбл буде мати в собі текст: «Верхній рядок» «Нова строка» «Ще один»
Ну, відповідно текст «Верхній рядок» та інші будуть текстом, що виводиться у грі.
Код «\\n» означає перехід на наступний рядок. В основному використовується в діалогових вікнах.
COLOR_RED – колір тексту. Колір також можна налаштувати функцією {ColorID}. Наприклад {FFFF00} – червоний колір. Кольори в коді виглядають приблизно так:
Щоб компілювалося без помилки кольорів (невизначений символ COLOR_RED), на початку мода, до всіх #define додамо:
Кольори можна дізнатися ось тут.
Наступне, це pX – позиція X, наприклад pX=186.82 – наземний рух вліво/вправо відносно півночі (N) гри.
pY – позиція Y, наприклад pY=296.25 – наземний рух вперед/назад відносно N гри
pZ – позиція Z, наприклад pZ=12.78 – висота
VD – дистанція перегляду. Я зазвичай ставлю 50.0, і мені нормально видно текст.
Int – віртуальний світ. За замовчуванням ставиться «0»
Як зазвичай, приклад:
Цей текст з'явиться десь неподалік від бази Біг Смоука та автомийки в Лос-Сантосі над Гроув Стріт.
MoveObject
Рух об'єктів також досить просто освоїти. Я поки знаю 2 методи руху об'єктів, але буду використовувати більш простий метод – Відкриття воріт за таймером:
До всіх «new» додайте:
forward objclose();
В public OnGameModeInit() (іноді можна через FS робити, тоді там до public OnFilterScriptInit()) до об'єктів додаємо:
В public OnPlayerCommandText(playerid, cmdtext[]) додаємо команду:
if (strcmp (cmdtext, "/ololo", true) == 0)
{
MoveObject (obj, 0, 0, 15, 3);
SetTimer ("objclose", 5000, 0);
return 1;
}
Далі після руху створюємо новий паблік:
{
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:
Замість слова «Текст» ви можете вставити що завгодно, але я, наприклад, вставлю «Ви підняли фігурину. Через 5 секунд вона закриється». Вийшло ось так:
Не слід забувати про таймер. Якщо ви не знаєте, на скільки часу поставили таймер, то можете замість «5 секунд» написати «кілька секунд».
На цьому мій невеликий урок закінчено. Вибачте, що немає скріншотів, але думаю, тут вони не потрібні.
Удачі в створенні руху об'єктів та 3D текстових лейблів.
By Duke Thealter (Єгор) спеціально для LC