Freeze/Unfreeze system

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 Community! :)
    Ich bin noch Script anfänger ich scripte noch nicht solange und übe und übe immer weiter.
    Jetzt mache ich ein Freeze/Unfreeze System ich habe das schon Geschrieben und es geht auch :)
    Egal wie ich es schreibe ist meine Sache solange es Funktioniert deshalb möchte ich nicht solche Kommentare sehen z.b Falsch geschrieben e.t.c...
    Nun gut fangen wir an an.


    Als erstes müsst ihr euch das ocmd include und das sscanf include runter laden.
    ocmd: http://www.solidfiles.com/d/fa12/
    sscanf: http://www.solidfiles.com/d/ba2f/


    Wenn ihr das habt öffnet irh euer Pawno Programm und includiert diese Include.


    #include <ocmd>
    #include <sscanf>


    wenn ihr das habt sucht ihr euch eine Stelle wo ihr mit ocmd schreiben könnt ich mache es über OnPlayerCommandText.
    Ihr könnt euch ein Kommentar machen wie z.b //ocmd-Befehle
    Nun fangen wir mit unser system an.


    ocmd:freeze(playerid,params[])
    {
    return 1;
    }


    Dan gehen wir über return 1 und schreiben
    new pID,string[128],text[128]; //new = neu pID die ID vom anderen User die wir Freezen wollen string = Der die nachricht ausgibt text = was geschrieben wird z.b Pascal freezt Pascal Grund: HI
    if(sscanf(params,"us",pID,text))return SendClientMessage(playerid,GRAU,"Fehler: /freeze [playerid][Grund]");// = if ist eine Abfrage, params = die Parameter von pID,text
    else if(pID == INVALID_PLAYER_ID)SendClientMessage(playerid,ROT,"Spieler nicht Gefunden"); // Fragt ab ob der Spieler überhaupt Online ist b.z.w ob es den Spieler gibt.


    else // Wenn es den Spieler gibt und der auch Online ist führt er den Befehl aus !
    {
    TogglePlayerControllable(pID,0); // TogglePlayerControllable = freezt den Spieler oder unfreezt den Spieler, 0= Freezt den Spieler
    format(string,sizeof(string),"Admin: %s freezt %s Grund: %s",SpielerName(playerid),SpielerName(pID),text); //format = formatiert den string und die Länger sowie auch den Text, %s Player oder ein text das s bedeuet sowie wie Send e.t.c .)
    SendClientMessageToAll(ROT,string);
    }
    return 1; // SendClientMessageToAll = Gibt eine Nachricht für den Ganzen server aus b.z.w das es jeder Lesen kann, ROT = Die Farbe und er was er an die Leute ausgeben soll was für eine Nachricht = string


    Das ganze sieht so aus


    ocmd:freeze(playerid,params[])
    {
    new pID,string[128],text[128];
    if(sscanf(params,"us",pID,text))return SendClientMessage(playerid,GRAU,"Fehler: /freeze [playerid][Grund]");
    else if(pID == INVALID_PLAYER_ID)SendClientMessage(playerid,ROT,"Spieler nicht Gefunden");
    else
    {
    TogglePlayerControllable(pID,0);
    format(string,sizeof(string),"Admin: %s freezt %s Grund: %s",SpielerName(playerid),SpielerName(pID),text);
    SendClientMessageToAll(ROT,string);
    }
    return 1;
    }


    Das tut ihr Kopieren und schreibt es so um


    new pID,string[128]; // Diesmal soll er kein Text rausgeben
    if(sscanf(params,"u",pID))return SendClientMessage(playerid,ROT,"Fehler: /unfreeze [playerid]"); // von "us" ändert ihr es als "u" weil er soll es nur an die pID schicken.
    TogglePlayerControllable(pID,1); //1= unfreeze
    format(string,sizeof(string),"Admin: %s hat %s entfreezt",SpielerName(playerid),SpielerName(pID)); //Den text umschreiben unten hinter SpielerName den text raus nehmen


    Das ganze sieht nun so aus
    ocmd:freeze(playerid,params[])
    {
    new pID,string[128],text[128];
    if(sscanf(params,"us",pID,text))return SendClientMessage(playerid,GRAU,"Fehler: /freeze [playerid][Grund]");
    else if(pID == INVALID_PLAYER_ID)SendClientMessage(playerid,ROT,"Spieler nicht Gefunden");
    else
    {
    TogglePlayerControllable(pID,0);
    format(string,sizeof(string),"Admin: %s freezt %s Grund: %s",SpielerName(playerid),SpielerName(pID),text);
    SendClientMessageToAll(ROT,string);
    }
    return 1;
    }
    ocmd:unfreeze(playerid,params[])
    {
    new pID,string[128];
    if(sscanf(params,"u",pID))return SendClientMessage(playerid,ROT,"Fehler: /unfreeze [playerid]");
    else if(pID == INVALID_PLAYER_ID)SendClientMessage(playerid,ROT,"Spieler nicht Gefunden");
    else
    {
    TogglePlayerControllable(pID,1);
    format(string,sizeof(string),"Admin: %s hat %s entfreezt",SpielerName(playerid),SpielerName(pID));
    SendClientMessageToAll(ROT,string);
    }
    return 1;
    }


    und den stock SpielerName nicht vergessen


    stock SpielerName(playerid)
    {
    new name[MAX_PLAYERS];
    GetPlayerName(playerid,name,sizeof(name));
    return name;
    }


    So ich hoffe ich konnte alles Richtig erklären weil ich bin anfänger ich weiß selber so manche sachen nicht ich weiß nicht ob ich es richtig erklärt habe sry.
    Aber sonst müsste alles gehen :)
    Viel Spaß :)

  • Ja schon aber ich wollte es ohne admin machen
    Also wenn jemand ein Adminsystem drinne hat einfach so


    if(IsPlayerAnAdmin(playerid,1))return SendClientMessage(playerid,FARBE,"Du bist kein Admin!"); //IsPlayerAnAdmin ( Ist der Spieler Admin b.z.w wie ihr es genannt habt ) 1== Der Adminrang SendClientMessage==Wenn der Spieler kein Admin ist was er für ein text ausgeben soll!



    So müsste es Okey sein :D

  • Copy & paste ahoi, unnötige else answeisungen die unabhängig von ein ander sind. Du hast nicht erklärt wofür "us" stehen geschweige was diese behinhalten oder ähnliches. Zumal du mit nem alten sscanf arbeitest obwohl es längst v2 gibt :/