[SAMMELTHREAD] Kleine Scripting Fragen

Dein Problem konnte durch einen User gelöst werden? Bedank dich bei ihm indem du seinen Beitrag als Hilfreich markierst sowie einen Daumen oben dalässt
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
  • 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.

  • 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.

  • 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.

  • Habe diesen Fehler


    error 004: function "operator%(Float:,_:)" is not implemented


  • Und jetzt ist gut. Kindergarten hier.

    Klar wer kennt es nicht, man speichert Konstante Strings in Variablen, wäre ja auch zu einfach Konsten für Konsten und Variablen für Variablen zu nutzen.



    new Float:diff = ((playerAngle + 180) % 360) - Pos[1];


    new Float:diff = (floatround(playerAngle + 180) % 360) - Pos[1];


    Modulo ist hier nur für Integer definiert, also aus dem Float einfach einen Integer machen.

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • 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.

  • Okey Funktioniert an sich wie ich es mir vorstelle aber manchmal Funktioniert es und manchmal iwie nicht ?






    Habe das Problem wenn ich gmx eingeben Stürzt der Server ab
    Hier der Server Log

  • Hallo Community,


    ich versuche jetzt seit längerem aus Spaß ein Script zu erstellen anhand der neuen MRMonat Tutorial Reihe. Nun tritt bei mir folgendes Problem auf zum Thema Autos laden & speichern.


    Wenn ich mir ein Auto vom Autohaus kaufen erscheint es und Geld wird abgezogen aber wenn ich es da hin stelle wo ich es gerne haben möchte spwant es zurück zum Autohaus nach einem Relog.


    Ähnliches Problem mit /setcar (/createcar je nach dem) Auto spawnt, wird in der Datenbank gesavet bleibt auch da stehen wo ich es zuletzt abgestellt habe aber es wird eine Kopie am Spawnpunkt erstellt?


    Wo liegt der Fehler? Finde ihn nicht und hab ihn mit seinem Tut-Script verglichen, bei ihm Funktionierts :(


  • sscanf warning: Strings without a length are deprecated, please add a destination size.


    ocmd:setsname(playerid,params[])
    {
    new pid,name[128],getter[128];
    if(sscanf(params,"us", pid,name))
    {
    return SendClientMessage(playerid, COLOR_WHITE, "FEHLER: /setaname [playerid] [Funktion] ");
    }


    Befehl funktioniert, aber woher der warning?

  • @Nebo:
    Wir sind ja keine Sauberer oder nicht Jeder kennt die Tutorial Reihe von Mr.Monat
    Zeige uns mal das Ganze Car Enum.
    Aber Probiere erstmal ob das Funktioniert.
    Schaue mal in der Mysql Log Datei nach ob dort ein Fehler hinterlegt ist und ob die Positionen nach dem Abstellen ( Parken ? ) die Koordinaten Aktualisiert werden in der Datenbank.


    Ändere das einmal


    Zu


    Code
    ocmd:setsname(playerid,params[])
    {
    new pid,name[128],getter[128];
    if(sscanf(params,"us[128]", pid,name))
    {
    return SendClientMessage(playerid, COLOR_WHITE, "FEHLER: /setaname [playerid] [Funktion] ");
    }
  • Hallo!


    Ich versuche gerade meinen /n Chat zu Berichtigen da er nicht funktioniert.



    ocmd@2:neuling,n(playerid, params[])
    {
    #pragma unused params
    if(Eingeloggt[playerid] == 0)return SendClientMessage(playerid, GRAU, "Du bist nicht eingeloggt!");
    new string[128];
    if(SpielerDaten[playerid][pLevel] > 3 /*&& SpielerInfo[playerid][pAdminlevel] == 0 && SpielerInfo[playerid][pEinweiser] == 0*/)
    return SendClientMessage(playerid,ROT,"Du bist kein Neuling mehr!");
    if(sscanf(params,"s[128]",string))return SendClientMessage(playerid, WEISS,"Befehl: /n [Nachricht]");
    if(SpielerDaten[playerid][pAdmin] == 1)
    {
    format(string, sizeof(string), "[Helfer] %s: %s",SpielerDaten[playerid][pName],string);
    }
    else if(SpielerDaten[playerid][pAdmin] > 1)
    {
    format(string, sizeof(string), "[%s] %s: %s",GetAdminRangName(playerid),SpielerDaten[playerid][pName],string);
    }
    else
    {
    format(string, sizeof(string), "[Neuling] %s: %s",SpielerDaten[playerid][pName],string);
    }
    SendLevelMessage(0x00F5FFFF, string);
    return 1;
    }

    Neulinge können schreiben, nur Admins eben nicht.
    Was ist da falsch?

  • GetPlayerFacingAngle(playerid, playerAngle);

    zu:
    GetPlayerFacingAngle(playerid, a);
    und


    new Float:diff = (floatround(playerAngle + 180) % 360) - Pos[1];

    zu:
    new diff = (floatround(a + 180) % 360) - floatround(Pos[1]);


    Unter der Annahme, dass Pos[1] korrekt ist.


    Neulinge können schreiben, nur Admins eben nicht.

    Was passiert, wenn ein Admin etwas schreibt?

  • 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!");

  • 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!");


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

  • 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 (@)