Fly camera - Уроци
Флай камера
Модератор: SJplayer

Флай камера
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 ]