Beiträge von _Advanced_

    Hallo liebe Brotfische,


    Ich hab mich entschlossen wieder ein Tutorial zu machen. Dieses mal zeige ich euch einen /kick Befehl der aber auf ocmd & sscanf basiert.

    So, erstmal was ihr braucht:


    - ocmd.inc

    - sscanf Plugin (ihr könnt auch den sscanf stock nutzen)

    - bisschen Geduld

    - Grundwissen


    (Links für die inc bzw. Plugins findet ihr ganz unten im Thread!)


    =========================================================================================================================

    Kommen wir jetzt zum Script Teil:


    Als erstes damit unser Kick Befehl auch funktioniert müsst ihr ganz oben folgendes einfügen:


    #include <ocmd>

    und


    #include <sscanf>


    Wenn ihr aber den sscanf stock benutzen wollt müsst ihr den ganzen stock ganz unten ins Script einfügen

    (Link zum stock ist unten im Thread!)


    So nun haben wir die beiden wichtigen Sachen um den Befehl zu erstellen, also gehen wir nun zu OnPlayerCommandText und fügen unter der Klammer die das

    Callback schließt folgendes ein:


    ocmd:kick(playerid,params[])
    {

    So, nun heißt der Befehl /kick. Der nächste Schritt wäre erstmal alles zu definieren was wir für den Befehl brauchen. Das wäre:


    new pID,reason[20],givename[MAX_PLAYER_NAME],name[MAX_PLAYER_NAME],str[128];

    Zur Erklärung:

    pID = Der Spieler den wir kicken wollen

    reason[20] = Der Grund, der nur maximal 20 Buchstaben/Zahlen/Zeichen lang sein kann

    givename = Der Name des gekickten Spielers

    name = Unser Name

    str[128] = Der String den wir später für die Nachricht brauchen und die Länge


    Ales nächstes Fragen wir ab, ob der Spieler der den Befehl eingibt auch ein Admin ist:


    if(SpielerInfo[playerid][pAdmin] <= 1)return SendClientMessage(playerid,GRAU,"Du besitzt nicht die benötigten Rechte dafür!");

    Dieser Code heißt nicht anderes als:

    Ist der Spieler kleiner als Admin 1, wird ihm die Nachricht gesendet: "Du hast keine Rechte dafür!"

    Ihr könnt natürlich euren beliebigen Admin Rang dort einfügen.

    Als nächstes kommt jetzt die sscanf Abfrage, ob der Spieler auch "ID" und "Grund" eingibt. Die sieht dann so aus:


    if(sscanf(params,"us",pID,reason))return SendClientMessage(playerid,GRAU,"Tippe: /kick [ID] [Grund]");

    Zur Erklärung:


    sscanf = Ist unser Programm

    params = Sind die Parameter die wir danach setzen/auswählen

    "us" = Das "u" steht für die Spieler ID (u = Userid) und "s" für die Nachricht die wir dann schreiben also den Grund.

    pID = Die Userid vom ausgwählten Spieler

    reason = Den Grund den wir eingeben


    Also: Sollte der Spieler "ID" (pID) und "Grund" (reason) nicht angeben, kommt die nachricht:" Tippe: /kick ........."

    Das hätten wir dann auch, jetzt muss nur noch was passieren wenn der Spieler das eingibt.

    Wir wollen erstmal die Namen vom Spieler sowie vom Spieler der gekickt wird, deswegen fügen wir noch folgendes hinzu:


    GetPlayerName(playerid,name,sizeof(name)),GetPlayerName(pID,givename,sizeof(givename));

    Nun haben wir auch die Namen aller beiden. Doch bevor der Spieler gekickt wird, müssen wir eine Nachricht senden.

    Und das machen wir so:


    format(str,sizeof(str),"[Server]: %s hat den Spieler %s vom Server gekickt! Grund: %s",name,givename,reason);

    Und damit auch jeder Spieler die Nachricht lesen kann, setzen wir dadrunter noch eine:


    SendClientMessageToAll(ROT,str);

    Jetzt kann jeder auf dem Server diese Nachricht lesen, nun fehlt nur noch das was den Befehl ausmacht:


    Kick(pID);

    Dann noch das return 1; und die geschlossene Klammer nicht vergessen und fertig ist der Befehl.

    Ihr könnt natürlich noch ein paar Extras einfügen wie:

    - man darf keine höheren Admin kicken also zum Beispiel so:


    if(SpielerInfo[pID][pAdmin] > SpielerInfo[playerid][pAdmin])return SendClientMessage(playerid,ROT,""ADMINERROR"");

    - oder auch, dass der gekickte Spieler die Nachricht lesen kann. Das würde man dann mit einem Timer machen und ihn dann nach z.B. 1 Sekunde kicken.


    Wenn jemand durcheinander gekommen ist habe ich euch nochmal den ganzen Befehl hier eingefügt:


    ocmd:kick(playerid,params[])
    {
    new pID,reason[128],name[MAX_PLAYER_NAME],givename[MAX_PLAYER_NAME],str[128];
    if(SpielerInfo[playerid][pAdmin] <= 1)return SendClientMessage(playerid,GRAU,"Du besitzt nicht die benötigten Rechte dafür!");
    if(sscanf(params,"us",pID,reason))return SendClientMessage(playerid,GRAU,"Tippe: /kick [ID] [Grund]");
    GetPlayerName(playerid,name,sizeof(name)),GetPlayerName(pID,givename,sizeof(givename));
    format(str,sizeof(str),"[Server]: %s hat den Spieler %s vom Server gekickt! Grund: %s",name,givename,reason);
    SendClientMessageToAll(ROT,str);
    Kick(pID);
    return 1;
    }



    =============================================================================================================================

    Das wars auch schon, falls ihr Fehler entdeckt und welche habt, könnt ihr mir gerne schreiben. Ich würde mich auch über positive Rückmeldungen freuen.


    Hier noch die Download Links:





    Ich hoffe mein 2 Tutorial hat euch gefallen.

    MfG



    Advanced

    oh mein gott wirklich so schwer? -.-


    if(PlayerInfo[playerid][pCarlic] == 0 || !IsPlayerInFrac(playerid) == 11)
    {
    //Schmeißt ihn aus dem Auto
    return 1;
    }


    Du musst das dann halt für dich noch umstellen. Den Rest kannst du auch selber.


    MfG

    Also ich arbeite auch mit Mysql, und mein stock für den Speicher Befehl sieht so aus:


    stock SavePlayer(playerid)
    {
    if(IsPlayerConnected(playerid) && !IsPlayerNPC(playerid))
    {
    if(GetPVarInt(playerid,"Eingeloggt") == 1)
    {

    mysql_SetInt("accounts", "Level", SpielerInfo[playerid][pLevel], "Name", SpielerInfo[playerid][pName]);
    mysql_SetInt("accounts", "Geld", GetPlayerMoney(playerid), "Name", SpielerInfo[playerid][pName]);
    mysql_SetInt("accounts", "Kills", SpielerInfo[playerid][pKills], "Name", SpielerInfo[playerid][pName]);
    mysql_SetInt("accounts", "Tode", SpielerInfo[playerid][pTode], "Name", SpielerInfo[playerid][pName]);
    mysql_SetFloat("accounts", "Health", SpielerInfo[playerid][pHealth], "Name", SpielerInfo[playerid][pName]);
    mysql_SetInt("accounts", "Perso", SpielerInfo[playerid][pPerso], "Name", SpielerInfo[playerid][pName]);
    mysql_SetInt("accounts", "Geschlecht", SpielerInfo[playerid][pGeschlecht], "Name", SpielerInfo[playerid][pName]);
    mysql_SetInt("accounts", "Age", SpielerInfo[playerid][pAge], "Name", SpielerInfo[playerid][pName]);
    mysql_SetInt("accounts", "National", SpielerInfo[playerid][pNational], "Name", SpielerInfo[playerid][pName]);
    mysql_SetInt("accounts", "Admin", SpielerInfo[playerid][pAdmin], "Name", SpielerInfo[playerid][pName]);
    mysql_SetInt("accounts", "Konto", SpielerInfo[playerid][pKonto], "Name", SpielerInfo[playerid][pName]);
    mysql_SetInt("accounts", "PIN", SpielerInfo[playerid][pPIN], "Name", SpielerInfo[playerid][pName]);
    }
    }
    return 1;
    }


    Und meine Lade Befehl so:


    stock LoadPlayer(playerid)
    {
    if(IsPlayerConnected(playerid) && !IsPlayerNPC(playerid))
    {
    GetPlayerName(playerid, SpielerInfo[playerid][pName], MAX_PLAYER_NAME);
    SpielerInfo[playerid][pLevel] = mysql_GetInt("accounts", "Level", "Name", SpielerInfo[playerid][pName]);
    SpielerInfo[playerid][pGeld] = mysql_GetInt("accounts", "Geld", "Name", SpielerInfo[playerid][pName]);
    SpielerInfo[playerid][pKills] = mysql_GetInt("accounts", "Kills", "Name", SpielerInfo[playerid][pName]);
    SpielerInfo[playerid][pTode] = mysql_GetInt("accounts", "Tode", "Name", SpielerInfo[playerid][pName]);
    SpielerInfo[playerid][pPerso] = mysql_GetInt("accounts", "Perso", "Name", SpielerInfo[playerid][pName]);
    SpielerInfo[playerid][pGeschlecht] = mysql_GetInt("accounts", "Geschlecht", "Name", SpielerInfo[playerid][pName]);
    SpielerInfo[playerid][pAge] = mysql_GetInt("accounts", "Age", "Name", SpielerInfo[playerid][pName]);
    SpielerInfo[playerid][pNational] = mysql_GetInt("accounts", "National", "Name", SpielerInfo[playerid][pName]);
    SpielerInfo[playerid][pAdmin] = mysql_GetInt("accounts", "Admin", "Name", SpielerInfo[playerid][pName]);
    SpielerInfo[playerid][pKonto] = mysql_GetInt("accounts", "Konto", "Name", SpielerInfo[playerid][pName]);
    SpielerInfo[playerid][pPIN] = mysql_GetInt("accounts", "PIN", "Name", SpielerInfo[playerid][pName]);
    }
    return 1;
    }


    MfG

    Ich empfehle die auf jeden Fall den SAMP Map Construction. Mit dem kannst auf mm Genau arbeiten, und bietet sonst noch andere Vorteile.
    PS: Ich Mappe Persönlich auch mit dem Map Constructor, und das schon seit Anfang.


    MfG

    Ich finde das eher schlecht gemappt...


    Da muss ich ihm zustimmen, die Textur ist einfach nur langweilig, und ob dort wirklich eine Base hinpasst? Naja, versuch mal einen anderen Ort zu finden andere Texturen zu benutzen
    und versuch keinen Kasten ohne Fenster etc zu Mappen.


    MfG

    Hast du auch unter "include" ----> "m_bot" die Waffe ausgeklammert?
    Hast du noch auf dem Server eine "pawno" Datei? Denn dort drinne ist die "m_bot" ebenfalls erhalten.


    MfG

    Hey Leute,


    ich folgendes Problem, ich hab jetzt angefangen mit sscanf zu arbeiten, ich hab mal gleich ein Makeadmin Befehl versucht zu scripten.

    Keine Copy und Paste sondern auf eigene Faust. Mein Problem ist jetzt wenn ich /makeadmin eingebe kommt immer im Chat:

    "Benutze: /makeadmin [ID] [Level]"

    auch wenn ich die Bedingungen für den Befehl erfülle. Kommt immer diese nachricht ich hoffe ihr könnt helfen.

    Auch wenn ich die richtigen Sachen eingebe also: /makeadmin 0 6 kommt die Nachricht.

    Hier der Code:


    ocmd:makeadmin(playerid,params[])
    {
    new pID,adlevel,name[MAX_PLAYER_NAME],givename[MAX_PLAYER_NAME],str[128];
    if((GetPVarInt(playerid,"Eingeloggt") == 0))return SendClientMessage(playerid,WEIS,"Logge dich bitte zuerst ein!");
    if(SpielerInfo[playerid][pAdmin] <=5)return SendClientMessage(playerid,GRAU,"Du besitzt nicht die benötigten Rechte dafür!");
    if(sscanf(params,"ui",pID,adlevel))return SendClientMessage(playerid,GRAU,"Benutze: /makeadmin [ID] [Level]");
    GetPlayerName(playerid,name,sizeof(name)),GetPlayerName(pID,givename,sizeof(givename));
    format(str,sizeof(str),"[Info]: Du hast den Spieler %s den Adminrang %i gegeben!",givename,adlevel);
    SendClientMessage(playerid,HELLBLAU,str);
    format(str,sizeof(str),"[Info]: Administrator %s hat dir den Adminrang %i gegeben!",name,adlevel);
    SendClientMessage(pID,HELLBLAU,str);
    SpielerInfo[pID][pAdmin] = adlevel;
    SavePlayer(pID);
    return 1;
    }

    Anscheinend hat er Probleme mit "OnGameModeInit" und mit "OnVehicleSpawn". Allgemein mit der ganzen .amx Datei. Schau mal unter den Punkten nach.
    Was mir sonst noch einfällt: Hol dir den neusten Streamer.


    MfG