[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
  • Ja ^^ Erklärung hat gefehlt :D thx das ihr beiden mich korrigiert habt ;)


    //edit


    in der Abfrage vom Level hatte ich mich verschrieben ^^ anstatt "%s" muss "%d" dahin :D

  • Danke für die Erklärungen...Funktions und Variablendefinition werd ich mir nochmal ansehen.


    maddin: Beim compilen haut er mir das warning raus und das Level wird auch nicht angezeigt:
    C:\Users\xxx\Desktop\samp03csvr_R2-2_win32\filterscripts\Level1.pwn(28) : warning 219: local variable "level" shadows a variable at a preceding level
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    1 Warning.

  • Maddin hat vergessen:


    forward level1(playerid); // muss anders als level heißen :D
    public level1(playerid){}



    mfg. :thumbup:

  • Entweder stell ich mich gerade dumm an oder da stimmt immernoch was nicht, das gibt mir nen fehler in zeile 20 und 29 an und meint level ist undefined...:


    #define FILTERSCRIPT


    #include <a_samp>


    #if defined FILTERSCRIPT


    forward level1(playerid); // muss anders als level heißen :D



    public OnFilterScriptInit()
    {
    print("\n--------------------------------------");
    print(" Blank Filterscript by your name here");
    print("--------------------------------------\n");
    return 1;
    }


    public OnPlayerSpawn(playerid)
    {
    level(playerid); // Lässt das Level erscheinen.
    /* Du möchtest ja das level von dem angegeben spiler verwenden, also geben wir den parameter "playerid" mit dazu. */
    return 1;
    }



    public level1(playerid)
    /* nach dem Public kommt direkt die klammer, und erst dann kannst du variablen mit new erstellen */
    {
    new level = GetPlayerScore(playerid);
    new string[10];
    /* ein string mit der länge von 2 ist mit sicherheit zu klein, dur brauch ja allein schon für das wort "Level" 5 zeichen. Also:
    Level = 5 zeichen
    : = 1 Zeichen
    Die zahl (ich geh jetzt mal davon aus dass das level nicht höher als 999 sein wird) also nochmal 3 zeichen.
    Macht 5+1+3+1 = 10*/
    format(string, sizeof string, "Level:%d", level);
    /* die variable "level" ist ein integer, also eine zahl. Und für zahlen wird %d oder %i benutzt. %s ist für strings, also zeichenketten.*/
    new Text:leveltext;
    /* du hast der variable "level" schon den Score zugewiesen, also musst du für den/das Textdraw eine andere bzw neue variable nehmen. Und bei textDraw muss der
    Text: -tag davon sein.*/
    TextDrawHideForAll(leveltext);
    leveltext = TextDrawCreate(498,110,string);
    TextDrawLetterSize(leveltext, 0.6, 1.8);
    TextDrawFont(leveltext, 3);
    TextDrawSetOutline(leveltext, 2);
    return 1;
    }


    public OnFilterScriptExit()
    {
    return 1;
    }

  • In Zeile 20 muss au level1 stehen so wie deine "public" Funktion :D

  • Hab ich gemacht, bleibt immernoch weg. Keine Ahnung ob das auch damit was zu tun hat, dass mein Uhr-script nichtmehr angezeigt wird, obwohl er eingefügt ist und eben noch ging .



    //EDIT: Die Uhr wird wieder angezeigt!

  • :D ja das liegt daran, dass Maddin das geschrieben hat:


    TextDrawHideForAll(leveltext); // versteckt den Text für alle



    schreibt einfach:



    TextDrawHideForPlayer(leveltext); //so sollte das funzen :D



    mfg. :thumbup:

  • 2 Warnings und es funktioniert nicht... :D


    #define FILTERSCRIPT


    #include <a_samp>


    #if defined FILTERSCRIPT


    forward level1(playerid); // muss anders als level heißen :D



    public OnFilterScriptInit()
    {
    print("\n--------------------------------------");
    print(" Blank Filterscript by your name here");
    print("--------------------------------------\n");
    return 1;
    }


    public OnPlayerSpawn(playerid)
    {
    level1(playerid); // Lässt das Level erscheinen.
    /* Du möchtest ja das level von dem angegeben spiler verwenden, also geben wir den parameter "playerid" mit dazu. */
    return 1;
    }



    public level1(playerid)
    /* nach dem Public kommt direkt die klammer, und erst dann kannst du variablen mit new erstellen */
    {
    new level = GetPlayerScore(playerid);
    new string[10];
    /* ein string mit der länge von 2 ist mit sicherheit zu klein, dur brauch ja allein schon für das wort "Level" 5 zeichen. Also:
    Level = 5 zeichen
    : = 1 Zeichen
    Die zahl (ich geh jetzt mal davon aus dass das level nicht höher als 999 sein wird) also nochmal 3 zeichen.
    Macht 5+1+3+1 = 10*/
    format(string, sizeof string, "Level:%d", level);
    /* die variable "level" ist ein integer, also eine zahl. Und für zahlen wird %d oder %i benutzt. %s ist für strings, also zeichenketten.*/
    new Text:leveltext;
    /* du hast der variable "level" schon den Score zugewiesen, also musst du für den/das Textdraw eine andere bzw neue variable nehmen. Und bei textDraw muss der
    Text: -tag davon sein.*/
    // TextDrawHideForAll(leveltext);
    TextDrawHideForPlayer(leveltext);
    leveltext = TextDrawCreate(498,110,string);
    TextDrawLetterSize(leveltext, 0.6, 1.8);
    TextDrawFont(leveltext, 3);
    TextDrawSetOutline(leveltext, 2);
    return 1;
    }


    public OnFilterScriptExit()
    {
    return 1;
    }



    #endif



    C:\Users\xxx\Desktop\samp03csvr_R2-2_win32\filterscripts\Level1.pwn(42) : warning 213: tag mismatch
    C:\Users\xxx\Desktop\samp03csvr_R2-2_win32\filterscripts\Level1.pwn(42) : warning 202: number of arguments does not match definition
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    2 Warnings.

  • Ups ja mein Fehler ^^ Probier mal:


    TextDrawHideForPlayer(playerid, leveltext);

  • Probier mal das:


    #define FILTERSCRIPT


    #include


    #if defined FILTERSCRIPT


    forward level1(playerid); // muss anders als level heißen :D
    forward weil();



    public OnFilterScriptInit()
    {
    print("\n--------------------------------------");
    print(" Blank Filterscript by your name here");
    print("--------------------------------------\n");
    return 1;
    }


    public weil();
    {
    SetTimer("level1", 600, 1);
    return 0;
    }



    public level1(playerid)
    /* nach dem Public kommt direkt die klammer, und erst dann kannst du variablen mit new erstellen */
    {
    new level = GetPlayerScore(playerid);
    new string[10];
    /* ein string mit der länge von 2 ist mit sicherheit zu klein, dur brauch ja allein schon für das wort "Level" 5 zeichen. Also:
    Level = 5 zeichen
    : = 1 Zeichen
    Die zahl (ich geh jetzt mal davon aus dass das level nicht höher als 999 sein wird) also nochmal 3 zeichen.
    Macht 5+1+3+1 = 10*/
    format(string, sizeof string, "Level:%d", level);
    /* die variable "level" ist ein integer, also eine zahl. Und für zahlen wird %d oder %i benutzt. %s ist für strings, also zeichenketten.*/
    new Text:leveltext;
    /* du hast der variable "level" schon den Score zugewiesen, also musst du für den/das Textdraw eine andere bzw neue variable nehmen. Und bei textDraw muss der
    Text: -tag davon sein.*/
    // TextDrawHideForAll(leveltext);
    TextDrawHideForPlayer(playerid, leveltext);
    leveltext = TextDrawCreate(498,110,string);
    TextDrawLetterSize(leveltext, 0.6, 1.8);
    TextDrawFont(leveltext, 3);
    TextDrawSetOutline(leveltext, 2);
    return 1;
    }


    public OnFilterScriptExit()
    {
    KillTimer(weil);
    return 1;
    }



    #endif

  • An nen Timer hab ich auch schon gedacht, aber bei deiner Variante sagt er mir, er könnte nicht vom file "" in der include zeile lesen, aber füge ich da <a_samp> ein, haut er mir 3 fehler raus. 8|?(

  • ne frage hatte das bei dcmd so:
    [s]dcmd_tt(playerid,params[]) return dcmd_taketicket(playerid,params);[/s]
    will das aber jetzt in ocmd aber bekomme errors, mein cmd:
    [s]ocmd:tt(playerid,params[]) return ocmd:taketicket(playerid,params);[/s]


    Errors:

    [s]Zeile (56271) : Ungültiger Befehl
    Zeile (56271) : Ungültiger Befehl
    Zeile (56272) : warning 209: function "ocmd_tt" should return a value[/s]


    /edit gelöst, jetzt neues Problem..


    Neues Problem:
    Wenn ich bei mir . schreibe wurde es immer gelöscht habe dann bei OnPlayerText (Godfather)
    das raus gemacht:
    new lastidx = (strlen(text) - 1);
    if(text[lastidx] == '.')
    text[lastidx] = ' ';
    Jetzt steht wenn ich schreib und ein . drin ist:
    Tommyx3: ..
    oder auch so: Tommyx3: lalala...
    aber wenn ich kein . schreibe kommt:
    Tommyx3 sagt: blabla

    Einmal editiert, zuletzt von Tommyx3 ()

  • Hallo, ich habe ein Problem, und zwar ich möchte einem String entnehmen ob der erste! Buchstabe ein großes "T" ist.


    Meine Vorgehensweise bisher:
    if(strfind(string, "T", false) == 1)


    Was ist daran falsch ?
    Danke im Voraus.

  • Hallo, ich habe ein Problem, und zwar ich möchte einem String entnehmen ob der erste! Buchstabe ein großes "T" ist.


    Meine Vorgehensweise bisher:
    if(strfind(string, "T", false) == 1)


    Was ist daran falsch ?
    Danke im Voraus.


    Laut sa-mp wiki duerfte das folgende funktionieren:
    if(strfind(string, "T", false) == 0)
    Da kein Buchstabe vor dem 'T' sein soll und strfind die Anzahl an Buchstaben vor dem ersten Auftreten des Substrings zurueckgibt.
    Eine andere Moeglichkeit die etwas schneller geht, da strfind vermieden wird waere:
    if(string[0] == 'T')