Wenn Player an bestimmter Stelle ist --> in interior porten geht bei meinem code nicht

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 gerade gescriptet, dass wenn man hinten bei dem Andromada an der Klappe steht, dass man dann in ein Interior geportet wird. Aber man wird nciht geportet hier der Code (es gibt keine warnings)

    forward AndromadaKlappe();
    forward AndromadaExit(playerid);


    public OnGameModeInit()
    {
    SetTimer("AndromadaKlappe", 10, true);
    ARMYCARS[40] = CreateVehicle(592,-1372.2037,-221.2788,15.3431,318.0049,6,6, never); //Andromada
    return 1;
    }


    public AndromadaKlappe()
    {
    for(new i=0; i < MAX_PLAYERS; i++)
    {
    if(pInfo[i][fraktion] == 3)
    {
    new Float:X, Float:Y, Float:Z;
    GetVehiclePos(ARMYCARS[40], X, Y, Z);
    if(IsPlayerInRangeOfPoint(i, 1.5, X+-0.0559, Y+-17.2192, Z+-0.7394)) //die Plus sachen sind für den Abstand zwischen Flugzeug und Klappe
    {
    SetPlayerPos(i, 315.33, 1034.54, 1944.63);
    SetPlayerInterior(i, 9);
    SetTimerEx("AndromadaExit", 10, true, "i", i);
    }
    }
    }
    return 1;
    }


    public AndromadaExit(playerid)
    {
    if(IsPlayerInRangeOfPoint(playerid, 2, 315.33, 1034.54, 1944.63))
    {
    new Float:X, Float:Y, Float:Z;
    GetVehiclePos(ARMYCARS[40], X, Y, Z);
    SetPlayerPos(playerid, X+-0.0559, Y+-17.2192, Z+-0.7394);
    SetPlayerInterior(playerid, 0);
    }
    return 1;
    }


    weiß wer woran das liegt?

    Einmal editiert, zuletzt von Tom Sunder ()

  • 1.5 ist bissel klein teste es mal auf 5 oder 10 sonst müsstest du ja fast auf die koordinate genau an dem punkt stehen und setzt den timer mal höher 10 ms braucht kein mensch


    wenn cih es erhöh geht es ;9 Danke nur jetzt muss ich noch die richtigen Zhalen rausfinden die ich dann brauch weil eigentlich hab ich die schon errechnet....

  • Dreh das Fahrzeug mal um 90° Fail 180° :D.
    Dann wirst du sehen, dass das nicht funktioniert ...
    Am besten wäre bei sowas immernoch ein Befehl, weil dieser Timer ... Naja, nicht gerade nett :P


    Schau dir mal das Beispiel hier an:
    http://wiki.sa-mp.com/wiki/Stocks#Returning_multiple_values


    GetXYInFrontOfPlayer
    Die Funktion kann man so umbauen, dass du die Position HINTER dem Fahrzeug erkennst!

  • Ändert nichts daran das er trotzdem die distance abfragen muss welche IsPlayerInRangeOfPoint direkt beinhaltet


    IsPlayerInRangeOfPoint ist nur eine abfrage (verbunden mit if)


    und


    GetPlayerDistanceFromPoint ist eine "Funktion" die du ganz gut mit if verbinden kannst, der punkt jedoch ist: Es geht hier um Präzision!

  • so ich hab jetzt gerade bemerkt das das mit dem plus xyz unsinn ist da wenn man es dreht dann nimmer geht. ich hab es nun so aber es funkt nun nichtmehr (hab es nun mit dialog und der dialog kommt nicht)

    forward AndromadaKlappe();
    forward AndromadaExit(playerid);


    public OnGameModeInit()
    {
    SetTimer("AndromadaKlappe", 10, true);
    ARMYCARS[40] = CreateVehicle(592,-1372.2037,-221.2788,15.3431,318.0049,6,6, never); //Andromada
    return 1;
    }


    public AndromadaKlappe()
    {
    for(new i=0; i < MAX_PLAYERS; i++)
    {
    if(pInfo[i][fraktion] == 3)
    {
    new Float:X, Float:Y, Float:Z;
    GetVehiclePos(ARMYCARS[40], X, Y, Z);
    if(IsPlayerInRangeOfPoint(i, 100, X, Y, Z))
    {
    if(AKV[i] == 0)
    {
    ShowPlayerDialog(i, DIALOG_AKANFRAGE, DIALOG_STYLE_MSGBOX, "", "Willst du in den Stauraum des Andromada gehen?", "Betreten", "Abbrechen");
    }
    }
    }
    }
    return 1;
    }


    public AndromadaExit(playerid)
    {
    SetTimerEx("AndromadaExit2", 1000, false, "i", playerid);
    return 1;
    }


    public AndromadaExit2(playerid)
    {
    if(IsPlayerInRangeOfPoint(playerid, 2, 315.33, 1034.54, 1944.63))
    {
    new Float:X, Float:Y, Float:Z;
    GetVehiclePos(ARMYCARS[40], X, Y, Z);
    SetPlayerPos(playerid, X+-0.0559, Y, Z+-0.7394);
    SetPlayerInterior(playerid, 0);
    }
    else
    {
    SetTimerEx("AndromadaExit2", 1000, false, "i", playerid);
    }
    return 1;
    }
    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    if(dialogid == DIALOG_AKANFRAGE)
    {
    if(response)
    {
    AKV[playerid] = 1;
    }
    else
    {
    SetTimerEx("AndromadaExit", 10000, true, "i", playerid);
    }
    }
    return 1;
    }


    weiß wer woran das liegt das kein dialog kommt? (Ich hab bei der Range von IsPlayerInRangeOfPoint auch schon ausprobiert zu erhöhen und so (bis 1000 hab cih es probiert)

  • Schreibs mal so:


    public AndromadaKlappe()
    {
    new Float:vPos[3];
    GetVehiclePos(ARMYCARS[40], vPos[0], vPos[1], vPos[2]);
    for(new i=0; i < MAX_PLAYERS; i++)
    {
    if(i == INVALID_PLAYER_ID)continue;
    if(pInfo[i][fraktion] != 3)continue;
    if(GetPlayerDistanceFromPoint(i, vPos[0], vPos[1], vPos[2]) >= 5.1)continue;
    if(AKV[i] != 0)continue;
    ShowPlayerDialog(i, DIALOG_AKANFRAGE, DIALOG_STYLE_MSGBOX, "test", "Willst du in den Stauraum des Andromada gehen?", "Betreten", "Abbrechen");
    }
    return 1;
    }


  • anfangs kam nun der dialog dann sit mir aufgefallen das ich das mit ins interior porten vergessen hab dann ahb cih es eingefügt und nun kommt der dialog nnimmer...
    Hab das mit porten in OnplayerDialogResponse reingemacht (bevor der Timer gestartet wird)

  • Wie sieht dein Code jetzt aus?


    ich hab nur was in onpolayerdialog eingefügt (das porten) hier das neue:

    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    if(dialogid == DIALOG_AKANFRAGE)
    {
    if(response)
    {
    AKV[playerid] = 1;
    }
    else
    {
    SetPlayerPos(playerid, 315.33, 1034.54, 1944.63);
    SetPlayerInterior(playerid, 9);
    SetTimerEx("AndromadaExit", 10000, true, "i", playerid);
    }
    }
    return 1;
    }

    2 Mal editiert, zuletzt von Tom Sunder ()