Mivčo 90 Odesláno: 10. Září, 2017 Share Odesláno: 10. Září, 2017 Ingame Camera Movement Editor O čom to je? Jedná sa o FilterScript, ktorý vám pomôže pri vytváraní pohybu fotoaparátu pomocou InterpolateCameraLookAt a InterpolateCameraPos v hre. Používa sa FlyMod s ktorými môžete ľahko lietať po mape. Vlastnosti => Lietať pomocou FlyMode => Nastavte pozície kamery jednoducho kliknutím na tlačidlo myši => Môžete zmeniť štart pozície, koniec pozície a rýchlosť pozície aj po ukončení pohybu => Jednoducho používaný systém aj z návodom Video https://www.youtube.com/watch?v=TbU0U32TtlE&hd=1 Poznámka: Tento filtercript bude fungovať len s SA-MP 0.3e RC5 a vyššie Download: /* _____ _ _ | __ \ | | (_) | | | |_ __ ___| |__ _ _ __ | | | | '__/ _ \ '_ \| | '_ \ | |__| | | | __/ |_) | | | | | |_____/|_| \___|_.__/|_|_| |_| ©2012 v 1.1 */ #include <a_samp> #include <zcmd> #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 #define DIALOG_MENU 1678 #define DIALOG_MOVE_SPEED 1679 #define DIALOG_ROT_SPEED 1680 #define DIALOG_EXPORTNAME 1681 #define DIALOG_CLOSE_NEW 1682 const Float:fScale = 5.0; new MenuTimer; new Float:fPX, Float:fPY, Float:fPZ, Float:fVX, Float:fVY, Float:fVZ, Float:object_x, Float:object_y, Float:object_z; new bool:IsCreating[MAX_PLAYERS] = false; new bool:IsReSettingStart[MAX_PLAYERS] = false; new bool:IsReSettingEnd[MAX_PLAYERS] = false; new bool:SettingFirstLoc[MAX_PLAYERS] = false; new bool:SettingLastLoc[MAX_PLAYERS] = false; new bool:IsCamMoving[MAX_PLAYERS] = false; enum noclipenum { cameramode, flyobject, mode, lrold, udold, lastmove, Float:accelmul } new noclipdata[MAX_PLAYERS][noclipenum]; enum Coordinates { Float:StartX, Float:StartY, Float:StartZ, Float:EndX, Float:EndY, Float:EndZ, Float:StartLookX, Float:StartLookY, Float:StartLookZ, Float:EndLookX, Float:EndLookY, Float:EndLookZ, MoveSpeed, RotSpeed } new coordInfo[MAX_PLAYERS][Coordinates]; #if defined FILTERSCRIPT public OnFilterScriptInit() { print("\n--------------------------------------"); print(" CamEditor by Drebin"); print("--------------------------------------\n"); return 1; } public OnFilterScriptExit() { for(new x; x<MAX_PLAYERS; x++) { if(noclipdata[x][cameramode] == CAMERA_MODE_FLY) CancelFlyMode(x); } return 1; } #endif public OnPlayerConnect(playerid) { 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; IsCreating[playerid] = false; IsReSettingStart[playerid] = false; IsReSettingEnd[playerid] = false; SettingFirstLoc[playerid] = false; SettingLastLoc[playerid] = false; IsCamMoving[playerid] = false; coordInfo[playerid][MoveSpeed] = 1000; coordInfo[playerid][RotSpeed] = 1000; return 1; } public OnPlayerSpawn(playerid) { if(IsCreating[playerid] == false) SendClientMessage(playerid, -1, "Príkaz: /cameditor na otvorenie editora záznam kamery"); } CMD:cameditor(playerid,params[]) { if(IsCamMoving[playerid] == false) { if(GetPVarType(playerid, "FlyMode")) { CancelFlyMode(playerid); IsCreating[playerid] = false; } else FlyMode(playerid); } return 1; } CMD:closecameditor(playerid,params[]) { if(IsCreating[playerid]) { CancelFlyMode(playerid); IsCreating[playerid] = false; 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; IsCreating[playerid] = false; IsReSettingStart[playerid] = false; IsReSettingEnd[playerid] = false; SettingFirstLoc[playerid] = false; SettingLastLoc[playerid] = false; IsCamMoving[playerid] = false; coordInfo[playerid][MoveSpeed] = 1000; coordInfo[playerid][RotSpeed] = 1000; SendClientMessage(playerid, -1, "Opustili ste editor pre pohyb kamery."); } else SendClientMessage(playerid, -1, "Momentálne nepoužívate editor pre pohyb kamery."); return 1; } public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) { if ((newkeys & KEY_FIRE) && !(oldkeys & KEY_FIRE)) { if(IsCreating[playerid] == true) { if(SettingFirstLoc[playerid] == true) { const Float:fScale = 5.0; GetPlayerCameraPos(playerid, fPX, fPY, fPZ); GetPlayerCameraFrontVector(playerid, fVX, fVY, fVZ); object_x = fPX + floatmul(fVX, fScale); object_y = fPY + floatmul(fVY, fScale); object_z = fPZ + floatmul(fVZ, fScale); coordInfo[playerid][StartX] = fPX; coordInfo[playerid][StartY] = fPY; coordInfo[playerid][StartZ] = fPZ; coordInfo[playerid][StartLookX] = object_x; coordInfo[playerid][StartLookY] = object_y; coordInfo[playerid][StartLookZ] = object_z; if(IsReSettingStart[playerid] == true) { SendClientMessage(playerid, -1, "{8EFF8E}>{FFFFFF} Štartovacia pozícia {8EFF8E}re-set."); ShowPlayerDialog(playerid, DIALOG_MENU, DIALOG_STYLE_LIST,"Dalsi Krok?","Ukažka\nZmeniť Štart\nZmeniť Koniec\nZmeniť Rýchlosť\nUložiť","Ok","Koniec"); IsReSettingStart[playerid] = false; IsReSettingEnd[playerid] = false; SettingFirstLoc[playerid] = false; SettingLastLoc[playerid] = false; } else { SendClientMessage(playerid, -1, "{8EFF8E}>{FFFFFF} Štartovacia pozícia {8EFF8E}set."); SendClientMessage(playerid, -1, "Teraz používate {F58282}~k~~PED_FIREWEAPON~ {FFFFFF}aby ste uložili pozíciu kamery ako {F58282}koniec {FFFFFF}pozicie."); SettingLastLoc[playerid] = true; SettingFirstLoc[playerid] = false; } } else if(SettingLastLoc[playerid] == true) { const Float:fScale = 5.0; new string[512]; format(string, sizeof(string), "Zadajte požadované {F58282}movement{a9c4e4} čas v milisekundách\n\nAktuálna rýchlosť pohybu: \t{F58282}%i milisekundy\n{a9c4e4}Aktuálna rýchlosť otáčania: \t{F58282}%i milisekundách\n\n\nPoznámka: {a9c4e4}1 sekunda = 1000 milisekunda", coordInfo[playerid][MoveSpeed], coordInfo[playerid][RotSpeed]); ShowPlayerDialog(playerid, DIALOG_MOVE_SPEED, DIALOG_STYLE_INPUT, "Rýchlosť pohybu", string,"Ok","Koniec"); GetPlayerCameraPos(playerid, fPX, fPY, fPZ); GetPlayerCameraFrontVector(playerid, fVX, fVY, fVZ); object_x = fPX + floatmul(fVX, fScale); object_y = fPY + floatmul(fVY, fScale); object_z = fPZ + floatmul(fVZ, fScale); coordInfo[playerid][EndX] = fPX; coordInfo[playerid][EndY] = fPY; coordInfo[playerid][EndZ] = fPZ; coordInfo[playerid][EndLookX] = object_x; coordInfo[playerid][EndLookY] = object_y; coordInfo[playerid][EndLookZ] = object_z; if(IsReSettingEnd[playerid] == true) { SendClientMessage(playerid, -1, "{8EFF8E}>{FFFFFF} Koniec pozície {8EFF8E}re-set."); ShowPlayerDialog(playerid, DIALOG_MENU, DIALOG_STYLE_LIST,"Dalsi Krok?","Ukažka\nZmeniť Štart\nZmeniť Koniec\nZmeniť Rýchlosť\nUložiť","Ok","Koniec"); IsReSettingStart[playerid] = false; IsReSettingEnd[playerid] = false; SettingFirstLoc[playerid] = false; SettingLastLoc[playerid] = false; } else { SendClientMessage(playerid, -1, "{8EFF8E}>{FFFFFF} Koniec pozície {8EFF8E}set."); SettingLastLoc[playerid] = false; } } } } return 1; } public OnPlayerUpdate(playerid) { 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; } return 1; } public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) { switch(dialogid) { case DIALOG_MENU: { if(response) { switch(listitem) { case 0: //Preview { PreviewMovement(playerid); } case 1: //Change start { DestroyPlayerObject(playerid, noclipdata[playerid][flyobject]); IsReSettingEnd[playerid] = false; SettingLastLoc[playerid] = false; IsReSettingStart[playerid] = true; SettingFirstLoc[playerid] = true; noclipdata[playerid][flyobject] = CreatePlayerObject(playerid, 19300, coordInfo[playerid][StartX], coordInfo[playerid][StartY], coordInfo[playerid][StartZ], 0.0, 0.0, 0.0); TogglePlayerSpectating(playerid, true); AttachCameraToPlayerObject(playerid, noclipdata[playerid][flyobject]); SetPVarInt(playerid, "FlyMode", 1); noclipdata[playerid][cameramode] = CAMERA_MODE_FLY; SendClientMessage(playerid, -1, "Použiť {F58282}~k~~PED_FIREWEAPON~ {FFFFFF}pre nastavenie {F58282}novej {FFFFFF}pozicie."); } case 2: //Change end { DestroyPlayerObject(playerid, noclipdata[playerid][flyobject]); IsReSettingStart[playerid] = false; SettingFirstLoc[playerid] = false; IsReSettingEnd[playerid] = true; SettingLastLoc[playerid] = true; IsCreating[playerid] = true; SetCameraBehindPlayer(playerid); noclipdata[playerid][flyobject] = CreatePlayerObject(playerid, 19300, coordInfo[playerid][EndX], coordInfo[playerid][EndY], coordInfo[playerid][EndZ], 0.0, 0.0, 0.0); TogglePlayerSpectating(playerid, true); AttachCameraToPlayerObject(playerid, noclipdata[playerid][flyobject]); SetPVarInt(playerid, "FlyMode", 1); noclipdata[playerid][cameramode] = CAMERA_MODE_FLY; SendClientMessage(playerid, -1, "Použiť {F58282}~k~~PED_FIREWEAPON~ {FFFFFF}pre nastavenie {F58282}konečnej {FFFFFF}pozície."); } case 3: //Change speed { new string[512]; format(string, sizeof(string), "Zadajte požadované pre {F58282}pohyb{a9c4e4} čas v milisekundách\n\nAktuálna rýchlosť pohybu: \t{F58282}%i milisekundy\n{a9c4e4}Aktuálna rýchlosť otáčania: \t{F58282}%i milisekundách\n\n\nPoznámka: {a9c4e4}1 sekunda = 1000 milisekunda", coordInfo[playerid][MoveSpeed], coordInfo[playerid][RotSpeed]); ShowPlayerDialog(playerid, DIALOG_MOVE_SPEED, DIALOG_STYLE_INPUT, "Movement Speed", string,"Ok","Cancel"); } case 4: //Export { ShowPlayerDialog(playerid, DIALOG_EXPORTNAME, DIALOG_STYLE_INPUT, "Uložiť pohyb","Zadajte názov pre pohyb","Ok","Koniec"); } } } else { CancelFlyMode(playerid); SendClientMessage(playerid, -1, "Opustili ste editor pre pohyb kamery."); IsCreating[playerid] = false; } } case DIALOG_MOVE_SPEED: { if(response) { if(strlen(inputtext)) { if(IsNumeric(inputtext)) { coordInfo[playerid][MoveSpeed] = strval(inputtext); new string[512]; format(string, sizeof(string), "Zadajte požadované pre {F58282}rotaciu{a9c4e4} čas v milisekundách\n\nAktuálna rýchlosť pohybu: \t{F58282}%i milisekundy\n{a9c4e4}Aktuálna rýchlosť otáčania: \t{F58282}%i milisekundách\n\n\nPoznámka: {a9c4e4}1 sekunda = 1000 milisekunda", coordInfo[playerid][MoveSpeed], coordInfo[playerid][RotSpeed]); ShowPlayerDialog(playerid, DIALOG_ROT_SPEED, DIALOG_STYLE_INPUT, "Rotacia rýchlosť", string,"Ok","Koniec"); IsReSettingStart[playerid] = false; IsReSettingEnd[playerid] = false; } else { new string[512]; format(string, sizeof(string), "Zadajte požadované pre {F58282}pohyb{a9c4e4} čas v milisekondách\n\nAktuálna rýchlosť pohybu: \t{F58282}%i milisekundy\n{a9c4e4}Aktuálna rýchlosť otáčania: \t{F58282}%i milisekundy\n{FF0000}Používajte len čísla\n\n{F58282}Poznámka: {a9c4e4}1 sekunda = 1000 milisekunda", coordInfo[playerid][MoveSpeed], coordInfo[playerid][RotSpeed]); ShowPlayerDialog(playerid, DIALOG_MOVE_SPEED, DIALOG_STYLE_INPUT, "Pohybová rýchlosť", string,"Ok","Koniec"); } } else { new string[512]; format(string, sizeof(string), "Zadajte požadované pre {F58282}pohyb{a9c4e4} čas v milisekondách\n\nAktuálna rýchlosť pohybu: \t{F58282}%i milisekundy\n{a9c4e4}Aktuálna rýchlosť otáčania: \t{F58282}%i milisekundy\n{FF0000}Ty musíš zadať hodnotu\n\n{F58282}Poznámka: {a9c4e4}1 sekunda = 1000 milisekunda", coordInfo[playerid][MoveSpeed], coordInfo[playerid][RotSpeed]); ShowPlayerDialog(playerid, DIALOG_MOVE_SPEED, DIALOG_STYLE_INPUT, "Pohybová rýchlosť", string,"Ok","Koniec"); } } else { ShowPlayerDialog(playerid, DIALOG_MENU, DIALOG_STYLE_LIST,"Dalsi Krok?","Ukažka\nZmeniť Štart\nZmeniť Koniec\nZmeniť Rýchlosť\nUložiť","Ok","Koniec"); } } case DIALOG_ROT_SPEED: { if(response) { if(strlen(inputtext)) { if(IsNumeric(inputtext)) { coordInfo[playerid][RotSpeed] = strval(inputtext); ShowPlayerDialog(playerid, DIALOG_MENU, DIALOG_STYLE_LIST,"Dalsi Krok?","Ukažka\nZmeniť Štart\nZmeniť Koniec\nZmeniť Rýchlosť\nUložiť","Ok","Koniec"); IsReSettingStart[playerid] = false; IsReSettingEnd[playerid] = false; } else { new string[512]; format(string, sizeof(string), "Zadajte požadované pre {F58282}pohyb{a9c4e4} čas v milisekondách\n\nAktuálna rýchlosť pohybu: \t{F58282}%i milisekundy\n{a9c4e4}Aktuálna rýchlosť otáčania: \t{F58282}%i milisekundy\n{FF0000}Používajte len čísla\n\n{F58282}Poznámka: {a9c4e4}1 sekunda = 1000 milisekunda", coordInfo[playerid][MoveSpeed], coordInfo[playerid][RotSpeed]); ShowPlayerDialog(playerid, DIALOG_ROT_SPEED, DIALOG_STYLE_INPUT, "Rotacia rýchlosť", string,"Ok","Koniec"); } } else { new string[512]; format(string, sizeof(string), "Zadajte požadované pre {F58282}pohyb{a9c4e4} čas v milisekondách\n\nAktuálna rýchlosť pohybu: \t{F58282}%i milisekundy\n{a9c4e4}Aktuálna rýchlosť otáčania: \t{F58282}%i milisekundy\n{FF0000}Ty musíš zadať hodnotu\n\n{F58282}Poznámka: {a9c4e4}1 sekunda = 1000 milisekunda", coordInfo[playerid][MoveSpeed], coordInfo[playerid][RotSpeed]); ShowPlayerDialog(playerid, DIALOG_ROT_SPEED, DIALOG_STYLE_INPUT, "Rotacia rýchlosť", string,"Ok","Koniec"); } } else { new string[512]; format(string, sizeof(string), "Zadajte požadované pre {F58282}pohyb{a9c4e4} čas v milisekondách\n\nAktuálna rýchlosť pohybu: \t{F58282}%i milisekundy\n{a9c4e4}Aktuálna rýchlosť otáčania: \t{F58282}%i milisekundy\n{FF0000}Ty musíš zadať hodnotu\n\n{F58282}Poznámka: {a9c4e4}1 sekunda = 1000 milisekunda", coordInfo[playerid][MoveSpeed], coordInfo[playerid][RotSpeed]); ShowPlayerDialog(playerid, DIALOG_MOVE_SPEED, DIALOG_STYLE_INPUT, "Pohybová rýchlosť", string,"Ok","Koniec"); } } case DIALOG_EXPORTNAME: { if(response) { if(strlen(inputtext)) { ExportMovement(playerid, inputtext); } else { ShowPlayerDialog(playerid, DIALOG_EXPORTNAME, DIALOG_STYLE_INPUT, "Save movement","Enter a name for the movement\n{FF0000}You need to enter a text","Ok","Cancel"); } } else { ShowPlayerDialog(playerid, DIALOG_MENU, DIALOG_STYLE_LIST,"Dalsi Krok?","Ukažka\nZmeniť Štart\nZmeniť Koniec\nZmeniť Rýchlosť\nUložiť","Ok","Koniec"); } } case DIALOG_CLOSE_NEW: { if(response) { IsCreating[playerid] = true; SettingFirstLoc[playerid] = true; FlyMode(playerid); } else { SendClientMessage(playerid, -1, "Opustili ste editor pre pohyb kamery."); CancelFlyMode(playerid); IsCreating[playerid] = false; } } } return 1; } forward ShowPlayerMenu(playerid); public ShowPlayerMenu(playerid) { KillTimer(MenuTimer); IsCamMoving[playerid] = false; ShowPlayerDialog(playerid, DIALOG_MENU, DIALOG_STYLE_LIST,"Dalsi Krok?","Ukažka\nZmeniť Štart\nZmeniť Koniec\nZmeniť Rýchlosť\nUložiť","Ok","Koniec"); return 1; } forward PreviewMovement(playerid); public PreviewMovement(playerid) { IsCamMoving[playerid] = true; DestroyObject(noclipdata[playerid][flyobject]); SetCameraBehindPlayer(playerid); if(coordInfo[playerid][MoveSpeed] > coordInfo[playerid][RotSpeed]) MenuTimer = SetTimerEx("ShowPlayerMenu", coordInfo[playerid][MoveSpeed], 0, "i", playerid); else MenuTimer = SetTimerEx("ShowPlayerMenu", coordInfo[playerid][RotSpeed], 0, "i", playerid); InterpolateCameraPos(playerid, coordInfo[playerid][StartX], coordInfo[playerid][StartY], coordInfo[playerid][StartZ], coordInfo[playerid][EndX], coordInfo[playerid][EndY], coordInfo[playerid][EndZ],coordInfo[playerid][MoveSpeed]); InterpolateCameraLookAt(playerid, coordInfo[playerid][StartLookX],coordInfo[playerid][StartLookY],coordInfo[playerid][StartLookZ],coordInfo[playerid][EndLookX],coordInfo[playerid][EndLookY],coordInfo[playerid][EndLookZ],coordInfo[playerid][RotSpeed]); return 1; } forward ExportMovement(playerid, inputtext[]); public ExportMovement(playerid, inputtext[]) { new tagstring[64]; new movestring[512]; new rotstring[512]; new filename[50]; format(filename, 128, "CamEdit_%s.txt", inputtext); format(tagstring, sizeof(tagstring), "|----------%s----------|\r\n", inputtext); format(movestring, sizeof(movestring),"InterpolateCameraPos(playerid, %f, %f, %f, %f, %f, %f, %i);\r\n",coordInfo[playerid][StartX], coordInfo[playerid][StartY], coordInfo[playerid][StartZ], coordInfo[playerid][EndX], coordInfo[playerid][EndY], coordInfo[playerid][EndZ],coordInfo[playerid][MoveSpeed]); format(rotstring,sizeof(rotstring),"InterpolateCameraLookAt(playerid, %f, %f, %f, %f, %f, %f, %i);",coordInfo[playerid][StartLookX],coordInfo[playerid][StartLookY],coordInfo[playerid][StartLookZ],coordInfo[playerid][EndLookX],coordInfo[playerid][EndLookY],coordInfo[playerid][EndLookZ],coordInfo[playerid][RotSpeed]); new File:File = fopen(filename, io_write); fwrite(File, tagstring); fwrite(File, movestring); fwrite(File, rotstring); fclose(File); new myOutpString[256]; format(myOutpString, sizeof(myOutpString), "Pohyb kamery uložený pod {F58282}%s {a9c4e4}do zložky scriptfiles!\n\nČo chceš urobiť ďalej?", filename); ShowPlayerDialog(playerid, DIALOG_CLOSE_NEW, DIALOG_STYLE_MSGBOX,"Čo dalej?",myOutpString,"Vytvoriť nové","Exit"); } 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:CP[3]; GetPlayerCameraPos(playerid, CP[0], CP[1], CP[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], CP, FV, X, Y, Z); MovePlayerObject(playerid, noclipdata[playerid][flyobject], X, Y, Z, speed); noclipdata[playerid][lastmove] = GetTickCount(); return 1; } //-------------------------------------------------- stock GetNextCameraPosition(move_mode, Float:CP[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 = CP[0]+OFFSET_X; Y = CP[1]+OFFSET_Y; Z = CP[2]+OFFSET_Z; } case MOVE_BACK: { X = CP[0]-OFFSET_X; Y = CP[1]-OFFSET_Y; Z = CP[2]-OFFSET_Z; } case MOVE_LEFT: { X = CP[0]-OFFSET_Y; Y = CP[1]+OFFSET_X; Z = CP[2]; } case MOVE_RIGHT: { X = CP[0]+OFFSET_Y; Y = CP[1]-OFFSET_X; Z = CP[2]; } case MOVE_BACK_LEFT: { X = CP[0]+(-OFFSET_X - OFFSET_Y); Y = CP[1]+(-OFFSET_Y + OFFSET_X); Z = CP[2]-OFFSET_Z; } case MOVE_BACK_RIGHT: { X = CP[0]+(-OFFSET_X + OFFSET_Y); Y = CP[1]+(-OFFSET_Y - OFFSET_X); Z = CP[2]-OFFSET_Z; } case MOVE_FORWARD_LEFT: { X = CP[0]+(OFFSET_X - OFFSET_Y); Y = CP[1]+(OFFSET_Y + OFFSET_X); Z = CP[2]+OFFSET_Z; } case MOVE_FORWARD_RIGHT: { X = CP[0]+(OFFSET_X + OFFSET_Y); Y = CP[1]+(OFFSET_Y - OFFSET_X); Z = CP[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; IsReSettingStart[playerid] = false; IsReSettingEnd[playerid] = false; SettingFirstLoc[playerid] = false; SettingLastLoc[playerid] = false; return 1; } //-------------------------------------------------- stock FlyMode(playerid) { new Float:X, Float:Y, Float:Z; IsCreating[playerid] = true; SettingFirstLoc[playerid] = true; 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; SendClientMessage(playerid, -1, "Zadali ste editor pohybu pohybu kamery."); SendClientMessage(playerid, -1, "Môžeš pouiť /closecameditor pre ukončenie príkazu."); SendClientMessage(playerid, -1, "Pomocou šípkami HORE DOLE DOPRAVA či DOLAVA sa môžte pohybovať po mape"); SendClientMessage(playerid, -1, "Príkaz {F58282}~k~~PED_FIREWEAPON~ {FFFFFF}aby ste uložili pozíciu kamery ako {F58282}štartovaciu {FFFFFF}pozíciu."); return 1; } IsNumeric(szInput[]) { new iChar, i = 0; while ((iChar = szInput[i++])) if (!('0' <= iChar <= '9')) return 0; return 1; } Original topic: http://forum.sa-mp.com/showthread.php?t=330879 Inštalácia: 1. Skopírujte script a dajte ho do programu pawno 2. Stlačte F5 vytvorí sa vám príkaz v amx 3. Vytvorený príkaz dajte do zložky FilterScript 4. Vytvorený príkaz zapíšte do server.cfg 5. Spustite server a ste hotoví! Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now