Beiträge von Templer

    return ist nur für den Programmierer selbst gedacht um ihm Werte von einer Funktion rückzugeben bzw. es wird verwendet um CodeTeile "abzubrechen", sozusagen der Code endet hier für den Spieler. Beispiel zu sehen bei dem Admin Befehl /kick, wenn Spieler kein Admin ist kriegt er einen Text und der Code wird mit return abgebrochen. Für stocks wird jedoch return oft verwendet um Werte zurückzugeben, z.B.: ein nahestehendes Auto wie bei dem Beispiel hier unten:


    stock GetCloseVehicle(playerid) //by Templer
    {
    if(!IsPlayerConnected(playerid)) return -1;
    new Float:X, Float:Y, Float:Z, Float:pX, Float:pY, Float:pZ, Float:dist = 0.0, vehicles = 0, Float:cdist = 0.000000, vehicleid = -1;
    GetPlayerPos(playerid, pX, pY, pZ); GetVehiclePos(0, X, Y, Z);
    cdist = floatadd(floatadd(floatsqroot(floatpower(floatsub(X,pX),2)),floatsqroot(floatpower(floatsub(Y,pY),2))),floatsqroot(floatpower(floatsub(Z,pZ),2)));
    for(; vehicles < MAX_VEHICLES; vehicles++)
    {
    GetVehiclePos(vehicles, X, Y, Z);
    dist = floatadd(floatadd(floatsqroot(floatpower(floatsub(X,pX),2)),floatsqroot(floatpower(floatsub(Y,pY),2))),floatsqroot(floatpower(floatsub(Z,pZ),2)));
    if(dist < cdist && vehicles != GetPlayerVehicleID(playerid))
    {
    cdist = dist;
    vehicleid = vehicles;
    }
    }
    return vehicleid;
    }


    Bei dem wird also die FahrzeugID zurückgegeben! Wenn man genauer hinschaut wird oben auch vehicleid mit -1 definiert, bedeutet, wenn kein Auto in der Nähe ist, wird auch die Variable vehicleid nicht überschrieben und der Wert -1 wird zurückgegeben um den Abfragen zu sagen, dass dort kein Fahrzeug ist! Das einzige Callback bei dem das return eine Rolle spielt ist OnPlayerCommandText, ansonsten ist bei den Callbacks ein einfaches return 1; ausreichend ^^ Hoffe du verstehst es nun

    Probleme mim Streamer? Wobei andersrum, dein Streamer ist wohl zu langsam um die Objekte zu spawnen, zum Testen kannst du ja die Objecte per CreateObject ersetellen lassen, oder du machst die Variante: (einfach den /truckin unten mit deinem derzeitigen ersetzen und die paar Sachen dazufügen ^^)


    public OnPlayerCommandText(playerid, cmdtext[])
    {
    if(!strcmp(cmdtext, "/truckin", false))
    {
    if(!IsPlayerConnected(playerid)) return 1;
    new vehicle, Float:X, Float:Y, Float:Z, Float:angle;
    GetCloseVehicle(playerid, vehicle);
    if(vehicle == -1) return SendClientMessage(playerid, 0xFFFFFF00, "Kein Anhänger in deiner Nähe...");
    if(GetVehicleModel(vehicle) != 435 && GetVehicleModel(vehicle) != 591) return SendClientMessage(playerid, 0xFFFFFF00, "Das ist kein Anhänger...");
    GetVehiclePos(vehicle, X, Y, Z); GetVehicleZAngle(vehicle, angle);
    if(angle >= 180.0) angle += 180.0;
    else angle -= 180.0;
    X += (5.0 * floatsin(angle, degrees)); Y += (5.0 * floatcos(angle, degrees));
    if(!IsPlayerInRangeOfPoint(playerid, 3.5, X, Y, Z)) return SendClientMessage(playerid, 0xFFFFFF00, "Du musst hinter dem Anhänger stehen...");
    GameTextForPlayer(playerid, "Lade ~r~Interior...", 2500, 3);
    SetPVarInt(playerid, "TrailerID", vehicle);
    SetPlayerVirtualWorld(playerid, vehicle); //Diese ID nicht verändern, damit dein Interior mehrfach benützt werden kann!
    TogglePlayerControllable(playerid, 0);
    SetTimerEx("EntfriereSpieler", 2500, 0, "d", playerid); //Entfriert den Spieler erst nach 2 Sekunden...
    //Bitte diese Koordinaten unterbei anpassen ^^
    if(IsPlayerInAnyVehicle(playerid))
    {
    SetVehiclePos(GetPlayerVehicleID(playerid), 1076.6134, -2320.7100, 1060.6104); //Die Position im Interior vom Anhänger
    SetVehicleVirtualWorld(GetPlayerVehicleID(playerid), vehicle);
    }
    else SetPlayerPos(playerid, 1076.6134, -2320.7100, 1060.6104); //Die Position im Interior vom Anhänger
    return 1;
    }
    return 0;
    }


    forward EntfriereSpieler(playerid);
    public EntfriereSpieler(playerid)
    {
    if(GetPVarInt(playerid, "TrailerID") != -1) GameTextForPlayer(playerid, "Willkommen im Anhaenger ^^", 2500, 3);
    return TogglePlayerControllable(playerid, 1);
    }

    Sollte verständlich sein:


    public OnPlayerCommandText(playerid, cmdtext[])
    {
    if(!strcmp("/checktest", cmdtext, false))
    {
    if(!IsPlayerConnected(playerid) && !IsPlayerInAnyVehicle(playerid)) return 1; //Verbietet Befehl wenn Spieler nicht verbunden und Spieler iin keinem Fahrzeug ist!
    SetPlayerCheckpoint(playerid, 88.568946, -67.571983, 1.450038, 2.5); //Setzt Checkpoint
    SetPVarInt(playerid, "CheckpointSet", 1); //Variable für den Checkpoint setzen..
    SendClientMessage(playerid, 0xFFFFFF00, "Checkpoint wurde gesetzt! ^^"); //Einfacher Text
    return 1;
    }
    return 0;
    }


    public OnPlayerEnterCheckpoint(playerid)
    {
    if(GetPVarInt(playerid, "CheckpointSet") == 1 && IsPlayerInAnyVehicle(playerid)) //Wenn Variable auf 1 und er im Auto ist ^^
    {
    DisablePlayerCheckpoint(playerid); //Löscht den Checkpoint
    DestroyVehicle(GetPlayerVehicleID(playerid)); //Zerstört das Fahrzeug ;-p
    SendClientMessage(playerid, 0xFFFFFF00, "Du bist nun an der Farm und dein Auto wurde von einem Schwarzen gestohlen xD"); //Wiedergibt nen Text
    DeletePVar(playerid, "CheckpointSet"); //Löscht die gesetzte Variable
    }
    return 1;
    }

    In Dem Code ist auch sicher nicht dein Interior ^^ Hab nur die Koordinaten von deinem Letzten Teil genommen, was du gepostet hast, also einfach die Interior Pos ändern, wenn es ned stimmt bei SetPlayerPos und SetVehiclePos beim /truckin Befehl, NICHT beim /truckexit ^^

    So ist es richtig..


    if(strcmp(x_put,"waffen",true) == 0)
    {
    new weapons[13][2];
    for (new i = 0; i < 13; i++)
    {
    GetPlayerWeaponData(playerid, i, weapons[i][0], weapons[i][1]);
    CarInfo[car][cGun][i] += weapons[i][0];//diese
    CarInfo[car][cAmmo][i] += weapons[i][1];
    }
    ResetPlayerWeapons(playerid);
    }

    Zeile 471 und 492 bitte posten..


    und im Script ganz oben einfach folgendes einfügen:


    new AcceptedStreetRace[MAX_PLAYERS];

    Jo iwie wusste ich, dass wenn ich was nicht teste nicht funktioniert.. Also habs nun ausgestestet und folgende Sachen müssen ersetzt werden..


    stock GetCloseVehicle(playerid, &vehicleid) //by Templer
    {
    if(!IsPlayerConnected(playerid)) return -1;
    new Float:X, Float:Y, Float:Z, Float:pX, Float:pY, Float:pZ, Float:dist = 0.0, vehicles = 0, Float:cdist = 0.000000;
    vehicleid = -1;
    GetPlayerPos(playerid, pX, pY, pZ); GetVehiclePos(0, X, Y, Z);
    cdist = floatadd(floatadd(floatsqroot(floatpower(floatsub(X,pX),2)),floatsqroot(floatpower(floatsub(Y,pY),2))),floatsqroot(floatpower(floatsub(Z,pZ),2)));
    for(; vehicles < MAX_VEHICLES; vehicles++)
    {
    GetVehiclePos(vehicles, X, Y, Z);
    dist = floatadd(floatadd(floatsqroot(floatpower(floatsub(X,pX),2)),floatsqroot(floatpower(floatsub(Y,pY),2))),floatsqroot(floatpower(floatsub(Z,pZ),2)));
    if(dist < cdist && vehicles != GetPlayerVehicleID(playerid))
    {
    cdist = dist;
    vehicleid = vehicles;
    }
    }
    return true;
    }


    und..


    if(!strcmp(cmdtext, "/truckin", false))
    {
    if(!IsPlayerConnected(playerid)) return 1;
    new vehicle, Float:X, Float:Y, Float:Z, Float:angle;
    GetCloseVehicle(playerid, vehicle);
    if(vehicle == -1) return SendClientMessage(playerid, 0xFFFFFF00, "Kein Anhänger in deiner Nähe...");
    if(GetVehicleModel(vehicle) != 435 && GetVehicleModel(vehicle) != 591) return SendClientMessage(playerid, 0xFFFFFF00, "Das ist kein Anhänger...");
    GetVehiclePos(vehicle, X, Y, Z); GetVehicleZAngle(vehicle, angle);
    if(angle >= 180.0) angle += 180.0;
    else angle -= 180.0;
    X += (5.0 * floatsin(angle, degrees)); Y += (5.0 * floatcos(angle, degrees));
    if(!IsPlayerInRangeOfPoint(playerid, 3.5, X, Y, Z)) return SendClientMessage(playerid, 0xFFFFFF00, "Du musst hinter dem Anhänger stehen...");
    GameTextForPlayer(playerid, "Willkommen im Anhaenger ^^", 2500, 3);
    SetPVarInt(playerid, "TrailerID", vehicle);
    SetPlayerVirtualWorld(playerid, vehicle); //Diese ID nicht verändern, damit dein Interior mehrfach benützt werden kann!
    //Bitte diese Koordinaten unterbei anpassen ^^
    if(IsPlayerInAnyVehicle(playerid))
    {
    SetVehiclePos(GetPlayerVehicleID(playerid), 1076.6134, -2320.7100, 1060.6104); //Die Position im Interior vom Anhänger
    SetVehicleVirtualWorld(GetPlayerVehicleID(playerid), vehicle);
    }
    else SetPlayerPos(playerid, 1076.6134, -2320.7100, 1060.6104); //Die Position im Interior vom Anhänger
    return 1;
    }
    if(!strcmp(cmdtext, "/truckexit", false))
    {
    if(!IsPlayerConnected(playerid)) return 1;
    if(GetPVarInt(playerid, "TrailerID") == -1) return SendClientMessage(playerid, 0xFFFFFF00, "Du bist in einem Anhänger drinnen...");
    if(GetPlayerVirtualWorld(playerid) != GetPVarInt(playerid, "TrailerID"))
    {
    SetPVarInt(playerid, "TrailerID", -1);
    return SendClientMessage(playerid, 0xFFFFFF00, "Du bist in einem Anhänger drinnen...");
    }
    new vehicle = GetPVarInt(playerid, "TrailerID"), Float:X, Float:Y, Float:Z, Float:angle, Float:distance = 5.0;
    GetVehiclePos(vehicle, X, Y, Z); GetVehicleZAngle(vehicle, angle);
    if(angle >= 180.0) angle += 180.0;
    else angle -= 180.0;
    X += (5.0 * floatsin(angle, degrees)); Y += (5.0 * floatcos(angle, degrees));
    SetPlayerVirtualWorld(playerid, 0);
    if(IsPlayerInAnyVehicle(playerid))
    {
    SetVehiclePos(GetPlayerVehicleID(playerid), X, Y, Z); //Diese Werte NICHT Ändern..
    SetVehicleVirtualWorld(GetPlayerVehicleID(playerid), 0);
    }
    else SetPlayerPos(playerid, X, Y, Z); //Diese Werte NICHT Ändern..
    GameTextForPlayer(playerid, "Hoffe der Besuch im Haenger war doll ^^", 2500, 3);
    SetPVarInt(playerid, "TrailerID", -1);
    return 1;
    }


    Diesmal funktioniert es 100%ig, hab es ausgetestet ^^ Ja meine Berechnungen bei den Koordinaten waren geschätzt, deshalb war der "Einstiegspunkt" nicht so geplant ^^, also Viel Spaß damit.

    So bitte:


    public OnPlayerEnterCheckpoint(playerid)
    {
    switch(auftrag1[playerid])
    {
    case 1:
    {
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid, 199.2657,-1379.1980,49.4461, 5.0);
    auftrag1[playerid] = 2;
    }
    case 2:
    {
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid, 284.5833,-1252.7310,74.2073, 5.0);
    auftrag1[playerid] = 3;
    }
    case 3:
    {
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid, 548.7088,-1195.9177,45.0756, 5.0);
    auftrag1[playerid] = 4;
    }
    case 4:
    {
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid, 566.0327,-1138.8364,51.6114, 5.0);
    auftrag1[playerid] = 5;
    }
    case 5:
    {
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid, 468.4139,-1179.8032,64.6608, 5.0);
    auftrag1[playerid] = 6;
    }
    case 6:
    {
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid, 388.0745,-1162.3539,79.1744, 5.0);
    auftrag1[playerid] = 7;
    }
    case 7:
    {
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid, 484.8989,-1079.7264,82.7310, 5.0);
    auftrag1[playerid] = 8;
    }
    case 8:
    {
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid, 565.2359,-1054.3549,74.6838, 5.0);
    auftrag1[playerid] = 9;
    }
    case 9:
    {
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid, 978.4000,-810.9236,98.6700, 5.0);
    auftrag1[playerid] = 10;
    }
    case 10:
    {
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid, 944.1165,-759.0430,108.2155, 5.0);
    auftrag1[playerid] = 11;
    }
    case 11:
    {
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid, 943.8287,-695.3416,122.3382, 5.0);
    auftrag1[playerid] = 12;
    }
    case 12:
    {
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid, 1006.3703,-636.4201,121.1949, 5.0);
    auftrag1[playerid] = 13;
    }
    case 13:
    {
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid, 1286.2035,-607.0198,101.9000, 5.0);
    auftrag1[playerid] = 14;
    }
    case 14:
    {
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid, 1402.2178,-645.8114,90.7170, 5.0);
    auftrag1[playerid] = 15;
    }
    case 15:
    {
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid, 1078.7463,-768.8945,108.4876, 5.0);
    auftrag1[playerid] = 16;
    }
    case 16:
    {
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid, 1021.7408,-779.8043,103.3206, 5.0);
    auftrag1[playerid] = 17;
    }
    case 17:
    {
    SendClientMessage(playerid, COLOR_LIGHTGREEN, "**Auftrag beendet!**");
    SendClientMessage(playerid, COLOR_LIGHTGREEN, "**Lohnabrechnung: 100.000$");
    GivePlayerMoney(i,100000);
    }
    }
    return 1;
    }

    Naja im Englischen gibt es andere Formatierungen betreffend 1000er Trennzeichen und Kommastellen ^^ Aber egal hier die Lösung:


    SetPlayerWorldBounds(playerid, 2684.994, 2005.551, 2382.25, 1608.636);

    und Sehr Sehr Sehr viele Klammerfehler ^^ Hier das gefixxte:


    public OnPlayerEnterCheckpoint(playerid)
    {
    switch(auftrag1)
    {
    case 1:
    {
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid, 199.2657,-1379.1980,49.4461, 5.0);
    auftrag1[playerid] = 2;
    }
    case 2:
    {
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid, 284.5833,-1252.7310,74.2073, 5.0);
    auftrag1[playerid] = 3;
    }
    case 3:
    {
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid, 548.7088,-1195.9177,45.0756, 5.0);
    auftrag1[playerid] = 4;
    }
    case 4:
    {
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid, 566.0327,-1138.8364,51.6114, 5.0);
    auftrag1[playerid] = 5;
    }
    case 5:
    {
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid, 468.4139,-1179.8032,64.6608, 5.0);
    auftrag1[playerid] = 6;
    }
    case 6:
    {
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid, 388.0745,-1162.3539,79.1744, 5.0);
    auftrag1[playerid] = 7;
    }
    case 7:
    {
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid, 484.8989,-1079.7264,82.7310, 5.0);
    auftrag1[playerid] = 8;
    }
    case 8:
    {
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid, 565.2359,-1054.3549,74.6838, 5.0);
    auftrag1[playerid] = 9;
    }
    case 9:
    {
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid, 978.4000,-810.9236,98.6700, 5.0);
    auftrag1[playerid] = 10;
    }
    case 10:
    {
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid, 944.1165,-759.0430,108.2155 5.0);
    auftrag1[playerid] = 11;
    }
    case 11:
    {
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid, 943.8287,-695.3416,122.3382, 5.0);
    auftrag1[playerid] = 12;
    }
    case 12:
    {
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid, 1006.3703,-636.4201,121.1949, 5.0);
    auftrag1[playerid] = 13;
    }
    case 13:
    {
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid, 1286.2035,-607.0198,101.9000, 5.0);
    auftrag1[playerid] = 14;
    }
    case 14:
    {
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid, 1402.2178,-645.8114,90.7170, 5.0);
    auftrag1[playerid] = 15;
    }
    case 15:
    {
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid, 1078.7463,-768.8945,108.4876, 5.0);
    auftrag1[playerid] = 16;
    }
    case 16:
    {
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid, 1021.7408,-779.8043,103.3206, 5.0);
    auftrag1[playerid] = 17;
    }
    case 17:
    {
    SendClientMessage(playerid, COLOR_LIGHTGREEN, "**Auftrag beendet!**");
    SendClientMessage(playerid, COLOR_LIGHTGREEN, "**Lohnabrechnung: 100.000$");
    GivePlayerMoney(i,100000);
    }
    }
    return 1;
    }

    Ok sry, hier sind die Bugs gefixxt ^^

    stock GetCloseVehicle(playerid, &vehicleid) //by Templer
    {
    new Float:X, Float:Y, Float:Z, Float:pX, Float:pY, Float:pZ, Float:dist = 0.0, vehicles = 0, Float:cdist = 0.000000;
    vehicleid = -1;
    for(; vehicles < MAX_VEHICLES; vehicles++)
    {
    GetVehiclePos(vehicles, X, Y, Z);
    dist = floatsqroot(floatpower(floatabs(floatsub(X,pX)),2)+floatpower(floatabs(floatsub(Y,pY)),2)+floatpower(floatabs(floatsub(Z,pZ)),2));
    if(dist > cdist && vehicles != GetPlayerVehicleID(playerid))
    {
    cdist = dist;
    vehicleid = vehicles;
    }
    }
    return true;
    }


    public OnPlayerConnect(playerid)
    {
    SetPVarInt(playerid, "TrailerID", -1);
    return 1;
    }


    public OnPlayerDisconnect(playerid, reason)
    {
    DeletePVar(playerid, "TrailerID");
    return 1;
    }


    public OnPlayerCommandText(playerid, cmdtext[])
    {
    if(!strcmp(cmdtext, "/truckin", false))
    {
    if(!IsPlayerConnected(playerid)) return 1;
    new vehicle, Float:X, Float:Y, Float:Z, Float:angle, Float:distance = 5.0;
    GetCloseVehicle(playerid, vehicle);
    if(vehicle == -1) return SendClientMessage(playerid, 0xFFFFFF00, "Kein Anhänger in deiner Nähe...");
    if(GetVehicleModel(vehicle) != 435 && GetVehicleModel(vehicle) != 591) return SendClientMessage(playerid, 0xFFFFFF00, "Das ist kein Anhänger...");
    GetVehiclePos(vehicle, X, Y, Z); GetVehicleZAngle(vehicle, angle);
    if(angle < 180.0) floatadd(angle, 180.0);
    else floatsub(angle, 180.0);
    floatadd(X, (distance * floatsin(-angle, degrees))); floatadd(Y, (distance * floatcos(-angle, degrees)));
    if(!IsPlayerInRangeOfPoint(playerid, 3.5, X, Y, Z)) return SendClientMessage(playerid, 0xFFFFFF00, "Du musst hinter dem Anhänger stehen...");
    GameTextForPlayer(playerid, "Willkommen im Anhaenger ^^", 2500, 3);
    SetPVarInt(playerid, "TrailerID", vehicle);
    SetPlayerVirtualWorld(playerid, vehicle); //Diese ID nicht verändern, damit dein Interior mehrfach benützt werden kann!
    //Bitte diese Koordinaten unterbei anpassen ^^
    if(IsPlayerInAnyVehicle(playerid))
    {
    SetVehiclePos(GetPlayerVehicleID(playerid), X, Y, Z); //Die Position im Interior vom Anhänger
    SetVehicleVirtualWorld(GetPlayerVehicleID(playerid), vehicle);
    }
    else SetPlayerPos(playerid, X, Y, Z); //Die Position im Interior vom Anhänger
    return 1;
    }
    if(!strcmp(cmdtext, "/truckexit", false))
    {
    if(!IsPlayerConnected(playerid)) return 1;
    if(GetPVarInt(playerid, "TrailerID") == -1) return SendClientMessage(playerid, 0xFFFFFF00, "Du bist in einem Anhänger drinnen...");
    if(GetPlayerVirtualWorld(playerid) != GetPVarInt(playerid, "TrailerID"))
    {
    SetPVarInt(playerid, "TrailerID", -1);
    return SendClientMessage(playerid, 0xFFFFFF00, "Du bist in einem Anhänger drinnen...");
    }
    new vehicle = GetPVarInt(playerid, "TrailerID"), Float:X, Float:Y, Float:Z, Float:angle, Float:distance = 5.0;
    GetVehiclePos(vehicle, X, Y, Z); GetVehicleZAngle(vehicle, angle);
    if(angle < 180.0) floatadd(angle, 180.0);
    else floatsub(angle, 180.0);
    floatadd(X, (distance * floatsin(-angle, degrees))); floatadd(Y, (distance * floatcos(-angle, degrees)));
    SetPlayerVirtualWorld(playerid, 0);
    if(IsPlayerInAnyVehicle(playerid))
    {
    SetVehiclePos(GetPlayerVehicleID(playerid), X, Y, Z); //Diese Werte NICHT Ändern..
    SetVehicleVirtualWorld(GetPlayerVehicleID(playerid), 0);
    }
    else SetPlayerPos(playerid, X, Y, Z); //Diese Werte NICHT Ändern..
    GameTextForPlayer(playerid, "Hoffe der Besuch im Haenger war doll ^^", 2500, 3);
    SetPVarInt(playerid, "TrailerID", -1);
    return 1;
    }
    return 0;
    }

    Was er meint, ist dieses Tool für GTA (Nicht für Samp), jedoch auch in Samp nützbar, ist das hier: http://www.thegtaplace.com/dow…-andreas-camera-hack-v1-2


    was ich meine ist folgende Theorie:

    forward CamCheck(playerid);


    public OnPlayerStateChange(playerid, newstate, oldstate)
    {
    if(newstate == PLAYER_STATE_DRIVER)
    {
    SetPVarInt(playerid, "CamCheckTimer", SetTimerEx("CamCheck", 250, 1, "d", playerid));
    }
    if(newstate == PLAYER_STATE_ONFOOT)
    {
    KillTimer(GetPVarInt(playerid, "CamCheckTimer"));
    RemovePVar(playerid, "CamCheckTimer");
    }
    return 1;
    }
    public CamCheck(playerid)
    {
    if(!IsPlayerInAnyVehicle(playerid)) return 1;
    new Float:X, Float:Y, Float:Z, Float:Angle, Float:nX, Float:nY;
    GetVehiclePos(GetPlayerVehicleID(playerid, X, Y, Z));
    GetVehicleZAngle(GetPlayerVehicleID(playerid), Angle);
    nX = X+(3.5 * floatsin(-Angle, degrees)); nY = Y+(3.5 * floatcos(-Angle, degrees));
    SetPlayerCameraPos(playerid, X, Y, Z);
    SetPlayerCameraLookAt(playerid, nX, nY, Z);
    return true;
    }


    ACHTUNG: Verbraucht sehr viel an CPU Auslastung!