Daniel_Cortez
24.12.2013, 19:30
Недавно просили набросать пару команд для работы с координатами игрока, изменения интерьера и вирт. мира.
Надеюсь, кому-нибудь они пригодятся.
Описание:
/getpos - вывести текущие координаты, угол поворота, интерьер и виртуальный мир
/setpos [x] [y] [z] {поворот} {интерьер} {вирт. мир} - телепортироваться на указанные координаты
(в фигурных скобках "{}" идут необязательные параметры)
Для работы требуется командный процессор DC_CMD или ZCMD.
CMD:getpos(playerid, params[]) // by Daniel_Cortez \ pro-pawn.ru
{
// Проверка на админа (если нужно, замените на свою).
if (PlayerInfo[playerid][pAdmin] < 1)
return 1;
new string[62];
static Float:x, Float:y, Float:z, Float:f, i, w;
GetPlayerPos(playerid, x, y, z);
format(string, sizeof(string), "Координаты: X = %8.2f, Y = %8.2f, Z = %8.2f", x, y, z);
SendClientMessage(playerid, -1, string);
GetPlayerFacingAngle(playerid, f);
format(string, sizeof(string), "Угол поворота: %8.2f°", f);
SendClientMessage(playerid, -1, string);
i = GetPlayerInterior(playerid);
w = GetPlayerVirtualWorld(playerid);
format(string, sizeof(string), "Интерьер: %d, вирт. мир: %d", i, w);
return SendClientMessage(playerid, -1, string);
}
CMD:setpos(playerid, params[]) // by Daniel_Cortez \ pro-pawn.ru
{
// Проверка на админа.
if (PlayerInfo[playerid][pAdmin] < 1)
return 1;
new string[97];
static Float:x, Float:y, Float:z, Float:f, i, w;
if (sscanf(params, "fffF(-1)D(-1)D(-1)", x, y, z, f, i, w))
return SendClientMessage(playerid, -1, "/setpos [x] [y] [z] {угол поворота} {интерьер} {вирт. мир}");
new veh = GetPlayerVehicleID(playerid);
if (i == -1) // Если значение пропущено - получить текущий интерьер (для вывода в SCM).
i = GetPlayerInterior(playerid);
else
SetPlayerInterior(playerid, i);
if (w == -1) // Если значение пропущено - ...
w = GetPlayerVirtualWorld(playerid);
else
{
if (veh != 0)
SetVehicleVirtualWorld(veh, w);
SetPlayerVirtualWorld(playerid, w);
}
if (floatcmp(f, -1.0) == 0) // Всё та же проверка на -1, только для вещ. чисел.
{
if (veh != 0)
GetVehicleZAngle(veh, f);
else
GetPlayerFacingAngle(playerid, f);
}
else
{
f = 360.0*floatfract(f/360.0);
if (veh != 0)
SetVehicleZAngle(veh, f);
else
SetPlayerFacingAngle(playerid, f);
}
if (veh != 0)
SetVehiclePos(veh, x, y, z);
else
SetPlayerPos(playerid, x, y, z);
format(string, sizeof(string), "Вы телепортировались на координаты X: %.2f, Y: %.2f, Z: %.2f", x, y, z);
SendClientMessage(playerid, -1, string);
format(string, sizeof(string), "Угол поворота: %.2f, интерьер: %d, вирт. мир: %d", f, i, w);
return SendClientMessage(playerid, -1, string);
}
Автор: Daniel_Cortez (http://pro-pawn.ru/member.php?100-Daniel_Cortez)
Специально для Pro-Pawn.ru (http://www.pro-pawn.ru)
Копирование данной статьи на других ресурсах без разрешения автора запрещено!
Надеюсь, кому-нибудь они пригодятся.
Описание:
/getpos - вывести текущие координаты, угол поворота, интерьер и виртуальный мир
/setpos [x] [y] [z] {поворот} {интерьер} {вирт. мир} - телепортироваться на указанные координаты
(в фигурных скобках "{}" идут необязательные параметры)
Для работы требуется командный процессор DC_CMD или ZCMD.
CMD:getpos(playerid, params[]) // by Daniel_Cortez \ pro-pawn.ru
{
// Проверка на админа (если нужно, замените на свою).
if (PlayerInfo[playerid][pAdmin] < 1)
return 1;
new string[62];
static Float:x, Float:y, Float:z, Float:f, i, w;
GetPlayerPos(playerid, x, y, z);
format(string, sizeof(string), "Координаты: X = %8.2f, Y = %8.2f, Z = %8.2f", x, y, z);
SendClientMessage(playerid, -1, string);
GetPlayerFacingAngle(playerid, f);
format(string, sizeof(string), "Угол поворота: %8.2f°", f);
SendClientMessage(playerid, -1, string);
i = GetPlayerInterior(playerid);
w = GetPlayerVirtualWorld(playerid);
format(string, sizeof(string), "Интерьер: %d, вирт. мир: %d", i, w);
return SendClientMessage(playerid, -1, string);
}
CMD:setpos(playerid, params[]) // by Daniel_Cortez \ pro-pawn.ru
{
// Проверка на админа.
if (PlayerInfo[playerid][pAdmin] < 1)
return 1;
new string[97];
static Float:x, Float:y, Float:z, Float:f, i, w;
if (sscanf(params, "fffF(-1)D(-1)D(-1)", x, y, z, f, i, w))
return SendClientMessage(playerid, -1, "/setpos [x] [y] [z] {угол поворота} {интерьер} {вирт. мир}");
new veh = GetPlayerVehicleID(playerid);
if (i == -1) // Если значение пропущено - получить текущий интерьер (для вывода в SCM).
i = GetPlayerInterior(playerid);
else
SetPlayerInterior(playerid, i);
if (w == -1) // Если значение пропущено - ...
w = GetPlayerVirtualWorld(playerid);
else
{
if (veh != 0)
SetVehicleVirtualWorld(veh, w);
SetPlayerVirtualWorld(playerid, w);
}
if (floatcmp(f, -1.0) == 0) // Всё та же проверка на -1, только для вещ. чисел.
{
if (veh != 0)
GetVehicleZAngle(veh, f);
else
GetPlayerFacingAngle(playerid, f);
}
else
{
f = 360.0*floatfract(f/360.0);
if (veh != 0)
SetVehicleZAngle(veh, f);
else
SetPlayerFacingAngle(playerid, f);
}
if (veh != 0)
SetVehiclePos(veh, x, y, z);
else
SetPlayerPos(playerid, x, y, z);
format(string, sizeof(string), "Вы телепортировались на координаты X: %.2f, Y: %.2f, Z: %.2f", x, y, z);
SendClientMessage(playerid, -1, string);
format(string, sizeof(string), "Угол поворота: %.2f, интерьер: %d, вирт. мир: %d", f, i, w);
return SendClientMessage(playerid, -1, string);
}
Автор: Daniel_Cortez (http://pro-pawn.ru/member.php?100-Daniel_Cortez)
Специально для Pro-Pawn.ru (http://www.pro-pawn.ru)
Копирование данной статьи на других ресурсах без разрешения автора запрещено!