[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
  • Who "Showst" du denn das Skin Textdraw?

    Hat ja alles funktioniert, solange ich mein Register System nicht mit anklickbaren Textdraws gemacht habe,.


    So sieht das alles aus bei OnPlayerClickTextdraw.. entferne ich das Anklickbare Register/Login System... geht der Skinshop wieder.


  • Wieso ist dein Skin-System bei OnPlayerClickTextdraw nicht in der if Abfrage inbegriffen? (Also die erste if Abfrage in dem public. (Kann sein dass das nur nicht richtig angezeigt wird bei mir, bin am Handy)


    Also ich mein, wieso die geschweifte Klammer der ersten if Abfrage nach dem Register System schließt und nicht erst nach dem Skin-System unmittelbar vor der Schließung der geschweiften Klammer des Publics.



    //Edit: ich denke der Auslöser des Problems ist das return am Ende der if-Klammer. Hierdurch wird das Public abgebrochen und das Script kommt gar nicht bis zum Skinsystem

  • Mein Denkfehler ;) Das war es. Funktioniert wieder alles. Danke.


  • Habe hier meinen /pm Command jetzt in der gewuenschten Form :D
    Da stellt sich mir jedoch die Frage: Inwiefern ist das mit sscanf besser als alles mit strtok zu machen? Ist das schneller und/oder ressourcensparender?



    Oder alternativ mein alter /get command mit strtok und der neue mit sscanf


    Einmal editiert, zuletzt von Sub Royal ()

  • Beitrag von Danny. ()

    Dieser Beitrag wurde von seegras aus folgendem Grund gelöscht: Soetwas ist besser hier zu posten -> https://breadfish.de/index.php?board/29-teammitgliedern-scripter-designer-usw/ ().
  • Hey ich habe ein Problem bei meinem Banksystem.


    Unswa habe ich gerade 0.04 Eingezahlt
    Auf meiner Hand werde 0.04 Abgezogen und auf der Bank 0.04 Hinzugefügt aber in der nachricht steht.
    Du hast 0.03€ auf dein Konto eingezahlt.
    Aber wieso ?


    Code

  • Da stellt sich mir jedoch die Frage: Inwiefern ist das mit sscanf besser als alles mit strtok zu machen? Ist das schneller und/oder ressourcensparender?

    Also mal zu dir...sscanf ist schneller und hat viel mehr Möglichkeiten als strtok.


    Zum anderen ist ocmd/zcmd/ycmd oder what ever viel schneller als strcmp (&dcmd da dcmd nur ein Makro von strcmp ist).


    Mal zu Erklärung...bei strcmp sieht das z.B. so aus:



    new cmd="/hallo";


    if(cmd == "/test")
    if(cmd == "/hust")
    if(cmd == "/admin")
    if(cmd == "/hallo")

    Das heißt, er muss von oben an alle cmds prüfen bis er beim richtigen ist..und wenn /hallo ganz unten von 500 Commands steht..muss er vorher 500 andere prüfen..und das kann schon ein weilchen dauern...
    Bei ocmd/zcmd/ycmd springt er direkt an die Adresse wo der Command startet..und das ist natürlich wesentlich schneller, egal wie viele commands man hat :)



    Aber wieso ?

    Jaa das ein Rundungsfehler :)


    Der hat nicht 0.04 auf dem Schirm, sondern 0.039999999 ^^


    Also mach einfach sowas:



    #define FLOAT_ERROR 0.00000001


    format(string,sizeof(string),"Du hast %0.2f€ auf dein Konto eingezahlt.",floatstr(inputtext)+FLOAT_ERROR);

    ast2ufdyxkb1.png


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

  • Danke @Kaliber :D jetzt habe ich das auch gerafft.




    Folgende Sache:


    Ich genieree in 3 Zonen jede Sekunde 1 Geld pickup an einer random Stelle.
    Jedoch habe ich recht schnell die Grenze von 4096 erreicht.


    Macht das Einsetzen von einem Streamer da sinn, bzw. wieviele Pickups koennte ich dann einsetzen, und gibt es da dann sowas wie eine Stream Distanz bei Objekten? Oder verhalten diese sich genauso wie normale Pickups?


    Weiteres Problem ist: Ich habe letztendlich nur 3 Pickups mit ID, und alle anderen (Geldscheine) geben dem Spieler 1000$.


    Nun will ich jedoch andere Pickuptypen spawnen, Geldtaschen zum einsammeln die dann 10000 bringen sollen.


    Jedoch weiss ich nicht wie ich bei random und immer wieder generierten Pickups dort eine ID zuweisen kann um damit was in OnPlayerPickUpPickup zu machen



    Weiterhin habe ich einen Befehl geschaffen um Geld zu droppen, kann ich den eventuell noch optimieren? Ich wollte verhindern dass beim droppen die Grenze von 4096 Pickups ueberschritten wird weil sonst der Serber abgeschmiert ist



    maxmoney ist hierbei die Anzahl an pickups, frandom eine Funktion fuer random Floats



    Den wuerde ich dann gerne in den Codeschnippsel Thread posten

    2 Mal editiert, zuletzt von Sub Royal ()

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Habe da auch mal eine Frage an euch.
    Ich möchte gerne einen Namen und einen Grund (varchar) aus der Datenbank auslesen. (MySQL R39-6)
    Leider funktioniert das nicht so wie ich es mir Vorstelle.
    Die Nachricht zeigt mir leider keine Namen/Grund an.



    forward OnBanCheck(playerid);
    public OnBanCheck(playerid)
    {
    if(cache_get_row_count() == 0)
    {
    }
    else
    {
    print("Ein Eintrag gefunden");

    new temp[128];
    cache_get_field_content(0, "Grund", banInfo[playerid][bGrund]);
    cache_get_field_content(0, "Von", banInfo[playerid][bVonAdmin]);
    //strmid(banInfo[playerid][bVonAdmin], temp, 0, strlen(temp), MAX_PLAYER_NAME);
    format(banInfo[playerid][bGrund], 75, temp);


    new string[256];
    format(string, sizeof(string), "Dieser Account wurde Gesperrt. Grund: %s | Von: %s", banInfo[playerid][bGrund], banInfo[playerid][bVonAdmin]);
    SendSplitMessage(playerid, -1, string);
    KickEx(playerid);
    }
    return 1;
    }


    Die funktion wird auch ausgeführt.


    MfG.

    Einmal editiert, zuletzt von NikBazinga! ()

  • Gerne doch, hier.



    new query[128];
    mysql_format(Handle, query, sizeof(query), "SELECT * FROM `bans` WHERE `Spielername` = '%s' LIMIT 1", sInfo[playerid][sName]);
    mysql_pquery(Handle, query, "OnBanCheck", "i", playerid);


    Mit freundlichen Grüßen.

  • Hallo,


    Ich habe das problem wen ich in der zone /hacken eingebe funktioniert ja aber es soll ja der GameText angezeigt werden Hackvorgang: 30 Sekunden und soll nach und nach runtergezählt werden wen es bei 0 Angelangt ist soll ein Wanted gelöscht werden. Sollte der Spieler keine Wanteds mehr haben wird der hackvorgang abgebrochen -> Sollte auch weiter laufen wen neue Spieler einsteigen


    Bitte um schnelle hilfe :>

  • Setze einen einsekündigen User-Timer, der jede Sekunde von einer Variable (die du anfangs auf 30 setzt) eins (1) abzieht. Setze einen Textdraw an eine beliebige Stelle und mache ihn unsichtbar.


    Irgendwo oben im Script
    new CountdownHacken[MAX_PLAYERS];


    Dann beim /hacken den Timer einsetzen, den TextDraw sichtbar machen und dessen String auf CountdownHacken[playerid] und CountdownHacken[playerid] = 30; setzen


    In dem Rumpf des Timers dann:
    if(CountdownHacken[playerid] > 0) {
    CountdownHacken[playerid];
    //Textdraw Text nochmal auf CountdownHacken... setzen und sozusagen aktualisieren
    }



    /Habdy

  • Moin


    Habe eine Frage


    Warum ist Heapsort bei mir eigentlich immer um einiges langsamer als Quicksort? Trifft das worst case fuer Quicksort nie ein?
    Ich genierere ein Random Array mit 1000 Werten, und schreibe diese Werte in ein neues Array.
    Dann lasse ich Quick Sort das erst Array sortieren, und Heapsort das zweite.


    Vielleicht ist ein Fehler im Code? Heapsort sollte ja immer O(n logn) haben, und Quicksort im Worst Case sogar O(n*n)
    Daher werde ich nicht aus den krassen Unterschieden schlau


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