|Hilfe| 1vs1 Fehler

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 Abend,
    ich wollte mal ein 1 gegen 1 System scripten, habe dafür einen Dialog erstellt. Das Problem dabei ist jedoch, dass alle Spieler rein können.
    Hier der Code:
    #define DIALOG_1O1 7
    new EinsGegenEinseins = 0;
    new EinsGegenEinszwei = 0;
    Befehl:
    if(strcmp("/1o1", cmdtext, true) == 0) // 1o1 Arenen
    {
    ShowPlayerDialog(playerid, DIALOG_1O1, DIALOG_STYLE_LIST,"Eins gegen Eins Räume","1o1 Arena 1\n1o1 Arena 2", "Auswählen", "Beenden");
    return 1;
    }
    OnDialogResponse
    if(dialogid == DIALOG_1O1)
    {
    if(response==0)
    {
    SendClientMessage(playerid,hinweis_color,"Du hast das /1o1 Menü verlassen.");
    return 1;
    }
    if(response==1)
    {
    switch(listitem)
    {
    case 0:
    {
    if(EinsGegenEinseins >= 2) return SendClientMessage(playerid, hinweis_color,"Diese Arena ist voll!");
    EinsGegenEinseins++;
    ResetPlayerWeapons(playerid);
    SetPlayerVirtualWorld(playerid, 5);
    SetPlayerPos(-1948.3076,132.3837,26.5189);
    SendClientMessage(playerid, 0xFFFFFFFF, "Du bist nun in der 1o1 Arena 1!");
    GivePlayerWeapon(playerid,24,1000);
    SetPlayerHealth(playerid, 100);
    SetPlayerArmour(playerid, 100);
    }
    case 1:
    {
    if(EinsGegenEinszwei >= 2) return SendClientMessage(playerid,hinweis_color,"Diese Arena ist voll!");
    EinsGegenEinszwei++;
    ResetPlayerWeapons(playerid);
    SetPlayerVirtualWorld(playerid, 6);
    SetPlayerPos(-1948.3076,132.3837,26.5189);
    SendClientMessage(playerid, 0xFFFFFFFF, "Du bist nun in der 1o1 Arena 2!");
    GivePlayerWeapon(playerid,24,1000);
    SetPlayerHealth(playerid, 100);
    SetPlayerArmour(playerid, 100);
    }
    }
    }
    Wäre euch dankbar, wenn ihr mir helfen könntet.


    Mit freundlichen Grüßen,
    HolyJoh

    Einmal editiert, zuletzt von HolyJoh ()

  • HolyJoh: Spielervariablen machen hier mehr Sinn.


    Das macht mal gar keinen Sinn. Er will doch nur zählen wie viele Spieler sich in der Arena befinden.



    Füge doch bitte mal am Anfang (vor das if) und am Ende jedes case's einen print ein, zum überprüfen welchen Wert die Zählervariable überhaupt hat.
    printf("%d", EinsGegenEinseins);
    Das selbe mit EinsGebenEinszwei.


    Setzt du sonst im Code noch irgendwo den Wert einer der Variablen? Wenn ja, wo?

  • Dann musst du dort wo der Spieler diesen verlässt abfragen in welcher Arena er war und die entsprechende Variable (EinsGegenEinseins,...) minus eins machen.


    new SpielerInArena[MAX_PLAYERS];


    Wenn er Arena eins betritt
    SpielerInArena[playerid]=1;


    Beim verlassen einer Arena
    if(SpielerInArena[playerid]==1) EinsGegenEinseins--;
    SpielerInArena[playerid]=0;


    Prinzip verstanden?