Здорова. Сегодня мы напишем небольшую систему селфи. Система подойдет как для RolePlay, так и для Non RolePlay проектов. Скажу сразу: систему взял в одной из групп ВКонтакте, доработал и вшил в свой мод (Vermont).
Добавляем ко всем переменным (new, начало мода):
new Float: positionCam[MAX_PLAYERS][3]; //позиция камеры по время фотосессии
new Float: Reedeg[MAX_PLAYERS];
new const Float: Radiuses = 1.7; //Радиус
new const Float: Height = 1.15; //Высота
Добавили? Теперь идем ко всем командам в нашем моде (для пользователей с DС_CMD/PawnCMD) и добавляем:
Теперь код для использующих стандартный КП. Вам же нужно перейти в public OnPlayerCommandText(playerid, cmdtext[]):
Теперь, когда весь код написан, идём проверять сие чудо PAWN-программирования на нашем сервере.
Скриншоты моей проверки: https://imgur.com/a/UGcpNMV
Из скиншотов видно, что в моем моде все работает как часы. Если же у вас возникли какие-то проблемы или ошибки во время написания/тестирования данной системы, не стесняйтесь и пишите в комментарии этой темы, мы вместе исправим все ошибки или проблемы.
На этом наш урок завершается, спасибо за внимание, ну а с вами был заслуженный PAWN-скриптер СССР и РФ - Maxim_Capone.
Добавляем ко всем переменным (new, начало мода):
new Float: positionCam[MAX_PLAYERS][3]; //позиция камеры по время фотосессии
new Float: Reedeg[MAX_PLAYERS];
new const Float: Radiuses = 1.7; //Радиус
new const Float: Height = 1.15; //Высота
Добавили? Теперь идем ко всем командам в нашем моде (для пользователей с DС_CMD/PawnCMD) и добавляем:
CMD:selfie(playerid)
{
if(!GetPVarInt(playerid,"Selfie"))
{
PlayerPlaySound(playerid, 17001, 0.0, 0.0, 0.0); //включаем игроку звук селфи.
SendClientMessage(playerid, COLOR_GREEN, "[Подсказка]: Используйте '/headmove', чтобы отключить вращения головы"); //выводим в чат игроку подсказки.
SendClientMessage(playerid, COLOR_GREEN, "[Подсказка]: Нажмите 'F8', чтобы сделать селфи");
SendClientMessage(playerid, COLOR_GREEN, "[Подсказка]: Используйте '/selfie', чтобы сбросить анимацию");
GetPlayerPos(playerid, positionCam[playerid][0], positionCam[playerid][1], positionCam[playerid][2]); //узнаем позицию (положение) игрока в момент ввода команды.
static Float: n1X, Float: n1Y, FloatositionCam;
GetPlayerFacingAngle(playerid, PositionCam); //Узнаем положение физиономии CRMP-инстаграмера.
n1X = positionCam[playerid][0] + Radiuses * floatcos(180.0, degrees);
n1Y = positionCam[playerid][1] + Radiuses * floatsin(180.0, degrees);
SetPlayerAttachedObject(playerid, 0, 18868, 6, 0.06, 0.01, 0.08, 180.0, 90.0, 0.0);
SetPlayerCameraPos(playerid, n1X, n1Y, positionCam[playerid][2] + Height); //Устанавливаем камеру согласно параметрам, указанным в new.
SetPlayerCameraLookAt(playerid, positionCam[playerid][0], positionCam[playerid][1], positionCam[playerid][2] + 1); //Направляем камеру на физиономию.
SetPlayerFacingAngle(playerid, Reedeg[playerid] - 270.0); //Теперь саму физиономию подстраиваем под угол, равный 270 градусам.
ApplyAnimation(playerid, "PED", "gang_gunstand", 4.1, 1, 1, 1, 1, 1, 1); //Включаем анимацию.
SetPVarInt(playerid, "Selfie", 1); //Устанавливаем PVar.
SetPVarInt(playerid, "selfie_knopka", 1);
}
else //если игрок ввел команду с целью закончить фотосессию.
{
TogglePlayerControllable(playerid, 1);
SetCameraBehindPlayer(playerid); //Устанавливаем камеру позади игрока (стандартный вид).
RemovePlayerAttachedObject(playerid, 0); //Снимаем с игрока все объекты, нужные для съемки.
ApplyAnimation(playerid, "PED", "ATM", 4.1, 0, 1, 1, 0, 1, 1); //Устанавливаем обычную анимацию игрока.
DeletePVar(playerid, "Selfie");
DeletePVar(playerid, "selfie_knopka"); //Удаляем PVar-ы.
}
} //ЦЕНОК
{
if(!GetPVarInt(playerid,"Selfie"))
{
PlayerPlaySound(playerid, 17001, 0.0, 0.0, 0.0); //включаем игроку звук селфи.
SendClientMessage(playerid, COLOR_GREEN, "[Подсказка]: Используйте '/headmove', чтобы отключить вращения головы"); //выводим в чат игроку подсказки.
SendClientMessage(playerid, COLOR_GREEN, "[Подсказка]: Нажмите 'F8', чтобы сделать селфи");
SendClientMessage(playerid, COLOR_GREEN, "[Подсказка]: Используйте '/selfie', чтобы сбросить анимацию");
GetPlayerPos(playerid, positionCam[playerid][0], positionCam[playerid][1], positionCam[playerid][2]); //узнаем позицию (положение) игрока в момент ввода команды.
static Float: n1X, Float: n1Y, FloatositionCam;
GetPlayerFacingAngle(playerid, PositionCam); //Узнаем положение физиономии CRMP-инстаграмера.
n1X = positionCam[playerid][0] + Radiuses * floatcos(180.0, degrees);
n1Y = positionCam[playerid][1] + Radiuses * floatsin(180.0, degrees);
SetPlayerAttachedObject(playerid, 0, 18868, 6, 0.06, 0.01, 0.08, 180.0, 90.0, 0.0);
SetPlayerCameraPos(playerid, n1X, n1Y, positionCam[playerid][2] + Height); //Устанавливаем камеру согласно параметрам, указанным в new.
SetPlayerCameraLookAt(playerid, positionCam[playerid][0], positionCam[playerid][1], positionCam[playerid][2] + 1); //Направляем камеру на физиономию.
SetPlayerFacingAngle(playerid, Reedeg[playerid] - 270.0); //Теперь саму физиономию подстраиваем под угол, равный 270 градусам.
ApplyAnimation(playerid, "PED", "gang_gunstand", 4.1, 1, 1, 1, 1, 1, 1); //Включаем анимацию.
SetPVarInt(playerid, "Selfie", 1); //Устанавливаем PVar.
SetPVarInt(playerid, "selfie_knopka", 1);
}
else //если игрок ввел команду с целью закончить фотосессию.
{
TogglePlayerControllable(playerid, 1);
SetCameraBehindPlayer(playerid); //Устанавливаем камеру позади игрока (стандартный вид).
RemovePlayerAttachedObject(playerid, 0); //Снимаем с игрока все объекты, нужные для съемки.
ApplyAnimation(playerid, "PED", "ATM", 4.1, 0, 1, 1, 0, 1, 1); //Устанавливаем обычную анимацию игрока.
DeletePVar(playerid, "Selfie");
DeletePVar(playerid, "selfie_knopka"); //Удаляем PVar-ы.
}
} //ЦЕНОК
Теперь код для использующих стандартный КП. Вам же нужно перейти в public OnPlayerCommandText(playerid, cmdtext[]):
if (strcmp(cmdtext, "/selfie", true) == 0)
{
if(!GetPVarInt(playerid,"Selfie"))
{
PlayerPlaySound(playerid, 17001, 0.0, 0.0, 0.0); //включаем игроку звук селфи.
SendClientMessage(playerid, COLOR_GREEN, "[Подсказка]: Используйте '/headmove', чтобы отключить вращения головы"); //выводим в чат игроку подсказки.
SendClientMessage(playerid, COLOR_GREEN, "[Подсказка]: Нажмите 'F8', чтобы сделать селфи");
SendClientMessage(playerid, COLOR_GREEN, "[Подсказка]: Используйте '/selfie', чтобы сбросить анимацию");
GetPlayerPos(playerid, positionCam[playerid][0], positionCam[playerid][1], positionCam[playerid][2]); //узнаем позицию (положение) игрока в момент ввода команды.
static Float: n1X, Float: n1Y, FloatositionCam;
GetPlayerFacingAngle(playerid, PositionCam); //Узнаем положение физиономии CRMP-инстаграмера.
n1X = positionCam[playerid][0] + Radiuses * floatcos(180.0, degrees);
n1Y = positionCam[playerid][1] + Radiuses * floatsin(180.0, degrees);
SetPlayerAttachedObject(playerid, 0, 18868, 6, 0.06, 0.01, 0.08, 180.0, 90.0, 0.0);
SetPlayerCameraPos(playerid, n1X, n1Y, positionCam[playerid][2] + Height); //Устанавливаем камеру согласно параметрам, указанным в new.
SetPlayerCameraLookAt(playerid, positionCam[playerid][0], positionCam[playerid][1], positionCam[playerid][2] + 1); //Направляем камеру на физиономию.
SetPlayerFacingAngle(playerid, Reedeg[playerid] - 270.0); //Теперь саму физиономию подстраиваем под угол, равный 270 градусам.
ApplyAnimation(playerid, "PED", "gang_gunstand", 4.1, 1, 1, 1, 1, 1, 1); //Включаем анимацию.
SetPVarInt(playerid, "Selfie", 1); //Устанавливаем PVar.
SetPVarInt(playerid, "selfie_knopka", 1);
}
else //если игрок ввел команду с целью закончить фотосессию.
{
TogglePlayerControllable(playerid, 1);
SetCameraBehindPlayer(playerid); //Устанавливаем камеру позади игрока (стандартный вид).
RemovePlayerAttachedObject(playerid, 0); //Снимаем с игрока все объекты, нужные для съемки.
ApplyAnimation(playerid, "PED", "ATM", 4.1, 0, 1, 1, 0, 1, 1); //Устанавливаем обычную анимацию игрока.
DeletePVar(playerid, "Selfie");
DeletePVar(playerid, "selfie_knopka"); //Удаляем PVar-ы.
}
} //ЦЕНОК
{
if(!GetPVarInt(playerid,"Selfie"))
{
PlayerPlaySound(playerid, 17001, 0.0, 0.0, 0.0); //включаем игроку звук селфи.
SendClientMessage(playerid, COLOR_GREEN, "[Подсказка]: Используйте '/headmove', чтобы отключить вращения головы"); //выводим в чат игроку подсказки.
SendClientMessage(playerid, COLOR_GREEN, "[Подсказка]: Нажмите 'F8', чтобы сделать селфи");
SendClientMessage(playerid, COLOR_GREEN, "[Подсказка]: Используйте '/selfie', чтобы сбросить анимацию");
GetPlayerPos(playerid, positionCam[playerid][0], positionCam[playerid][1], positionCam[playerid][2]); //узнаем позицию (положение) игрока в момент ввода команды.
static Float: n1X, Float: n1Y, FloatositionCam;
GetPlayerFacingAngle(playerid, PositionCam); //Узнаем положение физиономии CRMP-инстаграмера.
n1X = positionCam[playerid][0] + Radiuses * floatcos(180.0, degrees);
n1Y = positionCam[playerid][1] + Radiuses * floatsin(180.0, degrees);
SetPlayerAttachedObject(playerid, 0, 18868, 6, 0.06, 0.01, 0.08, 180.0, 90.0, 0.0);
SetPlayerCameraPos(playerid, n1X, n1Y, positionCam[playerid][2] + Height); //Устанавливаем камеру согласно параметрам, указанным в new.
SetPlayerCameraLookAt(playerid, positionCam[playerid][0], positionCam[playerid][1], positionCam[playerid][2] + 1); //Направляем камеру на физиономию.
SetPlayerFacingAngle(playerid, Reedeg[playerid] - 270.0); //Теперь саму физиономию подстраиваем под угол, равный 270 градусам.
ApplyAnimation(playerid, "PED", "gang_gunstand", 4.1, 1, 1, 1, 1, 1, 1); //Включаем анимацию.
SetPVarInt(playerid, "Selfie", 1); //Устанавливаем PVar.
SetPVarInt(playerid, "selfie_knopka", 1);
}
else //если игрок ввел команду с целью закончить фотосессию.
{
TogglePlayerControllable(playerid, 1);
SetCameraBehindPlayer(playerid); //Устанавливаем камеру позади игрока (стандартный вид).
RemovePlayerAttachedObject(playerid, 0); //Снимаем с игрока все объекты, нужные для съемки.
ApplyAnimation(playerid, "PED", "ATM", 4.1, 0, 1, 1, 0, 1, 1); //Устанавливаем обычную анимацию игрока.
DeletePVar(playerid, "Selfie");
DeletePVar(playerid, "selfie_knopka"); //Удаляем PVar-ы.
}
} //ЦЕНОК
Теперь, когда весь код написан, идём проверять сие чудо PAWN-программирования на нашем сервере.
Скриншоты моей проверки: https://imgur.com/a/UGcpNMV
Из скиншотов видно, что в моем моде все работает как часы. Если же у вас возникли какие-то проблемы или ошибки во время написания/тестирования данной системы, не стесняйтесь и пишите в комментарии этой темы, мы вместе исправим все ошибки или проблемы.
На этом наш урок завершается, спасибо за внимание, ну а с вами был заслуженный PAWN-скриптер СССР и РФ - Maxim_Capone.
Последнее редактирование модератором: