Ingame Camera Bewegungs Editor

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Gerade mal getestet und direckt nen Cam move im Script eingefügt, doch wie beende ich die sicht wieder das er wieder zum spieler geht?


    Wenn du die Bewegung exportiert hast kommt ein Dialog bei dem du entweder noch eine Bewegung machen kannst oder den Editor verlassen kannst.
    Ich werde aber warscheinlich bald noch einen Befehl dazumachen um den Editor manuell zu beenden ;).

  • Habe es Compielt (unverändert) .. kann mir einer helfen?



    C:\Users\Luca\Desktop\cameditor.pwn(271) : error 017: undefined symbol "AttachCameraToPlayerObject"
    C:\Users\Luca\Desktop\cameditor.pwn(287) : error 017: undefined symbol "AttachCameraToPlayerObject"
    C:\Users\Luca\Desktop\cameditor.pwn(435) : error 017: undefined symbol "InterpolateCameraPos"
    C:\Users\Luca\Desktop\cameditor.pwn(436) : error 017: undefined symbol "InterpolateCameraLookAt"
    C:\Users\Luca\Desktop\cameditor.pwn(561) : error 017: undefined symbol "CancelEdit"
    C:\Users\Luca\Desktop\cameditor.pwn(582) : error 017: undefined symbol "AttachCameraToPlayerObject"
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    6 Errors.


    convertFFS converted your input in 0.02 seconds - Chuck Norris could have done it in 0.0003 seconds!


  • Du benötigst SA-MP 0.3e und höher. Am besten nochmal mit den 0.3e Includes compilieren.

  • Wenn du die Bewegung exportiert hast kommt ein Dialog bei dem du entweder noch eine Bewegung machen kannst oder den Editor verlassen kannst.
    Ich werde aber warscheinlich bald noch einen Befehl dazumachen um den Editor manuell zu beenden ;).



    Ich meine, wen man den Camera Move schon im script hat, bleibt die Cam da stehten wo der move beendet ist, wie mache ich das nun, das die cam wieder zum spieler geht, und wieder "an ihm hängen bleibt" wie gewöhnlich.

  • Ich meine, wen man den Camera Move schon im script hat, bleibt die Cam da stehten wo der move beendet ist, wie mache ich das nun, das die cam wieder zum spieler geht, und wieder "an ihm hängen bleibt" wie gewöhnlich.


    Mit SetCameraBehindPlayer();


    Habe es mit 0.3e Compielt .. ist trotzdem das gleiche Problem da.


    Die Fehler sind alles die neuen 0.3e Funktionen. Der Fehler liegt nicht an deinem Script, sondern an deinem Server



    Version 1.1 zum Download freigegeben!


    Änderungen:


    + Es wird nunmehr weder dini noch y_ini benötigt! Es werden lediglich die SA-MP internen Dateifunktionen genutzt!
    + Befehl /closecameditor hinzugefügt, um den Editor manuell zu verlassen-

  • Danke für das Update, werde es nun nochmal versuchen ob ich jetzt glück habe. ;) :D

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Habe es mit 0.3e Compielt .. ist trotzdem das gleiche Problem da.


    Erstell dir doch einen timer der genauso lange läuft wie sich die Kamera bewegt. Wenn du z.B. eine Kamerabewegung von 6000 millisekunden benutzt (6 sekunden), dann erstelle dir doch gleichzeitig einen timer der auch 6000 millisekunden läufst und starte den wenn du die Bewegung startest. Und wenn die Funktion vom timer nach 6000 millisekunden abgerufen wird, machst du in dieser Funktion dann dein SetCameraBehindPlayer.
    Du kannst den timer auch auf 6500 oder 7000 setzen, dann hast du nach Ende der Bewegung noch 0.5 bzw. 1 Sekunde lang pause.

  • Es wird nunmehr weder dini noch y_ini benötigt! Es werden lediglich die SA-MP internen Dateifunktionen genutzt!


    Sehr gut,
    ich habe mich anfangs schon gewundert, warum du es nicht schon vorher bzw von anfang an getan hast.


    Good job :)

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • Sehe es dir an:



    Spoiler anzeigen
    //-------------------------------------------------
    //
    // This is an example of using the AttachCameraToObject function
    // to create a no-clip flying camera.
    //
    // h02 2012
    //
    // SA-MP 0.3e and above
    //
    //-------------------------------------------------

    Spoiler anzeigen
    #include <a_samp>

    Spoiler anzeigen
    // Players Move Speed
    #define MOVE_SPEED 100.0
    #define ACCEL_RATE 0.03

    Spoiler anzeigen
    // Players Mode
    #define CAMERA_MODE_NONE 0
    #define CAMERA_MODE_FLY 1

    Spoiler anzeigen
    // Key state definitions
    #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

    Spoiler anzeigen
    // Enumeration for storing data about the player
    enum noclipenum
    {
    cameramode,
    flyobject,
    mode,
    lrold,
    udold,
    lastmove,
    Float:accelmul
    }
    new noclipdata[MAX_PLAYERS][noclipenum];

    Spoiler anzeigen
    //--------------------------------------------------

    Spoiler anzeigen
    public OnFilterScriptExit()
    {
    // If any players are still in edit mode, boot them out before the filterscript unloads
    for(new x; x<MAX_PLAYERS; x++)
    {
    if(noclipdata[x][cameramode] == CAMERA_MODE_FLY) CancelFlyMode(x);
    }
    return 1;
    }

    Spoiler anzeigen
    //--------------------------------------------------

    Spoiler anzeigen
    public OnPlayerConnect(playerid)
    {
    // Reset the data belonging to this player slot
    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;
    return 1;
    }

    Spoiler anzeigen
    //--------------------------------------------------

    Spoiler anzeigen
    public OnPlayerCommandText(playerid, cmdtext[])
    {
    if(!strcmp(cmdtext, "/flymode", true))
    {
    // Place the player in and out of edit mode
    if(GetPVarType(playerid, "FlyMode")) CancelFlyMode(playerid);
    else FlyMode(playerid);
    return 1;
    }
    return 0;
    }

    Spoiler anzeigen
    //--------------------------------------------------

    Spoiler anzeigen
    public OnPlayerUpdate(playerid)
    {
    if(noclipdata[playerid][cameramode] == CAMERA_MODE_FLY)
    {
    new keys,ud,lr;
    GetPlayerKeys(playerid,keys,ud,lr);

    Spoiler anzeigen
    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);
    }

    Spoiler anzeigen
    // 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

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

    Spoiler anzeigen
    // 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;
    }
    return 1;
    }

    Spoiler anzeigen
    //--------------------------------------------------

    Spoiler anzeigen
    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;
    }

    Spoiler anzeigen
    //--------------------------------------------------

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

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

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

    Spoiler anzeigen
    // 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], CP, FV, X, Y, Z);
    MovePlayerObject(playerid, noclipdata[playerid][flyobject], X, Y, Z, speed);

    Spoiler anzeigen
    // Store the last time the camera was moved as now
    noclipdata[playerid][lastmove] = GetTickCount();
    return 1;
    }

    Spoiler anzeigen
    //--------------------------------------------------

    Spoiler anzeigen
    stock GetNextCameraPosition(move_mode, Float:CP[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 = 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;
    }
    }
    }
    //--------------------------------------------------

    Spoiler anzeigen
    stock CancelFlyMode(playerid)
    {
    DeletePVar(playerid, "FlyMode");
    CancelEdit(playerid);
    TogglePlayerSpectating(playerid, false);

    Spoiler anzeigen
    DestroyPlayerObject(playerid, noclipdata[playerid][flyobject]);
    noclipdata[playerid][cameramode] = CAMERA_MODE_NONE;
    return 1;
    }

    Spoiler anzeigen
    //--------------------------------------------------

    Spoiler anzeigen
    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);

    Spoiler anzeigen
    // 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]);

    Spoiler anzeigen
    SetPVarInt(playerid, "FlyMode", 1);
    noclipdata[playerid][cameramode] = CAMERA_MODE_FLY;
    return 1;
    }

    Spoiler anzeigen
    //--------------------------------------------------


    //Shit das habe ich verpennt ^^

  • Ich habe mit Einwilligung von h02 (Betatester und Autor des flymode Filterscripts) seinen Code benutzt um die Kamera bewegen zu können. Alle anderen Funktionen habe ich selbst erstellt.
    Das habe ich auch so in den Credits angegeben.