Beiträge von Tround

    was der spieler in den input dialog eingegeben hat wird im response public mit inputtext[] ausgelesen.



    erstmal schaun ob eine zahl eingegeben wurde mit


    if(!IsNumeric(inputtext))return ShowPlayerDialog...
    (is numeric überprüft ob überhaupt eine zahl eingegeben wurde .. http://pastebin.com/3G94dnAw)


    die auswahl begrenzen auf skins 0-299


    if(strval(inputtext)<0||strval(inputtext)>299)return ShowPlayerDialog...
    (mit strval wird der string inputtext[] in einen integer umgewandelt)


    und natürlich
    SetPlayerSkin(playerid,strval(inputtext));

    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])


    mit inputtext wird ausgelesen was der spieler in den input dialog eingegen hat



    if(dialogid==dialog_buydrugs)
    {
    if(response==1)
    {
    if(listitem==0)return ShowPlayerDialog(playerid,dialog_buyweed,DIALOG_STYLE_INPUT,"Weed","Ray: Wieviel Gramm darf's denn sein, mein Lieber?","Kaufen","Abbrechen");
    }
    }
    if(dialogid==dialog_buyweed)
    {
    if(response==1)
    {
    GivePlayerMoney(playerid,-strval(inputtext)*15);//mit strval den inputtext string in ein integer umwandeln und mit dem weed preis multiplizieren
    return 1;
    }
    }


    man sollte dann natürlich auch noch so abfragen machen wie:


    hat der spieler genug geld
    if(GetPlayerMoney(playerid)<strval(inputtext))return bla


    is das eingegebene eine zahl (den stock gibts überall im inet)
    if(!IsNumeric(inputtext))return bla


    die eingabe begrenzen damit man nicht ins minus kann
    if(strval(inputtext)<1||strval(inputtext)>100)return bla

    das menü nicht über den pickup öffnen sondern per befehl oder per tastendruck.
    oder vlcht ne variable setzten wie z.b.


    new waffenmenuoffen[MAX_PLAYERS];


    if(pickupid == waffen)
    {
    if(waffenmenuoffen[playerid]==1)return 0;
    ShowPlayerDialog(playerid, 1,DIALOG_STYLE_LIST, "Laden", "Deagle 2500$\nM4 4000$\nSniper 4000$\nmp5 3000$\nShotgun 3000$\nRüstung 2000$\nLeben 200$" , "ok", "abbrechen");
    waffenmenuoffen[playerid]=1;
    }


    und beim dialog response
    if(response==0)return waffenmenuoffen[playerid]=0;
    oder wenn eine waffe gekauft wird bei response 1

    bei if abfragen geht er für jede abfrage einzeln durch aber bei switch case kann er direk dort hinspringen wos nötig ist.. von daher bei vielen if abragen durchaus schneller..
    würrd ich mal so behaupten

    hier die antwort auf deine pn damit es auch andere nachlesen können wenn sie danach suchen.. habe es bei mir so gelöst:


    ocmd:kick(playerid,params[])
    {
    new pID, reason[128],string[128];
    if(sscanf(params,"us",pID,reason))return SendClientMessage(playerid,0xFFFA00FF,"/kick [id] [grund]");
    format(string,sizeof(string),"AdmCmd: %s wurde von %s gekickt. Grund: %s",Spielername(pID),Spielername(playerid),reason);
    SendClientMessageToAll(0xFFFA00FF,string);
    SetTimerEx("kickban",100,0,"ii",pID,1);
    return 1;
    }
    forward kickban(playerid,bankick);
    public kickban(playerid,bankick)
    {
    switch(bankick)
    {
    case 1:return Kick(playerid);
    case 2:return Ban(playerid);
    }
    return 1;
    }


    case 1 für kick
    case 2 für ban

    das liegt an dem neuesten update von samp
    Important Note: As of SA-MP 0.3x, any message sent to the player with SendClientMessage before Kick() will not be displayed for them.
    bedeutet Kick() und Ban() werden zuerst aufgerufen egal in welcher reihenfolge gescriptet wurde..
    einfach einen timer setzen und den spieler nach ein paar ms kicken um noch den namen auslesen zu können und den spieler abzuspeichern

    wieso KillTimer(500000); obwohl du gar keinen timer erstellt hast mit dem namen 500000 ????



    if(strcmp(cmd, "/tor", true) == 0)
    {
    if(pInfo[playerid][fraktion] >= 1)
    {
    if(IsPlayerInRangeOfPoint(playerid, 5.0, 1547.27, -1627.73, 15.32))
    {
    MoveObject(LSPDTor, 1547.27, -1627.73, 15.12, 6.0);//aufmachen
    SetTimer("torpublic",10000,0);//timer von 10 sek mit repeat 0

    }
    }
    return 1;
    }
    forward torpublic();
    public torpublic()
    {
    MoveObject(LSPDTor, 1547.27, -1627.73, 15.32, 6.0);//zumachen
    return 1;
    }

    zu 1:
    if(sscanf(params,"s",pID,str))return SendClientMessage(playerid,Farbe_Grau,"Benutze: /unban [Name]");
    dort steht nur ein "s" für einen string aber du hast 2 params angegeben..


    zu 2:
    seit dem neuesten samp update wird Kick oder Ban immer zuerst ausgeführt egal in welcher reihenfolge gescriptet wird..
    daher mit einem kleinen timer den spieler später kicken damit man noch vorher den namen auslesen kann und eine nachricht schicken kann.. sowie den spieler gebannt abspeichern..