Shakoladka

/afly - свободная камера, полёт по карте, спек за игроками

В теме 4 сообщения

Многие ищут эту команду и флудят темами поэтому я решил кинуть сюда эту команду. Нам понадобятся: плагин DC/ZCMD, лучше ZCMD и мод.
Вставляем в конец мода:

Спойлер
CMD:afly(playerid,params[])
{
    if(antiflood[playerid] > 0) return SendClientMessage(playerid, COLOR_WARNING,"Не флуди!");
    antiflood[playerid]++;
        if(PLAYER_DATA[playerid][data_LOGGED] == false) return SendClientMessage(playerid,COLOR_WARNING,"Вы не авторизованы на сервере!");
    if(PLAYER_DATA[playerid][data_ADMLVL] < 1) return true;
    SetPVarInt(playerid,"spawn_ac",1);
     
        if(GetPVarType(playerid, "FlyMode"))
        {
            new inter, world, Float:X, Float:Y, Float:Z, Float:FA;
            GetPlayerHealth(playerid,PLAYER_DATA[playerid][data_HP]);
                GetPlayerPos(playerid, X, Y, Z);
                GetPlayerFacingAngle(playerid, FA);
                inter = GetPlayerInterior(playerid);
                world = GetPlayerVirtualWorld(playerid);
                SetPVarFloat(playerid, "SpecX", X);
                SetPVarFloat(playerid, "SpecY", Y);
                SetPVarFloat(playerid, "SpecZ", Z);
                SetPVarFloat(playerid, "SpecFA", FA);
                SetPVarInt(playerid, "SpecInt", inter);
                SetPVarInt(playerid, "SpecWorld", world);
                 
                CancelFlyMode(playerid);
        }
        else
        {
                SetPVarInt(playerid, "SpecBool", 1);
                FlyMode(playerid);
        }
        return true;
}

Вот и всё, скорее всего придётся менять переменные. 
Команда из мода +RP.

Спойлер
stock CancelFlyMode(playerid)
{
        DeletePVar(playerid, "FlyMode");
        CancelEdit(playerid);
        TogglePlayerSpectating(playerid, false);
 
        DestroyPlayerObject(playerid, noclipdata[playerid][flyobject]);
        noclipdata[playerid][cameramode] = CAMERA_MODE_NONE;
        return 1;
}
 
 
stock FlyMode(playerid)
{
        new Float:X, Float:Y, Float:Z;
        GetPlayerPos(playerid, X, Y, Z);
        noclipdata[playerid][flyobject] = CreatePlayerObject(playerid, 19300, X, Y, Z, 0.0, 0.0, 0.0);
 
        TogglePlayerSpectating(playerid, true);
        AttachCameraToPlayerObject(playerid, noclipdata[playerid][flyobject]);
 
        SetPVarInt(playerid, "FlyMode", 1);
        noclipdata[playerid][cameramode] = CAMERA_MODE_FLY;
        return 1;
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
stock GetMoveDirectionFromKeys(ud, lr)
{
        new direction = 0;
        if(lr < 0)
        {
                if(ud < 0) direction = MOVE_FORWARD_LEFT;
                else if(ud > 0) direction = MOVE_BACK_LEFT;
                else direction = MOVE_LEFT;
        }
        else if(lr > 0)
        {
                if(ud < 0) direction = MOVE_FORWARD_RIGHT;
                else if(ud > 0) direction = MOVE_BACK_RIGHT;
                else direction = MOVE_RIGHT;
        }
        else if(ud < 0) direction = MOVE_FORWARD;
        else if(ud > 0) direction = MOVE_BACK;
        return direction;
}
//--------------------------------------------------
stock MoveCamera(playerid)
{
        new Float:FV[3], Float:CPR[3];
        GetPlayerCameraPos(playerid, CPR[0], CPR[1], CPR[2]);
    GetPlayerCameraFrontVector(playerid, FV[0], FV[1], FV[2]);
 
        if(noclipdata[playerid][accelmul] <= 1) noclipdata[playerid][accelmul] += ACCEL_RATE;
 
        new Float:speed = MOVE_SPEED * noclipdata[playerid][accelmul];
 
        new Float:X, Float:Y, Float:Z;
        GetNextCameraPosition(noclipdata[playerid][mode], CPR, FV, X, Y, Z);
        MovePlayerObject(playerid, noclipdata[playerid][flyobject], X, Y, Z, speed);
 
        noclipdata[playerid][lastmove] = GetTickCount();
        return 1;
}
//--------------------------------------------------
stock GetNextCameraPosition(move_mode, Float:CPR[3], Float:FV[3], &Float:X, &Float:Y, &Float:Z)
{
    #define OFFSET_X (FV[0]*6000.0)
        #define OFFSET_Y (FV[1]*6000.0)
        #define OFFSET_Z (FV[2]*6000.0)
        switch(move_mode)
        {
                case MOVE_FORWARD:
                {
                        X = CPR[0]+OFFSET_X;
                        Y = CPR[1]+OFFSET_Y;
                        Z = CPR[2]+OFFSET_Z;
                }
                case MOVE_BACK:
                {
                        X = CPR[0]-OFFSET_X;
                        Y = CPR[1]-OFFSET_Y;
                        Z = CPR[2]-OFFSET_Z;
                }
                case MOVE_LEFT:
                {
                        X = CPR[0]-OFFSET_Y;
                        Y = CPR[1]+OFFSET_X;
                        Z = CPR[2];
                }
                case MOVE_RIGHT:
                {
                        X = CPR[0]+OFFSET_Y;
                        Y = CPR[1]-OFFSET_X;
                        Z = CPR[2];
                }
                case MOVE_BACK_LEFT:
                {
                        X = CPR[0]+(-OFFSET_X - OFFSET_Y);
                         Y = CPR[1]+(-OFFSET_Y + OFFSET_X);
                         Z = CPR[2]-OFFSET_Z;
                }
                case MOVE_BACK_RIGHT:
                {
                        X = CPR[0]+(-OFFSET_X + OFFSET_Y);
                         Y = CPR[1]+(-OFFSET_Y - OFFSET_X);
                         Z = CPR[2]-OFFSET_Z;
                }
                case MOVE_FORWARD_LEFT:
                {
                        X = CPR[0]+(OFFSET_X  - OFFSET_Y);
                        Y = CPR[1]+(OFFSET_Y  + OFFSET_X);
                        Z = CPR[2]+OFFSET_Z;
                }
                case MOVE_FORWARD_RIGHT:
                {
                        X = CPR[0]+(OFFSET_X  + OFFSET_Y);
                        Y = CPR[1]+(OFFSET_Y  - OFFSET_X);
                        Z = CPR[2]+OFFSET_Z;
                }
        }
}

в OnPlayerSpawn:

Спойлер
if(GetPVarInt(playerid, "SpecBool") == 1)
       {
               DeletePVar(playerid, "SpecBool");
               new Float:X = GetPVarFloat(playerid, "SpecX"), Float:Y = GetPVarFloat(playerid, "SpecY"), Float:Z = GetPVarFloat(playerid, "SpecZ"),
               Float:FA = GetPVarFloat(playerid, "SpecFA"), inter = GetPVarInt(playerid, "SpecInt"), world = GetPVarInt(playerid, "SpecWorld");
               DeletePVar(playerid, "SpecX");
               DeletePVar(playerid, "SpecY");
               DeletePVar(playerid, "SpecZ");
               DeletePVar(playerid, "SpecFA");
               DeletePVar(playerid, "SpecInt");
               DeletePVar(playerid, "SpecWorld");
               SetPlayerPos(playerid, X, Y, Z);
               SetPlayerFacingAngle(playerid, FA);
               SetPlayerVirtualWorld(playerid, world);
               SetPlayerInterior(playerid, inter);
               SetPlayerScore(playerid, PlayerInfo[playerid][pLevel]);
               if(PlayerInfo[playerid][pWanted] > 0) SetPlayerWantedLevel(playerid, PlayerInfo[playerid][pWanted]);
               if(PlayerInfo[playerid][pSkin] > 0) SetPlayerSkin(playerid,PlayerInfo[playerid][pSkin]);
               else SetPlayerSkin(playerid, PlayerInfo[playerid][pModel]);
               return true;
       }

к new:

Спойлер
enum noclipenum
{
        cameramode,flyobject,mode,lrold,udold,lastmove,Float:accelmul
}
new noclipdata[MAX_PLAYERS][noclipenum];

OnPlayerConnect:

Спойлер
noclipdata[playerid][cameramode] = CAMERA_MODE_NONE;
noclipdata[playerid][lrold] = 0;
noclipdata[playerid][udold] = 0;
noclipdata[playerid][mode] = 0;
noclipdata[playerid][lastmove] = 0;
noclipdata[playerid][accelmul] = 0.0;

OnPlayerUpdate:

Спойлер
if(noclipdata[playerid][cameramode] == CAMERA_MODE_FLY)
       {
               new keys,ud,lr;
               GetPlayerKeys(playerid,keys,ud,lr);
 
               if(noclipdata[playerid][mode] && (GetTickCount() - noclipdata[playerid][lastmove] > 100))
               {
                       MoveCamera(playerid);
               }
               if(noclipdata[playerid][udold] != ud || noclipdata[playerid][lrold] != lr)
               {
                       if((noclipdata[playerid][udold] != 0 || noclipdata[playerid][lrold] != 0) && ud == 0 && lr == 0)
                       {
                               StopPlayerObject(playerid, noclipdata[playerid][flyobject]);
                               noclipdata[playerid][mode]      = 0;
                               noclipdata[playerid][accelmul]  = 0.0;
                       }
                       else
                       {
                               noclipdata[playerid][mode] = GetMoveDirectionFromKeys(ud, lr);
                               MoveCamera(playerid);
                       }
               }
               noclipdata[playerid][udold] = ud; noclipdata[playerid][lrold] = lr;
               return 0;
       }

 

Если что то не будет работать, то это из-за переменных. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ты не полностью вырезал систему

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ко всем define

#define MOVE_SPEED 100.0
#define ACCEL_RATE 0.03
#define CAMERA_MODE_NONE 0
#define CAMERA_MODE_FLY 1
#define MOVE_FORWARD 1
#define MOVE_BACK 2
#define MOVE_LEFT 3
#define MOVE_RIGHT 4
#define MOVE_FORWARD_LEFT 5
#define MOVE_FORWARD_RIGHT 6
#define MOVE_BACK_LEFT 7
#define MOVE_BACK_RIGHT 8

 

Отредактировано пользователем kut1r0

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Что делать если меня спавнит где то в воздухе и я не могу летать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!


Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.


Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

  • Похожий контент

    • gooding
      От gooding


      Скачать файл PAR RP | Доработанный мод Cruela RP | Без багов
      Всем здравствуйте, уважаемые читатели. Я много времени потратил на доработку данного игрового мода, чтобы его выставить на форум.
      Лог доработок можно посмотреть внизу, а скриншоты игрового мода внизу и верху.
      Основа данного мода: Cruela RP
       
       

      Добавил gooding Добавлено 20.11.2024 Категория Моды Автор GOODING (Я)  
    • gooding
      От gooding
      Всем здравствуйте, уважаемые читатели. Я много времени потратил на доработку данного игрового мода, чтобы его выставить на форум.
      Лог доработок можно посмотреть внизу, а скриншоты игрового мода внизу и верху.
      Основа данного мода: Cruela RP
       
       

    • Max Luilchack
      От Max Luilchack
      Нужен человек который сможет сделать примерную карту Украины для сервера crmp mobile. Если есть желающие пишите в дс: lamarlml
    • Yashich
      От Yashich
      Возникла проблема, не работает команда /giverank Что здесь может работать не так? Заранее спасибо за ответ)
      Вот строки кода связанные с этой командой (мод Аризона)
       
      CMD:giverank(playerid, params[]) {     if(PI[playerid][pMember]<=0)return 0;     if(PI[playerid][pRank] < 9 && PI[playerid][pLeader] == 0) return SCM(playerid, COLOR_RED, !"Отказано в доступе!");     if(sscanf(params,"ud",params[0],params[1])) return SCM(playerid, COLOR_RED, !"Используйте: /giverank [id] [rank]");     if(!ProxDetectorS(8.0, playerid, params[0])) return SCM(playerid, COLOR_GREY, !"Вы должны находиться рядом с игроком!");     if(PI[params[0]][pLeader] > 0 ) return SCM(playerid, COLOR_RED, !"Вы не можете изменять ранг лидеру");     if(params[1] < 1) return SCM(playerid, COLOR_GREY, !"Нельзя повысить до этого ранга");     if(Clother[params[0]]!=-1)return 0;     if(GetPlayerVirtualWorld(playerid)!=GetPlayerVirtualWorld(params[0]))return 0;     if(!IsPlayerConnected(params[0])) return SCM(playerid, COLOR_GREY, !"Игрок не найден");     if(PI[playerid][pRank] <= PI[params[0]][pRank]) return SCM(playerid, COLOR_GREY, !"Вы не можете повысить/понизить этого игрока");     if(PI[playerid][pRank] == 9 && params[1] > 8) return SCM(playerid, COLOR_RED, !"Нельзя выдать ранг больше 8");     if(params[1] > 9) return SCM(playerid, COLOR_GREY, !"Нельзя повысить до этого ранга");     if(PI[params[0]][pMember] != PI[playerid][pMember]) return SCM(playerid, COLOR_GREY, !"Игрок находиться в другой организации!");     str_1[0] = EOS;     f(str_1,100,"Лидер %s %s до %i ранга",PN(playerid),PI[params[0]][pRank] > params[1] ? ("понизил"):("повысил"),params[1]);     SCM(params[0],COLOR_LIGHTBLUE,str_1);     f(str_1,100,"Вы %sи игрока %s до %i ранга",PI[params[0]][pRank] > params[1] ? ("понизил"):("повысил"),PN(params[0]),params[1]);     SCM(playerid,COLOR_LIGHTBLUE,str_1);     PI[params[0]][pRank] = params[1];     UpdatePlayerDataInt(params[0], "Rank", params[1]);     if(PI[params[0]][pSex] == 2) if(TeamDuty{params[0]}) SetPlayerSkinEx(params[0],GOrgSkins[GetTeamID(params[0])][params[1]]), TogglePlayerControllable(params[0],true);     else if(TeamDuty{params[0]}) SetPlayerSkinEx(params[0],MOrgSkins[GetTeamID(params[0])][params[1]]), TogglePlayerControllable(params[0],true);     return 1; }