[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
  • Jeffry: Achso ich verstehe nun was du meinst, und hab auch mein Fehler gefunden, ich muss TextDrawShowForPlayer aber nur einmal hinzufügen oder?
    Wenn ich das mache, habe ich aber PlayerID noch nicht definiert, ich nehme an ich muss das auch "oben" machen, aber wie?


    Mit freundlichen Grüßen
    JustMe.77 8)

  • Wenn ich das mache, habe ich aber PlayerID noch nicht definiert, ich nehme an ich muss das auch "oben" machen, aber wie?


    Das musst du dort machen, wo du dem Spieler das TextDraw anzeigen lassen willst. "playerid" sollte dort definiert sein, also zum Beispiel unter OnPlayerConnect oder so. Ansonsten musst du die playerid, wie du schon sagtest, selbst definieren, und es dann zum Beispiel über eine Schleife anzeigen lassen. Wenn du es aber immer zeigen willst, nutze OnPlayerConnect.


  • Das musst du dort machen, wo du dem Spieler das TextDraw anzeigen lassen willst. "playerid" sollte dort definiert sein, also zum Beispiel unter OnPlayerConnect oder so. Ansonsten musst du die playerid, wie du schon sagtest, selbst definieren, und es dann zum Beispiel über eine Schleife anzeigen lassen. Wenn du es aber immer zeigen willst, nutze OnPlayerConnect.

    Ich habe meine Textdraw's unter GameModeInit, also dort definieren richtig?


    Ich verstehe aber immer noch nicht das definieren, wie mach ich das denn?


    #define playerid und dann :D?


    Mit freundlichen Grüßen
    JustMe.77 8)

  • #define playerid und dann :D?


    Nein, nicht so.


    Angenommen du willst es bei OnFilterScriptInit (macht zwar keinen Sinn aber egal) für alle Spieler anzeigen lassen, die in Welt 0 sind:
    for(new playerid = 0; playerid < MAX_PLAYERS; playerid++) if(GetPlayerVirtualWorld(playerid) == 0) TextDrawShowForPlayer(playerid, Textdraw);


    "new playerid" wäre die Deklaration.

  • Jeffry:


    Ich verstehe es an deinem Beispiel nicht, sorry..



    public OnGameModeInit()


    {



    TextDrawShowForPlayer(playerid, textid);
    Textdraw0 = TextDrawCreate(609.599975, 41.322223, "usebox");
    TextDrawLetterSize(Textdraw0, 0.000000, 0.000000);
    TextDrawTextSize(Textdraw0, 609.599975, 0.000000);
    TextDrawAlignment(Textdraw0, 1);
    TextDrawColor(Textdraw0, 0);
    TextDrawUseBox(Textdraw0, true);
    TextDrawBoxColor(Textdraw0, 102);
    TextDrawSetShadow(Textdraw0, 0);
    TextDrawSetOutline(Textdraw0, 0);
    TextDrawFont(Textdraw0, 0);


    Textdraw1 = TextDrawCreate(538.400390, 7.466648, "FPS:");
    TextDrawLetterSize(Textdraw1, 0.180799, 0.778666);
    TextDrawAlignment(Textdraw1, 1);
    TextDrawColor(Textdraw1, 16777215);
    TextDrawSetShadow(Textdraw1, 0);
    TextDrawSetOutline(Textdraw1, 1);
    TextDrawBackgroundColor(Textdraw1, 51);
    TextDrawFont(Textdraw1, 1);
    TextDrawSetProportional(Textdraw1, 1);


    Textdraw2 = TextDrawCreate(563.000732, 7.471092, "Ping:");
    TextDrawLetterSize(Textdraw2, 0.180799, 0.778666);
    TextDrawAlignment(Textdraw2, 1);
    TextDrawColor(Textdraw2, 16777215);
    TextDrawSetShadow(Textdraw2, 0);
    TextDrawSetOutline(Textdraw2, 1);
    TextDrawBackgroundColor(Textdraw2, 51);
    TextDrawFont(Textdraw2, 1);
    TextDrawSetProportional(Textdraw2, 1);


    Textdraw3 = TextDrawCreate(591.600769, 7.475535, "Time:");
    TextDrawLetterSize(Textdraw3, 0.180799, 0.778666);
    TextDrawAlignment(Textdraw3, 1);
    TextDrawColor(Textdraw3, 16777215);
    TextDrawSetShadow(Textdraw3, 0);
    TextDrawSetOutline(Textdraw3, 1);
    TextDrawBackgroundColor(Textdraw3, 51);
    TextDrawFont(Textdraw3, 1);
    TextDrawSetProportional(Textdraw3, 1);



    Meine Defines:



    new Text:Textdraw0;
    new Text:Textdraw1;
    new Text:Textdraw2;
    new Text:Textdraw3;


    Und das sind meine Errors:



    C:\Users\Dave\Desktop\Legends never Die [LnD]\gamemodes\LegendsneverDie.pwn(59) : error 017: undefined symbol "playerid"


    1 Error.




    Wo, bei diesem Code, muss ich was eintragen?Kann das so besser verstehen.


    Und wenn ich erstmal die Playerid definiert habe, kommt danach nicht noch textdraw?


    Mit freundlichen Grüßen
    JustMe.77 8)

  • Wo hast du die vier Zeilen denn hingeschrieben?
    Und welche Zeile hat den Error? Eine der vier oder eine andere?



    Ach hat sich doch erledigt, hatte TextDrawForPlayer 2 mal drin, werde das ganze mal Ingame ausprobieren, danke!
    Echt lobenswert wie du diesen Thread hier dominierst :D



    //Neues Problem



    Habe nun das ganze hingekriegt und die Textdraw's sind auch Ingame, aber überhaupt nicht da wo sie sein sollten, habe an den Werten nix geändert, woran könnte das liegen?


    So schaut's Ingame aus ...



    Mit freundlichen Grüßen
    JustMe.77 8)

    Einmal editiert, zuletzt von JustMe.77 ()

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Danke hat geholfen :)


    Stelle mich grad so dumm an, ich weiß das irgendwo ein Klammerfehler ist..



    public OnPlayerCommandText(playerid, cmdtext[]) //Befehle


    {

    if(strcmp("/clearchat",cmdtext,true,10 == 0)
    {

    SendClientMessageToAll(-1,"");
    SendClientMessageToAll(-1,"");
    SendClientMessageToAll(-1,"");
    SendClientMessageToAll(-1,"");
    SendClientMessageToAll(-1,"");
    SendClientMessageToAll(-1,"");
    SendClientMessageToAll(-1,"");
    SendClientMessageToAll(-1,"");
    SendClientMessageToAll(-1,"");
    SendClientMessageToAll(-1,"");
    SendClientMessageToAll(-1,"");
    SendClientMessageToAll(-1,"");
    SendClientMessageToAll(-1,"");
    return 1;
    }



    Error C:\Users\Dave\Desktop\Legends never Die [LnD]\gamemodes\LegendsneverDie.pwn(307) : error 001: expected token: ")", but found "{"
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    1 Error.


    Mit freundlichen Grüßen
    JustMe.77 8)

  • Ja, das Beispiel im Wiki ist einfach schlecht.
    Die 10 sagt aus, dass nur die ersten 10 Buchstaben überprüft werden.


    Also:
    /clearchatdhafgjdgshdgsdgsjdhasjkd
    würde erkannt werden als:
    /clearchat


    Zufällig sind es eben genau 10 Buchstaben.
    Wäre der Befehl aber:
    /cc
    und du gibst
    /ccjhdkasdhashdashd
    ein, dann würde es nicht erkannt werden. Das ist nicht wirklich toll, da die Spieler es dann nicht mehr blicken.


    Das macht nur dann Sinn, wenn du es wirklich so haben willst.



    10 = Es wird nur bis zum 10. Buchstabe auf Gleichheit geprüft.

  • Gibt es irgende bestimmten Menge an Datensätzen, bei der sich die Verwendung von MySQL lohnt?
    Bei kleineren Datensätzen ist ja eigentlich SQL-Lite besser, oder?


    Das kommt auch auf die Operationen an. Generell ist aber SQLite (meistens) schneller: https://www.sqlite.org/speed.html
    Kannst es ja selbst mal testen, aber ich schätze mal selbst bei 1 Million Datensätzen ist SQLite schneller. Und das wirst du nicht erreichen.


    Siehe auch: http://www.sqlite.org/whentouse.html



    EDIT: @Raven^: Die Zeit-Tests sind zwar veraltet (steht ja ganz groß oben dran, hab ich erst mal knall hart überlesen), aber trotzdem dürften kleinere Datenbanken mit SQLite schneller sein, vor allem weil du nicht erst mit einem MySQL Server kommunizieren musst.


    Hier nochmal ein Vergleich:
    https://www.digitalocean.com/c…tabase-management-systems

    3HZXdYd.png

    2 Mal editiert, zuletzt von Jeffry ()

  • Ich verstehe Jeffry: hab's nun verstanden.


    Noch ne Frage zu meinem Befehl da oben /clearchat, ich habe jetzt im Script ganz oft SendClientMessageToAll verwendet bis man den Chat nicht mehr lesen kann, das sind aber viele Zeilen im Script, kann man das nicht irgendwie verkürzen?


    Mit freundlichen Grüßen
    JustMe.77 8)

  • Noch ne Frage zu meinem Befehl da oben /clearchat, ich habe jetzt im Script ganz oft SendClientMessageToAll verwendet bis man den Chat nicht mehr lesen kann, das sind aber viele Zeilen im Script, kann man das nicht irgendwie verkürzen?


    Für sich immer wiederholende Anweisungen kann man Schleifen verwenden:
    for(new i=0; i<100; i++)
    {
    SendClientMessageToAll(-1,"");
    }


    Das würde dir jetzt 100x eine Nachricht ausgeben, ohne Inhalt.


    Hier noch ein Tutorial: http://forum.sa-mp.com/showthread.php?t=305770