Befehle auf andere Personen nutzen?

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
  • Wie kann ich solch cmd's machen wie [ /kick [ID/NAME] [GRUND] } ?


    Also das der befehl nicht auf mich wirkt sondern andere. wie mache ich sowas?


    Habe Speziell auch so dinge wie : /Givegun [ID/NAME] [WAFFENID] [MUNI] [PREIS]


    oder /setname [ID/NAME] [Neuer Name]?


    Ich glaub mal mit strtok, aber damit kenne ich mich nicht aus...




    Dankeschön


    Bitte auf das Bild Klicken für Mehr Info's!



    Bitte auf das Bild Klicken für Mehr Info's!

  • Strtok = Denkbar schlechteste Lösung.


    Benutz am besten dcmd in Verbindung mit sscanf. Ein Tutorial dazu gibt es hier:
    dcmd & sscanf

  • Strtok = Denkbar schlechteste Lösung.


    Benutz am besten dcmd in Verbindung mit sscanf. Ein Tutorial dazu gibt es hier:
    dcmd & sscanf




    WTF!?! xD ich habe dein FS n-Fun mal versucht zu durchschauen^^ Jetzt glaube ich wird mir einiges Klar :) Naja ich versuch mich mal ran!



    Danke für die Antworten.


    Bitte auf das Bild Klicken für Mehr Info's!



    Bitte auf das Bild Klicken für Mehr Info's!

  • Hab grad voll probleme mit dcmd -.- wenn ich es das hier:


    public OnPlayerCommandText(playerid, cmdtext[])
    {
    dcmd(kick,4,cmdtext);
    return 0;
    }


    Einfüge (Nätürlich altes public überschreiben! )Kommen diese Fehler:


    C:\Games\Grand Theft Auto San Andreas\gamemodes\CTR.pwn(546) : error 010: invalid function or declaration
    C:\Games\Grand Theft Auto San Andreas\gamemodes\CTR.pwn(548) : error 010: invalid function or declaration
    C:\Games\Grand Theft Auto San Andreas\gamemodes\CTR.pwn(549) : error 010: invalid function or declaration
    C:\Games\Grand Theft Auto San Andreas\gamemodes\CTR.pwn(551) : error 010: invalid function or declaration
    C:\Games\Grand Theft Auto San Andreas\gamemodes\CTR.pwn(553) : error 010: invalid function or declaration
    C:\Games\Grand Theft Auto San Andreas\gamemodes\CTR.pwn(554) : error 010: invalid function or declaration
    C:\Games\Grand Theft Auto San Andreas\gamemodes\CTR.pwn(556) : error 010: invalid function or declaration
    C:\Games\Grand Theft Auto San Andreas\gamemodes\CTR.pwn(558) : error 010: invalid function or declaration
    C:\Games\Grand Theft Auto San Andreas\gamemodes\CTR.pwn(559) : error 010: invalid function or declaration
    C:\Games\Grand Theft Auto San Andreas\gamemodes\CTR.pwn(560) : error 010: invalid function or declaration
    C:\Games\Grand Theft Auto San Andreas\gamemodes\CTR.pwn(561) : error 010: invalid function or declaration
    C:\Games\Grand Theft Auto San Andreas\gamemodes\CTR.pwn(562) : error 010: invalid function or declaration
    C:\Games\Grand Theft Auto San Andreas\gamemodes\CTR.pwn(563) : error 010: invalid function or declaration
    C:\Games\Grand Theft Auto San Andreas\gamemodes\CTR.pwn(564) : error 010: invalid function or declaration
    C:\Games\Grand Theft Auto San Andreas\gamemodes\CTR.pwn(565) : error 010: invalid function or declaration
    C:\Games\Grand Theft Auto San Andreas\gamemodes\CTR.pwn(566) : error 010: invalid function or declaration
    C:\Games\Grand Theft Auto San Andreas\gamemodes\CTR.pwn(568) : error 010: invalid function or declaration
    C:\Games\Grand Theft Auto San Andreas\gamemodes\CTR.pwn(570) : error 010: invalid function or declaration
    C:\Games\Grand Theft Auto San Andreas\gamemodes\CTR.pwn(571) : error 010: invalid function or declaration
    C:\Games\Grand Theft Auto San Andreas\gamemodes\CTR.pwn(572) : error 010: invalid function or declaration
    C:\Games\Grand Theft Auto San Andreas\gamemodes\CTR.pwn(573) : error 010: invalid function or declaration
    C:\Games\Grand Theft Auto San Andreas\gamemodes\CTR.pwn(574) : error 010: invalid function or declaration
    C:\Games\Grand Theft Auto San Andreas\gamemodes\CTR.pwn(575) : error 010: invalid function or declaration
    C:\Games\Grand Theft Auto San Andreas\gamemodes\CTR.pwn(576) : error 010: invalid function or declaration
    C:\Games\Grand Theft Auto San Andreas\gamemodes\CTR.pwn(577) : error 010: invalid function or declaration
    C:\Games\Grand Theft Auto San Andreas\gamemodes\CTR.pwn(578) : error 010: invalid function or declaration
    Compilation aborted.Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase


    26 Errors.


    Das wären alle meine Commands -.-




    Was mache ich falsch?




    HIer die komplette onplayercommandtext. (Das DCMD ganz oben bei #define hab ich und ganz unten das auch - sscanf)


    //ZENSIERT! sry aber da sind "interne" sachen drinne.


    public OnPlayerCommandText(playerid, cmdtext[])
    {
    dcmd(kick,4,cmdtext);
    return 0;
    }
    dcmd_kick(playerid,params[]) {
    if(!strlen(params)) {
    return SendClientMessage(playerid,COLOR_RED,"USAGE: /kick [playerid]");
    }
    new
    pID=strval(params);
    if(!IsPlayerConnected(pID)) {
    return SendClientMessage(playerid,COLOR_RED,"Kein Spieler mit angegebener ID Online");
    }
    Kick(pID);
    SendClientMessage(playerid,COLOR_YELLOW,"Erfolgreich Spieler vom Server gekickt!");
    return 1;
    }
    if(strcmp("/cmd",cmdtext,true) == 0)
    {
    CMD
    return 1;
    }
    if(strcmp("/cmd",cmdtext,true) == 0)
    {
    CMD
    return 1;
    }
    if(strcmp("/cmd",cmdtext,true) == 0)
    {
    CMD
    return 1;
    }
    if(strcmp("/cmd",cmdtext,true) == 0)
    {
    CMD
    return 1;
    }
    if(strcmp("/cmd",cmdtext,true) == 0)
    {
    CMD
    return 1;
    }
    if(strcmp("/cmd",cmdtext,true) == 0)
    {
    CMD
    return 1;
    }
    if (strcmp(cmdtext, "/cmd", true)==0)
    {
    CMD
    return 1;
    }
    if(strcmp("/cmd",cmdtext,true) == 0)
    {
    CMD
    return 1;
    }
    if (strcmp(cmdtext, "/cmd", true)==0)
    {
    CMD
    return 1;
    }
    if(!strcmp(cmdtext,"/cmd", true))
    {
    CMD
    return 1;
    }
    if(!strcmp(cmdtext,"/cmd", true))
    {
    CMD
    return 1;
    }
    if(!strcmp(cmdtext,"/cmd", true))
    {
    CMD
    return 1;
    }
    if(!strcmp(cmdtext,"/cmd", true))
    {
    CMD
    return 1;
    }
    if(!strcmp(cmdtext,"/cmd", true))
    {
    return 1;
    }
    if(!strcmp(cmdtext,"/cmd", true))
    {
    CMD
    return 1;
    }
    if(!strcmp(cmdtext,"/cmd", true))
    {
    CMD
    return 1;
    }
    if(!strcmp(cmdtext,"/heal!", true))
    {
    CMD
    return 1;
    }
    if(!strcmp(cmdtext,"/cmd!", true))
    {
    CMD
    return 1;
    }
    if(strcmp(cmdtext, "/cmd", true) == 0)
    {
    CMD
    return 1;
    }
    if(!strcmp(cmdtext,"/cmd", true))
    {
    CMD
    return 1;
    }
    if(strcmp(cmdtext, "/cmd", true) == 0)
    {
    CMD
    return 1;
    }
    if(strcmp(cmdtext, "/cmd", true) == 0)
    {
    CMD
    return 1;
    }
    if(strcmp(cmdtext, "/cmd", true) == 0)
    {
    CMD
    {
    CMD }
    else
    {
    CMD
    }
    return 1;
    }
    return 0;
    }


    Wie gesagt sobald ich das DCMD drinne hab geht garnichts mehr. alles andere geht


    Bitte auf das Bild Klicken für Mehr Info's!



    Bitte auf das Bild Klicken für Mehr Info's!

    Einmal editiert, zuletzt von [NeS]Teddy ()

  • Kleiner Fehler :rolleyes: .
    Und zwar:

    // ****Der erste Teil kommt zwar unter "OnPlayerCommandText" , aber der 2. Teil nicht, sprich:


    dcmd(kick,4,cmdtext); // Unter "OnPlayerCommandText",doch (!)
    // --- weitere dcmd Codes oder andere Codes ---





    // ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::



    dcmd_kick(playerid, params[]) // doch dies kommt AUßERHALB eines CallBacks,d.h. außerhalb von "public .... " , z.B. ganz unten im Script anfügen
    {
    // +++++++++++ CMD ++++++++++++

    Suche Scriptlehrer :rolleyes:

  • Hmm DCMD is irgendwie voll kompliziert xD
    Kann mir da vil. einer helfen? Also hat noch jemand mehr Tutorias?
    Und wie mache ich sowas:
    /Givegun [ID/NAME] [WAFFENID] [MUNI] [PREIS]
    /setname [ID/NAME] [Neuer Name]
    ?
    Hilfe Bitte!


    Bitte auf das Bild Klicken für Mehr Info's!



    Bitte auf das Bild Klicken für Mehr Info's!

    2 Mal editiert, zuletzt von [NeS]Teddy ()

  • Da du mehrere Parameter verwendest,ist sscanf ratsam.

    // ========== Erstellen von /givegun [ID/Name] [WAFFENID] [MUNI] [PREIS] ==========
    //Wie gehandhabt unter OnPlayerCommandText
    dcmd(givegun,7,cmdtext);



    //Außerhalb eines CallBacks
    dcmd_givegun(playerid, params[])
    {
    //Wir definieren zunächst alle Variablen
    new user;
    new waffe;
    new preis;
    new muni;
    if(sscanf(params,"uddd",user,waffe,muni,preis)) //Hier haben wir einen User ("u"), und 3 Integerwerte (Waffe,Muni,Preis = "d") vorliegen.
    {
    SendClientMessage(playerid,COLOR_RED,"Verwende:/givegun [ID] [WAFFENID] [MUNI] [PREIS]");//Wenn er nicht genügend Variablen vorliegen hat
    return 1;
    }
    if(GetPlayerMoney(user) < preis) //Wenn "User" nicht genügend Geld hat
    {
    SendClientMessage(playerid,COLOR_RED,"Der angegebene User hat nicht so viel Geld");
    return 1;
    }
    if(waffe <= 0 && waffe >= 47) //Wenn die WaffenID über 47 und unter 0 ist
    {
    SendClientMessage(playerid,COLOR_RED,"Diese WaffenID existiert nicht!");
    return 1;
    }
    GivePlayerWeapon(user,waffe,muni);
    GivePlayerMoney(user, -preis);
    return 1;
    }


    Edit: Hab es herausgefunden !

    Suche Scriptlehrer :rolleyes:

    2 Mal editiert, zuletzt von Kayer ()

  • Zu dem Namen könnt man sowas machen:
    stock IdPerName(text[]) {//mir fiehl kein andere name ein^^
    for(new i=0; i<MAX_PLAYERS; i++) {
    if(IsPlayerConnected(i)) {
    new name[MAX_PLAYER_NAME];
    GetPlayerName(i,name,sizeof(name));
    if(strfind(name,text,true)==0) { return i; }}}
    return INVALID_PLAYER_ID;
    }
    Ein Beispiel:
    new user=IdPerName(params);

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

  • Dankeschön! So hats geklappt + ich bekomm ne Kleine übersicht wie das funktioniert :D
    Aber hier fällt mir was auf:


    }
    GivePlayerWeapon(user,waffe,muni);
    GivePlayerMoney(user, -preis);
    return 1;
    Wäre es nicht ratsamer das Geld das dem User abgezogen wird dem Verkäufer zuzuschreiben ? ^^
    Also das wäre dann so:
    }
    GivePlayerWeapon(user,waffe,muni);
    GivePlayerMoney(user, -preis);
    GivePlayerMoney(playerid, preis);
    return 1;
    Funktioniert so Perfekt!



    Verstehe ich leider überhaupt gar nicht ...
    Wie wäre es damit:
    if(!IsPlayerConnected(user)) {
    return SendClientMessage(playerid, COLOR_RED, "Der angegebene User ist nicht online!");
    }
    ?


    Und WIe mache ich das, das nur das gTeam dealer es kann?
    Ich hab es bis jetzt so:
    if(gTeam[playerid] == TEAM_DEALER) {
    return SendClientMessage(playerid, COLOR_RED, "Du bist kein Dealer!");
    }
    So kann es aber jeder AUßER die Dealer -.- wie mach ich das nur die dealer es können?
    HABS!!!!
    //Außerhalb eines CallBacks
    dcmd_givegun(playerid, params[])
    {
    //Wir definieren zunächst alle Variablen
    new user;
    new waffe;
    new preis;
    new muni;
    if(sscanf(params,"uddd",user,waffe,muni,preis)) //Hier haben wir einen User ("u"), und 3 Integerwerte (Waffe,Muni,Preis = "d") vorliegen.
    {
    SendClientMessage(playerid,COLOR_RED,"Benutze : /Gun [PLAYERID] [WAFFENID] [MUNITION] [PREIS] - /gunid für die ID'S");//Wenn er nicht genügend Variablen vorliegen hat
    return 1;
    }
    if(gTeam[playerid] == TEAM_DEALER) {
    }
    else
    {
    SendClientMessage(playerid,COLOR_RED,"Du Bist Kein Dealer!!!");
    }
    if(!IsPlayerConnected(user)) {
    return SendClientMessage(playerid, COLOR_RED, "Der angegebene User ist nicht online!");
    }
    if(GetPlayerMoney(user) < preis) //Wenn "User" nicht genügend Geld hat
    {
    SendClientMessage(playerid,COLOR_RED,"Der angegebene User hat nicht so viel Geld");
    return 1;
    }
    if(waffe <= 0 && waffe >= 47) //Wenn die WaffenID über 47 und unter 0 ist
    {
    SendClientMessage(playerid,COLOR_RED,"Diese WaffenID existiert nicht!");
    return 1;
    }
    GivePlayerWeapon(user,waffe,muni);
    GivePlayerMoney(user, -preis);
    GivePlayerMoney(playerid, preis);
    return 1;
    }

    So gehts, das nur das gTeam Dealer es können :D


    if(gTeam[playerid] == TEAM_DEALER) {
    }
    else
    {
    SendClientMessage(playerid,COLOR_RED,"Du Bist Kein Dealer!!!");
    }


    Bitte auf das Bild Klicken für Mehr Info's!



    Bitte auf das Bild Klicken für Mehr Info's!

    Einmal editiert, zuletzt von [NeS]Teddy ()

  • /setname hab ich noch nicht? Hilft mri da jemand? Hab mal was eigenes Versucht, was aber natürlich nicht ging -.-



    dcmd_namechange(playerid, params[])
    {


    new user;
    new name;
    if(sscanf(params,"uu",user,name))
    {
    SendClientMessage(playerid,COLOR_RED,"Benutze : /Namechange [PLAYERID] [NEUERNAME]");
    return 1;
    }
    if(!IsPlayerConnected(user)) {
    return SendClientMessage(playerid, COLOR_RED, "Der angegebene User ist nicht online!");
    }
    if(!IsPlayerAdmin(playerid)) {
    return SendClientMessage(playerid, COLOR_RED, "Du bist kein Admin / bist nicht in Rcon eingeloggt!");
    }
    else
    {
    SetPlayerName(user, name);
    }
    return 1;
    }
    Fehler der Kommt:
    (1445) : error 035: argument type mismatch (argument 2)
    Line 1445: SetPlayerName(user, name);
    Pls help! ^^


    Bitte auf das Bild Klicken für Mehr Info's!



    Bitte auf das Bild Klicken für Mehr Info's!

    Einmal editiert, zuletzt von [NeS]Teddy ()

  • so is richtig:


    dcmd_name(playerid,params[])
    {
    new PID, Name[MAX_PLAYERS_NAME];
    if(!IsPlayerAdmin(pID))
    {
    return SendClientMessage(playerid, 0xFF0000FF, "Du bist kein Admin !");
    }
    if(sscanf(params, "uu",pID, Name))
    {
    return SendClientMessage(playerid,0xFFFFFFFF,"TIPPE: /name [playerid] [newname]");
    }
    if(!IsPlayerConnected(pID))
    {
    return SendClientMessage(playerid,0xFF0000FF,"Kein Spieler mit angegebener ID Online");
    }
    SetPlayerName(pID, Name);
    return 1;
    }

    dcmd(name, 4, cmdtext);

  • "uu" ist das Problem! Also endgültig siehts so aus:


    dcmd_name(playerid,params[])
    {
    new PID, Name[MAX_PLAYERS_NAME];
    if(!IsPlayerAdmin(pID))
    {
    return SendClientMessage(playerid, 0xFF0000FF, "Du bist kein Admin !");
    }
    if(sscanf(params, "us",pID, Name))
    {
    return SendClientMessage(playerid,0xFFFFFFFF,"TIPPE: /name [playerid] [newname]");
    }
    if(!IsPlayerConnected(pID))
    {
    return SendClientMessage(playerid,0xFF0000FF,"Kein Spieler mit angegebener ID Online");
    }
    SetPlayerName(pID, Name);
    return 1;
    }


    Ich scripte NICHT mehr, ich möchte mit NIEMANDEM einen Server aufmachen habe auch NICHTS mehr mit LoH zu tun, also lasst es mit den PNs!

  • Das versteh ich nit so ganz
    if(!IsPlayerAdmin(pID))// müsste hier nit playerid rein? Denn pID gibt ja den Parameter an,
    aber nit der Parameter muss Admin sein, sondern der ausführende
    {
    return SendClientMessage(playerid, 0xFF0000FF, "Du bist kein Admin !");
    }
    if(sscanf(params, "us",pID, Name))// und was hierdran falsch? das ist doch richtig, aber es kommt
    ne fehlermeldung(also SendClientMessage...)
    {
    return SendClientMessage(playerid,0xFFFFFFFF,"TIPPE: /name [playerid] [newname]");
    }