Чемодан
Умник
Мод как на адвансе, работает и был написан под Engine RP.
У полиции появляется команда /break. с помощью которой они могут поставить заграждение на улице.
У полиции появляется команда /break. с помощью которой они могут поставить заграждение на улице.
Итак,
В верхнюю часть скрипта, ко всем Define, добавляем:
PHP:
#define YouCanNot "Вам недоступна эта функция"
PHP:
new Blocks[MAX_PLAYERS]; // благодаря этой переменной мы можем сделать все одной командой(поставить и убрать)
new block[MAX_PLAYERS]; // переменная хранящая объект блока
new Text3D:blocktext[MAX_PLAYERS];
PHP:
Blocks[playerid] = 0; // задаем каждому присоединенному пользователю значение что он не ставил блок
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
}
Последнее редактирование:
