Beiträge von PoTTii

In 10 Minuten startet der nächtliche Backupvorgang! Es kann währenddessen (ca. 10 Minuten) zu Einschränkungen bei der Nutzung des Forums kommen
Weitere Infos findet ihr im Thema Backup des Forums


    Hallo Breadfish!
    Ich zeig euch heute wie ihr ein simples Premiumsystem hinbekommt das mit Sternen arbeitet.


    Fangen wir an. Dieses Tutorial geht davon aus dass ihr ein Login/Register Script hab und einen SpielerLaden/Spielerspeichenr stock! ich arbeite mit DINI Benötigte Includes: DINI, SSCANF, OCMD!


    Fangen wir an!

    Schritt 1: Zuerst müssen wir es hinkriegen dass wir die Premiumsterne in der Spielerdatei speichern können.


    Dafür gehen wir zu unserem SpielerSpeichern (Name kann bei euch anders sein) Stock und tragen dort diesen Satz ein:


    dini_IntSet(Spielerdatei,"Premium",GetPVarInt(playerid,"Premium"));
    Damit bewirken wir dass wenn wir die Funktion SpielerSpeichern(playerid) nutzen seine aktuellen Sterne in die Datei gespeichert werden.


    Bei mir würde dann der komplette Stock so aussehen:
    stock SpielerSpeichern(playerid)
    {
    if(GetPVarInt(playerid,"loggedin")==1)
    {
    new Spielerdatei[64];
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, name, sizeof(name));
    format(Spielerdatei,sizeof(Spielerdatei),"/Accs/%s.txt",name);
    dini_IntSet(Spielerdatei,"Level",GetPlayerScore(playerid));
    dini_IntSet(Spielerdatei,"Geld",GetPlayerMoney(playerid));
    dini_IntSet(Spielerdatei,"Bank",GetPVarInt(playerid,"Bank"));
    dini_IntSet(Spielerdatei,"Adminlevel",GetPVarInt(playerid,"Adminlevel"));
    dini_IntSet(Spielerdatei,"Fraktion",GetPVarInt(playerid,"Fraktion"));
    dini_IntSet(Spielerdatei,"Banned",GetPVarInt(playerid,"Banned"));
    dini_IntSet(Spielerdatei,"Newshacked",0);
    dini_IntSet(Spielerdatei,"Premium",GetPVarInt(playerid,"Premium"));
    }
    return 1;
    }


    Schritt 2: Nun müssen wir im LadeSpieler Stock hinbekommen dass wenn der Spieler den Server betritt seine aktuelle Anzahl an Sternen aus seiner Datei rausgelesen wird.


    Und dafür müssen folgendes im SpielerLaden (Name kann bei euch anders sein) folgendes Eintragen:
    SetPVarInt(playerid,"Premium",dini_Int(Spielerdatei,"Premium"));


    Das bewirkt wie angemerkt dass das System die Anzahl der Sterne des Spielers rausliest und dem Server klarmacht dass das die Anzahl der Sterne ist.


    Bei mir sieht das ganze dann so aus:
    stock LoadAccount(playerid)
    {
    new Spielerdatei[64];
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, name, sizeof(name));
    format(Spielerdatei,sizeof(Spielerdatei),"/Accs/%s.txt",name);
    SetPlayerScore(playerid,dini_Int(Spielerdatei,"Level"));
    GivePlayerMoney(playerid,dini_Int(Spielerdatei,"Geld"));
    SetPVarInt(playerid,"Bank",dini_Int(Spielerdatei,"Bank"));
    SetPVarInt(playerid,"Gebannt",dini_Int(Spielerdatei,"Gebannt"));
    SetPVarInt(playerid,"Adminlevel",dini_Int(Spielerdatei,"Adminlevel"));
    SetPVarInt(playerid,"Fraktion",dini_Int(Spielerdatei,"Fraktion"));
    SetPVarInt(playerid,"Banned",dini_Int(Spielerdatei,"Banned"));
    SetPVarInt(playerid,"loggedin",1);
    SetPVarInt(playerid,"Newshacked",0);
    SetPVarInt(playerid,"Premium",dini_Int(Spielerdatei,"Premium"));
    if(GetPVarInt(playerid,"Banned") == 1)
    {
    SendClientMessage(playerid,rot,"Du bist auf diesem Server gebannt!");
    Kick(playerid);
    }
    return 1;
    }


    Schritt 3: Einen Befehl womit Admins Spielern Premiumpunkte geben können


    Die Funktion ist bei mir so aufgebaut: /aprempoints [Spieler] [Anzahl der Sterne] [Grund]


    Damit wir das hinbekommen müsst ihr schon sscanf und ocmd includet haben!


    Und der Befehl an sich geht nun wie folgt, achtet auf die Kommentare (//) für Erklärungen!


    ocmd:aprempoints(playerid,params[])
    {
    if(!IstSpielerEinAdmin(playerid,5))return SendClientMessage(playerid,rot,"Du bist kein Admin!"); // Ist der Spieler ein Admin mit Rang 5? Wenn nein Stoppt der Befehl. Ansonsten geht er weiter. IstSpielerEinAdmin müsst ihr ersetzen
    new pID,PT,string[128],string2[256],reason; // Wir erstellen alle benötigten Strings
    if(sscanf(params,"uds", pID, PT, reason))return SendClientMessage(playerid, orange, "Benutzung: /aprempoints [SPIELER] [Anzahl von Punkten] [Grund]"); // wir geben dem Befehl bedeutung, wurden nicht alle paramenter eingetragen stoppt das script
    SetPVarInt(pID, "Premium", GetPVarInt(pID, "Premium") +PT); // Wir geben pID (Dem Spieler) die Premiumpunkte die wir im Befehl eingetragen habn
    format(string, sizeof(string), "Du hast %s %i Premium Punkte gegeben!", Spielername(pID), PT); // Wir formatieren die Nachricht, dabei wird dann %s durch den Namen und %i durch die Anzahl an punkten ersetzt die wir ihm gaben
    SendClientMessage(playerid, grün, string); // wir senden die nachricht
    format(string2, sizeof(string2), "Du hast von einem Admin %i Premium Punkte bekommen. Grund: %s", PT, reason); // wir formatieren die nachricht in der wir dem spieler sagen dass er sterne bekommen hat und den grund dafür
    SendClientMessage(pID, grün, string2); /7wir senden die nachricht
    return 1;
    }



    Nun können wir dem Spieler Punkte geben, bzw abziehen. Doch wie kann er diese benutzen?


    Schritt 4: Das Premium Shop System


    Wir basteln nun das Shop System in dem sich die Spieler Sachen für ihre Sterne kaufen können.
    Das geht wie folgt (Beachtet die kommentare):



    Zuerst machen wir den Befehl /shop [Nummer des Artikels den man kaufen will]
    die sscanf Parameter hab ich bereits erklärt daher folgt also keine Erklärung


    new sID;
    if(sscanf(params,"d",sID)) //wenn man nur /shop (ohne zahl) eingibt
    {
    new string[128];
    format(string, sizeof(string), "Du besitzt derzeit %i Premium Sterne!", GetPVarInt(playerid, "Premium")); //wir zeigen dem Spieler seine sterne an
    SendClientMessage(playerid,grau,"---------[Premium Shop]---------");
    SendClientMessage(playerid,grau,"Benutzung: /shop [Zahl]");
    SendClientMessage(playerid,grau,string);
    SendClientMessage(playerid,grau,"1 = 5000$ bekommen (3 Sterne)");// wir zeigen dem Spieler was er kaufen kann
    SendClientMessage(playerid,grau,"2 = 20000$ bekommen (10 Sterne)");// wir zeigen dem Spieler was er kaufen kann
    SendClientMessage(playerid,grau,"3 = 100000$ bekommen (40 Sterne)");// wir zeigen dem Spieler was er kaufen kann
    SendClientMessage(playerid,grau,"4 = AK-47 mit 100 Schuss bekommen (5 Sterne)");// wir zeigen dem Spieler was er kaufen kann
    SendClientMessage(playerid,grau,"5 = Volles Leben bekommen (1 Stern)");// wir zeigen dem Spieler was er kaufen kann
    SendClientMessage(playerid,grau,"---------[Premium Ende]---------");
    return 1;
    }


    So nun möchten wir ja dass der Spieler das erhält was wir oben gezeigt haben (Geld, Waffe, Leben...) wenn er /shop [Zahl] macht.
    Das geht so, ich zeig euch zuerst das erste. Bei /shop 1 soll der Spieler ja 5000$ bekommen wenn er mindestens 3 Sterne hat.


    Und das geht so (wir haben dafür sID definiert, es muss direkt unter den oberen Code kommen:
    else if(sID == 1) //wenn man nicht nur /shop eingegeben hat sondern /shop 1
    {
    if(GetPVarInt(playerid, "Premium") < 3)return SendClientMessage(playerid,rot, "Nicht genügend Premium Sterne vorhanden! (Benötigt: 3)"); //hat der Spieler mindestens 3 Sterne? Wenn nicht erscheint die Nachricht und der Befehl stoppt
    SetPVarInt(playerid, "Premium", GetPVarInt(playerid, "Premium") -3); // hatte er mindestens 3 werden ihm diese nun abgezogen
    GivePlayerMoney(playerid, 5000); // wir geben dem Spieler seine 5000$
    SendClientMessage(playerid, grün, "Du hast 3 deiner Premium Sterne gegen 5000$ in Bar getauscht!"); // wir senden ihm noch eine Nachricht.
    }


    Es folgt Befehl zwei bei dem wir ihm nun nicht 5000$ sondern 20000$ geben, das kostet aber auch 10 anstatt 3 Sternen!
    Der Befehl wieder direkt unter die letzte geschweifte Klammer:


    else if(sID == 2) //hat der Spieler /shop 2 eingetippt?
    {
    if(GetPVarInt(playerid, "Premium") < 10)return SendClientMessage(playerid,rot, "Nicht genügend Premium Sterne vorhanden! (Benötigt: 10)"); // hat der spieler mindestens 10 sterne? wenn nein stoppt der befehl
    SetPVarInt(playerid, "Premium", GetPVarInt(playerid, "Premium") -10); /7 hatte der spieler midnestens 10 sterne ziehen wir ihm diese nun ab
    GivePlayerMoney(playerid, 20000); // wir geben ihm seine 20000%
    SendClientMessage(playerid, grün, "Du hast 10 deiner Premium Sterne gegen 20000$ in Bar getauscht!"); //wir senden ihm die nachricht
    }


    Und imemr so weiter. Ich zeige euch nun den ganzen /shop Befehl, beachtet wenn ihr etwas neues in den Shop einfügen wollt sollte ihr zuerst dem Spieler das bei (if(sscanf... anzeigen mit einer Nachricht wie oben bereits getan.
    Anschliessend schreiben wir unten:


    if(sID == 6) //wenn der spieler /shop 6 getippt hat
    {




    }


    und da kommt nun das rein was in allen bereits enthalten ist, ich erklär es euch genauer anhand Erklärungen, steht zb ER1 da schaut darunter was es bedeutet
    if(GetPVarInt(playerid, "Premium") < ER1)return SendClientMessage(playerid,rot, "Nicht genügend Premium Sterne vorhanden! (Benötigt: ER2)");


    ER1: Die Anzahl an Sternen die er mindestens benötigt
    ER2: Müsst ihr nicht aber so sagt ihr dem Spieler wieviel er benötigt.


    SetPVarInt(playerid, "Premium", GetPVarInt(playerid, "Premium") ER1);


    ER1: Wir ziehen dem Spieler die Anzahl ab die er braucht, ersetzt dafür ER1 mit "- Anzahl" dabei ist das Minus ganz wichtig sonst gebt ihr ihm Sterne anstatt sie ihm abzuziehen!


    Nun das was passiert zb ihr geht ihm einen Skin mit SetPlayerSkin und sendet ihm eine Nachricht.



    Und nun wie versprochen der ganze /shop Befehl wie er derzeit bei mir ist.


    ocmd:shop(playerid,params[])
    {
    new sID;
    if(sscanf(params,"d",sID))
    {
    new string[128];
    format(string, sizeof(string), "Du besitzt derzeit %i Premium Sterne!", GetPVarInt(playerid, "Premium"));
    SendClientMessage(playerid,grau,"---------[Premium Shop]---------");
    SendClientMessage(playerid,grau,"Benutzung: /shop [Zahl]");
    SendClientMessage(playerid,grau,string);
    SendClientMessage(playerid,grau,"1 = 5000$ bekommen (3 Sterne)");
    SendClientMessage(playerid,grau,"2 = 20000$ bekommen (10 Sterne)");
    SendClientMessage(playerid,grau,"3 = 100000$ bekommen (40 Sterne)");
    SendClientMessage(playerid,grau,"4 = AK-47 mit 100 Schuss bekommen (5 Sterne)");
    SendClientMessage(playerid,grau,"5 = Volles Leben bekommen (1 Stern)");
    SendClientMessage(playerid,grau,"---------[Premium Ende]---------");
    return 1;
    }


    else if(sID == 1)
    {
    if(GetPVarInt(playerid, "Premium") < 3)return SendClientMessage(playerid,rot, "Nicht genügend Premium Sterne vorhanden! (Benötigt: 3)");
    SetPVarInt(playerid, "Premium", GetPVarInt(playerid, "Premium") -3);
    GivePlayerMoney(playerid, 5000);
    SendClientMessage(playerid, grün, "Du hast 3 deiner Premium Sterne gegen 5000$ in Bar getauscht!");
    }

    else if(sID == 2)
    {
    if(GetPVarInt(playerid, "Premium") < 10)return SendClientMessage(playerid,rot, "Nicht genügend Premium Sterne vorhanden! (Benötigt: 10)");
    SetPVarInt(playerid, "Premium", GetPVarInt(playerid, "Premium") -10);
    GivePlayerMoney(playerid, 20000);
    SendClientMessage(playerid, grün, "Du hast 10 deiner Premium Sterne gegen 20000$ in Bar getauscht!");
    }

    else if(sID == 3)
    {
    if(GetPVarInt(playerid, "Premium") < 40)return SendClientMessage(playerid,rot, "Nicht genügend Premium Sterne vorhanden! (Benötigt: 40)");
    SetPVarInt(playerid, "Premium", GetPVarInt(playerid, "Premium") -40);
    GivePlayerMoney(playerid, 100000);
    SendClientMessage(playerid, grün, "Du hast 40 deiner Premium Sterne gegen 100000$ in Bar getauscht!");
    }

    else if(sID == 4)
    {
    if(GetPVarInt(playerid, "Premium") < 5)return SendClientMessage(playerid,rot, "Nicht genügend Premium Sterne vorhanden! (Benötigt: 5)");
    SetPVarInt(playerid, "Premium", GetPVarInt(playerid, "Premium") -5);
    GivePlayerWeapon(playerid, akid, 100);
    SendClientMessage(playerid, grün, "Du hast 5 deiner Premium Sterne gegen eine AK-47 mit 100 Schuss getauscht!");
    }

    else if(sID == 5)
    {
    if(GetPVarInt(playerid, "Premium") < 1)return SendClientMessage(playerid,rot, "Nicht genügend Premium Sterne vorhanden! (Benötigt: 1)");
    SetPVarInt(playerid, "Premium", GetPVarInt(playerid, "Premium") -1);
    SetPlayerHealth(playerid, 100);
    SendClientMessage(playerid, grün, "Du hast 1 deiner Premium Sterne gegen Volle HP getauscht!");
    }
    return 1;
    }




    Anmerkung: ich werde die Befhle nciht umschreiben, dh ich lasse sie in OCMD, einfach weil ich damit am besten klarkomme
    So ich hoffe euch hat das kleine Tutorial gefallen und falls ja hinterlasst doch einen netten Kommentar ;)
    Solltet ihr Fragen haben fragt ruhig ich versuche alles zu beantworten.


    Ich entschuldige mich falls stellenweise Tippfehler sind ;)



    MfG
    PoTTii


    PS: Ich plane mehrere Tutorial zu releasen, falls ihr ein bestimmtes Thema wollt sendet mir doch eine PM!


    Dieses Tutorial darf nichtohne meine Erlaubnis, verbreitet, kopiert, oder abgeändert werden. Wollt ihr es in einem anderen Forum zeigen, oder auf eurer Homepage, so tut dies bitte mit dem Link zu diesem Thread!

    Hey Leute, ich release hier mal das was ich bisher in meinem Script geschafft habe ;)


    Steht zur freien Verwendung :)


    Es hat ca 1,3k Zeilen und ist noch lang nicht fertig.




    Es enthält:

    • O Chat
    • F Chat
    • Login Register System
    • Stats
    • /veh
    • Adminsystem
    • Fraktionssystem
    • Premiumsystem
    • /pay
    • /getgun deagle und m4 für Polizei und Army
    • /setmoney für admins
    • Alle 10 Minuten werbung
    • /getfaggio am SF Bahnhof
    • Spawn am SF Bahnhof
    • /arepair
    • Man kann in Lv eine Satelitenschüssel stören um sich als News Reporter auszugeben
    • /l für news
    • Prison mit gemapptem Prison auf dem Mount Chilliad
    • /asetfrak


    Und vieles Mehr!
    Es basiert auf DINI


    Download(PWN): http://www.megaupload.com/?d=5KX31YKQ
    Download (Mit Plugins, Includes usw...): http://www.megaupload.com/?d=3W4LGKWN
    Pastebin: http://pastebin.com/MVPz65vM


    GANZ WICHTIG!: Ihr müsst im Ordner Scriptfiles den Ordner "Accs" anlegen damits richtig funktioniert.


    Es werden zwar von mir Updates vorgenommen aber nicht hochgeladen.


    MfG
    PoTTii



    Überliest du mich absichtlich?

    ocmd:makeleader(playerid,params[])
    {
    if(!isPlayerAnAdmin(playerid,3))return SendClientMessage(playerid,ROT,"Rang zu Niedrig.");
    new pID,fID,string[128];
    if(sscanf(params,"ui",pID,fID))return SendClientMessage(playerid,BLAU,"/makeleader [playerid] [fraktionsid]");
    SetPVarInt(pID,"Fraktion",fID);
    format(string, sizeof(string), "Du hast %s in die Fraktion mit der ID %i eingeladen!", pID, fID);
    SendClientMessage(playerid,BLAU,string);
    return 1;
    }



    So und dann schau was bei %s steht wenn du den Command machst ;) Vlt hast du ja nen ID Bug



    Der einzige Fisch hier bist du. Es macht überhaupt keinen Unterschied ausser dass Unnötig Variablen generiert werden wenn der Spieler kein Admin ist.



    Versuchs mal so:


    [pwn]
    ocmd:gt(playerid,params[])
    {

    if(!IsPlayerAnAdmin(playerid,4)) return SendClientMessage(playerid,ROT,"Du bist kein Admin.");
    new string[128],reason;
    if(sscanf(params,"s",reason)) return SendClientMessage(playerid,ROT,"Nutze /gt [TEXT]");
    format(string,sizeof(string),"%s",reason);
    GameTextForAll(string,5000,6);
    return 1;
    }
    [/pwn]

    Mein Gott Ketchup hats gepostet!



    ocmd:gt(playerid,params[])
    {
    if(!IsPlayerAnAdmin(playerid,4)) return SendClientMessage(playerid,ROT,"Du bist kein Admin.");
    new string[128],text[128];
    if(sscanf(params,"s",text)) return SendClientMessage(playerid,ROT,"Nutze /gt [TEXT]");
    format(string,sizeof(string),"%s",text);
    GameTextForAll(string,5000,6);
    return 1;
    }

    Übrigends kcikt der dann aber nur ids ;) Dh du kannst nicht


    /kick Eliot GRUND
    machen sondern
    /kick [ID] GRUND



    Versuch nochmal d mit s zu ersetzen (nie probiert) vlt geht dann wieder beides, falls nicht wieder d und nur ids eingeben können :)

    Hehe danke PoTTii,


    klappt mit d, aber warum nicht mit u? Klappte zuvor auch.


    MfG EN



    Keine Ahnung der ID Bug tritt bei mir immer auf wenn ich mein Script aufn Root pack. Auf meinem PC funzt alles mit U aufm Server nicht ;)