[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
  • Gibt auch k<vehicle> als sscanf Parameter, dadurch kann man modelID oder Name angeben :)

    Infos bei: https://ysi.fandom.com/wiki/SSCANF_2.8.1

    okay das mir neu verwende ja sscanf2 als include ^^


    wie genau darf ich mir das den vorstellen ?


    Code
    if(sscanf(params, "k[30]",vehicle)) return SendErrorMessage(playerid, "Benutzung: /v name");

    oder wie


    //

    ah hab es so ist das ^^

    Code
    if(sscanf(params, "k<vehicle>dd", vID,c1,c2))return SendClientMessage(playerid,COLOR_GREY,"Benutzung: /vid [Vehicle ID] Color1 Color2");

    Einmal editiert, zuletzt von undbyebye ()

  • Moin,


    ich stehe auf dem schlauch warum fragt er hier nicht ab ob er an einem dieser punkte steht ?

    Code
    if(!IsPlayerInRangeOfPoint(playerid,5,hInfo[i][h_outx],hInfo[i][h_outy],hInfo[i][h_outz]) || !IsPlayerInRangeOfPoint(playerid,5,hInfo[i][h_inx],hInfo[i][h_iny],hInfo[i][h_inz])) continue;
  • Klar gerne

  • Mal als Tipp, so Funktionen die man immer mal wieder benötigt, wie die Prüfung, ob der Spieler wirklich an seinem Haus ist (welches einem gleich noch die HausID zurückliefert) schön kapseln und in Funktionen auslagern.


    Hier bietet es sich an bissl mit Pointern zu spielen:


    ast2ufdyxkb1.png


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

    • Offizieller Beitrag

    Moin,


    ich stehe auf dem schlauch warum fragt er hier nicht ab ob er an einem dieser punkte steht ?

    Ich denke, es liegt daran, dass du dort ein oder also || verwendest.


    Du willst ja wahrscheinlich abfragen, wenn er nicht innen oder außen an den jeweiligen Positionen steht.

    Wenn du dies jetzt aber verneinst, müsstest du statt dem und ein oder verwenden.


    Würde heißen:

    Code
    // Wenn nicht an Position außen && nicht an Position innen, dann mache nichts und gehe in der Schleife weiter
    if(!IsPlayerInRangeOfPoint(playerid,5,hInfo[i][h_outx],hInfo[i][h_outy],hInfo[i][h_outz]) && !IsPlayerInRangeOfPoint(playerid,5,hInfo[i][h_inx],hInfo[i][h_iny],hInfo[i][h_inz])) continue;
  • Vielen Dank aber was bedeutet dieses EOS

    EOS steht für End Of String und prüft quasi, ob dass '\0' ist.


    Ist also ein String leer, ist das erste Zeichen der NULL-Charakter.


    C
    new string[5];
    if(string[0] == EOS)
    {
        //Das hier ist true, da der String leer ist.
    }

    Das ist quasi eine schnelle Methode zu prüfen, ob ein String leer ist.


    So muss er nicht strlen aufrufen xD

    ast2ufdyxkb1.png


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

  • Richtig.


    C
    new a=0;
    test(a);
    printf("a=%d",a); //Gibt aus: a=1337
    
    stock test(&bla)
    {
        bla=1337;
    }

    Dieser Vorgang nennt sich Call by Reference :)

    Dazu gibt es online viele Infos zu.

    ast2ufdyxkb1.png


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

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Richtig.


    C
    new a=0;
    test(a);
    printf("a=%d",a); //Gibt aus: a=1337
    
    stock test(&bla)
    {
        bla=1337;
    }

    Dieser Vorgang nennt sich Call by Reference :)

    Dazu gibt es online viele Infos zu.

    Sowas gibt es in PAWN? Immer wieder verblüffend wie viele C-like Features ja doch in PAWN vorhanden sind, aber scheinbar von niemandem verwendet werden

  • Moin moin


    wie ist es möglich einen Float random wert zu bekommen habe es so probiert das führt aber leider zu nichts :D

    Code
        new Float:rand = random(250);
        rafvalveInfo[id][rafvalve_status] += rand+250;
    Code
    stock Float:frand(Float:min, Float:max)
    {
        return float(random(floatround(min) - floatround(max))) + min + float(random(1000)) / 1000.0;
    }

    [Function] SpawnPlayerToKvadrat

  • Moin kleine frage wieso wird mir hier nicht die variable angezeigt bei Verdienst??

    Mein enum sieht so aus

  • Kannst den Code vereinfachen und so Redundanzen vermeiden:


    Die Frage ist, wie und wo du sInfo[playerid][paycheck] setzt und dem einen Wert gibst :)

    ast2ufdyxkb1.png


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

  • Moin moin

    ich habe diesmal das problem das ich beim auslesen ob ein spieler auf ein objekt schießt nicht so wirklich weiterkommer


    er erkennt zwar das ich schieße aber mehr auch nicht bei der abfrage

    Code
    if(hittype == BULLET_HIT_TYPE_OBJECT)

    ist schluss danach gehts nicht weiter benutze auch einen Streamer hängt es damit zusammen oder gehen vielleicht nur bestimmte objekte zu hitten?

    Vielen dank

  • Wie erstellst du denn das Objekt?


    Wieso gibst du dir nicht mehr Parameter aus? Dann wurdest du merken, dass BULLET_HIT_TYPE_PLAYER_OBJECT aufgerufen wird, da es sich bei "dynamic Objekten" bzw Streamer Objekten immer um Player Objekte handelt.


    C
    printf("%d|%d|%d|%d|%.02f|%.02f|%.02f",playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ);

    Alternativ kannst du auch OnPlayerShootDynamicObject nehmen.

    ast2ufdyxkb1.png


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