shape1
shape2
shape3
shape4
shape7
shape8

/selfie - сделать селфи.


Maxim_Capone

Новичок
Пользователь
27.11.2019
54
2
0
Здорова. Сегодня мы напишем небольшую систему селфи. Система подойдет как для 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) и добавляем:

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, Float:positionCam;
        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, Float:positionCam;
        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. 

 
Последнее редактирование модератором:

Alexandr_Alexandrov

Новичок
Пользователь
10.08.2021
1
0
0
При вводе комманды ничего не происходит, хотя все сделал по мануалу