Dice system Frage

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
  • Guten Tag,


    Ich wollte ein dice system machen, undzwar soll es so ablaufen.


    Einer läd den Spieler ein.
    Der Spieler muss annehmen
    Dann muss er /dice eingeben und es soll sowas erscheinen * [Runde %d] %s würfelt eine %d");
    das soll 3 Runden gehen, nach der 3 Runde sollen beide punktzahlen zusammengezählt werden und dann soll der gewinner das geld bekommen.
    Ich weiß jetzt nicht wie ich den dice befehl machen soll. Wäre cool wenn mir jemand nur den befehl schreiben könnte, wie ich das mit der einladung
    gemacht habe poste ich hier.


    new Wuerfeluser[MAX_PLAYERS],
    Wuerfelgeld[MAX_PLAYERS];


    bei /accept dice
    else if(strcmp(x_job,"dice",true) == 0){
    if(Wuerfeluser[playerid] != -1){
    format(string,sizeof(string),"* Du hast die Dice runde von %s um %d$ angenommen. Es geht los, gebe /dice ein um zuwürfeln.",SpielerName(Wuerfeluser[playerid]),Wuerfelgeld[playerid]);
    SendClientMessage(playerid,COLOR_LIGHTBLUE,string);
    format(string,sizeof(string),"* %s hat deine Dice runde um %d$ angenommen. Warte bis dein Partner anfängt zuwürfeln.",SpielerName(playerid), Wuerfelgeld[playerid]);
    SendClientMessage(Wuerfeluser[playerid],COLOR_LIGHTBLUE,string);
    GivePlayerMoneys(playerid,-Wuerfelgeld[playerid]);
    GivePlayerMoneys(Wuerfelgeld[playerid],-Wuerfelgeld[playerid]);
    }else{ SendClientMessage(playerid,COLOR_ERRORTEXT,"Niemand hat dir eine Dice runde angeboten."); }
    }


    ocmd:diceinvite(playerid,params[]){
    new string[258],pID,betrag;
    if(sscanf(params,"ui",pID,betrag)) return SendClientMessage(playerid,COLOR_BENUTZETEXT,"Benutze: /diceinvite [SpielerID/Name] [Betrag]");
    format(string,sizeof(string),"* %s läd dich zu einer Würfel runde um %d$ ein. (Zum annehmen /accept dice)",SpielerName(playerid),betrag);
    SendClientMessage(pID,COLOR_LIGHTBLUE,string);
    format(string,sizeof(string),"* Du hast %s zu einer Würfel runde eingeladen um %d$.",SpielerName(pID),betrag);
    SendClientMessage(playerid,COLOR_LIGHTBLUE,string);
    Wuerfeluser[pID] = playerid;
    Wuerfelgeld[pID] = betrag;
    return 1;
    }



    MfG
    Yusuf

  • Du kannst das ganze mit einem timer machen den du ausführst den lässt du 3 mal wiederholen würde so aussehen



    forward @Wuerfeln(player_1,player_2,points_1,points_2,round);
    @Wuerfeln(player_1,player_2,points_1,points_2,round) {
    new str[64],val[2];

    if(round == 4){
    if(points_1 > points_2)return SendClientMessage(player_1,-1,"Du hast gewonnen"),SendClientMessage(player_2,-1,"Du hast verloren");
    else if(points_1 == points_2)return SendClientMessage(player_1,-1,"Es steht unentschieden"),SendClientMessage(player_1,-1,"Du hast unentschieden");
    else if(points_1 < points_2)return SendClientMessage(player_1,-1,"Du hast verloren"),SendClientMessage(player_2,-1,"Du hast gewonnen");
    }
    val[0] = random(5)+1;
    val[1] = random(5)+1;
    format(str,64,"Du hast %d Punkte erwürfelt nun hast du %d Punkte",val[0],points_1+val[0]);
    SendClientMessage(player_1,-1,str);
    format(str,64,"Du hast %d Punkte erwürfelt nun hast du %d Punkte",val[1],points_2+val[1]);
    SendClientMessage(player_2,-1,str);
    SendClientMessage(player_1,-1,"Die nächste Runde beginnt");
    SendClientMessage(player_2,-1,"Die nächste Runde beginnt");
    return SetTimerEx("@Wuerfeln",3000,0,"ddddd",player_1,player_2,points_1+val[0],points_2+val[1],++round);
    }


  • Hi, hmm ich hätte das lieber in einem /dice befehl... das jeder einmal abwechselt würfel muss verstehst du ? Sonst ist deine Idee auch ganz gut aber ich stelle es mir halt etwas anders vor xD

  • dan setz eine variable wenn der spieler gewürfelt hat und diese fragst du auch jeweils ab ob der andere spieler das schon gemacht hat.


    if(Wuerfeln[Wuerfeluser[playerid]]){
    Wuerfeln[Wuerfeluser[playerid]] = 0;
    ....
    return ....;
    }
    Wuerfeln[playerid] = 1;

  • Auf Anfrage in PM:



    Bei accept:
    Wuerfeluser[Wuerfeluser[playerid]] = playerid;
    Wuerfelgeld[Wuerfeluser[playerid]] = Wuerfelgeld[playerid];
    Wuerfelpunkte[playerid] = 0;
    Wuerfelrunde[playerid] = 1;
    Wuerfelpunkte[Wuerfeluser[playerid]] = 0;
    Wuerfelrunde[Wuerfeluser[playerid]] = 1;
    Wuerfeldran[playerid] = playerid;
    Wuerfeldran[Wuerfeluser[playerid]] = playerid;


    Und das hier ausbessern:
    GivePlayerMoneys(Wuerfelgeld[playerid],-Wuerfelgeld[playerid]);
    zu:
    GivePlayerMoneys(Wuerfeluser[playerid],-Wuerfelgeld[playerid]);




    new Wuerfeluser[MAX_PLAYERS] = {-1,...},
    Wuerfelgeld[MAX_PLAYERS],
    Wuerfelrunde[MAX_PLAYERS],
    Wuerfelpunkte[MAX_PLAYERS],
    Wuerfeldran[MAX_PLAYERS];


    ocmd:dice(playerid,params[]){
    if(Wuerfeluser[playerid] == -1) return SendClientMessage(playerid, 0xFF0000FF, "Du bist nicht in einem Würfelduell.");
    if(Wuerfeldran[playerid] != playerid) return SendClientMessage(playerid, 0xFF0000FF, "Du bist nicht dran.");
    new pkt = random(5)+1, string[144];
    Wuerfelpunkte[playerid] += pkt;
    format(string, sizeof(string), "[Runde %d] %s würfelt eine %d. Gesamt: %d", Wuerfelrunde[playerid], SpielerName(playerid), pkt, Wuerfelpunkte[playerid]);
    SendClientMessage(playerid, COLOR_LIGHTBLUE, string);
    SendClientMessage(Wuerfeluser[playerid], COLOR_LIGHTBLUE, string);
    if(Wuerfelrunde[playerid] == 3 && Wuerfelrunde[Wuerfeluser[playerid]] == 3)
    {
    new win, lose;
    if(Wuerfelpunkte[playerid] > Wuerfelpunkte[Wuerfeluser[playerid]]) win = playerid, lose = Wuerfeluser[playerid];
    else if(Wuerfelpunkte[playerid] < Wuerfelpunkte[Wuerfeluser[playerid]]) win = Wuerfeluser[playerid], lose = playerid;
    else win = -1;
    if(win != -1) format(string, sizeof(string), "[Ende] %s gewinnt. Gesamt: %d (%s: %d)", SpielerName(win), Wuerfelpunkte[win], SpielerName(lose), Wuerfelpunkte[lose]);
    else format(string, sizeof(string), "[Ende] Unentschieden! Beide haben %d Punkte.", Wuerfelpunkte[playerid]);
    SendClientMessage(playerid, COLOR_LIGHTBLUE, string);
    SendClientMessage(Wuerfeluser[playerid], COLOR_LIGHTBLUE, string);
    Wuerfeluser[Wuerfeluser[playerid]] = -1;
    Wuerfeluser[playerid] = -1;
    return 1;
    }
    Wuerfelrunde[playerid]++;
    Wuerfeldran[playerid] = Wuerfeluser[playerid];
    Wuerfeldran[Wuerfeluser[playerid]] = Wuerfeluser[playerid];
    return 1;
    }



    Ich konnte es nicht testen, probier es bitte selber aus. Wenn es nicht tut, dann beschreib bitte was nicht tut, dann schreibe ich es auf mein CMD System um und teste es nachdem ich es geändert habe.



    Wobei du natürlich noch sämtliche Ausnahmen abfangen musst (Spieler verlässt den Server etc.).


  • Huhu soweit funktioniert es *Hust* Hihi Profi scripter :D
    Jetzt müsste man sich noch was überlegen, wenn man disconnected :S


    MfG
    Yusuf