PDA

Просмотр полной версии : [CMD] Устанавливаем номера[DC_CMD]



Salvacore
31.03.2014, 18:45
CMD:numberplate(playerid, params[])
{
if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER) //Проверка, в машине ли вы?
return SendClientMessage(playerid,-1,"Сядьте в машину!");
if(isnull(params))
return SendClientMessage(playerid,-1, "/номера [Что будет на номерах]");
if(!(2 < strlen(params) < 19)) //Проверка на количество символов
return SendClientMessage(playerid, 0xFF0000AA, "Количество символов должно быть от 3 до 18!");
new vehid = GetPlayerVehicleID(playerid);
new Float:x, Float:y, Float:z, Float:a;
GetVehiclePos(vehid, x, y, z); //Получаем координаты машины
GetVehicleZAngle(vehid, a); //Получаем угол поворота машины
SetVehicleNumberPlate(vehid, params); //Ставим номера на машину
SetVehicleToRespawn(vehid); //Зареспавним машину
SetVehiclePos(vehid, x, y, z); //Установим координаты машине
SetVehicleZAngle(vehid, a); //Установим угол поворота
PutPlayerInVehicle(playerid, vehid, 0); //Запихнём вас в машину :3
static const fmt_str[] = "Вы поставили новый номер: '%s'";
const fmt_size = sizeof(fmt_str)-2+18;
new string[fmt_size];
format(string, sizeof(string), fmt_str, params);
return SendClientMessage(playerid,-1, string); //Выводим сообщение
}
ALTX:numberplate("/номера");


1. Прямые руки
2. DC_CMD (http://pro-pawn.ru/showthread.php?1028-DC_CMD-v2-8-(23-03-14))
Автор: Salvador (Salvacore)





CMD:numberplate(playerid, params[])
{
if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER)
return SendClientMessage(playerid, -1, "Вы должны быть в транспорте.");
if(isnull(params))
return SendClientMessage(playerid, -1, "Используйте: /номера [номер]");
if(!(3 <= strlen(params) <= 8))
return SendClientMessage(playerid, 0xFF0000AA, "Количество символов должно быть от 3 до 8.");

new
vehicleid = GetPlayerVehicleID(playerid),
Float: veh_pos_x,
Float: veh_pos_y,
Float: veh_pos_z,
Float: veh_pos_a;

GetVehiclePos(vehicleid, veh_pos_x, veh_pos_y, veh_pos_z);
GetVehicleZAngle(vehicleid, veh_pos_a);

SetVehicleNumberPlate(vehicleid, params);
SetVehicleToRespawn(vehicleid);
SetVehiclePos(vehicleid, veh_pos_x, veh_pos_y, veh_pos_z);
SetVehicleZAngle(vehicleid, veh_pos_a);

PutPlayerInVehicle(playerid, vehicleid, 0);

new
str[35];

str = "Вы поставили новый номер: ", strcat(str, params);
return SendClientMessage(playerid, -1, str);
}
ALTX:nomer("/номера");

Unreal
04.10.2014, 00:01
я использую так


CMD:nomer(playerid, params[])
{
if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER) return SendClientMessage(playerid,-1,"Сядьте в машину!");
if(sscanf(params,"s[24]",params[0])) return SendClientMessage(playerid,-1, "/номера [Что будет на номерах]");
if(params[0] < 3 || params[0] > 18) return SendClientMessage(playerid, 0xFF0000AA, "Количество символов должно быть от 3 до 18!");
SetVehicleNumberPlate(GetPlayerVehicleID(playerid), params[0]); //Ставим номера на машину
new string[26+18+1-2];
format(string, sizeof(string),"Вы поставили новый номер: %s", params[0]);
return SendClientMessage(playerid,-1, string); //Выводим сообщение
}
ALTX:nomer("/номера");

Но думаю твой лучше.

L0ndl3m
04.10.2014, 00:14
Поддержу тему создания своих вариантов, пусть будет несколько вариантов, для выбора.



CMD:numberplate(playerid, params[])
{
if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER)
return SendClientMessage(playerid, -1, "Вы должны быть в транспорте.");
if(isnull(params))
return SendClientMessage(playerid, -1, "Используйте: /номера [номер]");
if(!(3 <= strlen(params) <= 8))
return SendClientMessage(playerid, 0xFF0000AA, "Количество символов должно быть от 3 до 8.");

new
vehicleid = GetPlayerVehicleID(playerid),
Float: veh_pos_x,
Float: veh_pos_y,
Float: veh_pos_z,
Float: veh_pos_a;

GetVehiclePos(vehicleid, veh_pos_x, veh_pos_y, veh_pos_z);
GetVehicleZAngle(vehicleid, veh_pos_a);

SetVehicleNumberPlate(vehicleid, params);
SetVehicleToRespawn(vehicleid);
SetVehiclePos(vehicleid, veh_pos_x, veh_pos_y, veh_pos_z);
SetVehicleZAngle(vehicleid, veh_pos_a);

PutPlayerInVehicle(playerid, vehicleid, 0);

new
str[35];

str = "Вы поставили новый номер: ", strcat(str, params);
return SendClientMessage(playerid, -1, str);
}
ALTX:nomer("/номера");

Что изменено?


Вместо sscanf использовал макрос isnull, который можно использовать если во входной строке только один строковой параметр;
Вместо максимальных 18 символов укоротил до 8, не думаю, что есть такой вид транспорта, у которого можно поставить более 8 символов;
Изменил размер массива, до минимума, лишние ячейки будут засорять память, так как никогда не будут использоваться;
Вместо стандартной функции format приравнял массив к строке, далее с помощью функции strcat "прицепил" текст, который будет введён в единственном параметре команды. Этот способ работает быстрее чем использование функции format

L0ndl3m
27.10.2014, 20:57
Поправил предложенную команду в своём посте выше ( раньше работала некорректно ). Обновил первый пост.