Beiträge von maddin

    Zitat

    was soll ich damit machen


    Löschen, am montag zum PC Laden deines vertrauens gehen und das Spiel für 10€ Legal erwerben.


    Glaube nicht das dir hier jemand helfen darf. Illegal u know?

    //Ganz nach Oben:
    #define NEUSTART_STUNDE 16 //Die Stunde in der der Serrver neugestartet werden soll
    #define NEUSTART_MINUTE 50 //Die Minute in der der Serrver neugestartet werden soll
    // Das bedeutet jetzt z.b das der Server um 16:50 UHR neugestartet wird!
    //Zu den forwards:
    forward ServerNeustart();
    forward ServerNeustart2();
    //Ganz unten ins Script:
    public ServerNeustart()
    {
    new ServerHour, ServerMinute, ServerSecond;
    gettime(ServerHour, ServerMinute, ServerSecond);//Holt sich die aktuelle Server Zeit
    if(ServerHour == NEUSTART_STUNDE && ServerMinute == NEUSTART_MINUTE) { //Überprüft ob die Zeit die oben im script per NEUSTART_STUNDE und NEUSTART_MINUTE angegeben wurde mit der aktuellen zeit übereinstimmt
    SendClientMessageToAll(COLOR_HELLROT, "[ACHTUNG]Der Server wird in 60 Sekunden Neugestartet!");//Sollte das der fall sein wird eine Nachricht an alle Spieler auf dem Server geschickt das der Server in 60 Sekunden neugestartet wird
    SetTimer("ServerNeustart2", 60000, 0);//Startet den Timer
    }
    return 1;
    }
    public ServerNeustart2()//Die Funktion die den Server Neustartet
    {
    SendClientMessageToAll(COLOR_HELLROT, "[ACHTUNG]Der Server wird jetzt Neugestartet!");
    SendRconCommand("gmx");//Startet den Server neu
    return 1;
    }



    /*
    Jetzt musst du nur noch die Funktion ServerNeustart(); in irgendeinem Timer unterbringen. Dieser sollte aber nicht zu groß sein. Am besten einen der jede Minute ausgeführt wird.
    */

    versuch mal so
    stock GetLevelName(playerid)
    {
    new string[64];
    if (pInfo[playerid][AdminLevel] == 0) {
    format(string, sizeof(string), "%s", dini_Get("/nxadmin/Konfiguration/Server.ini", "Level_0_Name"));
    }
    else if (pInfo[playerid][AdminLevel] == 1) {
    format(string, sizeof(string), "%s", dini_Get("/nxadmin/Konfiguration/Server.ini", "Level_1_Name"));
    }
    else if (pInfo[playerid][AdminLevel] == 2) {
    format(string, sizeof(string), "%s", dini_Get("/nxadmin/Konfiguration/Server.ini", "Level_2_Name"));
    }
    else if (pInfo[playerid][AdminLevel] == 3) {
    format(string, sizeof(string), "%s", dini_Get("/nxadmin/Konfiguration/Server.ini", "Level_3_Name"));
    }
    else if (pInfo[playerid][AdminLevel] == 4) {
    format(string, sizeof(string), "%s", dini_Get("/nxadmin/Konfiguration/Server.ini", "Level_4_Name"));
    }
    return string;
    }

    Erstmal danke fürs Feedback ^^
    Ja ich bin nicht der beste im Tutorial schreiben und wie gesagt kenne ich manche sachen selbst nicht. Ich werds morgen übernehmen was du geschrieben hast, hab grad keine zeit.^^


    Mfg.

    Ja kannst du. Und hier^^ :
    CreatePickup(1277, 2, -2238.550781, 2463.183105, 5.542299, 0);
    CreatePickup(1277, 2, 268.568146, 1883.363037, -30.808420, 0);
    CreatePickup(1550, 2, -36.146885, 2346.621582, 23.533966, 0);
    CreatePickup(1550, 2, -392.027252, 2231.767822, 41.823029, 0);
    CreatePickup(1550, 2, -809.830383, 2430.863037, 156.368454, 0);
    CreatePickup(1550, 2, -911.069946, 2671.293945, 41.763603, 0);
    CreatePickup(1550, 2, -1473.875488, 2577.511230, 55.229279, 0);
    CreatePickup(1550, 2, -1669.786499, 2589.227295, 80.827667, 0);
    CreatePickup(1550, 2, -1425.840576, 2169.445313, 49.425583, 0);
    CreatePickup(1550, 2, -1504.223511, 1973.275513, 47.815216, 0);
    CreatePickup(1550, 2, -1226.739990, 1835.701904, 41.013847, 0);
    CreatePickup(1550, 2, -733.542847, 1546.162109, 38.400196, 0);
    CreatePickup(1550, 2, -639.169312, 1445.603516, 13.010530, 0);
    CreatePickup(1550, 2, -319.877533, 1295.722412, 53.057686, 0);
    CreatePickup(1550, 2, -103.150368, 1374.418701, 9.666780, 0);
    CreatePickup(1550, 2, 261.439819, 1469.962280, 9.979280, 0);
    CreatePickup(1550, 2, 236.727173, 1702.313721, 22.033966, 0);
    CreatePickup(1550, 2, -126.412674, 2256.074707, 27.548050, 0);
    CreatePickup(1550, 2, 386.055847, 2610.379883, 15.877717, 0);
    CreatePickup(1550, 2, 110.708366, 2596.893066, 16.374792, 0);
    CreatePickup(1550, 2, -313.795746, 2659.517334, 62.410515, 0);
    CreatePickup(1550, 2, -599.363892, 2590.133301, 65.230118, 0);
    CreatePickup(1550, 2, -671.755432, 2701.936035, 70.405212, 0);
    CreatePickup(1550, 2, -791.100342, 2770.165771, 45.077030, 0);
    CreatePickup(1550, 2, -1274.118164, 2723.749023, 49.659622, 0);
    CreatePickup(1550, 2, -1464.770996, 2637.491943, 76.061501, 0);
    CreatePickup(1550, 2, -1513.744263, 2616.794678, 55.232151, 0);
    CreatePickup(1550, 2, -1729.653564, 2204.946533, 2.339028, 0);

    Müsste es nicht so rum sein @ InternetInk ?
    ShowPlayerDialog(playerid, DIALOG_REGISTER2, DIALOG_STYLE_LIST, "info","Männlich\r\nWeiblich", "OK", "Abbrechen");
    Sonst wäre ja Männlich\r\nWeiblich der Titel. Korrigier mich wenn ich falsch liege ^^

    Hiho,
    Ich dachte mir mal, ich schreib ein kleines tutorial über sscanf weil ich glaube das die meisten nicht wissen das man es auch für mehr als nur befehle benutzen kann.
    In diesem tutorial werde ich euch zeigen was sccanf ist, welche funktionen es hat und wie es funktioniert mit ein paar beispielen.


    Eins vorweg:
    1. In diesem tutorial geht es um das sscanf 2.0 plugin von Y_Less. Ich kann nicht garantieren das alles was ich hier sage auch mit älteren versionen funktioniert!
    2. Ich bin nicht allwissend. Es gibt dinge die ich auch nicht weiss, dies werde ich aber auch dazu schreiben. Wenn jemand etwas weiss wo ich geschrieben habe das ich es nicht weiss, bitte bescheid sagen dann editier ich es rein (komischer satz^^).


    Alles klar fangen wir mal an^^


    Was ist sscanf?
    Die meisten werden sscanf wohl schon kennen wenn sie sich mit parametern für befehle auseinander gesetzt haben. Sei es dcmd,ocmd,zcmd oder (hier beliebeigen bustaben aus dem alphabet einfügen)cmd. Allerdings kann sscanf für mehr als nur parameter von befehlen benutzt werden. Beispielsweise um daten aus einer tabelle (MySQL) auszulesen (mehr dazu weiter unten).


    Welche funktionen hat sscanf?
    Als erstes sollte man die parameter kennen die man benötigt um z.b integer von string oder float zu unterscheiden.


    [table='4']
    [*]Parameter
    [*]Name
    [*]Erklärung
    [*]Beispiel


    [*]i, d
    [*]Integer
    [*]Eine einfache Zahl.
    [*]-314, -1, 0, 1, 2, 5, 8765345


    [*]I, D
    [*]Integer (Optional)
    [*]Eine einfache Zahl.
    [*]-314, -1, 0, 1, 2, 5, 8765345


    [*]c
    [*]Character
    [*]Ein einzelner Character bzw Bustabe.
    [*]a, o, *


    [*]C
    [*]Character (Optional)
    [*]Ein einzelner Character bzw Bustabe.
    [*]a, o, *


    [*]l
    [*]Logical
    [*]Ein Logischer wert wie true (wahr) oder false (falsch).
    [*]true, false


    [*]L
    [*]Logical (Optional)
    [*]Ein Logischer wert wie true (wahr) oder false (falsch).
    [*]true, false


    [*]b
    [*]Binary
    [*]Eine Binärzahl.
    [*]01001, 0b1100


    [*]B
    [*]Binary (Optional)
    [*]Eine Binärzahl.
    [*]01001, 0b1100


    [*]h, x
    [*]Hex
    [*]Eine Hexadezimalzahl.
    [*]1A, 0x23


    [*]H
    [*]Hex (Optional)
    [*]Eine Hexadezimalzahl.
    [*]1A, 0x23


    [*]o
    [*]Octal
    [*]Ein Oktalwert.
    [*]045 12


    [*]O
    [*]Octal (Optional)
    [*]Ein Oktalwert.
    [*]045 12


    [*]n
    [*]Number
    [*]Eine einfache Zahl (Sowohl integer, als auch Binär,Hexadezimal, etc. Wert).
    [*]42, 0b010, 0xAC, 045


    [*]N
    [*]Number (Optional)
    [*]Eine einfache Zahl (Sowohl integer, als auch Binär,Hexadezimal, etc. Wert).
    [*]42, 0b010, 0xAC, 045


    [*]f
    [*]Float
    [*]Eine Gleitkommazahl.
    [*]0.7, -99.5


    [*]F
    [*]Float (Optional)
    [*]Eine Gleitkommazahl.
    [*]0.7, -99.5


    [*]g
    [*]IEEE Float
    [*]Eine IEEE Gleitkommazahl.
    [*]0.7, -99.5, INFINITY, -INFINITY, NAN, NAN_E


    [*]G
    [*]IEEE Float (Optional)
    [*]Eine IEEE Gleitkommazahl.
    [*]0.7, -99.5, INFINITY, -INFINITY, NAN, NAN_E


    [*]u
    [*]User name/id (bots und spieler)
    [*]Ein Spielername oder eine playerid. Also sowohl z.b /kick Maddin als auch /kick 0 sind möglich.
    [*]Maddin, Hans, Bot1, Bot2, 0, 1


    [*]U
    [*]User name/id (bots und spieler) (Optional)
    [*]Ein Spieler-/Botname oder eine player-/botid. Also sowohl z.b /kick Maddin als auch /kick 0 sind möglich.
    [*]Maddin, Hans, Bot1, Bot2, 0, 1


    [*]q
    [*]Bot name/id
    [*]Ein Botname oder eine botid. Also sowohl z.b /kick Beispielbot als auch /kick 0 sind möglich. Hier werden allerdings nur Bots beachtet, keine Spieler!
    [*]Bot1, Bot2, 0, 1


    [*]Q
    [*]Bot name/id (Optional)
    [*]Ein Botname oder eine botid. Also sowohl z.b /kick Beispielbot als auch /kick 0 sind möglich. Hier werden allerdings nur Bots beachtet, keine Spieler!
    [*]Bot1, Bot2, 0, 1


    [*]r
    [*]Player name/id
    [*]Ein Spielername oder eine playerid. Also sowohl z.b /kick Maddin als auch /kick 0 sind möglich. Hier werden allerdings nur Spieler beachtet, keine Bots!
    [*]Maddin, Hans, 0, 1


    [*]R
    [*]Player name/id (Optional)
    [*]Ein Spielername oder eine playerid. Also sowohl z.b /kick Maddin als auch /kick 0 sind möglich. Hier werden allerdings nur Spieler beachtet, keine Bots!
    [*]Maddin, Hans, 0, 1


    [*]{, }
    [*]Quit section
    [*]{ } Wird verwendet wenn in einem parameter zwar bestimmte zeichen vohanden sind, diese aber nicht weiter verarbeitet werden solle.
    [*]{iis[128]}


    [*]P
    [*]Trennzeichen
    [*]Ein angegebenen trennzeichen, an dem sscanf erkennt was die einzelnen werte voneinander trennt. Standartmäßigm ist es das Leerzeichen.
    [*]P<|>iiii Ersetzt ungültige Trennzeichen mit einem "|"


    [*]p
    [*]Trennzeichen
    [*]Ein angegebenen trennzeichen, an dem sscanf erkennt was die einzelnen werte voneinander trennt. Standartmäßigm ist es das Leerzeichen.
    [*]p<|>iiii Ersetzt Trennzeichen mit einem "|"


    [*]Z(string)[länge]
    [*]Ungültiger Optionaler String
    [*]Ein Ungültiger Optionaler String.
    [*]-


    [*]z(string)[länge]
    [*]Verworfener Optionaler String
    [*]Ein Verworfener Optionaler String.
    [*]-


    [*](string)[länge]
    [*]Optionaler String
    [*]Eine zeichenkette (string) mit angegebener länge. Hierbei wird die länge des strings angegeben, an den der wert übergeben werden soll.
    [*]-


    [*]s[länge]
    [*]String
    [*]Eine zeichenkette (string) mit angegebener länge. Hierbei wird die länge des strings angegeben, an den der wert übergeben werden soll.
    [*]-


    [*]A(default)[länge]
    [*]Optionales Array des Angegebenen types
    [*]Ein Optionales Array des Angegebenen types.
    [*]-


    [*]a[länge]
    [*]Array des Angegebenen types
    [*]Ein Array des Angegebenen types.
    [*]-


    [*]e
    [*]Enum
    [*]Ein Parameter, der verwendet werden kann um alle werte die sich zwischen den beiden < > befinden an ein Enum weiter zu geben.
    [*]-


    [*]E(default)
    [*]Enum (Optional)
    [*]Ein Parameter, der verwendet werden kann um alle werte die sich zwischen den beiden < > befinden an ein Enum weiter zu geben.
    [*]-


    [*]'string'
    [*]Suchbegriff
    [*]Ein Begriff nachdem im angegebenen Parameter gesucht werden soll
    [*]-


    [*]%
    [*]Deprecated optional specifier prefix
    [*]Ganz ehrlich, ich habe keine ahnung xD Wenns jemand weiss PN an mich und ich trag es nach.
    [*]-
    [/table]


    • Strings

      • Beschreibung
        Strings werden bei sscanf mit dem parameter 's' bestimmt.


      • Beispiel 1:
        sscanf("hallo 123", "si", str, val);
        ergibt:

        Code
        hallo
        123


        Aber:
        sscanf("hallo du 123", "si", str, val);
        Würde nicht funktionieren, da der zweite parameter ('du') kein integer ist.

      • Beispiel 2:
        sscanf("hallo du", "s", str);
        ergibt:

        Code
        hallo du


        weil nach nach dem 's' parameter nichts mehr kommt
        aber:
        sscanf("hallo du", "s ", str);
        ergibt:

        Code
        hallo


        Aber achtung: Zusätzlich muss die Größe des strings angegeben werden, ansonsten kommt es zu fehler meldungen und es funktioniert nicht.
        Beispiel:
        new
        str[32],
        val;
        sscanf("hallo du 27", "s[32]i", str, val);


    • Arrays

      • Beschreibung:
        Arrays werden bei sscanf mit dem parameter 'a' bestimmt. Zusätzlich wird der/die parameter der/die in dem Array gespeichert wird/werden mit '<' und '>' gekennzeichnet.
      • Beispiel
        new
        arr[5];
        sscanf("1 2 3 4 5", "a<i>[5]", arr);


    • Enums

      • Beschreibung:
        Enums werden bei sscanf mit dem parameter 'e' bestimmt. Wie auch bei einem Array wird hier anfang und ende mit '<' bzw '>' gekennzeichnet. Diese funktion ist z.b zum auslesen von Spielern sehr nützlich.
      • Beispiel 1:
        enum PlayerData
        {
        pIP[16],
        pName[24],
        pPasswort[130],
        pGeld,
        pKills,
        pTode,
        Float: pPositionX,
        Float: pPositionY,
        Float: pPositionZ,
        }
        new SpielerInfo[MAX_PLAYERS][PlayerData];


        sscanf("127.0.0.1 Maddin Passwort 1000 5 7 100.00 200.0 300.0", "e<s[16]s[24]s[130]iiifff>",SpielerInfo[playerid]);
        In diesem falle finden wir als erstes die daten, die nachher im enum gespeichert werden sollen. Das sind IP, Name, Passwort,Geld,Kills,Tode und die Position des Spielers.
        So dann wollen wir das mal ein bisschen zersetzen.
        e<s[16]s[24]s[130]iiifff>
        Das 'e' beschreibt das es sich um ein enum handelt
        das '<' beschreibt, das alles ab jetzt ins enum kommt. Bis es mit '>' wieder geschlossen wird
        Sind die parameter die in das enum sollen. In diesem fall ein string mit der länge von 16, ein string mit der länge von 24, ein string mit der länge von 130, drei integer und drei floats.
        das '>' am ende sagt das das enum ab hier zu ende ist (falls man noch weitere parameter hat die nicht ins enum sollen.


      • Beispiel 2:
        Diesmal lesen wir daten aus einer MySQL Tabelle aus. Ich nehme hier als Beispiel das Enum von gerade.
        enum PlayerData//Das enum
        {
        pIP[16],
        pName[24],
        pPasswort[130],
        pGeld,
        pKills,
        pTode,
        Float: pPositionX,
        Float: pPositionY,
        Float: pPositionZ,
        }
        new SpielerInfo[MAX_PLAYERS][PlayerData];


        //-----Dann bei der funktion die den Account laden soll
        new str[512];
        mysql_query("SELECT * FROM `Accounts` WHERE `Spielername` = 'Maddin'");//Läd alles aus der Zeile des Spielers (in dem fall ich) aus der Tabelle 'Accounts'
        mysql_store_result();
        while(mysql_fetch_row(str))//Übergibt das was vorher aus der Tabelle geladen wurde an einen string.
        {
        sscanf(str, "e<p<|>{i}s[16]s[24]s[130]iiifff>",SpielerInfo[playerid]);//teilt den string in seine bestandteile so wie wir es wollen und gibt es an das enum weiter
        }
        mysql_free_result();
        Erklärung:
        e< - Wie oben beschrieben, sagt sscanf das alles was nun folgt (bis es mit > wieder beendet wird) in ein enum kommt.
        p<|> - Wenn wir eine ganze spalte aus der Tabelle laden, werden die einzelnen felder mit einem '|' getrennt. Also z.b "Name|IP|Kills|Tode" usw. Damit sscanf das weiss geben wir es mit p<|> an.
        {i} - In den meisten Tabellen befindet sich an erstel stelle eine AUTO_INCREMENT ID. Diese wird zwangsläufig mit ausgelesen, da wir ja ALLE auslesen. In unserem enum finden wir dafür aber keinerlei verwendung, deshalb wird durch { und } angegeben, das der erste parameter (in unserem falle 'i', also eine zahl) ignoriert werden soll.
        s[16]s[24]s[130]iiifff - Werde ich nicht nochmal erklären, steht ja oben schon.
        > - gibt an das hier das enum zu ende ist. Bei uns ist zwar dort auch die abfrage zu ende, aber theoretisch könnte ich ja noch ein paar spalten in der tabelle haben die ich dann lieber in z.b PVars speichern möchte.


    • Optionale Parameter

      • Beschreibung:
        Jeder format parameter (das sind alle, ausser '', {} und p) haben optionale parameter.
      • Beispiel 1:
        "()" geben den default wert an, der bestimmt wird wenn nichts angegeben wird.
        Ein kleines Beispiel:
        sscanf("", "I(12)", var);
        Wie wir sehen ist der main string leer (""), aber wir wollen daraus trotzdem einen integer auslesen. Dadurch das wir am ende "(12)" angegeben haben, weiss sscanf das, wenn keine zahl im main string vorhanden ist, es diese mit 12 ersetzen soll.


      • Beispiel 2:
        sscanf("1 2", "A<i>(3)[4]", arr);
        Hier soll sscanf ein Array mit 4 zahlen auslesen. Im string sind aber nur 2 angegeben ("1 2"). Deshalb sagen wir das der default wert 3 ist ( "(3)").
        Ausgegeben wird nun:

        Code
        1, 2, 3, 3


        Warum? Ganz einfach: Wir haben ein Array mit 4 zahlen, aber nur 2 angegeben. Also ersetzt sscanf alle fehlenden mit dem von uns festgelegten default wert, also 3.



    Ich hoffe ich konnte euch damimt wenigstens ein bisschen helfen.
    Bei fragen einfach melden, entweder hier per antwort oder im Dark-Trigardon Forum.
    Fehler bitte auch melden damit ich sie korrigieren kann.
    Bei bedarf wird es noch erweitert.


    Mfg.



    //Edit 1: Fehler ausgebessert. Danke an Dudalus.
    //Edit 2: Funktions Tabelle überarbeitet.
    //Edit 3: Beschreibungen Hinzugefügt.
    //Edit 4: Tabelle gefixxt.
    //Edit 5: Tabelle gefixxt². Danke an SpySpy.

    Also für mich sind DDoS und hacken zwei verschiedene dinge.
    DDoS-Atacken bombadieren deinen server mit anfragen worauf die meisten lahm gelegt werden weil sie mit so viel anfragen nicht klar kommen. Dabei kommt er aber nicht an deine passwörter o.ä. Oder sehe ich das falsch?


    BTW: Hört sich das für mich ziemlich kiddylike an. Und ich denke nicht das er das noch ein paar tage so macht weil WENN er das Botnetz gemietet hat wirds verdammt teuer...
    Also das beste was du machen kannst ist bei deinem betreiber nach den IP's fragen usw und dann halt anzeigen erstatten.

    Was postest du denn da? O.o
    Wofür 2 mal getplayername? Was soll SetPlayerHealth(playerid, 0x7F800000) bewirken O.o und was hat das mit einem Godmode zu tun???


    Ungetestet:
    new GodMode[MAX_PLAYERS];
    COMMAND:godmode(playerid,params[])
    {
    #pragma unused params
    if(GetPVarInt(playerid,"GodMode")==0)
    {
    SendClientMessage(playerid,FARBE_GRÜN,"Godmode [AN]");
    SetPVarInt(playerid,"GodMode",1);
    GodMode[playerid] = SetTimerEx("GodModeDelay",1000,true,"i",playerid);
    }
    else
    {
    SendClientMessage(playerid,FARBE_ROT,"Godmode [AUS]");
    SetPVarInt(playerid,"GodMode",0);
    KillTimer(GodMode[playerid]);
    }
    return 1;
    }
    forward GodModeDelay(playerid);
    public GodModeDelay(playerid)
    {
    SetPlayerHealth(playerid, 100);
    }

    Schönes ding :thumbup:
    kannte ich zwar alles schon, aber ich finds trotzdem gute das du sowas machst, und ist auch leicht verständlich geschrieben. Könntest ja mal wenn du zeit(und lust ^^) hast ein php+mysql tutorial schreiben. Da scheiter ich grad dran xD


    Mfg.