Text sent twice
#1

I know , and I have return false, The script works fine untill I add these

pawn Код:
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    if(dialogid == 400)
    {
        if(!strlen(inputtext))
        {
        ShowPlayerDialog(playerid,400,DIALOG_STYLE_INPUT,"{0080FF}                           Age","{FFFFFF}What is your Birthdate? {0080FF}(Choose from 10 to 99)","Proceed","Cancel");
        //SendClientMessage(playerid, 0xFFFFFFFF, "Your Password Cannot be left Blank"); Kick(playerid);
        //ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT,"Login to your account","Note - A account with this name was found inside the database,\n If this is your account,type in your password\n if not press cancel!","Login","Cancel");
        return 1;
        }
        if(!response){ SendClientMessage(playerid, 0xFFFFFFFF, "You canceled!"); Kick(playerid); return 0; }
        //Encrypt(inputtext);
       
        {
            new string[128];
            new tmp[256];
            new idx;
            if(!IsNumeric(inputtext)) return SendClientMessage(playerid, COLOR_WHITE, "ERROR: Numbers Only...");
            tmp = strtok(inputtext, idx);
            if(!strlen(inputtext))
            {
                ShowPlayerDialog(playerid,400,DIALOG_STYLE_INPUT,"{0080FF}                           Age","{FFFFFF}What is your Birthdate? {0080FF}(Choose from 10 to 99)","Proceed","Cancel");
                return false;
            }
            new moneys;
            moneys = strvalEx(inputtext);
            if(moneys < 10)
            {
                SendClientMessage(playerid, COLOR_LIGHTRED, "ERROR: Choose from 10 to 99");
                ShowPlayerDialog(playerid,400,DIALOG_STYLE_INPUT,"{0080FF}                           Age","{FFFFFF}What is your Birthdate? {0080FF}(Choose from 10 to 99)","Proceed","Cancel");
                return false;
            }
            if(moneys > 99)
            {
                SendClientMessage(playerid, COLOR_LIGHTRED, "ERROR: Choose from 10 to 99");
                ShowPlayerDialog(playerid,400,DIALOG_STYLE_INPUT,"{0080FF}                           Age","{FFFFFF}What is your Birthdate? {0080FF}(Choose from 10 to 99)","Proceed","Cancel");
                return false;
            }
            Account[playerid][pAge] = moneys;
            format(string, sizeof(string), "Registered, please wait.",Account[playerid][pAge]);
            SendClientMessage(playerid, COLOR_WHITE, string);
            SendClientMessage(playerid, COLOR_WHITE, " ");
            //RegistrationStep[playerid] = 4;
            RegistrationStep[playerid] = 0;
            TutTime[playerid] = 1;
           
            return false;
        }
    }
           
    if(dialogid == 300)
    {
        if(!strlen(inputtext))
        {
            ShowPlayerDialog(playerid,300,DIALOG_STYLE_INPUT,"{0080FF}                        Sex","{FFFFFF}What is your gender? {0080FF}Male {FFFFFF}or {0080FF}Female  ","Proceed","Cancel");

            //SendClientMessage(playerid, 0xFFFFFFFF, "Your Password Cannot be left Blank"); Kick(playerid);
            //ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT,"Login to your account","Note - A account with this name was found inside the database,\n If this is your account,type in your password\n if not press cancel!","Login","Cancel");
            return 1;
        }
        if(!response){ SendClientMessage(playerid, 0xFFFFFFFF, "You canceled!"); Kick(playerid); return 0; }
        //Encrypt(inputtext);
       
        {
            new tmp[256];
            new idx;
            tmp = strtok(inputtext, idx);
            if((strcmp("male", tmp, true, strlen(tmp)) == 0) && (strlen(tmp) == strlen("male")))
            {
                Account[playerid][pSex] = 1;
                SetPlayerSkin(playerid, 101);
                Account[playerid][pModel] = 101;
                RegistrationStep[playerid] = 2;
                ShowPlayerDialog(playerid,400,DIALOG_STYLE_INPUT,"{0080FF}                           Age","{FFFFFF}What is your Birthdate? {0080FF}(Choose from 10 to 99)","Proceed","Cancel");
                return false;
            }
            else if((strcmp("female", tmp, true, strlen(tmp)) == 0) && (strlen(tmp) == strlen("female")))
            {
                Account[playerid][pSex] = 2;
                SetPlayerSkin(playerid, 12);
                Account[playerid][pModel] = 12;
                RegistrationStep[playerid] = 2;
                ShowPlayerDialog(playerid,400,DIALOG_STYLE_INPUT,"{0080FF}                           Age","{FFFFFF}What is your Birthdate? {0080FF}(Choose from 10 to 99)","Proceed","Cancel");
                return false;
            }
            else
            {
                ShowPlayerDialog(playerid,300,DIALOG_STYLE_INPUT,"{0080FF}                        Sex","{FFFFFF}What is your gender? {0080FF}Male {FFFFFF}or {0080FF}Female  ","Proceed","Cancel");
            }
            return false;
        }
    }
           
    if(dialogid == 100)
    {
        if(!strlen(inputtext))
        {
            SendClientMessage(playerid, 0xFFFFFFFF, "Your Password Cannot be Blank");
            ShowPlayerDialog(playerid,100,DIALOG_STYLE_INPUT,"{0080FF}                             Register your account","{0080FF}Note - {FFFFFF}An Account with this name was not found inside the database\n if you would like to register this account\nType in the password you would like to register with.","Register","Cancel");
            return 1;
        }
        if(!response){ SendClientMessage(playerid, 0xFFFFFFFF, "You canceled!"); Kick(playerid); return 0; }
        Encrypt(inputtext);
        OnPlayerRegister(playerid,inputtext);
        //ShowPlayerDialog(playerid,300,DIALOG_STYLE_INPUT,"{0080FF}                        Sex","{FFFFFF}What is your gender? {0080FF}Male {FFFFFF}or {0080FF}Female  ","Proceed","Cancel");
    }
    if(dialogid == 200)
    {
        if(!strlen(inputtext))
        {
            SendClientMessage(playerid, 0xFFFFFFFF, "Your Password Cannot be left Blank"); Kick(playerid);
            ShowPlayerDialog(playerid,200,DIALOG_STYLE_INPUT,"{0080FF}                            Login to your account","{0080FF}Note - {FFFFFF}An account with this name was found inside the database,\n If this is your account,type in your password\n if not press cancel.","Login","Cancel");
            return 1;
        }
        if(!response){ SendClientMessage(playerid, 0xFFFFFFFF, "You canceled!"); Kick(playerid); return 0; }
       
        Encrypt(inputtext);
        OnPlayerLogin(playerid,inputtext);
       
    }
    return 1;
}
When I type something, it'll send it twice
Reply
#2

Highlight the error...
Or what messages sends twice.
Reply
#3

I found the problem, I deleted this filterscript and it worked

pawn Код:
/*
 *  Cinematic Camera Node Editor v2.6.1
 *      Added in CameraMover version 2!
 *      Allows server devs to easily edit camera nodes.
 *      Now has a full project editor.
 *
 *  ~Southclaw
 */

#include <a_samp>
#include <sscanf2>
#include <CameraMover>

#define INDEX_FILE      "Cameras/index.txt"
#define strcpy(%0,%1)   strcat((%0[0] = '\0', %0), %1)

// Set up your camera speed defaults here
#define CAM_SPEED       (10.0)  // Standard speed
#define CAM_HI_SPEED    (40.0)  // When pressing SPRINT (Space default)
#define CAM_LO_SPEED    (3.0)   // When pressing WALK (Alt default)

new
    SelectedCamera[MAX_PLAYERS],
    bool:gPlayerEditing[MAX_PLAYERS],
    bool:gPlayerEditingNode[MAX_PLAYERS],
    freeCamUsed[MAX_PLAYERS],
    freeCamObj[MAX_PLAYERS],

    indexData[MAX_CAMERAS][MAX_CAMFILE_LEN];

forward editor_OnCamMove(playerid, node, bool:cont);


#define DIALOG_OFFSET 1000
enum
{
    d_MainMenu = DIALOG_OFFSET,
    d_NewCamName,
    d_ProjectOptions,
    d_ExportDialog,

    d_NodeID,
    d_MoveTime,
    d_WaitTime,
    d_MoveType,

    d_confirmNodeCommit,

    d_ConfirmQuit
}

new
    PlayerText:cam_buttonBack,
    PlayerText:cam_boxBackground,
    PlayerText:cam_arrowLeft,
    PlayerText:cam_arrowRight,

    PlayerText:cam_row1,
    PlayerText:cam_row2,
    PlayerText:cam_row3,
    PlayerText:cam_row4,

    PlayerText:cam_row1Data,
    PlayerText:cam_row2Data,
    PlayerText:cam_row3Data,
    PlayerText:cam_row4Data,

    PlayerText:cam_buttonEdit,
    PlayerText:cam_buttonSave,
    PlayerText:cam_buttonDelt,
    PlayerText:cam_buttonPrev,
    PlayerText:cam_buttonAddN;

public OnFilterScriptInit()
{
    FormatMainMenu(0);
}
stock FormatMainMenu(playerid)
{
    new
        File:idxFile,
        line[64],
        idx,
        strTitle[32],
        strList[MAX_CAMERAS*(MAX_CAMFILE_LEN+1)];

    strList = "New Camera...\n";

    if(!fexist(INDEX_FILE))
    {
        idxFile = fopen(INDEX_FILE, io_write); // If the file doesn't exist, create it now in case it's used later
        if(idxFile)fclose(idxFile);
        else SendClientMessage(playerid, 0xFF0000FF, "ERROR: Directory Not Found. Please create a folder called \"Cameras\" inside \"scriptfiles\".");
    }
    else // But if it does, read each line and add that to the list
    {
        idxFile = fopen(INDEX_FILE, io_read);
        while(fread(idxFile, line))
        {
            strcat(strList, line);
            line[strlen(line)-2] = EOS; // Remove the "\n" this would need to be "-1" if using linux
            strcpy(indexData[idx], line);
            idx++;
        }
        fclose(idxFile);
    }

    format(strTitle, 32, "Total Camera Projects: %d", idx);
    ShowPlayerDialog(playerid, d_MainMenu, DIALOG_STYLE_LIST, strTitle, strList, "Accept", "Close");
}

CreateCameraMover(playerid, camname[])
{
    new
        File:idxFile,
        File:camFile,
        tmpStr[MAX_CAMFILE_LEN+2],
        newData[128],
        iLoop,

        Float:camX, Float:camY, Float:camZ,
        Float:vecX, Float:vecY, Float:vecZ;

    if(!fexist(INDEX_FILE))idxFile = fopen(INDEX_FILE, io_write);
    else idxFile = fopen(INDEX_FILE, io_append);

    strcat(tmpStr, camname);
    strcat(tmpStr, "\r\n");

    while(strlen(indexData[iLoop][0]))iLoop++;
    strcpy(indexData[iLoop], camname);
    fwrite(idxFile, tmpStr);
    fclose(idxFile);


    GetPlayerCameraPos(playerid, camX, camY, camZ);
    GetPlayerCameraFrontVector(playerid, vecX, vecY, vecZ);
    vecX+=camX;
    vecY+=camY;
    vecZ+=camZ;

    format(tmpStr, MAX_CAMFILE_LEN+2, CAMERA_FILE, camname);
    camFile = fopen(tmpStr, io_write);

    format(newData, 128, "%f, %f, %f, %f, %f, %f, %d, %d, %d", camX, camY, camZ, vecX, vecY, vecZ, DEFAULT_MOVETIME, DEFAULT_WAITTIME, DEFAULT_MOVETYPE);
    fwrite(camFile, newData);
    fclose(camFile);
}

stock EditCameraMover(playerid, camera)
{
    gPlayerCamData[playerid][p_CamID] = camera;
    gPlayerEditing[playerid]=true;

    camera_LoadTextDraws(playerid); // Need a check to see if the player has textdraws loaded (Maybe checking if the first ID is an invalid textdraw ID)
    SelectTextDraw(playerid, 0xFFFF00FF);
    ToggleEditGUI(playerid, true);
    JumpToNode(playerid, 0);
}
stock ExitEditing(playerid)
{
    gPlayerCamData[playerid][p_CamID] = -1;
    gPlayerEditing[playerid] = false;
    CancelSelectTextDraw(playerid);
    SetCameraBehindPlayer(playerid);
    ToggleEditGUI(playerid, false);
    TogglePlayerControllable(playerid, true);
}

public editor_OnCamMove(playerid, node, bool:cont)
{
    gPlayerCamData[playerid][p_Node]++;
    UpdateGUI(playerid);
}

SaveCameraMover(playerid, exportmode=0)
{
    new
        tmpCam = gPlayerCamData[playerid][p_CamID],
        tmpNode,
        File:camFile_Main,
        File:camFile_Backup,
        tmpFilename[64],
        tmpLine[256],
        tmpData[3];

    // Create the backup file, then write everything from the main one into the new one
    format(tmpFilename, 64, "%s.bak", camFilename[tmpCam]);

    camFile_Backup=fopen(tmpFilename, io_write);
    camFile_Main = fopen(camFilename[tmpCam], io_write);

    while(fread(camFile_Main, tmpLine))fwrite(camFile_Backup, tmpLine);

    fclose(camFile_Backup);
    fclose(camFile_Main);

    // Now, close that backup file, write all the variable data into the main file

    camFile_Main = fopen(camFilename[tmpCam], io_write);
    while (tmpNode <= camMaxNodes[tmpCam])
    {
        if(!exportmode)
        {
            if (camData[tmpCam][tmpNode][cam_moveTime] == tmpData[0] &&
                camData[tmpCam][tmpNode][cam_waitTime] == tmpData[1] &&
                camData[tmpCam][tmpNode][cam_moveType] == tmpData[2] )
            { // All the data is the same as the last one, ignore it and leave optionals blank
                format(tmpLine, 256, "%f, %f, %f, %f, %f, %f\r\n",
                    camData[tmpCam][tmpNode][cam_cPosX],
                    camData[tmpCam][tmpNode][cam_cPosY],
                    camData[tmpCam][tmpNode][cam_cPosZ],
                    camData[tmpCam][tmpNode][cam_lPosX],
                    camData[tmpCam][tmpNode][cam_lPosY],
                    camData[tmpCam][tmpNode][cam_lPosZ] );
            }
            else
            { // Data is different, write the new data to the line
                format(tmpLine, 256, "%f, %f, %f, %f, %f, %f, %d, %d, %d\r\n",
                    camData[tmpCam][tmpNode][cam_cPosX],
                    camData[tmpCam][tmpNode][cam_cPosY],
                    camData[tmpCam][tmpNode][cam_cPosZ],
                    camData[tmpCam][tmpNode][cam_lPosX],
                    camData[tmpCam][tmpNode][cam_lPosY],
                    camData[tmpCam][tmpNode][cam_lPosZ],
                    camData[tmpCam][tmpNode][cam_moveTime],
                    camData[tmpCam][tmpNode][cam_waitTime],
                    camData[tmpCam][tmpNode][cam_moveType] );

                tmpData[0] = camData[tmpCam][tmpNode][cam_moveTime];
                tmpData[1] = camData[tmpCam][tmpNode][cam_waitTime];
                tmpData[2] = camData[tmpCam][tmpNode][cam_moveType];
            }
        }
        else
        {
            if(tmpNode == camMaxNodes[tmpCam])strcpy(tmpLine, "\r\n");
            else
            {
                format(tmpLine, 256,
                    "InterpolateCameraPos(playerid, %f, %f, %f, %f, %f, %f, %d, %d);\r\n\
                    InterpolateCameraLookAt(playerid, %f, %f, %f, %f, %f, %f, %d, %d);\r\n"
,

                    camData[tmpCam][tmpNode][cam_cPosX],
                    camData[tmpCam][tmpNode][cam_cPosY],
                    camData[tmpCam][tmpNode][cam_cPosZ],
                    camData[tmpCam][tmpNode+1][cam_cPosX],
                    camData[tmpCam][tmpNode+1][cam_cPosY],
                    camData[tmpCam][tmpNode+1][cam_cPosZ],
                    camData[tmpCam][tmpNode][cam_moveTime],
                    camData[tmpCam][tmpNode][cam_moveType],

                    camData[tmpCam][tmpNode][cam_lPosX],
                    camData[tmpCam][tmpNode][cam_lPosY],
                    camData[tmpCam][tmpNode][cam_lPosZ],
                    camData[tmpCam][tmpNode+1][cam_lPosX],
                    camData[tmpCam][tmpNode+1][cam_lPosY],
                    camData[tmpCam][tmpNode+1][cam_lPosZ],
                    camData[tmpCam][tmpNode][cam_moveTime],
                    camData[tmpCam][tmpNode][cam_moveType] );
            }
        }
        fwrite(camFile_Main, tmpLine);
        tmpNode++;
    }
    fclose(camFile_Main);
}
ToggleEditGUI(playerid, toggle)
{
    if(toggle)
    {
        PlayerTextDrawShow(playerid, cam_buttonBack);
        PlayerTextDrawShow(playerid, cam_boxBackground);
        PlayerTextDrawShow(playerid, cam_arrowLeft);
        PlayerTextDrawShow(playerid, cam_arrowRight);

        PlayerTextDrawShow(playerid, cam_row1);
        PlayerTextDrawShow(playerid, cam_row2);
        PlayerTextDrawShow(playerid, cam_row3);
        PlayerTextDrawShow(playerid, cam_row4);

        PlayerTextDrawShow(playerid, cam_row1Data);
        PlayerTextDrawShow(playerid, cam_row2Data);
        PlayerTextDrawShow(playerid, cam_row3Data);
        PlayerTextDrawShow(playerid, cam_row4Data);

        PlayerTextDrawShow(playerid, cam_buttonEdit);
        PlayerTextDrawShow(playerid, cam_buttonSave);
        PlayerTextDrawShow(playerid, cam_buttonDelt);
        PlayerTextDrawShow(playerid, cam_buttonPrev);
        PlayerTextDrawShow(playerid, cam_buttonAddN);
    }
    else
    {
        PlayerTextDrawHide(playerid, cam_buttonBack);
        PlayerTextDrawHide(playerid, cam_boxBackground);
        PlayerTextDrawHide(playerid, cam_arrowLeft);
        PlayerTextDrawHide(playerid, cam_arrowRight);

        PlayerTextDrawHide(playerid, cam_row1);
        PlayerTextDrawHide(playerid, cam_row2);
        PlayerTextDrawHide(playerid, cam_row3);
        PlayerTextDrawHide(playerid, cam_row4);

        PlayerTextDrawHide(playerid, cam_row1Data);
        PlayerTextDrawHide(playerid, cam_row2Data);
        PlayerTextDrawHide(playerid, cam_row3Data);
        PlayerTextDrawHide(playerid, cam_row4Data);

        PlayerTextDrawHide(playerid, cam_buttonEdit);
        PlayerTextDrawHide(playerid, cam_buttonSave);
        PlayerTextDrawHide(playerid, cam_buttonDelt);
        PlayerTextDrawHide(playerid, cam_buttonPrev);
        PlayerTextDrawHide(playerid, cam_buttonAddN);
    }
}
UpdateGUI(playerid)
{
    new
        tmpCam = gPlayerCamData[playerid][p_CamID],
        tmpNode = gPlayerCamData[playerid][p_Node],
        dataStr[16],
        MoveTypeName[3][5]={"NONE", "MOVE", "CUT"};

    format(dataStr, 16, "%d/%d", tmpNode, camMaxNodes[tmpCam]);
    PlayerTextDrawSetString(playerid, cam_row1Data, dataStr);
    PlayerTextDrawShow(playerid, cam_row1Data);

    format(dataStr, 16, "%d", camData[tmpCam][tmpNode][cam_moveTime]);
    PlayerTextDrawSetString(playerid, cam_row2Data, dataStr);
    PlayerTextDrawShow(playerid, cam_row2Data);

    format(dataStr, 16, "%d", camData[tmpCam][tmpNode][cam_waitTime]);
    PlayerTextDrawSetString(playerid, cam_row3Data, dataStr);
    PlayerTextDrawShow(playerid, cam_row3Data);

    format(dataStr, 16, "%s(%d)", MoveTypeName[ _:camData[tmpCam][tmpNode][cam_moveType] ], camData[tmpCam][tmpNode][cam_moveType]);
    PlayerTextDrawSetString(playerid, cam_row4Data, dataStr);
    PlayerTextDrawShow(playerid, cam_row4Data);
}
JumpToNode(playerid, node)
{
    new
        camera = gPlayerCamData[playerid][p_CamID];

    SetPlayerCameraPos(playerid, camData[camera][node][cam_cPosX], camData[camera][node][cam_cPosY], camData[camera][node][cam_cPosZ]);
    SetPlayerCameraLookAt(playerid, camData[camera][node][cam_lPosX], camData[camera][node][cam_lPosY], camData[camera][node][cam_lPosZ]);

    gPlayerCamData[playerid][p_Node] = node;
    UpdateGUI(playerid);
}

EditCurrentNode(playerid)
{
    gPlayerEditingNode[playerid] = true;
    EnterFreeCam(playerid);
}
CommitCurrentNode(playerid)
{
    new
        tmpCam = gPlayerCamData[playerid][p_CamID],
        tmpNode = gPlayerCamData[playerid][p_Node],
        Float:vecX, Float:vecY, Float:vecZ;

    GetPlayerCameraPos(playerid, camData[tmpCam][tmpNode][cam_cPosX], camData[tmpCam][tmpNode][cam_cPosY], camData[tmpCam][tmpNode][cam_cPosZ]);
    GetPlayerCameraFrontVector(playerid, vecX, vecY, vecZ);

    camData[tmpCam][tmpNode][cam_lPosX] = camData[tmpCam][tmpNode][cam_cPosX]+(vecX*4); // x4 just to give the LookAt node a little distance, I didn't know if this would affect anything
    camData[tmpCam][tmpNode][cam_lPosY] = camData[tmpCam][tmpNode][cam_cPosY]+(vecY*4);
    camData[tmpCam][tmpNode][cam_lPosZ] = camData[tmpCam][tmpNode][cam_cPosZ]+(vecZ*4);

    gPlayerEditingNode[playerid] = false;
    ExitFreeCam(playerid);
    UpdateGUI(playerid);
}
CancelCurrentNodeEdit(playerid)
{
    JumpToNode(playerid, gPlayerCamData[playerid][p_Node]);

    gPlayerEditingNode[playerid] = false;
    ExitFreeCam(playerid);
}

EnterFreeCam(playerid)
{
    new
        tmpCam = gPlayerCamData[playerid][p_CamID],
        tmpNode = gPlayerCamData[playerid][p_Node];

    freeCamUsed[playerid] = true;
    TogglePlayerControllable(playerid, true);
    SetCameraBehindPlayer(playerid);
    ApplyAnimation(playerid, "CARRY", "crry_prtial", 1.0, 0, 0, 0, 1, 0);
    CancelSelectTextDraw(playerid);
    ToggleEditGUI(playerid, false);

    freeCamObj[playerid] = CreateObject(19300, camData[tmpCam][tmpNode][cam_cPosX], camData[tmpCam][tmpNode][cam_cPosY], camData[tmpCam][tmpNode][cam_cPosZ], 0.0, 0.0, 0.0);
    AttachCameraToObject(playerid, freeCamObj[playerid]);
}
ExitFreeCam(playerid)
{
    JumpToNode(playerid, gPlayerCamData[playerid][p_Node]);

    freeCamUsed[playerid] = false;
    DestroyObject(freeCamObj[playerid]);
    ToggleEditGUI(playerid, true);
    SelectTextDraw(playerid, 0xFFFF00FF);
}


EditNewNode(playerid)
{
    new
        tmpCam = gPlayerCamData[playerid][p_CamID],
        tmpNode = gPlayerCamData[playerid][p_Node];

    ShiftNodeArray(tmpCam, tmpNode);
    EditCurrentNode(playerid);
    gPlayerCamData[playerid][p_Node]++;
}
DeleteCurrentNode(playerid)
{
    new
        tmpCam = gPlayerCamData[playerid][p_CamID],
        tmpNode = gPlayerCamData[playerid][p_Node];

    ShiftNodeArray(tmpCam, tmpNode, 1);
    JumpToNode(playerid, tmpNode);
}
ShiftNodeArray(camera, startnode, direction=0)
{
    if(direction == 0)
    {
        new iLoop = camMaxNodes[camera]++; // Assign the value then increment it because we are adding another cell
        while(iLoop>=startnode) // Loop from the last node to the startnode
        {
            for(new e;e<MAX_CAMDATA;e++) // Shift all the data to the next node cell
            {
                camData[camera][iLoop+1][CAM_DATA_ENUM:e] = camData[camera][iLoop][CAM_DATA_ENUM:e];
            }
            iLoop--;
        }
    }
    else
    {
        new iLoop = startnode;
        while(iLoop<=camMaxNodes[camera]) // Loop from the startnode to the last node
        {
            for(new e;e<MAX_CAMDATA;e++)
                camData[camera][iLoop][CAM_DATA_ENUM:e] = camData[camera][iLoop+1][CAM_DATA_ENUM:e];

            iLoop++;
        }
        for(new e;e<MAX_CAMDATA;e++)camData[camera][camMaxNodes[camera]][CAM_DATA_ENUM:e] = 0;
        // I didn't want to have to call two loops
        // But I'm not sure how do to it otherwise!
        // I'll try a backwards loop when I'm more awake!
        // A backwards loop would be able to blank the last cell easier
        camMaxNodes[camera]--; // Decrement the max value, we just removed a cell
    }
}
/* Debugging!
    I used it to test the above function to ensure it
    was shifting the right data without deleting stuff!

PRINTALLNODE©
{
    new n;
    while(n<MAX_CAMNODE)
    {
        printf("%02d: %d, %d, %d", n, camData[c][n][cam_moveTime], camData[c][n][cam_waitTime], camData[c][n][cam_moveType]);
        n++;
    }
}
*/


public OnPlayerUpdate(playerid)
{
    if(gPlayerEditingNode[playerid] && freeCamUsed[playerid])
    {
        new
            k,
            ud,
            lr,
            Float:camX,
            Float:camY,
            Float:camZ,
            Float:vecX,
            Float:vecY,
            Float:vecZ,

            Float:angR,
            Float:angE,

            Float:speed = CAM_SPEED;

        GetPlayerKeys(playerid, k, ud, lr);
        GetPlayerCameraPos(playerid, camX, camY, camZ);
        GetPlayerCameraFrontVector(playerid, vecX, vecY, vecZ);

        angR = 90-(atan2(vecY, vecX));
        if(angR<0.0)angR=360.0+angR;
        angE = -(floatabs(atan2(floatsqroot(floatpower(vecX, 2.0) + floatpower(vecY, 2.0)), vecZ))-90.0);

        if(k==KEY_JUMP)
        {
            speed = CAM_HI_SPEED;
        }
        if(k==KEY_WALK)
        {
            speed = CAM_LO_SPEED;
        }

        if(ud==KEY_UP)
        {
            GetXYZFromAngle(camX, camY, camZ, angR, angE, 50.0);
            MoveObject(freeCamObj[playerid], camX, camY, camZ, speed);
        }
        if(ud==KEY_DOWN)
        {
            GetXYZFromAngle(camX, camY, camZ, angR, angE, -50.0);
            MoveObject(freeCamObj[playerid], camX, camY, camZ, speed);
        }
        if(lr==KEY_LEFT)
        {
            GetXYFromAngle(camX, camY, -angR+90.0, 50.0);
            MoveObject(freeCamObj[playerid], camX, camY, camZ, speed);
        }
        if(lr==KEY_RIGHT)
        {
            GetXYFromAngle(camX, camY, -angR+90.0, -50.0);
            MoveObject(freeCamObj[playerid], camX, camY, camZ, speed);
        }
        if(k==KEY_SPRINT)
        {
            MoveObject(freeCamObj[playerid], camX, camY, camZ+50.0, speed);
        }
        if(k==KEY_CROUCH)
        {
            MoveObject(freeCamObj[playerid], camX, camY, camZ-50.0, speed);
        }
        if(ud!=KEY_UP && ud!=KEY_DOWN && lr!=KEY_LEFT && lr!=KEY_RIGHT && k!=KEY_SPRINT && k!=KEY_CROUCH)StopObject(freeCamObj[playerid]);
    }
    return 1;
}
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
    if(gPlayerEditingNode[playerid])
    {
        if(newkeys & KEY_FIRE)
        {
            new strInfo[64];
            format(strInfo, 64, "Apply changes to node %d?", gPlayerCamData[playerid][p_Node]);
            ShowPlayerDialog(playerid, d_confirmNodeCommit, DIALOG_STYLE_MSGBOX, "Confirm changes?", strInfo, "Apply", "Reset");
        }
        if(newkeys & 16)CancelCurrentNodeEdit(playerid);
    }
}
public OnPlayerClickPlayerTextDraw(playerid, PlayerText:playertextid)
{
    if(playertextid == cam_buttonBack)ShowPlayerDialog(playerid, d_ConfirmQuit, DIALOG_STYLE_MSGBOX, "Exit Editing", "Are you sure you want to quit? All unsaved data will be lost!", "Ok", "Cancel");

    if(playertextid == cam_buttonEdit)EditCurrentNode(playerid);
    if(playertextid == cam_buttonSave)ShowPlayerDialog(playerid, d_ExportDialog, DIALOG_STYLE_LIST, "Export Camera As...", "Sequencer Data File\nInterpolate Functions", "Accept", "Cancel");
    if(playertextid == cam_buttonDelt)DeleteCurrentNode(playerid);
    if(playertextid == cam_buttonPrev)MoveCameraToNextNode(playerid, true);
    if(playertextid == cam_buttonAddN)
    {
        if(GetCameraMaxNodes(gPlayerCamData[playerid][p_CamID]) < MAX_CAMNODE-1)EditNewNode(playerid);
        else SendClientMessage(playerid, 0xFF0000FF, "Node limit reached, increase constant <MAX_CAMNODE> in script.");
    }

    if(playertextid == cam_arrowLeft)
    {
        new
            tmpCam = gPlayerCamData[playerid][p_CamID],
            tmpNode = gPlayerCamData[playerid][p_Node] - 1;

        if(tmpNode < 0)tmpNode = camMaxNodes[tmpCam];
        JumpToNode(playerid, tmpNode);
    }
    if(playertextid == cam_arrowRight)
    {
        new
            tmpCam = gPlayerCamData[playerid][p_CamID],
            tmpNode = gPlayerCamData[playerid][p_Node] + 1;

        if(tmpNode > camMaxNodes[tmpCam])tmpNode = 0;
        JumpToNode(playerid, tmpNode);
    }
    if(playertextid == cam_row1Data)ShowPlayerDialog(playerid, d_NodeID, DIALOG_STYLE_INPUT, "Node ID", "Type a node ID to jump to", "Back", "Accept");
    if(playertextid == cam_row2Data)ShowPlayerDialog(playerid, d_MoveTime, DIALOG_STYLE_INPUT, "Move Time", "Time to move to next node (in milliseconds)", "Back", "Accept");
    if(playertextid == cam_row3Data)ShowPlayerDialog(playerid, d_WaitTime, DIALOG_STYLE_INPUT, "Wait Time", "Time to wait before moving to next node (in milliseconds)", "Back", "Accept");
    if(playertextid == cam_row4Data)ShowPlayerDialog(playerid, d_MoveType, DIALOG_STYLE_MSGBOX, "Cut Type", "Select a Camera Cut Type\nMove: Smoothly moves to the next node.\nJump: Jumps to the next node.", "Move", "Jump");
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    if(dialogid == d_MainMenu)
    {
        if(response)
        {
            if(listitem==0)ShowPlayerDialog(playerid, d_NewCamName, DIALOG_STYLE_INPUT, "New Camera", "Enter the new camera name below.\nDo not use spaces.", "Accept", "Back");
            else
            {
                SelectedCamera[playerid] = listitem-1;
                ShowPlayerDialog(playerid, d_ProjectOptions, DIALOG_STYLE_LIST, "Options", "Edit Camera\nPreview Camera", "Accept", "Back");
            }
        }
    }
    if(dialogid == d_NewCamName)
    {
        if(response)
        {
            if(strfind(inputtext, " ") == -1)
            {
                CreateCameraMover(playerid, inputtext);
                FormatMainMenu(playerid);
            }
            else ShowPlayerDialog(playerid, d_NewCamName, DIALOG_STYLE_INPUT, "New Camera", "Enter the new camera name below.\n{FF0000}Do not use spaces.", "Accept", "Back");
        }
        else FormatMainMenu(playerid);
    }
    if(dialogid == d_ProjectOptions)
    {
        if(response)
        {
            if(listitem == 0)EditCameraMover(playerid, LoadCameraMover(indexData[SelectedCamera[playerid]]));
            if(listitem == 1)PlayCameraMover(playerid, LoadCameraMover(indexData[SelectedCamera[playerid]]));
        }
        else FormatMainMenu(playerid);
    }
    if(dialogid == d_ExportDialog)
    {
        if(response)
        {
            SaveCameraMover(playerid, listitem);
            SendClientMessage(playerid, 0xFFFF00FF, "Camera saved!");
        }
    }

    if(dialogid == d_NodeID)
    {
        new
            tmpCam = gPlayerCamData[playerid][p_CamID],
            nextNode = strval(inputtext);
        if(0 <= nextNode < camMaxNodes[tmpCam])JumpToNode(playerid, nextNode);
        else
        {
            SendClientMessage(playerid, 0xFF1100FF, "Invalid value entered");
            ShowPlayerDialog(playerid, d_NodeID, DIALOG_STYLE_INPUT, "Node ID", "Type a node ID to jump to", "Back", "Accept");
        }
    }
    if(dialogid == d_MoveTime)
    {
        new
            tmpCam = gPlayerCamData[playerid][p_CamID],
            tmpNode = gPlayerCamData[playerid][p_Node],
            tmpMoveTime = strval(inputtext);

        if(tmpMoveTime > 0)
        {
            camData[tmpCam][tmpNode][cam_moveTime] = tmpMoveTime;
            UpdateGUI(playerid);
        }
        else
        {
            SendClientMessage(playerid, 0xFF1100FF, "Invalid value entered");
            ShowPlayerDialog(playerid, d_MoveTime, DIALOG_STYLE_INPUT, "Move Time", "Time to move to next node (in milliseconds)", "Back", "Accept");
        }
    }
    if(dialogid == d_WaitTime)
    {
        new
            tmpCam = gPlayerCamData[playerid][p_CamID],
            tmpNode = gPlayerCamData[playerid][p_Node],
            tmpWaitTime = strval(inputtext);

        if(tmpWaitTime > 0)
        {
            camData[tmpCam][tmpNode][cam_waitTime] = tmpWaitTime;
            UpdateGUI(playerid);
        }
        else
        {
            SendClientMessage(playerid, 0xFF1100FF, "Invalid value entered");
            ShowPlayerDialog(playerid, d_WaitTime, DIALOG_STYLE_INPUT, "Wait Time", "Time to wait before moving to next node (in milliseconds)", "Back", "Accept");
        }
    }
    if(dialogid == d_MoveType)
    {
        new
            tmpCam = gPlayerCamData[playerid][p_CamID],
            tmpNode = gPlayerCamData[playerid][p_Node];

        if(!response)
        {
            camData[tmpCam][tmpNode][cam_moveType] = CAMERA_MOVE;
            UpdateGUI(playerid);
        }
        else
        {
            camData[tmpCam][tmpNode][cam_moveType] = CAMERA_CUT;
            UpdateGUI(playerid);
        }
    }

    if(dialogid == d_confirmNodeCommit)
    {
        new
            tmpCam = gPlayerCamData[playerid][p_CamID],
            tmpNode = gPlayerCamData[playerid][p_Node];

        if(response)CommitCurrentNode(playerid);
        else
        {
            SetObjectPos(freeCamObj[playerid],
                camData[tmpCam][tmpNode][cam_cPosX],
                camData[tmpCam][tmpNode][cam_cPosY],
                camData[tmpCam][tmpNode][cam_cPosZ]);
        }
    }

    if(dialogid == d_ConfirmQuit)
    {
        if(response)
        {
            ExitEditing(playerid);
            FormatMainMenu(playerid);
        }
    }
}

public OnPlayerConnect(playerid)
{
    camera_LoadTextDraws(playerid);
    return 1;
}
camera_LoadTextDraws(playerid)
{
    // Background

    cam_boxBackground = CreatePlayerTextDraw(playerid, 320.000000, 320.000000, "~n~~n~~n~~n~");
    PlayerTextDrawAlignment(playerid, cam_boxBackground, 2);
    PlayerTextDrawBackgroundColor(playerid, cam_boxBackground, 255);
    PlayerTextDrawFont(playerid, cam_boxBackground, 1);
    PlayerTextDrawLetterSize(playerid, cam_boxBackground, 0.500000, 2.200000);
    PlayerTextDrawColor(playerid, cam_boxBackground, -1);
    PlayerTextDrawSetOutline(playerid, cam_boxBackground, 0);
    PlayerTextDrawSetProportional(playerid, cam_boxBackground, 1);
    PlayerTextDrawSetShadow(playerid, cam_boxBackground, 1);
    PlayerTextDrawUseBox(playerid, cam_boxBackground, 1);
    PlayerTextDrawBoxColor(playerid, cam_boxBackground, 128);
    PlayerTextDrawTextSize(playerid, cam_boxBackground, 380.000000, 300.000000);


    // Node Switch

    cam_arrowLeft = CreatePlayerTextDraw(playerid, 174.000000, 339.000000, "~<~");
    PlayerTextDrawBackgroundColor(playerid, cam_arrowLeft, 255);
    PlayerTextDrawFont(playerid, cam_arrowLeft, 1);
    PlayerTextDrawLetterSize(playerid, cam_arrowLeft, 0.000000, 4.800001);
    PlayerTextDrawColor(playerid, cam_arrowLeft, -1);
    PlayerTextDrawSetOutline(playerid, cam_arrowLeft, 0);
    PlayerTextDrawSetProportional(playerid, cam_arrowLeft, 1);
    PlayerTextDrawSetShadow(playerid, cam_arrowLeft, 1);
    PlayerTextDrawUseBox(playerid, cam_arrowLeft, 1);
    PlayerTextDrawBoxColor(playerid, cam_arrowLeft, 6618980);
    PlayerTextDrawTextSize(playerid, cam_arrowLeft, 210.000000, 58.000000);
    PlayerTextDrawSetSelectable(playerid, cam_arrowLeft, true);

    cam_arrowRight = CreatePlayerTextDraw(playerid, 432.000000, 339.000000, "~>~");
    PlayerTextDrawBackgroundColor(playerid, cam_arrowRight, 255);
    PlayerTextDrawFont(playerid, cam_arrowRight, 1);
    PlayerTextDrawLetterSize(playerid, cam_arrowRight, 0.000000, 4.800001);
    PlayerTextDrawColor(playerid, cam_arrowRight, -1);
    PlayerTextDrawSetOutline(playerid, cam_arrowRight, 0);
    PlayerTextDrawSetProportional(playerid, cam_arrowRight, 1);
    PlayerTextDrawSetShadow(playerid, cam_arrowRight, 1);
    PlayerTextDrawUseBox(playerid, cam_arrowRight, 1);
    PlayerTextDrawBoxColor(playerid, cam_arrowRight, 6618980);
    PlayerTextDrawTextSize(playerid, cam_arrowRight, 466.000000, 58.000000);
    PlayerTextDrawSetSelectable(playerid, cam_arrowRight, true);


    // Info

    cam_row1 = CreatePlayerTextDraw(playerid, 240.000000, 325.000000, "Node:");
    PlayerTextDrawBackgroundColor(playerid, cam_row1, 255);
    PlayerTextDrawFont(playerid, cam_row1, 1);
    PlayerTextDrawLetterSize(playerid, cam_row1, 0.300000, 1.000000);
    PlayerTextDrawColor(playerid, cam_row1, -1);
    PlayerTextDrawSetOutline(playerid, cam_row1, 0);
    PlayerTextDrawSetProportional(playerid, cam_row1, 1);
    PlayerTextDrawSetShadow(playerid, cam_row1, 1);
    PlayerTextDrawUseBox(playerid, cam_row1, 1);
    PlayerTextDrawBoxColor(playerid, cam_row1, 3955300);
    PlayerTextDrawTextSize(playerid, cam_row1, 400.000000, 0.000000);

    cam_row2 = CreatePlayerTextDraw(playerid, 240.000000, 342.000000, "Move Time (ms):");
    PlayerTextDrawBackgroundColor(playerid, cam_row2, 255);
    PlayerTextDrawFont(playerid, cam_row2, 1);
    PlayerTextDrawLetterSize(playerid, cam_row2, 0.300000, 1.000000);
    PlayerTextDrawColor(playerid, cam_row2, -1);
    PlayerTextDrawSetOutline(playerid, cam_row2, 0);
    PlayerTextDrawSetProportional(playerid, cam_row2, 1);
    PlayerTextDrawSetShadow(playerid, cam_row2, 1);
    PlayerTextDrawUseBox(playerid, cam_row2, 1);
    PlayerTextDrawBoxColor(playerid, cam_row2, 3955300);
    PlayerTextDrawTextSize(playerid, cam_row2, 400.000000, 0.000000);

    cam_row3 = CreatePlayerTextDraw(playerid, 240.000000, 360.000000, "Wait Time (ms):");
    PlayerTextDrawBackgroundColor(playerid, cam_row3, 255);
    PlayerTextDrawFont(playerid, cam_row3, 1);
    PlayerTextDrawLetterSize(playerid, cam_row3, 0.300000, 1.000000);
    PlayerTextDrawColor(playerid, cam_row3, -1);
    PlayerTextDrawSetOutline(playerid, cam_row3, 0);
    PlayerTextDrawSetProportional(playerid, cam_row3, 1);
    PlayerTextDrawSetShadow(playerid, cam_row3, 1);
    PlayerTextDrawUseBox(playerid, cam_row3, 1);
    PlayerTextDrawBoxColor(playerid, cam_row3, 3955300);
    PlayerTextDrawTextSize(playerid, cam_row3, 400.000000, 0.000000);

    cam_row4 = CreatePlayerTextDraw(playerid, 240.000000, 378.000000, "Cut Type:");
    PlayerTextDrawBackgroundColor(playerid, cam_row4, 255);
    PlayerTextDrawFont(playerid, cam_row4, 1);
    PlayerTextDrawLetterSize(playerid, cam_row4, 0.300000, 1.000000);
    PlayerTextDrawColor(playerid, cam_row4, -1);
    PlayerTextDrawSetOutline(playerid, cam_row4, 0);
    PlayerTextDrawSetProportional(playerid, cam_row4, 1);
    PlayerTextDrawSetShadow(playerid, cam_row4, 1);
    PlayerTextDrawUseBox(playerid, cam_row4, 1);
    PlayerTextDrawBoxColor(playerid, cam_row4, 3955300);
    PlayerTextDrawTextSize(playerid, cam_row4, 400.000000, 0.000000);


    // Data fields

    cam_row1Data = CreatePlayerTextDraw(playerid, 335.000000, 325.000000, "00");
    PlayerTextDrawBackgroundColor(playerid, cam_row1Data, 255);
    PlayerTextDrawFont(playerid, cam_row1Data, 1);
    PlayerTextDrawLetterSize(playerid, cam_row1Data, 0.300000, 1.000000);
    PlayerTextDrawColor(playerid, cam_row1Data, -1);
    PlayerTextDrawSetOutline(playerid, cam_row1Data, 0);
    PlayerTextDrawSetProportional(playerid, cam_row1Data, 1);
    PlayerTextDrawSetShadow(playerid, cam_row1Data, 1);
    PlayerTextDrawUseBox(playerid, cam_row1Data, 1);
    PlayerTextDrawBoxColor(playerid, cam_row1Data, 3955300);
    PlayerTextDrawTextSize(playerid, cam_row1Data, 400.000000, 14.000000);
    PlayerTextDrawSetSelectable(playerid, cam_row1Data, true);

    cam_row2Data = CreatePlayerTextDraw(playerid, 335.000000, 342.000000, "00000");
    PlayerTextDrawBackgroundColor(playerid, cam_row2Data, 255);
    PlayerTextDrawFont(playerid, cam_row2Data, 1);
    PlayerTextDrawLetterSize(playerid, cam_row2Data, 0.300000, 1.000000);
    PlayerTextDrawColor(playerid, cam_row2Data, -1);
    PlayerTextDrawSetOutline(playerid, cam_row2Data, 0);
    PlayerTextDrawSetProportional(playerid, cam_row2Data, 1);
    PlayerTextDrawSetShadow(playerid, cam_row2Data, 1);
    PlayerTextDrawUseBox(playerid, cam_row2Data, 1);
    PlayerTextDrawBoxColor(playerid, cam_row2Data, 3955300);
    PlayerTextDrawTextSize(playerid, cam_row2Data, 400.000000, 14.000000);
    PlayerTextDrawSetSelectable(playerid, cam_row2Data, true);

    cam_row3Data = CreatePlayerTextDraw(playerid, 335.000000, 360.000000, "00000");
    PlayerTextDrawBackgroundColor(playerid, cam_row3Data, 255);
    PlayerTextDrawFont(playerid, cam_row3Data, 1);
    PlayerTextDrawLetterSize(playerid, cam_row3Data, 0.300000, 1.000000);
    PlayerTextDrawColor(playerid, cam_row3Data, -1);
    PlayerTextDrawSetOutline(playerid, cam_row3Data, 0);
    PlayerTextDrawSetProportional(playerid, cam_row3Data, 1);
    PlayerTextDrawSetShadow(playerid, cam_row3Data, 1);
    PlayerTextDrawUseBox(playerid, cam_row3Data, 1);
    PlayerTextDrawBoxColor(playerid, cam_row3Data, 3955300);
    PlayerTextDrawTextSize(playerid, cam_row3Data, 400.000000, 14.000000);
    PlayerTextDrawSetSelectable(playerid, cam_row3Data, true);

    cam_row4Data = CreatePlayerTextDraw(playerid, 335.000000, 378.000000, "MOVE");
    PlayerTextDrawBackgroundColor(playerid, cam_row4Data, 255);
    PlayerTextDrawFont(playerid,cam_row4Data, 1);
    PlayerTextDrawLetterSize(playerid, cam_row4Data, 0.300000, 1.000000);
    PlayerTextDrawColor(playerid, cam_row4Data, 16777215);
    PlayerTextDrawSetOutline(playerid, cam_row4Data, 0);
    PlayerTextDrawSetProportional(playerid, cam_row4Data, 1);
    PlayerTextDrawSetShadow(playerid, cam_row4Data, 1);
    PlayerTextDrawUseBox(playerid, cam_row4Data, 1);
    PlayerTextDrawBoxColor(playerid, cam_row4Data, 3955300);
    PlayerTextDrawTextSize(playerid, cam_row4Data, 400.000000, 14.000000);
    PlayerTextDrawSetSelectable(playerid, cam_row4Data, true);


    // Edit Controls

    cam_buttonEdit = CreatePlayerTextDraw(playerid, 250.000000, 290.000000, "E");
    PlayerTextDrawBackgroundColor(playerid, cam_buttonEdit, 255);
    PlayerTextDrawFont(playerid, cam_buttonEdit, 1);
    PlayerTextDrawLetterSize(playerid, cam_buttonEdit, 1.000000, 2.499999);
    PlayerTextDrawColor(playerid, cam_buttonEdit, -1);
    PlayerTextDrawSetOutline(playerid, cam_buttonEdit, 0);
    PlayerTextDrawSetProportional(playerid, cam_buttonEdit, 1);
    PlayerTextDrawSetShadow(playerid, cam_buttonEdit, 1);
    PlayerTextDrawUseBox(playerid, cam_buttonEdit, 1);
    PlayerTextDrawBoxColor(playerid, cam_buttonEdit, 100);
    PlayerTextDrawTextSize(playerid, cam_buttonEdit, 270.000000, 14.0);
    PlayerTextDrawSetSelectable(playerid, cam_buttonEdit, true);

    cam_buttonSave = CreatePlayerTextDraw(playerid, 280.000000, 290.000000, "S");
    PlayerTextDrawBackgroundColor(playerid, cam_buttonSave, 255);
    PlayerTextDrawFont(playerid, cam_buttonSave, 1);
    PlayerTextDrawLetterSize(playerid, cam_buttonSave, 0.829999, 2.499999);
    PlayerTextDrawColor(playerid, cam_buttonSave, -1);
    PlayerTextDrawSetOutline(playerid, cam_buttonSave, 0);
    PlayerTextDrawSetProportional(playerid, cam_buttonSave, 1);
    PlayerTextDrawSetShadow(playerid, cam_buttonSave, 1);
    PlayerTextDrawUseBox(playerid, cam_buttonSave, 1);
    PlayerTextDrawBoxColor(playerid, cam_buttonSave, 100);
    PlayerTextDrawTextSize(playerid, cam_buttonSave, 300.000000, 14.0);
    PlayerTextDrawSetSelectable(playerid, cam_buttonSave, true);

    cam_buttonDelt = CreatePlayerTextDraw(playerid, 310.000000, 290.000000, "X");
    PlayerTextDrawBackgroundColor(playerid, cam_buttonDelt, 255);
    PlayerTextDrawFont(playerid, cam_buttonDelt, 1);
    PlayerTextDrawLetterSize(playerid, cam_buttonDelt, 0.890000, 2.499999);
    PlayerTextDrawColor(playerid, cam_buttonDelt, -1);
    PlayerTextDrawSetOutline(playerid, cam_buttonDelt, 0);
    PlayerTextDrawSetProportional(playerid, cam_buttonDelt, 1);
    PlayerTextDrawSetShadow(playerid, cam_buttonDelt, 1);
    PlayerTextDrawUseBox(playerid, cam_buttonDelt, 1);
    PlayerTextDrawBoxColor(playerid, cam_buttonDelt, 100);
    PlayerTextDrawTextSize(playerid, cam_buttonDelt, 330.000000, 14.0);
    PlayerTextDrawSetSelectable(playerid, cam_buttonDelt, true);

    cam_buttonPrev = CreatePlayerTextDraw(playerid, 340.000000, 290.000000, ">>");
    PlayerTextDrawBackgroundColor(playerid, cam_buttonPrev, 255);
    PlayerTextDrawFont(playerid, cam_buttonPrev, 1);
    PlayerTextDrawLetterSize(playerid, cam_buttonPrev, 0.389999, 2.499999);
    PlayerTextDrawColor(playerid, cam_buttonPrev, -1);
    PlayerTextDrawSetOutline(playerid, cam_buttonPrev, 0);
    PlayerTextDrawSetProportional(playerid, cam_buttonPrev, 1);
    PlayerTextDrawSetShadow(playerid, cam_buttonPrev, 1);
    PlayerTextDrawUseBox(playerid, cam_buttonPrev, 1);
    PlayerTextDrawBoxColor(playerid, cam_buttonPrev, 100);
    PlayerTextDrawTextSize(playerid, cam_buttonPrev, 360.000000, 14.0);
    PlayerTextDrawSetSelectable(playerid, cam_buttonPrev, true);

    cam_buttonAddN = CreatePlayerTextDraw(playerid, 370.000000, 290.000000, "+");
    PlayerTextDrawBackgroundColor(playerid, cam_buttonAddN, 255);
    PlayerTextDrawFont(playerid, cam_buttonAddN, 1);
    PlayerTextDrawLetterSize(playerid, cam_buttonAddN, 0.860000, 2.499999);
    PlayerTextDrawColor(playerid, cam_buttonAddN, -1);
    PlayerTextDrawSetOutline(playerid, cam_buttonAddN, 0);
    PlayerTextDrawSetProportional(playerid, cam_buttonAddN, 1);
    PlayerTextDrawSetShadow(playerid, cam_buttonAddN, 1);
    PlayerTextDrawUseBox(playerid, cam_buttonAddN, 1);
    PlayerTextDrawBoxColor(playerid, cam_buttonAddN, 100);
    PlayerTextDrawTextSize(playerid, cam_buttonAddN, 390.000000, 14.0);
    PlayerTextDrawSetSelectable(playerid, cam_buttonAddN, true);

    cam_buttonBack = CreatePlayerTextDraw(playerid, 500.000000, 110.000000, "Back");
    PlayerTextDrawBackgroundColor(playerid, cam_buttonBack, 255);
    PlayerTextDrawFont(playerid, cam_buttonBack, 1);
    PlayerTextDrawLetterSize(playerid, cam_buttonBack, 0.759999, 2.499999);
    PlayerTextDrawColor(playerid, cam_buttonBack, -16776961);
    PlayerTextDrawSetOutline(playerid, cam_buttonBack, 1);
    PlayerTextDrawSetProportional(playerid, cam_buttonBack, 1);
    PlayerTextDrawUseBox(playerid, cam_buttonBack, 1);
    PlayerTextDrawBoxColor(playerid, cam_buttonBack, 100);
    PlayerTextDrawTextSize(playerid, cam_buttonBack, 560.000000, 14.000000);
    PlayerTextDrawSetSelectable(playerid, cam_buttonBack, true);
}



// Separate functions that are used
stock GetXYFromAngle(&Float:x, &Float:y, Float:a, Float:distance)
    x+=(distance*floatsin(-a,degrees)),y+=(distance*floatcos(-a,degrees));

stock GetXYZFromAngle(&Float:x, &Float:y, &Float:z, Float:angle, Float:elevation, Float:distance)
    x += ( distance*floatsin(angle,degrees)*floatcos(elevation,degrees) ),y += ( distance*floatcos(angle,degrees)*floatcos(elevation,degrees) ),z += ( distance*floatsin(elevation,degrees) );




// Debugging Commands

new temp_camid;
public OnPlayerCommandText(playerid, cmdtext[])
{
    new
        cmd[30],
        params[98];
    sscanf(cmdtext, "s[30]s[98]", cmd, params);

    if(!strcmp(cmd, "/cameras"))
    {
        FormatMainMenu(playerid);
        return 1;
    }
    if(!strcmp(cmd, "/mouse")) // Just in case you exit mouse mode by accident!
    {
        SelectTextDraw(playerid, 0xFFFF00FF);
        return 1;
    }

    // Some debug commands - Not really needed now the editor is here, but they might come in useful if it glitches.

    if(!strcmp(cmd, "/loadcam"))
    {
        temp_camid = LoadCameraMover(params);
        return 1;
    }
    if(!strcmp(cmd, "/playcam"))
    {
        PlayCameraMover(playerid, temp_camid, 0, false);
        return 1;
    }
    if(!strcmp(cmd, "/editcam"))
    {
        EditCameraMover(playerid, temp_camid);
        return 1;
    }
    if(!strcmp(cmd, "/exitediting"))
    {
        ExitEditing(playerid);
        return 1;
    }
    if(!strcmp(cmd, "/loadtds")) // In case the textdraws bug up (Although this shouldn't happen now, textdraws now load every time you enter edit mode)
    {
        camera_LoadTextDraws(playerid);
        SendClientMessage(playerid, 0xFFFF00FF, "Textdraws Loaded!");
        return 1;
    }
    return 0;
}


public OnCameraReachNode(playerid, camera, node)
{
    if(node == camMaxNodes[camera])ApplyAnimation(0, "PED", "KO_shot_face", 5.0, 0, 1, 1, 1, 0, 1);
}
But I need that filterscript, any way to fix this ?
Reply
#4

- Wrongly posted
Reply
#5

I found the problem, I deleted this filterscript and it worked

pawn Код:
// By GROVE4L
// http://www.pawnoscripting.com

#include <a_samp>
#define FILTERSCRIPT

#define COLOR 0xC2A2DAAA

forward ProxDetector(Float:radi, playerid, string[],col1,col2,col3,col4,col5);
forward Velocidad(playerid);
forward Check(playerid);
forward Rojo(playerid);
forward Camara(playerid);

new Timer[MAX_PLAYERS];
new TRojo[MAX_PLAYERS];
new TCamara[MAX_PLAYERS];
new Choque[MAX_PLAYERS];
new Si[MAX_PLAYERS];
new Text: FlashR;
enum Info
{
    Manejando,
};
new Informacion[MAX_PLAYERS][Info];

public OnPlayerSpawn(playerid)
{
    FlashR = TextDrawCreate(1.000000,1.000000,"_");
    TextDrawTextSize(FlashR,640.000000,10.000000);
    TextDrawLetterSize(FlashR,3.600000,47.600010);
    TextDrawUseBox(FlashR,1);
    TextDrawAlignment(FlashR,0);
    TextDrawFont(FlashR,3);
    TextDrawSetOutline(FlashR,1);
    TextDrawSetProportional(FlashR,1);
    TextDrawSetShadow(FlashR,1);
    TextDrawBackgroundColor(FlashR,0xD20000FF);
    TextDrawColor(FlashR,0xD20000FF);
    TextDrawBoxColor(FlashR,0xD20000FF);
    Timer[playerid] = SetTimerEx("Check", 100, 1, "i", playerid);
    Informacion[playerid][Manejando] = 0;
}

public OnPlayerDisconnect(playerid)
{
    KillTimer(Timer[playerid]);
    KillTimer(Choque[playerid]);
    Informacion[playerid][Manejando] = 0;
    return 1;
}
forward hidetextdraw(playerid);
public hidetextdraw(playerid)
{
    return 1;
}
public Velocidad(playerid)
{
    new Float:Vx, Float:Vy, Float:Vz;
    if(IsPlayerInAnyVehicle(playerid) && Informacion[playerid][Manejando])
    {
        GetVehicleVelocity(GetPlayerVehicleID(playerid), Vx, Vy, Vz);
        if(Vx > -0.1 && Vx < 0.1 && Vy > -0.1 && Vy < 0.1)
        {
            new Float:Vida;
            GetPlayerHealth(playerid, Vida);
            SetPlayerHealth(playerid, Vida-30.0);
            SetPlayerDrunkLevel(playerid, 500000);
            TextDrawShowForPlayer(playerid, FlashR);
            Informacion[playerid][Manejando] = 0;
            new String[256];
            new Nombre[MAX_PLAYER_NAME];
            GetPlayerName(playerid,Nombre,sizeof(Nombre));
            format(String, sizeof(String), "* %s has been in a collision.", Nombre);
            ProxDetector(30.0, playerid, String, COLOR,COLOR,COLOR,COLOR,COLOR);
            TRojo[playerid] = SetTimerEx("Rojo", 2000, 1, "i", playerid);
            TCamara[playerid] = SetTimerEx("Camara", 10000, 1, "i", playerid);
        }
    }
    return 1;
}

public Rojo(playerid)
{
    TextDrawHideForPlayer(playerid, FlashR);
    return 1;
}

public Camara(playerid)
{
    KillTimer(TCamara[playerid]);
    SetPlayerDrunkLevel(playerid, 0);
    return 1;
}

public Check(playerid)
{
    new Float:Cx, Float:Cy, Float:Cz;
    if(IsPlayerInAnyVehicle(playerid))
    {
        GetVehicleVelocity(GetPlayerVehicleID(playerid), Cx, Cy, Cz);
        if(Cx < -0.4 || Cx > 0.4 || Cy < -0.4 || Cy > 0.4 && !Informacion[playerid][Manejando])
        {
            Choque[playerid] = SetTimerEx("Velocidad", 100, 1, "i", playerid);
            Informacion[playerid][Manejando] = 1;
        }
        else
        {
            KillTimer(Choque[playerid]);
            Informacion[playerid][Manejando] = 0;
        }
    }
    return 1;
}


public ProxDetector(Float:radi, playerid, string[],col1,col2,col3,col4,col5)
{
    if(IsPlayerConnected(playerid))
    {
        new Float:posx, Float:posy, Float:posz;
        new Float:oldposx, Float:oldposy, Float:oldposz;
        new Float:tempposx, Float:tempposy, Float:tempposz;
        GetPlayerPos(playerid, oldposx, oldposy, oldposz);
        for(new i = 0; i < MAX_PLAYERS; i++)
        {
            if(IsPlayerConnected(i) && (GetPlayerVirtualWorld(playerid) == GetPlayerVirtualWorld(i)))
            {
                if(!Si[i])
                {
                    GetPlayerPos(i, posx, posy, posz);
                    tempposx = (oldposx -posx);
                    tempposy = (oldposy -posy);
                    tempposz = (oldposz -posz);
                    if (((tempposx < radi/16) && (tempposx > -radi/16)) && ((tempposy < radi/16) && (tempposy > -radi/16)) && ((tempposz < radi/16) && (tempposz > -radi/16)))
                    {
                        SendClientMessage(i, col1, string);
                    }
                    else if (((tempposx < radi/8) && (tempposx > -radi/8)) && ((tempposy < radi/8) && (tempposy > -radi/8)) && ((tempposz < radi/8) && (tempposz > -radi/8)))
                    {
                        SendClientMessage(i, col2, string);
                    }
                    else if (((tempposx < radi/4) && (tempposx > -radi/4)) && ((tempposy < radi/4) && (tempposy > -radi/4)) && ((tempposz < radi/4) && (tempposz > -radi/4)))
                    {
                        SendClientMessage(i, col3, string);
                    }
                    else if (((tempposx < radi/2) && (tempposx > -radi/2)) && ((tempposy < radi/2) && (tempposy > -radi/2)) && ((tempposz < radi/2) && (tempposz > -radi/2)))
                    {
                        SendClientMessage(i, col4, string);
                    }
                    else if (((tempposx < radi) && (tempposx > -radi)) && ((tempposy < radi) && (tempposy > -radi)) && ((tempposz < radi) && (tempposz > -radi)))
                    {
                        SendClientMessage(i, col5, string);
                    }
                }
                else
                {
                    SendClientMessage(i, col1, string);
                }
            }
        }
    }
    return 1;
}

// By GROVE4L
But I need that filterscript, any way to fix this ?
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)