Einfaches /freeze /unfreeze.Mit nachrichten.

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
  • Hallo und Willkommen zu meinem Tutorial.


    Ich sah das es kaum ein /freeze,/unfreeze Admin Cmd Tutorial gab.




    Naja fangen wir mal an.




    Was braucht ihr:
    Register/Login Script
    Sscanf(Die datei werde ich zum Download Posten)
    Ocmd(Geht auch wie Dcmd.Von OCMD werde ich den Download Posten)
    Grundkenntnisse
    Namen erkennung wie z.b an nem Stock Name usw..
    Ein Admin System mit Level bzw rängen.




    =======================================Downloads================================



    Sscanf code(Pastebin):http://pastebin.com/jAqvuh8h
    Ocmd.Include:http://uploaded.to/file/ttos8rz7






    Erstmal das Include Ocmd ganz oben:
    #include <ocmd>


    Das ocmd ist das include das wir später für den befehl brauchen.



    Danach definiert ihr diese 2 farben:
    #define gelb 0xFFE600FF
    #define rot 0xFF000FFF


    Damit ihr keine errors bekommt.
    Ihr könnt auch eure eigenen Farben nehmen.


    Und Wichtig ihr müsst dann den Sccanf Text.
    Einfach iwo einfügen am besten unten im Script!


    Danach geht ihr irgendwo Z.b hier:
    public OnVehicleDeath(vehicleid, killerid)
    {
    return 1;
    }


    public OnPlayerText(playerid, text[])
    {
    return 1;
    }


    Es sollte nicht in Publics sein sondarn dazwischen.Auch nicht in OnPlayerCommandText.



    Etzt wenn ihr einen passenden Platz gefunden hast.Schreibt ihr.
    Einen Ocmd befehl.Dies würde dan soh aussehen:
    ocmd:freeze(playerid,params[])
    {
    return 1;
    }


    Jetzt zür erklärung:
    ocmd://Damit der Server weist jetzt kommt ein Ocmd Befehl
    freeze//Das ist der name des befehles.Ihr könnt es nennen wir ihr wollt z.b lala.
    (playerid,params[])//Playerid erklärt sich ja von selbst.Und params[] für die Paramter die wir später benutzen werden.



    Den rest müsstet ihr ja kennen.



    So als erstes machen wir es so.Das es nur Admins diesen Befehl durch führen können.
    Bei mir wär es so:
    if(!IstSpielerAdmin(playerid,6))return SendClientMessage(playerid,rot,"Du bist kein Admin lvl 6!");


    Beu euch kann es anders sein das Admin System.Ändert es einfach.


    Jetzt erstellen wir 1 Variable und 3 String´s.
    Dies würde so aussehen:
    new ID, grund[128], n1[128], n2[128];


    Jetzt zur erklärung:
    new // Für die Variabeln und strings die kommen.
    ID,//Das ist die Spieler id die wir gleich bei Sscanf umwandeln.Achja das , ist wichtig damit es weist es kommt was neues.
    grund[128]//Das ist ein string mit 128 zeichen den wir grund gennant haben.Dies wandeln wir dan auch in SScanf um.
    n1[128]//Das ist auch ein String mit 128 zeichen den ich n1 genannt habe.Abgekürtzt Nachricht 1.
    n2[128]//Das ist auch ein String mit 128 Zeichen.Wie oben den ich jetzt n2 genannt habe.Damit es weis auch etwas neues.



    Gut jetzt zum SScanf befehl.
    Damit wir die ID und Grund umwandeln können.


    Dies würde so aussehen:
    if(sscanf(params,"us",ID,grund))return SendClientMessage(playerid,gelb,"Benutze /freeze [ID/Name] [Grund]");


    Jetzt zur erklärung:
    if(sscanf//zum überprüfen ob es ein SScanf abfrage ist.
    params//Die parameter von oben.
    "us"// us sind die Parameter.Das u ist für die ID es kann sowohl die Spieler ID auch wie den Namen.
    //Und das s ist für Buchstaben das ersetzen wir gleich.
    ,ID //wird die u ersetzen.Überall wo wir es im Befehl benutzen.
    ,grund// wird das s ersetzen.
    return SendClientMessage(playerid,gelb,"Benutze /freeze [ID/Name] [Grund]");//Das heißt falls er nichts eingibt kommt diese Meldung!Mit
    SendClientMessage...


    Gut nun so jetzt wie freeze wir einen Spieler?
    Das machen wir mit diesem Befehl:
    TogglePlayerControllable(ID,0);



    Jetzt zur erklärung:
    TooglePlayerControllable//Das ist der befehl das heißt.Sowie verhindere die Spieler Controlle.
    ,ID//Normal were es ja playerid.Aber durch den sscanf weis es wenn wir den Befehl eingeben und die ID oder name das dieser Spieler.
    gefreezt wird.
    0//0= Gefreezt und 1=Nicht gefreezt.


    Gut nun wer unser befehl Fast fertig.


    Wenn wir es jetzt auf compile drücken würden kahmen diese Error:
    C:\Users\Kaan\Desktop\BKC Selfmade By K44n\gamemodes\bkc.pwn(258) : warning 204: symbol is assigned a value that is never used: "n2"
    C:\Users\Kaan\Desktop\BKC Selfmade By K44n\gamemodes\bkc.pwn(258) : warning 204: symbol is assigned a value that is never used: "n1"
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    2 Warnings.


    Das heißt das die zwei strings n2 und n1 nicht benutzt werden.



    Jetzt Formatieren wir die strings.
    Das würde so aussehen:
    format(n1,sizeof(n1),"Admin %s freezt %s.Grund %s",Name(playerid),Name(ID),grund);
    Das ist die Nachricht für Alle.


    Jetzt wieder zur erklärung:
    format(n1,sizeof(n1)//Das heißt wir formatieren den string n1 zu n1.
    ,"Admin %s freezt %s.Grund %s"//Das ist der Text den wir dann gleich anzeigen werden.
    ,Name(playerid)//Den namen von dem Spieler der diesen Befehl durch führt.
    ,Name(ID)//Der name Von ID den wir dann Freezen
    grund//Das ist der grund den wir dann angeben.



    So jetzt macht ihr fast das gleiche wie jetzt nur würde es jetzt so aussehen.
    format(n2,sizeof(n2),"Admin %s hatt dich gefreezt.Grund %s",Name(playerid),grund);


    Das ist jetzt die Nachricht für den Spieler der gefreezt wird.
    Jetzt erklär ich nurnoch:
    Name(playerid)//Der Spieler der diesen Befehl durchgeführt hatt.
    Grund//Der grund den wir anzeigen lassen.



    So jetzt lassen wir die Nachrichten anzeigen:
    SendClientMessageToAll(rot,n1);//n1 für unseren strng anmen.Und das mit SendClientMessageToAll das heißt für alle Spieler.
    SendClientMessage(ID,n2)//SendClient..kennt ihr ja.Die ID für wehn diese Nachricht gezeigt wir.In unserem Fall unsere ID.n2 für den string!



    Jetzt machen wir nur noch eins.
    Damit es nicht so aussieht als ob der Spieler wen er gefreezt ist einfach so weiter läuft.Also wenn er läuft und wir ihn freezen.


    Ihr müsst dann einfach beim befehl freeze:
    Das einfügen:
    SetPVarInt(playerid,"pFreezed",1);



    Und dann bei:
    public OnPlayerUpdate(playerid)
    {


    return 1;
    }


    Einfach rein:
    if(GetPVarInt(playerid,"pFreezed")==1)return 0;



    So jetzt haben wir unser /freeze befehl.
    Das würde so aussehen:
    ocmd:freeze(playerid,params[])
    {
    if(!IstSpielerAdmin(playerid,6))return SendClientMessage(playerid,rot,"Du bist kein Admin lvl 6!");
    new ID, grund[128], n1[128], n2[128];
    if(sscanf(params,"us",ID,grund))return SendClientMessage(playerid,gelb,"Benutze /freeze [ID/Name] [Grund]");
    TogglePlayerControllable(ID,0);
    format(n1,sizeof(n1),"Admin %s freezt %s.Grund %s",Name(playerid),Name(ID),grund);
    format(n2,sizeof(n2),"Admin %s hatt dich gefreezt.Grund %s",Name(playerid),grund);
    SendClientMessageToAll(rot,n1);
    SendClientMessage(ID,gelb,n2);
    SetPVarInt(playerid,"pFreezed",1);
    return 1;
    }





    So jetzt zum /unfreeze befehl:



    Ihr koppiert euer /freeze befehl:



    ocmd:freeze(playerid,params[])
    {
    if(!IstSpielerAdmin(playerid,6))return SendClientMessage(playerid,rot,"Du bist kein Admin lvl 6!");
    new ID, grund[128], n1[128], n2[128];
    if(sscanf(params,"us",ID,grund))return SendClientMessage(playerid,gelb,"Benutze /freeze [ID/Name] [Grund]");
    TogglePlayerControllable(ID,0);
    format(n1,sizeof(n1),"Admin %s freezt %s.Grund %s",Name(playerid),Name(ID),grund);
    format(n2,sizeof(n2),"Admin %s hatt dich gefreezt.Grund %s",Name(playerid),grund);
    SendClientMessageToAll(rot,n1);
    SendClientMessage(ID,gelb,n2);
    SetPVarInt(playerid,"pFreezed",1);
    return 1;
    }




    Jetzt müsst ihr ja logisch denken.
    Erstmal bei:
    ocmd:freeze(playerid,params[])//Bei dem cmd namen freeze zu unfreeze


    Würde soh aussehen:
    ocmd:unfreeze(playerid,params[])



    Ihr ändert das danach:
    new ID, grund[128], n1[128], n2[128];//grund Löschen!Da ihr ja es nicht mehr braucht.


    Würde dann soh aussehen:
    new ID, n1[128], n2[128];



    Danach bei:
    if(sscanf(params,"us",ID,grund))return SendClientMessage(playerid,gelb,"Benutze /freeze [ID/Name] [Grund]");//Müsst ihr
    //bei "us" s löschen.Und nach ID,grund löscht ihr einfach grund.Da die Variable ja nichtmehr benutzt wird.
    //Danach bei SendClient... Löscht ihr [Grund].Und schreibt bei "Benutze /freeze.Einfach Benutze /unfreeze




    Das würde dan soh aussehen:
    if(sscanf(params,"u",ID))return SendClientMessage(playerid,gelb,"Benutze /unfreeze [ID/Name]");


    Das wird ja oben erklärt.




    So jetzt damit auch der Spieler wirklich entfreezt wird.
    Müsst ihr bei:
    TogglePlayerControllable(ID,0);//Dort steht ja 0 ihr müsst es auf 1 ändern.Damit er auch wieder irgendwas machen kann.



    Das würde dann soh aussehen:
    TogglePlayerControllable(ID,1);



    Jetzt zu den beiden Strings n1 und n2.


    Bei:
    format(n1,sizeof(n1),"Admin %s freezt %s.Grund %s",Name(playerid),Name(ID),grund);//Ändert ihr Admin %s freezt einfach bei freezt auf entfreezt %s.
    //Und dann bei [Grund %s] einfach das löschen.Dann müsst ihr noch bei nach Name(ID), das , entfernen und das grund auch.!
    //Weil ja wir den Grund nicht mehr anzeigen und die Variable nicht mehr haben.



    Das würde dann so aussehen:
    format(n1,sizeof(n1),"Admin %s entfreetz %s",Name(playerid),Name(ID));



    Und jetzt noch den zweiten string n2:
    format(n2,sizeof(n2),"Admin %s hatt dich gefreezt.Grund %s",Name(playerid),grund);//Ändert ihr bei gefreezt auf entfreezt.Und bei [Grund %s] Löschen.
    //Und dann nach.Name(playerid) das , entfernen und grund auch.




    Das würde dann so aussehen:
    format(n2,sizeof(n2),"Admin %s hatt dich entfreezt.",Name(playerid));



    Bei SendClientMessage...
    Und bei SendClientMessageToAll.. einfach lassen da wir ja dort oben die strings geändert haben.


    Jetzt müsst ihr noch das PVar pFrezzed auf 0 stellen.Damit keine fehler auftreten.
    SetPVarInt(playerid,"pFreezed",0);




    Das würde dann soh aussehen:
    ocmd:unfreeze(playerid,params[])
    {
    if(!IstSpielerAdmin(playerid,6))return SendClientMessage(playerid,rot,"Du bist kein Admin lvl 6!");
    new ID, n1[128], n2[128];
    if(sscanf(params,"u",ID))return SendClientMessage(playerid,gelb,"Benutze /unfreeze [ID/Name]");
    TogglePlayerControllable(ID,1);
    format(n1,sizeof(n1),"Admin %s entfreetz %s",Name(playerid),Name(ID));
    format(n2,sizeof(n2),"Admin %s hatt dich entfreezt.",Name(playerid));
    SendClientMessageToAll(rot,n1);
    SendClientMessage(ID,gelb,n2);
    SetPVarInt(playerid,"pFreezed",0);
    return 1;
    }




    Und wenn ihr alles habt würde es dann soh aussehen:
    ocmd:freeze(playerid,params[])
    {
    if(!IstSpielerAdmin(playerid,6))return SendClientMessage(playerid,rot,"Du bist kein Admin lvl 6!");
    new ID, grund[128], n1[128], n2[128];
    if(sscanf(params,"us",ID,grund))return SendClientMessage(playerid,gelb,"Benutze /freeze [ID/Name] [Grund]");
    TogglePlayerControllable(ID,0);
    format(n1,sizeof(n1),"Admin %s freezt %s.Grund %s",Name(playerid),Name(ID),grund);
    format(n2,sizeof(n2),"Admin %s hatt dich gefreezt.Grund %s",Name(playerid),grund);
    SendClientMessageToAll(rot,n1);
    SendClientMessage(ID,gelb,n2);
    SetPVarInt(playerid,"pFreezed",1);
    return 1;
    }


    ocmd:unfreeze(playerid,params[])
    {
    if(!IstSpielerAdmin(playerid,6))return SendClientMessage(playerid,rot,"Du bist kein Admin lvl 6!");
    new ID, n1[128], n2[128];
    if(sscanf(params,"u",ID))return SendClientMessage(playerid,gelb,"Benutze /unfreeze [ID/Name]");
    TogglePlayerControllable(ID,1);
    format(n1,sizeof(n1),"Admin %s entfreetz %s",Name(playerid),Name(ID));
    format(n2,sizeof(n2),"Admin %s hatt dich entfreezt.",Name(playerid));
    SendClientMessageToAll(rot,n1);
    SendClientMessage(ID,gelb,n2);
    SetPVarInt(playerid,"pFreezed",0);
    return 1;
    }



    Viel Spaß Damit bei errors Bugs einfach hier posten.



    //Edit:Hinzugefügt SetPVarInt(playerid,"pFreezed",1); und SetPVarInt(playerid,"pFreezed",0); bie /freeze und /unfreeze
    //Edit:bei if(GetPVarInt(playerid,"pFreezed")==1) return 0; " hinzugefügt.


    MFG K44n

    Ich Scripte nicht mehr!
    Signatur zuletzt Aktualiesiert:11.07.2012





    MFG K44n

    5 Mal editiert, zuletzt von K44n ()

  • Wurde das grad nicht schon Veröffentlicht? Oder spackt mein Kopf?

  • Achso, dachte schon ^^


    b2t:


    7/10 *Für Anfanger bestimmt zu Verstehen :)

  • Du kannst auch freeze und unfreeze in ein Befehl fassen.
    Und als kleines Schmankerl OnPlayerUpdate deaktivieren, damit, wenn der Spieler gefreezt ist und
    z.B. die W-Taste drückt, dass es für andere Spieler nicht so aussieht, als würde er auf der Stelle laufen.
    Ansonsten ist dieses Tutorial ganz gut, kein C&P-Tutorial und alles Schritt für Schritt erklärt.

  • Danke.


    Hmm ken mich da mit diesem OnPlayerUpdate nicht so aus.


    Es dauerte ja sehr lange es schritt für schritt zu erklären.




    MFG K44n

    Ich Scripte nicht mehr!
    Signatur zuletzt Aktualiesiert:11.07.2012





    MFG K44n

  • Einfach eine Variable für einen Spieler erstellen (ob globale Variable oder PVar, ist egal) und
    bei OnPlayerUpdate abfragen, ob diese Variable gleich 1 ist (also ob der Spieler gefreezt ist) und
    wenn ja, dann return 0;.
    Würde ungefähr so aussehen:
    ocmd_freeze(player.....
    {
    ....
    TogglePlayerControllable(playerid,0);
    SetPVarInt(playerid,"pFreezed",1);
    ...
    }
    ...
    public OnPlayerUpdate(playerid) {
    if(GetPVarInt(playerid,"pFreezed") == 1) return 0;
    return 1;
    }

  • Cool , mal ein neues & nützliches Tutorial !
    Ich habe es ausprobiert , und bei mir hat alles Geklappt :)


    Von mir Bekommst du in der Bewertung in einer Skala von 0 - 10 :
    8 / 10* Brotfishe

    I - Am - so ....

    ┏━━━┓
    ┃┏━━┛
    ┃┗━━┳━━┳┳━━┓
    ┃┏━━┫┏┓┣┫┏━┛
    ┃┗━━┫┗┛┃┃┗━┓
    ┗━━━┫┏━┻┻━━┛

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • das Tut findeich rihtig TOP
    Du hast Alles genau Erklährt,


    Super


    10/10