Fly camera - Уроци

Флай камера

Модератор: SJplayer

camera

Флай камера

Camera flyОт Prolific

Реших да напиша този урок по една тема, а именно полет на камера, този FS е в стандартната сборка на samp, но ако искате да качите всичко в мода, тогава този урок е за вас. Разбира се, има и cleo скрипт, но мисля, че е по-добре да има такава камера в модата.

След включването вмъкнете

#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 _НАДЯСНО 4 #define MOVE_FORWARD_LEFT 5 #define MOVE_FORWARD_RIGHT 6 #define MOVE_BACK_LEFT 7 #define MOVE_BACK_RIGHT 8

До всички нови добавки:

enum noclipenum cameramode, flyobject, mode, lrold, udold, lastmove, Float: accelmul > нови noclipdata [ MAX_PLAYERS ][ noclipenum ];

След това вpublic OnGameModeExit вмъкнете:

Следващ впубличен 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); друго FlyMode (playerid); върни 1; > >

Следващ вpublic OnPlayerUpdate вставляем:

if(noclipdata [playerid][cameramode] == CAMERA_MODE_FLY) нов ключ, ud, lr; GetPlayerKeys (playerid, keyss, ud, lr);

// Текущото състояние на ключа на играчите различно ли е от последното им? 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; > друго < // Показва, че е натиснат нов клавиш

// Получаване на посоката, в която играчът иска да се движи, както е посочено от клавишите noclipdata [ playerid ][ mode ] = GetMoveDirectionFromKeys ( ud , lr );

// Процес на преместване на обекта, към който е прикрепена камерата на играча MoveCamera (playerid); > > noclipdata [playerid][udold] = ud; noclipdata [playerid][lrold] = lr; // Съхранява текущите натиснати клавиши за сравнение следваща актуализация връщане 0 ; >

След това в края на модата добавяте:

запас GetMoveDirectionFromKeys ( ud , lr ) нова посока = 0;

if( lr 0 ) direction = MOVE_BACK_LEFT ; // Назад & Натиснат ляв клавиш друга посока = MOVE_LEFT ; // Натиснат ляв клавиш > else if( lr > 0 ) // Натиснато надясно if( ud 0 ) direction = MOVE_BACK_RIGHT ; // Назад & Натиснат десен клавиш друга посока = MOVE_RIGHT ; // Натиснат десен клавиш > друго if( ud 0 ) direction = MOVE_BACK ; // Натиснат клавиш надолу

посока на връщане ; > наличностMoveCamera (playerid) нов Float: FV [3], Float: CPP [3]; GetPlayerCameraPos(playerid, cpp[0], cpp[1], cpp[2]); // Позиция на камерите в пространството GetPlayerCameraFrontVector(playerid, FV [0], FV [1], FV [2]); // Където гледа камерата

// Увеличава множителя на ускорението колкото по-дълго се задържи клавишът if( noclipdata [ playerid ][ accelmul ]