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

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

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

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

[Урок] Создаем систему добавления ограждений для полиции

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

Чемодан

Умник
Мод как на адвансе, работает и был написан под Engine RP.

У полиции появляется команда /break. с помощью которой они могут поставить заграждение на улице.
​


Итак,

В верхнюю часть скрипта, ко всем Define, добавляем:
PHP:
#define YouCanNot "Вам недоступна эта функция"
Далее, к new, добавляем:
PHP:
new Blocks[MAX_PLAYERS]; // благодаря этой переменной мы можем сделать все одной командой(поставить и убрать)
new block[MAX_PLAYERS]; // переменная хранящая объект блока
new Text3D:blocktext[MAX_PLAYERS];
В OnPlayerConnect прописываем:
PHP:
Blocks[playerid] = 0; // задаем каждому присоединенному пользователю значение что он не ставил блок
После этого, OnPlayerDisconnect:
PHP:
if(Blocks[playerid] == 1) // проверяем при отсоединении пользователя ставил ли пользователь блок если да то
       {
         Delete3DTextLabel(Text3D:blocktext[playerid]); // удаляем текстдрав с его id над блоком
         DestroyObject(block[playerid]); // удаляем сам блок
	}
Теперь, добавляем саму команду:

PHP:
if(strcmp(cmd, "/block", true) == 0)  
{
    if(!IsACop(playerid)) return SendClientMessage(playerid, COLOR_GREY, YouCanNot); // проверяем полицейский ли
    if(Blocks[playerid] == 0) // если не поставлено блока то
       {
         if(IsPlayerInVehicle(playerid, GetPlayerVehicleID(playerid))) return SendClientMessage(playerid, COLOR_GREY, "Выйдите из машины чтобы поставить блок!"); // проверяем игрока в машине, если да то возвращаем ему сообщение
         new Float:x ,Float:y, Float:z, Float:a; // вводим переменные координат
         ApplyAnimation(playerid, "BOMBER", "BOM_Plant", 6.1, 0, 0, 0, 0, 0,1); // анимация игрока когда он устанавливает блок
         GetPlayerFacingAngle(playerid, a); // эта функция возвращает нам угол поворота игрока
         GetPlayerPos(playerid,x,y,z); // возвращает нам координаты пользователя
         format(string, 50, "%i", playerid); // форматируем вывод id над блоком
         blocktext[playerid] = Create3DTextLabel(string,COLOR_BLUE,x,y,z+0.5,30.0,0,1); // создаем текстдрав id игрока над блоком
         // В зависимости от угла поворота ставиться блок
         if (a <= 45.00 || a > 300.00) block[playerid] = CreateObject(1237,x,y+0.7,z-1,0,0,a);
         if (a > 45.00 && a <= 120.00) block[playerid] = CreateObject(1237,x-0.7,y,z-1,0,0,a);
         if (a > 120.00 && a <= 220.00) block[playerid] = CreateObject(1237,x,y-0.7,z-1,0,0,a);
         if (a > 220.00 && a <= 300.00) block[playerid] = CreateObject(1237,x+0.7,y,z-1,0,0,a);
         Blocks[playerid] = 1; // наша переменная которая отвечает за то, что блок установлен или нет(ставим 1 значит да)
         SendClientMessage(playerid,COLOR_GREY,"Блок установлен"); // выводим сообщение о том, что все успешно
         return 1; // возвращаем 1
       }
    else if(Blocks[playerid] == 1) // если блок поставлен то
       {
         Delete3DTextLabel(Text3D:blocktext[playerid]); // удаляем текстдрав id игрока над блоком
         DestroyObject(block[playerid]); // удаляем сам блок
         Blocks[playerid] = 0; // ставим значение 0 (значит, что блок не установлен)
         SendClientMessage(playerid,COLOR_GREY,"Блок убран"); // выводим сообщение о том что блок успешно убран
         return 1; // возвращаем 1
       }
	return 1; // возвращаем 1
}
PHP:
CMD:block(playerid) // определяем команду /block
{
    if(!IsACop(playerid)) return SendClientMessage(playerid, COLOR_GREY, YouCanNot); // проверяем полицейский ли
    if(Blocks[playerid] == 0) // если не поставлено блока то
       {
         if(IsPlayerInVehicle(playerid, GetPlayerVehicleID(playerid))) return SendClientMessage(playerid, COLOR_GREY, "Выйдите из машины чтобы поставить блок!"); // проверяем игрока в машине, если да то возвращаем ему сообщение
         new Float:x ,Float:y, Float:z, Float:a; // вводим переменные координат
         ApplyAnimation(playerid, "BOMBER", "BOM_Plant", 6.1, 0, 0, 0, 0, 0,1); // анимация игрока когда он устанавливает блок
         GetPlayerFacingAngle(playerid, a); // эта функция возвращает нам угол поворота игрока
         GetPlayerPos(playerid,x,y,z); // возвращает нам координаты пользователя
         format(string, 50, "%i", playerid); // форматируем вывод id над блоком
         blocktext[playerid] = Create3DTextLabel(string,COLOR_BLUE,x,y,z+0.5,30.0,0,1); // создаем текстдрав id игрока над блоком
         // В зависимости от угла поворота ставиться блок
         if (a <= 45.00 || a > 300.00) block[playerid] = CreateObject(1237,x,y+0.7,z-1,0,0,a);
         if (a > 45.00 && a <= 120.00) block[playerid] = CreateObject(1237,x-0.7,y,z-1,0,0,a);
         if (a > 120.00 && a <= 220.00) block[playerid] = CreateObject(1237,x,y-0.7,z-1,0,0,a);
         if (a > 220.00 && a <= 300.00) block[playerid] = CreateObject(1237,x+0.7,y,z-1,0,0,a);
         Blocks[playerid] = 1; // наша переменная которая отвечает за то, что блок установлен или нет(ставим 1 значит да)
         SendClientMessage(playerid,COLOR_GREY,"Блок установлен"); // выводим сообщение о том, что все успешно
         return 1; // возвращаем 1
       }
    else if(Blocks[playerid] == 1) // если блок поставлен то
       {
         Delete3DTextLabel(Text3D:blocktext[playerid]); // удаляем текстдрав id игрока над блоком
         DestroyObject(block[playerid]); // удаляем сам блок
         Blocks[playerid] = 0; // ставим значение 0 (значит, что блок не установлен)
         SendClientMessage(playerid,COLOR_GREY,"Блок убран"); // выводим сообщение о том что блок успешно убран
         return 1; // возвращаем 1
       }
	return 1; // возвращаем 1
}

Текстдрав над блоком с ID игрока создан для того, чтобы администратор мог удалить забытый блок :)

Теперь нужно создать команду, чтобы админ мог удалять любой блок:
PHP:
if(strcmp(cmd, "/ablock", true) == 0)  
{
         if(PlayerInfo[playerid][pAdmin] < 1 || AdminLogged[playerid] == false) return 1; // проверяем авторизован ли администратор
         Delete3DTextLabel(Text3D:blocktext[params[0]]); // удаляем текстдрав id игрока над блоком
         DestroyObject(block[params[0]]); // удаляем сам блок
         Blocks[params[0]] = 0; // ставим игроку значение 0 (значит, что блок не установлен)
         SendClientMessage(params[0],COLOR_LIGHTRED,"Администратор убрал Ваш блок. Не забывайте больше!"); // выводим сообщение игроку который поставил блок
         return 1; // возвращаем 1
}
PHP:
CMD:ablock(playerid, params[]) // определяем команду(заметьте что появилось - params[](массив служит для хранения и использования введеного id пример: /ablock 21 - удалит 21 блок))
{
         if(PlayerInfo[playerid][pAdmin] < 1 || AdminLogged[playerid] == false) return 1; // проверяем авторизован ли администратор
         Delete3DTextLabel(Text3D:blocktext[params[0]]); // удаляем текстдрав id игрока над блоком
         DestroyObject(block[params[0]]); // удаляем сам блок
         Blocks[params[0]] = 0; // ставим игроку значение 0 (значит, что блок не установлен)
         SendClientMessage(params[0],COLOR_LIGHTRED,"Администратор убрал Ваш блок. Не забывайте больше!"); // выводим сообщение игроку который поставил блок
         return 1; // возвращаем 1
}

Нету префиксов, его просто написал в названии
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу