Komisches Teleport Problem

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
  • Hallo,


    ich habe mit einem ziemlich komischen Problem zu tun, dessen Ursache mir völlig unklar ist und das total willkürlich auftritt. Es passiert beim Teleportieren in einem Auto.
    Wenn ich mich im Auto mal teleportiere, dann klappt das in der Regel zu 90%. Allerdings kommt es gelegentlich vor, dass der Teleport nicht durchgeführt wird, sprich: Die Position wird nicht gesetzt, aber das Geld wird abgezogen (siehe ab Zeile 21).


    Das hier ist die Funktion zum Teleportieren. Das spart mir unter den eigentlichen CMDs Unmengen an Zeilen.
    stock AddTeleport(playerid, cmdtext[], Float:PedX, Float:PedY, Float:PedZ, Float:PedA, Float:VehX, Float:VehY, Float:VehZ, Float:VehA, bool:buffer, bool:spawnprotect, worldid = 0, interiorid = 0)
    {
    if(PlayerActionForbidden(playerid)) return 1;
    if(IsPlayerInDownState[playerid]) return SendLanguageMessage(playerid, C_RED, "»WARNUNG« Bitte warte, bis du wieder respawnst.", "»WARNING« Please wait until you respawn.");
    if(buffer) if(BufferCMD(playerid)) return 1;

    new Float:distance = (GetPlayerDistanceFromPoint(playerid, PedX, PedY, PedZ) / 10);
    new intDistance = floatround(distance, floatround_round);
    if(GetPlayerMoney(playerid) >= intDistance)
    {
    if(spawnprotect == true)
    {
    SavePlayerHPandAP(playerid);
    SetSpawnProtection(playerid);
    }
    if(!IsPlayerInAnyVehicle(playerid))
    {
    SetPlayerPos(playerid, PedX, PedY, PedZ);
    SetPlayerFacingAngle(playerid, PedA);
    }
    else if(IsPlayerInAnyVehicle(playerid))
    {
    SetPlayerPos(playerid, PedX, PedY, PedZ);
    SetVehiclePos(GetPlayerVehicleID(playerid), VehX, VehY, VehZ);
    SetVehicleZAngle(GetPlayerVehicleID(playerid), VehA);
    PutPlayerInVehicle(playerid, GetPlayerVehicleID(playerid), 0);
    }
    GivePlayerMoneyEx(playerid, -intDistance);
    SetPlayerVirtualWorld(playerid, worldid);
    SetPlayerInterior(playerid, interiorid);
    SetCameraBehindPlayer(playerid);
    UpdateMSG(playerid, cmdtext);
    }
    else
    {
    new stringDE[64],
    stringEN[64];
    format(stringDE, sizeof(stringDE), "»WARNUNG« Du hast nicht genug Geld! "#C_DARK_RED_E"(%d$)", intDistance);
    format(stringEN, sizeof(stringEN), "»WARNING« You don't have enough money! "#C_DARK_RED_E"(%d$)", intDistance);
    SendLanguageMessage(playerid, C_RED, stringDE, stringEN);
    }
    return 1;
    }


    Ein Beispiel für einen Teleport wäre dann das hier.
    COMMAND:ls(playerid, params[])
    {
    AddTeleport(playerid, "/ls", 2492.7268, -1668.3849, 13.3438, WEST, 2492.7268, -1668.3849, 13.3438, WEST, true, true, 0, 0);
    return 1;
    }


    Ich hoffe, jemand kann mir helfen!

  • Wenn der Fehler vorkommt, was musst du machen, bzw. was machst du, damit es wieder geht?


    Das ganze tritt nur flüchtig auf. Wenn ich dann einen weiteren Teleport eingebe, ist die Sache, bis zum nächsten Vorfall, wieder gegessen.
    Wie bereits gesagt, das Phänomen tritt nur auf, wenn ich mich im Auto teleportiere. Zumindest habe ich noch nie einen solchen Fehler on foot gehabt.


    EDIT: Ich habe eben nochmals debuggt, und zwar im else if statement. Der Code wird aufgerufen, aber komischerweise wird die Position nicht gesetzt! Ich habe mir auch die Koordinaten nach dem Setzen der Position printen lassen, und angezeigt werdendie in AddTeleport angegebenen Koordinaten.

    Einmal editiert, zuletzt von Manyula ()

  • Ahh, alles klar. Gut erklärt!
    Ändere den Fahrzeug-Teil zu:
    else if(IsPlayerInAnyVehicle(playerid))
    {
    new id = GetPlayerVehicleID(playerid);
    SetPlayerPos(playerid, PedX, PedY, PedZ);
    SetVehiclePos(id, VehX, VehY, VehZ);
    SetVehicleZAngle(id, VehA);
    PutPlayerInVehicle(playerid, id, 0);
    }


    Das lag daran, weil du nach SetPlayerPos (= er ist aus dem Fahrzeug) GetPlayerVehicleID machst.

  • Jeffry:
    Man kann es auch so machen ;D

    else if(IsPlayerInAnyVehicle(playerid))
    {
    new id = GetPlayerVehicleID(playerid);
    SetVehiclePos(id, VehX, VehY, VehZ);
    SetVehicleZAngle(id, VehA);
    }


    So wird nur das Auto geportet und nicht andauernd der Spieler

    Mit Freundlichen Grüßen
    Whitetiiger aka. Kaito-sensei
    P.s. Alle mit #IRONIE bestätigten Sätze von mir, sind als Ironie anzusehen.

  • Wo liegt der Unterschied dazu, ob ich die VehicleID vorher in eine Variable speicher oder direkt in der Funktion nochmal aufrufe, wie in diesem Fall?
    Und danke, ich hab jetzt mal einen Testlauf gemacht, bis jetzt alles in Butter!