PDA

Просмотр полной версии : [CMD] /callsign (remake)



middlematt
14.12.2016, 18:40
Доброго времени суток, пользователь портала pro-pawn. В этой теме я хотел бы разместить команду /callsign для маркировки полицейского крузера. Для этого нам понадобится любой командный процессор, схожий на DC_CMD и плагин sscanf.

PS: Да, тут есть уже эта команда. Автор я, но утерял доступ к тому профилю. Теперь переделал эту команду и выложил снова.
Начнем.

Объявляем новую переменную

new
Text3D: call_sign_text[MAX_VEHICLES];

И ко всем вашим командам добавляем новую:

COMMAND:callsign(playerid, params[])
{
if (!IsPlayerLogged(playerid)) // Проверка на авторизацию. Смените на свою.
return 0;

if (GetPVarInt(playerid, "_callsign_create"))
{
SendClientMessage(playerid, -1, !"Вы удалили маркировку автомобиля!");

Delete3DTextLabel(Text3D: call_sign_text[GetPVarInt(playerid, "_callsign_vehicleid")]);

DeletePVar("_callsign_create");
DeletePVar("_callsign_vehicleid");

return 1;
}

extract params -> new string: sign[25]; else
return SendClientMessage(playerid, !"/callsign [маркировка]");

if(strfind(sign, "-", true, 0) == -1)
return SendClientMessage(playerid, -1, !"В введенном тексте не найден символ \'-\'!");

if (GetVehicleModel(GetPlayerVehicleID(playerid) != 596
|| GetVehicleModel(GetPlayerVehicleID(playerid) != 597
|| GetPlayerVehicleID(GetPlayerVehicleID(playerid) != 598
|| GetPlayerVehicleID(GetVehicleVehicleID(playerid) != 599)
return SendClientMessage(playerid, -1, !"Вы сидите не в машине полиции!");

SetPVarInt(playerid, "_callsign_vehicleid", GetPlayerVehicleID(playerid));
SetPVarInt(playerid, "_callsign_create", 1);

call_sign_text[GetPlayerVehicleID(playerid)] = Create3DTextLabel(sign, -1, 0.0, 0.0, 0.0, 10.0, GetPlayerVirtualWorld(playerid), 1);
return Attach3DTextLabelToVhicle(Text3D: call_sign_text[GetPlayerVehicleID(playerid)], GetPlayerVehicleID, -2.0, -1.0, 0.0);
}

VVWVV
14.12.2016, 19:11
Вы проверяли работоспособность вашего кода?

UPD: Мой вариант функции:


CMD:addcallsign(playerid, params[])
{
if (IsPlayerLogged(playerid) == 0)
return 0;
static Text3D:call_sign_textid[MAX_VEHICLES]={Text3D:INVALID_TEXT_DRAW,...};
new vehicleid = GetPlayerVehicleID(playerid);
if (vehicleid == 0)
return 0;
if (_:call_sign_textid[vehicleid] == INVALID_TEXT_DRAW) {
if (sscanf(params, !"s[25]", params[0]))
return SendClientMessage(playerid, -1, !"/callsign [маркировка]");
if (strfind(params[0], !"-", false, 0) < 0)
return SendClientMessage(playerid, -1,
!"В введенном тексте не найден символ \'-\'!"
);
new modelid = GetVehicleModel(vehicleid);
if (_:(596 <= modelid <= 599) == 0)
return SendClientMessage(playerid, -1,
!"Вы сидите не в машине полиции!"
);
Attach3DTextLabelToVehicle(
(call_sign_textid[vehicleid] = Create3DTextLabel(params[0], -1, 0.0,
0.0, 0.0, 10.0, GetPlayerVirtualWorld(playerid), 1)),
vehicleid, -2.0, -1.0, 0.0
);
} else {
Delete3DTextLabel(call_sign_textid[vehicleid]);
call_sign_textid[vehicleid] = Text3D:INVALID_TEXT_DRAW;
SendClientMessage(playerid, -1, !"Вы удалили маркировку автомобиля!");
}
return 1;
}

middlematt
15.12.2016, 20:13
Вы проверяли работоспособность вашего кода?

UPD: Мой вариант функции:


CMD:addcallsign(playerid, params[])
{
if (IsPlayerLogged(playerid) == 0)
return 0;
static Text3D:call_sign_textid[MAX_VEHICLES]={Text3D:INVALID_TEXT_DRAW,...};
new vehicleid = GetPlayerVehicleID(playerid);
if (vehicleid == 0)
return 0;
if (_:call_sign_textid[vehicleid] == INVALID_TEXT_DRAW) {
if (sscanf(params, !"s[25]", params[0]))
return SendClientMessage(playerid, -1, !"/callsign [маркировка]");
if (strfind(params[0], !"-", false, 0) < 0)
return SendClientMessage(playerid, -1,
!"В введенном тексте не найден символ \'-\'!"
);
new modelid = GetVehicleModel(vehicleid);
if (_:(596 <= modelid <= 599) == 0)
return SendClientMessage(playerid, -1,
!"Вы сидите не в машине полиции!"
);
Attach3DTextLabelToVehicle(
(call_sign_textid[vehicleid] = Create3DTextLabel(params[0], -1, 0.0,
0.0, 0.0, 10.0, GetPlayerVirtualWorld(playerid), 1)),
vehicleid, -2.0, -1.0, 0.0
);
} else {
Delete3DTextLabel(call_sign_textid[vehicleid]);
call_sign_textid[vehicleid] = Text3D:INVALID_TEXT_DRAW;
SendClientMessage(playerid, -1, !"Вы удалили маркировку автомобиля!");
}
return 1;
}



Изучу твой код и постараюсь в дальнейшем следовать по нему. Спасибо)