Befehlt über String an ocmd weiter geben

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 Morgen!
    Ich wollte gerne von euch mal wissen wie das geht das ich was über string an ocmd senden kann
    zb

    format(string,sizeof(string),"/gethere %d",pClicked[playerid]);
    ocmd_gethere(playerid, string);


    Ich bekomme dammit keine fehler, aber Ingame passiert nix, nur wenn ich ihn direkt eingebe.

  • CallLocalFunction("ocmd_BEFEHL","d", Variable);
    Insofern ich mich nicht täusche. :)


    Edit: Quatsch, entschuldige.


    Benutze das so, wie du es bereits tust. Du darfst den Befehl an sich nicht ausgeben, nur die Parameter.
    Habe mir die Frage nicht gabz durchgelesen.

  • das prob ist nur das es nicht geht.. :(
    also er gibt es nicht weiter richtig



    ocmd:gethere(playerid,params[])
    {
    new pID;
    if(sscanf(params,"u",pID))return SendClientMessage(playerid,-1, "/gethere playerid");
    if(SpielerInfo[playerid][pAdmin] >= 1)
    {
    new Float:plocx,Float:plocy,Float:plocz;
    if (IsPlayerConnected(pID))
    {
    if(pID != INVALID_PLAYER_ID)
    {
    GetPlayerPos(playerid, plocx, plocy, plocz);
    if(GetPlayerState(pID) == 2)
    {
    TelePos[pID][0] = 0.0;
    TelePos[pID][1] = 0.0;
    new tmpcar = GetPlayerVehicleID(pID);
    SetVehiclePos(tmpcar, plocx, plocy+4, plocz);
    }
    else
    {
    SetPlayerPos(pID,plocx,plocy+2, plocz);
    }
    SetPlayerVirtualWorld(pID,GetPlayerVirtualWorld(playerid));
    SetPlayerInterior(pID,GetPlayerInterior(playerid));
    SendClientMessage(pID, COLOR_GRAD1, " Du wurdest Teleportiert");
    }
    }
    }
    return 1;
    }

  • also er gibt es nicht weiter richtig

    Was gibt er nicht weiter?


    Kannst du versuchen etwas ausführlicher und präziser und am besten immer verständlich mit Beispielen zu erläutern, was du vor hast?


    Hellseher wurden leider von Breadfish.de gebannt, da diese hier zu leichtes Spiel hatten :)

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Man soll sich zu dem Spieler porten können den man in Tab ausgewählt hat

    Okay und was passiert, wenn du folgendes machst:



    //Unter OnPlayerClickPlayer
    new pID[5];
    valstr(pID, clickedplayerid);
    ocmd_gethere(playerid, pID);

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Bei mir ist das anders aufgebaut so sieht das ganze aus



    public OnPlayerClickPlayer(playerid, clickedplayerid, source)
    {
    if(AdminDuty[playerid] == 1)
    {
    if(SpielerInfo[playerid][pAdmin] >= 2)
    {
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    ShowPlayerDialog(playerid,D_CLICK,DIALOG_STYLE_LIST,name,"Goto\nGethere\nKick\nBan\nHealth\nSlap\nTV\nInterior\nFraktion\nLevel ändern\nBankkonto ändern\nAlter ändern\nJob ändern","OK","Abbrechen");
    pClicked[playerid] = clickedplayerid;
    ppClicked = clickedplayerid;
    }
    }



    if(dialogid == D_CLICK)
    {
    if(SpielerInfo[playerid][pAdmin] >= 2)
    {
    if(response == 1)
    {
    GetPlayerName(pClicked[playerid],giveplayer,sizeof(giveplayer));
    switch (listitem)
    {
    case 0:
    {
    ocmd_goto(playerid, pClicked[playerid]);
    }

  • Da müssten dir doch Warnings angezeigt werden oder?!


    Dann nutze den Befehl unter OnPlayerDialogResponse so:


    C
    new pID[5];
    valstr(pID, pClicked[playerid]);
    ocmd_gethere(playerid, pID);

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Ne wieso ? :D


    aber jetzt geht es ich danke dir :=)


    was ist eig valstr ? string wo man kein new und die länge braucht ? :O sehe ich zum ersten mal.. lol


    edit
    wie
    nutze ich das dan bei ban



    new pID[5],Grund[24];
    valstr(pID, pClicked[playerid]Grund[]);
    ocmd_ban(playerid, pID,Grund)

  • Naja, also deine Funktion brauch ja einen String und keinen integer.


    Da steht ja: ocmd:gethere(playerid, params[])


    Das params sagt aus, dass ein String benötigt wird und da kannst du keinen Integer übergeben. Kann sein, dass das der Compiler nicht richtig checkt wegen den Makros, aber wenn du crashdetect reinhauen würdest oder so, würde dir bestimmt ein Fehler ausgegeben werden ^^


    valstr packt einen Integer in einen String, wie ein format mit %d quasi, ist nur um einiges schneller und einfacher :)


    //Edit:
    Nein, das musst du dann z.B. so machen:



    new string[128];
    format(string,sizeof(string),"%d %s",pClicked[playerid],inputtext); //inputtext = der eingegebene Grund, kp wie du das regelst :D
    ocmd_ban(playerid, string);

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Okay.. naja geht jetzt ^^
    aber bei ban habe ich das selbe prob
    wie kann ich da jetzt noch ein grund mit übergeben als ein text



    derzeitige baustelle


    if(dialogid == D_CLICK_BAN)
    {
    if(SpielerInfo[playerid][pAdmin] >= 2)
    {
    if(response == 1)
    {
    new pID[5];
    valstr(pID, pClicked[playerid]);
    ocmd_ban(playerid, pID);
    format(string,sizeof(string),"/ban %d %s",pClicked[playerid],inputtext);
    ocmd_ban(playerid,string);
    }
    }
    return 1;
    }

  • Das /ban kannste da komplett rauslassen. In den String kommen nur die Parameter, die du übergibst. Du rufst doch die Ban Funktion auf und übergibst das, da musst du nicht /ban darein schreiben xD


    Ja, du musst dem Spieler einen weiteren Dialog anzeigen lassen, wo er den Bangrund eingeben kann.


    Und dann wirklich nur die 3 Zeilen die ich geschrieben habe. Da brauchst du dann kein valstr, da du format nutzt, welches das macht, was auch valstr macht.


    Musst die ban Funktion auch nicht 2x aufrufen...einfach wirklich nur die 3 Zeilen :D

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • ist ja im 2ten Dialog mit Inputtext
    aber raffe grade nicht wie ich jetzt noch den Inputtext rein baller :D



    format(string,sizeof(string),"%s Bannen",giveplayer);
    ShowPlayerDialog(playerid,D_CLICK_BAN,DIALOG_STYLE_INPUT,string,"Tippe einen Grund für den Bann ein:","OK","Abbrechen");



    }
    if(dialogid == D_CLICK_BAN)
    {
    if(SpielerInfo[playerid][pAdmin] >= 2)
    {
    if(response == 1)
    {
    new pID[5];
    valstr(pID, pClicked[playerid]);
    ocmd_ban(playerid, pID, inputtext);
    }
    }
    return 1;
    }

  • aber raffe grade nicht wie ich jetzt noch den Inputtext rein baller

    Was gibt es da nicht zu raffen? Du musst den Code von mir nur 1:1 kopieren ^^


    Anstatt:


    C
    new pID[5];
    valstr(pID, pClicked[playerid]);
    ocmd_ban(playerid, pID, inputtext);


    Schreibst du:



    C
    new string[128];
    format(string,sizeof(string),"%d %s",pClicked[playerid],inputtext);
    ocmd_ban(playerid, string);

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S