Beiträge von Jeffry

    Hast du noch eine Idee ?

    Ich konnte dir leider nicht früher antworten.


    Lass dir bitte mal die beiden Rotationen ausgeben, wenn du direkt frontal vor dem Mülleimer stehst, ganz exakt gegenüber, so wie es sein soll.
    new diff = (floatround(a + 180) % 360) - floatround(Pos[2]);
    printf("a: %f / Pos2: %f", a, Pos[2]);


    Poste dazu bitte noch alle 6 Koordinaten des Mülleimers, wie er erstellt wird, mit der Model ID.

    Oder hab ich deinen Code falsch angegeben?

    Ja, du hast den notwendigen Teil der Abfrage auskommentiert (grün) und dazu verfälscht.


    if(SpielerDaten[playerid][pLevel] > 3 /*&& SpielerDaten[playerid][pAdmin] > 0 && SpielerInfo[playerid][pEinweiser] == 0*/)
    return SendClientMessage(playerid,ROT,"Du bist kein Neuling mehr!");
    zu:
    if(SpielerDaten[playerid][pLevel] > 3 && SpielerDaten[playerid][pAdmin] == 0 /*&& SpielerInfo[playerid][pEinweiser] == 0*/)
    return SendClientMessage(playerid,ROT,"Du bist kein Neuling mehr!");
    (siehe oben)

    printf("pLevel: %d / pAdmin: %d", SpielerDaten[playerid][pLevel], SpielerDaten[playerid][pAdmin]);
    if(SpielerDaten[playerid][pLevel] > 3 && SpielerDaten[playerid][pAdmin] == 0 /*&& SpielerInfo[playerid][pEinweiser] == 0*/) return SendClientMessage(playerid,ROT,"Du bist kein Neuling mehr!"), printf("Kein Neuling.");
    printf("Meldung nicht ausgegeben");


    Was wird dir so im Server Log ausgegeben, wenn du den Befehl eingibst?

    Ich hab vergessen zu erwähnen, das es pAdminlevel nicht gibt sondern nur pAdmin. Dein Vorschag klappt leider nicht.

    if(SpielerDaten[playerid][pLevel] > 3 && SpielerInfo[playerid][pAdmin] == 0 /*&& SpielerInfo[playerid][pEinweiser] == 0*/)
    return SendClientMessage(playerid,ROT,"Du bist kein Neuling mehr!");


    Falls die Meldung trotzdem kommt, bist du kein Admin und hast ein höheres Level als 3, somit bist du kein Neuling mehr.



    PS:
    Unterlasse bitte zukünftig diese Vollzitate. Es ist absolut unnötig, den Code, den ich gepostet habe, zu zitieren.
    Zitiere die notwendigen Stellen, oder nutze die Erwähnungsfunktion (@)

    Du bist kein Neuling mehr! steht dann da @Jeffry

    if(SpielerDaten[playerid][pLevel] > 3 /*&& SpielerInfo[playerid][pAdminlevel] == 0 && SpielerInfo[playerid][pEinweiser] == 0*/)
    return SendClientMessage(playerid,ROT,"Du bist kein Neuling mehr!");
    zu:
    if(SpielerDaten[playerid][pLevel] > 3 && SpielerInfo[playerid][pAdminlevel] == 0 /*&& SpielerInfo[playerid][pEinweiser] == 0*/)
    return SendClientMessage(playerid,ROT,"Du bist kein Neuling mehr!");

    Hab jetzt nur Floats drin im Enum, kann man das irgendwie anders schreiben damit es dynamisch ist?

    for(new i = 0; i<MAX_PRODUCTS; i++)
    {
    for(new j = 0; j < MAX_KLASSEN; j++)
    {
    format(string,sizeof(string),"%s%d",InventarName[Inventar_Name:i], j);
    Inventar[playerid][Inventar_Daten:i][j] = dini_Float(file,string);
    }
    }


    Mit:
    #define MAX_KLASSEN 101
    Das setzt du dann am besten in dein Enum auch anstelle der 101'er ein.


    Speichern ebenfalls mit beiden Schleifen.
    In der Datei steht dann sowas wie:

    Code
    Cannabis0=0
    Cannabis1=987
    Cannabis2=212
    ...
    Cannabis100=1111
    Herion0=123
    Herion1=0
    ...
    Herion100=1
    ...

    new Float:diff = ((playerAngle + 180) % 360) - Pos[1];// Diese Zeile
    if(diff < 15 && diff > -15)
    {
    return true;
    }

    Der Part hier darf nicht in die Funktion, die muss zu der Abfrage hin, nach IsPlayerInRangeOfPoint.


    Sprich:
    if(IsPlayerInRangeOfPoint(…))
    {
    if(diff < 15 && diff > -15)
    {
    //steht vor einem Mülleimer, und schaut ihn an
    //mache etwas
    return 1;
    }
    }
    return SendClientMessage(playerid, 0xFF0000FF, "Du stehst vor keinem Mülleimer.");


    Zwecks dem Error:
    Sorry, mein Fehler, habe nicht auf das Float geachtet. Am besten du schreibst es dann gleich so:
    new diff = (floatround(playerAngle + 180) % 360) - floatround(objectAngle);
    Die Nachkommastellen sind hier nicht wichtig.

    da er mir Ja 3 ausgibt ?

    In der Regel ist die Blickrichtung der dritte Rotationsparameter.
    Prüfe am besten in einem Map Editor, mit dem Mülleimer-Objekt, welche der drei Rotationen du verändern musst, damit sich die "Blickrichtung" des Mülleimers ändert. Diesen Parameter musst du dann als objectAngle nehmen.

    Hab gerade aber gesehen beim Streamer gibt es die Funktion GetDynamicObjectRot nicht.

    Doch, die gibt es.
    https://github.com/samp-incogn…eamer-plugin/wiki/Natives


    Beispiel für die Blickrichtung:
    new Float:diff = ((playerAngle + 180) % 360) - objectAngle;
    if(diff < 15 && diff > -15)
    {
    //Schaut die Mülltonne an der Front an.
    }


    playerAngle = GetPlayerFacingAngle-Wert
    objectAngle = GetDynamicObjectRot-Wert


    Die Positionsprüfung ist ja im Link beschrieben, mit einem Beispiel, du musst nur die beiden Vehicle-Funktionen austauschen.

    Okey das wäre nicht das Problem aber was mache ich mit der der Varriable a ?

    Die bekommst du aus GetObjectRot.


    Wenn du zusätzlich noch die Blickrichtung des Spielers abgleichen willst, musst du prüfen, ob die Blickrichtung im Rahmen der Angle ist.
    Sprich:
    (playerAngle + 180) Modulo 360 minus objectAngle muss zwischen +15 und -15 liegen.


    Modulo ist das % Zeichen in PAWN.

    Du weißt doch gar nicht was er zuweisen will, wtf.
    Er will sicher keinen statischen Wert zuweisen, sondern etwas aus einer Variable.

    Meine Herrn.
    Natürlich hat er geantwortet. Wenn du dort irgendetwas anderes rein interpretierst, tut das nach wie vor nichts zu Sache.

    new PlayerInfo[MAX_PLAYERS][pInfo];

    PlayerInfo[playerid][pFunktionName] = "namebeispiel";


    Und jetzt ist gut. Kindergarten hier.



    ========


    super, danke

    Gerne.
    Bitte unterlasse zukünftig diese Vollzitate von gesamten Posts mit Unterzitaten. Das macht keinen Sinn und stellt einen Missbrauch der Zitat-Funktion dar, was zu Verwarnungen führen kann. Das wurde dir jetzt mehrfach gesagt.