Erick_Wester
Новичок
Халлу, ПИ:bs:
Решил выложить 3 команды(вырезка канеш:au
/veh - создание админ кара с ограничением по количеству.
/delveh - думаю, что все понятно.
/alldelveh - удаление всех созданных админами каров.
Особенности:
Код:
1. Можно установить кол-во машин, которые смогут создавать администраторы.
2. У каждой созданной машины есть свой уникальный ID.(Можно в логи INSERT INTO)
3. Возможность удалить все созданные машины
В дефайны суюем(Если, конечно, вам это нужно)
PHP:
#define SCM SendClientMessage
#define COLOR_WHITE 0xFAEBD7AA
#define COLOR_GREY 0xAFAFAFAA
#define COLOR_ADMIN 0x00CC66FF
PHP:
new AVehicle[80+1]={-1,...};
new TotalAdminVehicles = 0;
PHP:
CMD:veh(playerid,params[])
{
if(!p_info[playerid][bAdmin]) return 1; //Ваша переманная с админкой
if(p_info[playerid][bAdmin] < 6) return SCM(playerid, COLOR_WHITE, "Вы не уполномочены использовать эту команду!"); // Опять же она,переменная с адмой
if(sscanf(params,"ddd",params[0],params[1],params[2])) return SCM(playerid, COLOR_WHITE, " Используйте: /veh [carid] [цвет1] [цвет2]"); // Проверочка, все ли введено
if(params[0] < 400 || params[0] > 611) return SCM(playerid, COLOR_WHITE, "Номер машины не может быть меньше 400 и больше чем 611!"); // Проверочка на ID кара, вдруг такого нет
if(params[1] < 0 || params[1] > 126) return SCM(playerid, COLOR_WHITE, "Номер цвета не может быть меньше 0 и больше 126!"); // Проверка первого цвета
if(params[2] < 0 || params[2] > 126) return SCM(playerid, COLOR_WHITE, "Номер цвета не может быть меньше 0 и больше 126!"); // Проверка второго цвета
if(TotalAdminVehicles > 80) // Тут лимит, на данный момент больше 80 низя
{
SCM(playerid,CGRAY,"Лимит админ-машин превышен"); // Если машин больше 80, сообщим админу, что-бы бежал искать ранее созданные
return 1;
}
new Float:X,Float:Y,Float:Z; // Нужно же где то хранить координаты
GetPlayerPos(playerid, X,Y,Z); // Получаем координаты игрока
AVehicle[TotalAdminVehicles] = CreateVehicle(params[0], X+2,Y,Z, 0.0, params[1], params[2], -1); // Создаем кар, carid которого хранится в AVehicle[TotalAdminVehicles] (лучше заменить на свою функцию спавна кара, если она конечно есть)
LinkVehicleToInterior(AVehicle[TotalAdminVehicles], GetPlayerInterior(playerid)); // Помезаем авто в инт игрока
SetVehicleVirtualWorld(AVehicle[TotalAdminVehicles],GetPlayerVirtualWorld(playerid)); // Помещаем авто в виртуальный мир игрока
format(stringer, 128, "[A] %s [%d] создал автомобиль [model: %d] [vehicleid: %d]", NamePlayer[playerid],playerid,params[0],AVehicle[TotalAdminVehicles]); // NamePlayer[playerid] замените на свою переменную с ником/ функцию получения ника
AdmMes(COLOR_ADMIN, stringer,1); // Юзаем свою функцию оповещения админов. Если нужно, могу эту дать
TotalAdminVehicles ++; // Прибавляем 1 к переменной, в которой хранится кол-во уже созданных машин
return 1;
}
PHP:
CMD:delveh(playerid,params[])
{
if(!p_info[playerid][bAdmin]) return 1; //Ваша переманная с админкой
if(p_info[playerid][bAdmin] < 8) return SCM(playerid, COLOR_WHITE, "Вы не уполномочены использовать эту команду!"); // Опять же она,переменная с адмой
if(GetPlayerState(playerid) != 2) return SCM(playerid, COLOR_WHITE, "Вы не в машине"); // Проверяем, находится ли игрок за рулем
if(!TotalAdminVehicles) return 1; // Ну прост нужно :D
new vehh = GetPlayerVehicleID(playerid); // Переменная, в которой хранится VehID
new slot = -1; // Новую переменную создадим и дадим значеие -1, ибо так нужно.
for(new i = 0; i < TotalAdminVehicles; i++) // Цикл перебора админ-машин
{
if(vehh == AVehicle[i]) // И еще проверочка, если вехид равен вехиду кара, который создал админ спускаемся ниже, иначе пропускаем следующую { }
{
slot=i; // Нужно куда-то сохранить циферку, как нельзя кстати slot
break; // Выходим из цикла
}
}
if(slot == -1) return SCM(playerid, COLOR_WHITE, "Этот автомобиль не создавал администратор"); // Проверочка, вдруг хитрый админчег хочет удалить авто игрока
format(stringer, 128, "[A] %s удалил автомобиль [model: %d] [vehicleid: %d]", NamePlayer[playerid],GetVehicleModel(AVehicle[slot]),AVehicle[slot]); // NamePlayer[playerid] замените на свою переменную/ функцию получения ника
AdmMes(COLOR_ADMIN, stringer,1); // Изаем свою функцию оповещения админов, если нужно, могу эту дать
if(IsValidVehicle(AVehicle[slot])) // Проверяем, существует ли машина с таким vehicleid
{
DestroyVehicle(AVehicle[slot]); // Как и с CreateVehicle, лучше заменить на свою функцию удаления кара, если она конечно есть
}
AVehicle[slot] = 0; // Обнуляем переменную, в которой храним вехид
TotalAdminVehicles--; // Удаляем 1 из всех созданных машинок
return 1;
}
PHP:
CMD:alldelveh(playerid,params[])
{
if(!p_info[playerid][bAdmin]) return 1; //Ваша переманная с админкой
if(p_info[playerid][bAdmin] < 8) return SCM(playerid, COLOR_WHITE, "Вы не уполномочены использовать эту команду!"); // Опять же она,переменная с адмой
format(stringer, 128, "[A] %s удалил все автомобили созданные администраторами", NamePlayer[playerid]); // NamePlayer[playerid] замените на свою переменную/ функцию получения ника
AdmMes(COLOR_ADMIN, stringer,1); // Юзаем свою функцию оповещения админов. Если нужно, могу эту дать
for(new i = 0; i < TotalAdminVehicles; i++) // Цикл перебора админ-машин
{
if(IsValidVehicle(AVehicle[i])) // Проверяем, существует ли машина с таким vehicleid
{
DestroyVehicle(AVehicle[i]); // Удаляем машину под идом AVehicle[i] (Как и с CreateVehicle, лучше заменить на свою функцию удаления кара, если она конечно есть)
}
AVehicle[i] = 0; // Конечно перезаписалась-бы, но лучше обнулим
}
TotalAdminVehicles=0; // Обнуляем счетчик машинок
return 1;
}
Жду критики, тыканья в ошибочки xD
