Criminal-Staff

ОТкрытие?*
 

Ну, заходи, гостем будешь! Если ты читаешь этот текст, значит тебе пора зарегистрироваться. Жми эту надпись, чтобы зарегистрироваться и начать полноценно пользоваться нашим форумом!
Последние темы
» Rifa Gang ■ Курилка (тема для свободного общения) ■
автор Stiven_Winston Вс 21 Авг - 20:12

» || ООО "Дизайн" || Ценовая политика ||
автор Talgat Вт 16 Авг - 0:39

» || ООО "Дизайн" || Рабочий график ||
автор Talgat Пн 15 Авг - 22:36

» || ООО "Дизайн" || Сотрудники Гос. Организации ||
автор Talgat Пн 15 Авг - 19:56

» Заявление на пост лидера Организации/Банды/Мафии
автор Talgat Пн 15 Авг - 16:58


Начать новую тему   Ответить на темуПоделиться | .
 

 Пример как должна выглядеть работа

Предыдущая тема Следующая тема Перейти вниз 
АвторСообщение
Alexandr_Karat

avatar


Репутация : 42
Ник на сервере: : Alexandr_Karat
Фракция/Банда: : Репортёры
Дата регистрации : 2011-10-25
Возраст : 23
Сообщения : 33
Зодиак : Рак


Посмотреть профиль
СообщениеТема: Пример как должна выглядеть работа   Вт 12 Ноя - 15:38

Я решил написать этот урок по одной теме, а именно полет камерой, этот ФС есть в стандартной сборке самп, но если вы хотите залить вс в мод, то этот урок для вас. Есть конечно и клео скрипт, но я считаю, что в моде лучше иметь такую камеру.
После инклудов вставляем

ко всем #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  
Далее ко всем new добавляем:
Код:
enum noclipenum
{
    cameramode,
    flyobject,
    mode,
    lrold,
    udold,
    lastmove,
    Float:accelmul
}
new noclipdata[MAX_PLAYERS][noclipenum];  
Далее в public OnGameModeExit вставляем:
Код:
for(new x; x<MAX_PLAYERS; x++)
    {
        if(noclipdata[x][cameramode] == CAMERA_MODE_FLY) CancelFlyMode(x);
    }  
Далее в public 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;  
Далее в public OnPlayerCommandText вставляем саму команду:

Код:
if(!strcmp(cmdtext, "/flymode", true))// /flymode можете заменить на свою команду
{
   if(Player[playerid][pAdmin] >= 6)// если не хотите что бы проверяло на админку уберите
   {
      if(GetPVarType(playerid, "FlyMode")) CancelFlyMode(playerid);
      else FlyMode(playerid);
      return 1;
   }
}  
Далее в public OnPlayerUpdate вставляем:
Код:
if(noclipdata[playerid][cameramode] == CAMERA_MODE_FLY)
{
   new keyss,ud,lr;
   GetPlayerKeys(playerid,keyss,ud,lr);

   if(noclipdata[playerid][mode] && (GetTickCount() - noclipdata[playerid][lastmove] > 100))
   {
      // If the last move was > 100ms ago, process moving the object the players camera is attached to
      MoveCamera(playerid);
   }

   // Is the players current key state different than their last keystate?
   if(noclipdata[playerid][udold] != ud || noclipdata[playerid][lrold] != lr)
   {
      if((noclipdata[playerid][udold] != 0 || noclipdata[playerid][lrold] != 0) && ud == 0 && lr == 0)
      {   // All keys have been released, stop the object the camera is attached to and reset the acceleration multiplier
         StopPlayerObject(playerid, noclipdata[playerid][flyobject]);
         noclipdata[playerid][mode]      = 0;
         noclipdata[playerid][accelmul]  = 0.0;
      }
      else
      {   // Indicates a new key has been pressed

         // Get the direction the player wants to move as indicated by the keys
         noclipdata[playerid][mode] = GetMoveDirectionFromKeys(ud, lr);

         // Process moving the object the players camera is attached to
         MoveCamera(playerid);
      }
   }
   noclipdata[playerid][udold] = ud; noclipdata[playerid][lrold] = lr; // Store current keys pressed for comparison next update
   return 0;
}  
Далее в конец мода вставляете:
Код:
stock GetMoveDirectionFromKeys(ud, lr)
{
    new direction = 0;

    if(lr < 0)
    {
        if(ud < 0)         direction = MOVE_FORWARD_LEFT;     // Up & Left key pressed
        else if(ud > 0) direction = MOVE_BACK_LEFT;     // Back & Left key pressed
        else            direction = MOVE_LEFT;          // Left key pressed
    }
    else if(lr > 0)     // Right pressed
    {
        if(ud < 0)      direction = MOVE_FORWARD_RIGHT;  // Up & Right key pressed
        else if(ud > 0) direction = MOVE_BACK_RIGHT;     // Back & Right key pressed
        else            direction = MOVE_RIGHT;          // Right key pressed
    }
    else if(ud < 0)     direction = MOVE_FORWARD;     // Up key pressed
    else if(ud > 0)     direction = MOVE_BACK;        // Down key pressed

    return direction;
}
stock MoveCamera(playerid)
{
     new Float:FV[3], Float:CPP[3];
    GetPlayerCameraPos(playerid, CPP[0], CPP[1], CPP[2]);          //     Cameras position in space
    GetPlayerCameraFrontVector(playerid, FV[0], FV[1], FV[2]);  //  Where the camera is looking at

    // Increases the acceleration multiplier the longer the key is held
    if(noclipdata[playerid][accelmul] <= 1) noclipdata[playerid][accelmul] += ACCEL_RATE;

    // Determine the speed to move the camera based on the acceleration multiplier
    new Float:speed = MOVE_SPEED * noclipdata[playerid][accelmul];

    // Calculate the cameras next position based on their current position and the direction their camera is facing
    new Float:X, Float:Y, Float:Z;
    GetNextCameraPosition(noclipdata[playerid][mode], CPP, FV, X, Y, Z);
    MovePlayerObject(playerid, noclipdata[playerid][flyobject], X, Y, Z, speed);

    // Store the last time the camera was moved as now
    noclipdata[playerid][lastmove] = GetTickCount();
    return 1;
}
stock GetNextCameraPosition(move_mode, Float:CPP[3], Float:FV[3], &Float:X, &Float:Y, &Float:Z)
{
    // Calculate the cameras next position based on their current position and the direction their camera is facing
    #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 = CPP[0]+OFFSET_X;
            Y = CPP[1]+OFFSET_Y;
            Z = CPP[2]+OFFSET_Z;
        }
        case MOVE_BACK:
        {
            X = CPP[0]-OFFSET_X;
            Y = CPP[1]-OFFSET_Y;
            Z = CPP[2]-OFFSET_Z;
        }
        case MOVE_LEFT:
        {
            X = CPP[0]-OFFSET_Y;
            Y = CPP[1]+OFFSET_X;
            Z = CPP[2];
        }
        case MOVE_RIGHT:
        {
            X = CPP[0]+OFFSET_Y;
            Y = CPP[1]-OFFSET_X;
            Z = CPP[2];
        }
        case MOVE_BACK_LEFT:
        {
            X = CPP[0]+(-OFFSET_X - OFFSET_Y);
             Y = CPP[1]+(-OFFSET_Y + OFFSET_X);
             Z = CPP[2]-OFFSET_Z;
        }
        case MOVE_BACK_RIGHT:
        {
            X = CPP[0]+(-OFFSET_X + OFFSET_Y);
             Y = CPP[1]+(-OFFSET_Y - OFFSET_X);
             Z = CPP[2]-OFFSET_Z;
        }
        case MOVE_FORWARD_LEFT:
        {
            X = CPP[0]+(OFFSET_X  - OFFSET_Y);
            Y = CPP[1]+(OFFSET_Y  + OFFSET_X);
            Z = CPP[2]+OFFSET_Z;
        }
        case MOVE_FORWARD_RIGHT:
        {
            X = CPP[0]+(OFFSET_X  + OFFSET_Y);
            Y = CPP[1]+(OFFSET_Y  - OFFSET_X);
            Z = CPP[2]+OFFSET_Z;
        }
    }
}
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)
{
    // Create an invisible object for the players camera to be attached to
    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);

    // Place the player in spectating mode so objects will be streamed based on camera location
    TogglePlayerSpectating(playerid, true);
    // Attach the players camera to the created object
    AttachCameraToPlayerObject(playerid, noclipdata[playerid][flyobject]);

    SetPVarInt(playerid, "FlyMode", 1);
    noclipdata[playerid][cameramode] = CAMERA_MODE_FLY;
    return 1;
}  
Вернуться к началу Перейти вниз
Посмотреть профиль
Гость
Гость




СообщениеТема: Re: Пример как должна выглядеть работа   Ср 13 Ноя - 9:29

клипап рассмотрел?
Вернуться к началу Перейти вниз
Alexandr_Karat

avatar


Репутация : 42
Ник на сервере: : Alexandr_Karat
Фракция/Банда: : Репортёры
Дата регистрации : 2011-10-25
Возраст : 23
Сообщения : 33
Зодиак : Рак


Посмотреть профиль
СообщениеТема: Re: Пример как должна выглядеть работа   Ср 13 Ноя - 13:56

Boris_Petrov пишет:
клипап рассмотрел?
Какой?
Вернуться к началу Перейти вниз
Посмотреть профиль
Спонсируемый контент





СообщениеТема: Re: Пример как должна выглядеть работа   

Вернуться к началу Перейти вниз
 

Пример как должна выглядеть работа

Предыдущая тема Следующая тема Вернуться к началу 
Страница 1 из 1

Права доступа к этому форуму:Вы можете отвечать на сообщения
Criminal-Staff :: • Разное :: Ваши скрипты, map-
Начать новую тему   Ответить на тему