Komme bei Adminbefehl nicht weiter

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
  • hay Leute,ich habe mal Versucht ein Waffen -Dialog zu zaubern ,aber es geht nicht :/ Wenn ich InGame den Befehl mache kommt der normale Dialog,aber wenn ich da etwas eintippe kommt,dass ich eine Munition zwischen 1-1000 eingeben soll ... ,aber schaut selbst :


    if(dialogid == DIALOG_WAFFENMENU)
    {
    if(!response)
    {
    SendClientMessage(playerid,Farbe_DBlau,"Du hast den Vorgang abbgebrochen !");
    return 1;
    }
    if(response)
    {
    if(!strlen(inputtext))
    {
    SendClientMessage(playerid,Farbe_DRot,"Bitte gebe die Waffen -ID ein !");
    return 1;
    }
    else
    {
    new waffe,muni;
    if(waffe<0||waffe>46) return SendClientMessage(playerid,Farbe_DRot,"Bitte gebe eine Waffen-ID von 0-46 an !");
    ShowPlayerDialog(playerid,DIALOG_WAFFENMENU2,DIALOG_STYLE_INPUT,"Munitions -Abfrage","Bitte gebe die Mution an (100-1000)","Fertig","");
    if(!strlen(inputtext))
    {
    SendClientMessage(playerid,Farbe_DRot,"Bitte gebe die Munition an !");
    return 1;
    }
    if(muni<1||muni>1000) return SendClientMessage(playerid,Farbe_DRot,"Bitte gebe die Munition von 1-1000 an !");
    GivePlayerWeapon(playerid,waffe,muni);
    return 1;
    }
    }


    und hier nochmal der normale Befehl :


    ocmd:waffenm(playerid)
    {
    if(!IsPlayerInTeam(playerid,2)) return SendClientMessage(playerid,Farbe_DRot,"Du hast nicht den Rang Admin !");
    ShowPlayerDialog(playerid,DIALOG_WAFFENMENU,DIALOG_STYLE_INPUT,"Admin -Waffenmenü","Bitte gebe die Waffen ID ein !","Weiter","Abbrechen");
    return 1;


    Schonmal ein Danke für die hilfe im Voraus :)




    - Lg

  • Kein wunder ;)
    du hast vergessen das er die Waffe überhaupt abspeichert...
    mach mal eine Variable z.B. Waffe[MAX_PLAYERS]; und Munit[MAX_PLAYERS];
    bei den ersten machst du dan halt
    Waffe[playerid] = strlen(inputtext); Also das wo man da eingibt...
    und bei Muni genauso


  • Du zeigst einen Dialog dort erst und fragst direkt noch darunter die Eingabe des Spielers ab, obwohl du noch im alten Dialog steckst?


    Nach

    ShowPlayerDialog(playerid,DIALOG_WAFFENMENU2,DIALOG_STYLE_INPUT,"Munitions -Abfrage","Bitte gebe die Mution an (100-1000)","Fertig","");


    kommt erstmal nichts, dann


    if(dialogid == DIALOG_WAFFENMENU2)
    {
    if(!strlen(inputtext))
    {
    SendClientMessage(playerid,Farbe_DRot,"Bitte gebe die Munition an !");
    return 1;
    }
    if(muni<1||muni>1000) return SendClientMessage(playerid,Farbe_DRot,"Bitte gebe die Munition von 1-1000 an !");
    GivePlayerWeapon(playerid,waffe,muni);
    return 1;
    }

  • naja,wenn ich das so mache,dann fehlt mir aber wieder die Waffe ^^


    @Mysterio ,ich hab es mal so gemacht,er gibt auch Waffen,nur für 24 (Deagle) kommt dann ein Schlagstock & bei den meisten ID's kommt gar nichts :/


    -LG

  • naja,wenn ich das so mache,dann fehlt mir aber wieder die Waffe


    Speicher die Waffe in einer Variable zwischen. Anders geht es nicht!


    ShowPlayerDialog(playerid,DIALOG_WAFFENMENU2,DIALOG_STYLE_INPUT,"Munitions -Abfrage","Bitte gebe die Mution an (100-1000)","Fertig","");
    if(!strlen(inputtext))
    {
    SendClientMessage(playerid,Farbe_DRot,"Bitte gebe die Munition an !");
    return 1;
    }
    if(muni<1||muni>1000) return SendClientMessage(playerid,Farbe_DRot,"Bitte gebe die Munition von 1-1000 an !");
    GivePlayerWeapon(playerid,waffe,muni);
    return 1;
    }


    Wenn du das hier hast, hast du unten, wenn du die Munition geben sollst immer noch als inputtext das vom vorherigen Dialog!

  • geht noch immer nicht :/ Keine Ahnung ob das so richtig gespeichert ist ^^ [keine Errors oder so,ich krieg halt die falschen Waffen oder gar keine]


    Ganz oben im Script
    new waffeM[MAX_PLAYERS];new muniM[MAX_PLAYERS];



    und dann ab zu den Dialogen :
    -> Dialog 1

    if(dialogid == DIALOG_WAFFENMENU)
    {
    if(!response)
    {
    SendClientMessage(playerid,Farbe_DBlau,"Du hast den Vorgang abbgebrochen !");
    return 1;
    }
    if(response)
    {
    if(!strlen(inputtext))
    {
    SendClientMessage(playerid,Farbe_DRot,"Bitte gebe die Waffen -ID ein !");
    return 1;
    }
    else
    {
    new waffe;
    if(waffe<0 && waffe>46) return SendClientMessage(playerid,Farbe_DRot,"Bitte gebe eine Waffen-ID von 0-46 an !");
    ShowPlayerDialog(playerid,DIALOG_WAFFENMENU2,DIALOG_STYLE_INPUT,"Munitions -Abfrage","Bitte gebe die Mution an (100-1000)","Fertig","Beenden");
    return 1;
    }
    }
    return 1; }


    -> Dialog 2


    if(dialogid == DIALOG_WAFFENMENU2)
    {
    if(!response)
    {
    SendClientMessage(playerid,Farbe_DBlau,"Vorgang beendet !");
    return 1;
    }
    if(response)
    {
    if(!strlen(inputtext))
    {
    SendClientMessage(playerid,Farbe_DRot,"Bitte gebe die Munition an (1-1000)!");
    return 1;
    }
    else
    {
    new muni;
    if(muni<1 && muni>1000) return SendClientMessage(playerid,Farbe_DRot,"Bitte gebe die Munition von 1-1000 an !");
    GivePlayerWeapon(playerid,waffeM[playerid] = strlen(inputtext),muniM[playerid] = strlen(inputtext));
    return 1;
    }
    }
    return 1;
    }


    // Edit ,wirklich sicher das man && und nicht || machen muss :/ ?

  • So erstmal mein lieber Mysterio:
    "(muni<1 && muni>1000)"
    Wenn du mir beantworten kannst wie eine Zahl kleiner als 1, aber gleichzeitig größer als 1000 sein soll, kriegste nen Keks.


    -----------------------------------


    @[DT]Done:
    Ich werd dir jetzt dazu ein komplettes Tutorial schreiben damit du auch was draus lernst und nicht bloß C&P-Scrpting benutzt.
    Erstmal, was in einem Dialog eingegeben wird, wird im Callback als der !String! "inputtext" aufgerufen.
    Wir müssen den String nun erstmal in einen Integer umwandeln:
    new wID = strval(inputtext);
    Jetzt haben wir der Variable wID die Eingabe des Spielers als Integer gespeichert.


    Dannach kommt die Abfrage, ob die eingegebene ID denn auch Gültig ist, das machen wir aber nicht so:
    if(waffe<0 && waffe>46)
    Dasselbe Prinzip wie bei Mysterio: Wie soll eine Zahl kleiner als 0, aber größer als 46 sein? Auch für dich ein Keks wenn du mir das beantwortest.
    Richtig wäre zu überprüfen, ob die Zahl denn in einem berreich zwischen 0 und 46 liegt, also allen Verfügbaren Waffen-ID's.
    Oder man man ersetzt das "und" in deiner Abfrage einfach durch ein "oder".


    Jetzt aber zu dem was ich beim besten Willen nicht begreife:
    Du speicherst die ID doch in keiner Variable wo du sie später wieder auslesen kannst und in einer Datei (Glücklicherweise) auch nicht.
    Also, machen wir das auch noch eben. Wichtig hierbei ist eine Globale Variable zu verwenden, da eine Lokale Variable nach dem Aufrufen des Callbacks zurückgesetzt wird.
    Dass du die Variablen "waffeM" und "muniM" oben im Script definiert hast ist somit richtig.
    Aber wieso speicherst du denn die ID's nicht rein? Wie soll das alles funktionieren?
    Machen wirs doch einfach mal:
    waffeM[playerid] = wID;


    Jetzt musst du nur noch einen neuen Dialog öffnen.
    Achja, für die Munition brauchst du keine Globale Variable zu zwischenspeichern, da die Waffe ja mit dem Beenden des 2. Dialoges Gegeben werden soll.
    Somit wäre diese auch noch unnötig gewesen.
    Aber nach diesem Verfahren kannst du dir nun auch ganz einfach den Rest fertigschnippeln.




    Vielleicht war ich ein bisschen Grob in diesem Text, ich hab grade auch keinen Bock ihn mir nochmal durchzulesen.
    Ich war nur schockiert dass jemand soviel Unwissen an den Tag legt.
    Grundwissen ist für soetwas nicht wegzudenken. Naja, eigentlich wird Grundwissen immer benötigt wenn du nicht nur Vorhast ein Script zu übersetzen.




    MfG Firerfan

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