Problem bei Lottosystem

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
  • Hallo!


    Ich wollte mir ein kleines Lottosystem schreiben, der User kann halt sich 6 Zahlen aussuchen aus denen dann gezogen wird usw.


    Der Befehl zum Zahlen auswählen sieht so aus:


    Die SendClientMessage "SCM(playerid,frot,"Zahl %d : %d",i+1,pZahlen[playerid][i]);
    Gibt aber nur das ganze ein wie ich es eingegeben habe.



    Gibt es eine Möglichkeit, wenn der Spieler den Befehl so eingibt: /lotto 123456


    Jede einzelne Zahl einzeln abzuspeichern?




    Mfg

  • Hat sich nichts geändert, noch immer das gleiche. Habe jetzt noch eine ClientMessage vor der Schleife eingefügt:



    Wo mir jetzt das ausgegeben wird:



    Code
    [21:48:05] [ZAHLEN]: 49
    
    
    [21:48:05] Zahl 1 : 123456
    
    
    [21:48:05] [FEHLER]: Die Zahlen müssen zwischen 1 und 45 liegen!

    Einmal editiert, zuletzt von Simon2202 ()

  • Versuchs mal so, die 5 Zeichen sind auf jeden Fall zu wenig gewesen, für 6 Zahlen:
    ocmd:lotto(playerid,params[])
    {
    new pzahlen[7],str[128];
    if(startetlotto == 0)return SCM(playerid,frot,"[FEHLER]: Es wurde keine Runde Lotto gestartet!");
    if(sscanf(params,"s[7]",pzahlen))return SCM(playerid,frot,"[FEHLER]: /lotto [6 Zahlen]");
    if(strlen(pzahlen) != 6)return SCM(playerid,frot,"[FEHLER]: Du musst 6 Zahlen eingeben!");
    SCM(playerid,frot,"[ZAHLEN]: %s",pzahlen);
    for(new i=0;i<6;i++)
    {
    pZahlen[playerid][i] = pzahlen[i] - 48;
    SCM(playerid,frot,"Zahl %d : %d",i+1,pZahlen[playerid][i]);
    if(pZahlen[playerid][i] < 1 || pZahlen[playerid][i] > 45)return SCM(playerid,frot,"[FEHLER]: Die Zahlen müssen zwischen 1 und 45 liegen!");
    if(i < 5)
    {
    format(str,sizeof(str),"%s %d. Zahl: %d",str,i+1,pZahlen[playerid][i]);
    continue;
    }
    format(str,sizeof(str),"%s Zusatzzahl: %d",str,pZahlen[playerid][i]);
    }
    if(GetPlayerMoney(playerid) < lottokosten)return SCM(playerid,frot,"[FEHLER]: Du brauchst %d um dir ein Los zu kaufen!",lottokosten);
    GivePlayerMoney(playerid,-lottokosten);
    lottopot += lottokosten;
    SCM(playerid,iblau,str);
    return 1;
    }


    Gegebenenfalls löst das das Problem schon.

  • Ich komme gerade drauf, ich lasse ja Zahlen zwischen 1 und 45 Abfragen, also auch 2 Stellige.


    Gibt es einen guten Weg das zu machen, oder muss ich den Befehl dafür so aussehen lassen: /lotto [Zahl1] [Zahl2] {Zahl3] {Zahl3] [Zahl4] {Zahl5] [Zahl6] , Also jeden in einen Eigenen integer wert speichern?

  • Ah ja, stimmt, das fragst du ja da in der Mitte ab, da habe ich auch nicht drauf geachtet. Hast natürlich Recht, dann kann man das so vergessen.


    Ich denke die einfachste Variante, auch für den Nutzer, ist es, den Befehl mit 6 Parametern aufzubauen.
    Alternativ über 6 Dialoge, die nacheinander kommen.

  • Oke, habe es jetzt mit 6 Parametern.


    Eine Frage noch, ich habe die Berechnung zum Jackpot so:



    "lottofaktor" hat einen Wert von 5.


    Habe mir das jetzt bisschen debugged und alles ausgeben lassen und bin drauf gekommen, dass: 5/100 = 0.00000 ist.... Aber woran liegt das eigentlich sollte doch 0.05 heraus kommen?

  • 1. Verarbeite ich das ganze ja mit floatround ? Sollte wenn ich die Werte so habe:


    Lottopot: 100
    Lottofaktor: 5


    Die Rechnung dann nicht so ein: ?


    2. Deine Berechnungsmethode würde nicht funktionieren..

  • Ah, sorry. War ein Denkfehler von mir.
    So:
    new jackpot = lottopot * (100+lottofaktor) / 100;


    Dann kommt es auf's gleiche raus.




    5 /100

    Das gibt zwar 0,05, aber da Integers keine Nachkommastellen unterstützen, wird es auf 0 abgeschnitten. Deshalb geht das nicht, und deshalb brauchst du auch kein floatround.
    Du müsstest sonst mit Floats arbeiten, das würde dann gehen.

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