Переміщення об'єктів та створення 3D текстових міток у 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 секунд» написати «кілька секунд».

На цьому мій невеликий урок закінчено. Вибачте, що немає скріншотів, але думаю, тут вони не потрібні.

Удачі в створенні руху об'єктів та 3D текстових лейблів.

By Duke Thealter (Єгор) спеціально для LC

Рекомендуемые файлы