Simples Premiumsystem mit Sternen

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 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!

    Wer ist der Mensch hinter der Uniform? Ist euch das bekannt?
    Es ist der selbe der noch eben in Zivil neben euch stand.
    Warum wird er gehasst und so selten respektiert?
    Warum ist er derjenige der seinen Hals für euch riskiert?
    Trägt der Bulle eine Weste, das hat er früher nie gemacht,
    die Zeiten haben sich geändert und jeder Dienst ist ein Kampf!
    Warum gibt’s das SEK und warum sind sie so brutal?
    Und wieso hat wieder einer mit seinem Leben bezahlt?

  • Vielen Dank :)

    Wer ist der Mensch hinter der Uniform? Ist euch das bekannt?
    Es ist der selbe der noch eben in Zivil neben euch stand.
    Warum wird er gehasst und so selten respektiert?
    Warum ist er derjenige der seinen Hals für euch riskiert?
    Trägt der Bulle eine Weste, das hat er früher nie gemacht,
    die Zeiten haben sich geändert und jeder Dienst ist ein Kampf!
    Warum gibt’s das SEK und warum sind sie so brutal?
    Und wieso hat wieder einer mit seinem Leben bezahlt?

  • Danke ;)

    Wer ist der Mensch hinter der Uniform? Ist euch das bekannt?
    Es ist der selbe der noch eben in Zivil neben euch stand.
    Warum wird er gehasst und so selten respektiert?
    Warum ist er derjenige der seinen Hals für euch riskiert?
    Trägt der Bulle eine Weste, das hat er früher nie gemacht,
    die Zeiten haben sich geändert und jeder Dienst ist ein Kampf!
    Warum gibt’s das SEK und warum sind sie so brutal?
    Und wieso hat wieder einer mit seinem Leben bezahlt?

  • Sehr schönes Tutorial: Meine Bewertung/Beurteilung:


    Ausführlichkeit: 9/10 - Es könnte einen kleinen Schuss genauer beim Tutorial sein
    Übersichtlich: 8/10 - Du hättest mit ein paar Bilder arbeiten sollen
    Ordentlich: 10/10 - Keine Klagen weiter so!


    Finde das Tutorial sehr schön gelungen, schön ordentlich etc... Scripten kannst du auch.


    Weitere Ideen zum weiterscripten:


    Man könnte das so machen, das wenn man Premium ist, das man auch die Sterne über den Kopf hat, damit ein Spieler erkennt welche Premiumstufe der/die Spieler/in hat...


    Im Allgemeinen: Sehr schön! Weiter so kann ich nur sagen!


    Gesamt Beurteilung:
    9/10 - Einfach praktisch für Anfänger


    Mit freundlichen Grüßen,


    DeadSecret :D

  • Danke für die Bewertungen. Zu DeadSecret: Naja ich finde es unnötig, nicht jeder muss sehen wieviele Punkte der andere hat :) Dafür habe ich einen /stats Befehl.



    Aber danke :)

    Wer ist der Mensch hinter der Uniform? Ist euch das bekannt?
    Es ist der selbe der noch eben in Zivil neben euch stand.
    Warum wird er gehasst und so selten respektiert?
    Warum ist er derjenige der seinen Hals für euch riskiert?
    Trägt der Bulle eine Weste, das hat er früher nie gemacht,
    die Zeiten haben sich geändert und jeder Dienst ist ein Kampf!
    Warum gibt’s das SEK und warum sind sie so brutal?
    Und wieso hat wieder einer mit seinem Leben bezahlt?

  • Ist ja jeden seine eigene Entscheidung, wie man dein System weiterscriptet...

  • Ist ja jeden seine eigene Entscheidung, wie man dein System weiterscriptet...



    Stimmt. Falls jemand ernsthaft Interesse daran hätte könnt ich es auch erklären.


    MfG

    Wer ist der Mensch hinter der Uniform? Ist euch das bekannt?
    Es ist der selbe der noch eben in Zivil neben euch stand.
    Warum wird er gehasst und so selten respektiert?
    Warum ist er derjenige der seinen Hals für euch riskiert?
    Trägt der Bulle eine Weste, das hat er früher nie gemacht,
    die Zeiten haben sich geändert und jeder Dienst ist ein Kampf!
    Warum gibt’s das SEK und warum sind sie so brutal?
    Und wieso hat wieder einer mit seinem Leben bezahlt?

  • Mh, wäre ich ein Anfänger könnte ich nichts kappieren, 2/10 Punkten für die Mühe.
    Erklär doch mal wofür jede Klammer und jedes Wort steht.



    Schon mal einen Anfänger gesehen der ein premium Script scripten will aber nicht weiss wie man Sachen includiert, und was Klammern bedeuten?

    Wer ist der Mensch hinter der Uniform? Ist euch das bekannt?
    Es ist der selbe der noch eben in Zivil neben euch stand.
    Warum wird er gehasst und so selten respektiert?
    Warum ist er derjenige der seinen Hals für euch riskiert?
    Trägt der Bulle eine Weste, das hat er früher nie gemacht,
    die Zeiten haben sich geändert und jeder Dienst ist ein Kampf!
    Warum gibt’s das SEK und warum sind sie so brutal?
    Und wieso hat wieder einer mit seinem Leben bezahlt?

  • Danke ;)

    Wer ist der Mensch hinter der Uniform? Ist euch das bekannt?
    Es ist der selbe der noch eben in Zivil neben euch stand.
    Warum wird er gehasst und so selten respektiert?
    Warum ist er derjenige der seinen Hals für euch riskiert?
    Trägt der Bulle eine Weste, das hat er früher nie gemacht,
    die Zeiten haben sich geändert und jeder Dienst ist ein Kampf!
    Warum gibt’s das SEK und warum sind sie so brutal?
    Und wieso hat wieder einer mit seinem Leben bezahlt?

  • Mh, wäre ich ein Anfänger könnte ich nichts kappieren, 2/10 Punkten für die Mühe.
    Erklär doch mal wofür jede Klammer und jedes Wort steht.


    Ich bin deiner meinung.


    Also ich versteh das Tutorials weil ich ja schon relativ ahnung habe.


    Aber es ist leider nicht Anfänger freundlich.


    Man könnte sich die mühe machen sich dran zu setzten...


    4/10 Schön und übersichtlich...



    MFG K44n

    Ich Scripte nicht mehr!
    Signatur zuletzt Aktualiesiert:11.07.2012





    MFG K44n

  • Sieht auf den ersten Blick schön strukturiert aus, jedoch merkt man bei genauerer Betrachtung, dass sehr wenig - und das oft auch falsch - erklärt wird und dir anscheinend auch relativ viel Basiswissen fehlt. Von daher leider nicht empfehlenswert, erst recht nicht für einen Anfänger ;)



    Mir fehlt kein Basiswissen, nach 6 Monaten müsst ich das haben ;)



    Sag mir doch was falsch erklärt ist und wie man es besser erklären könnte? :)

    Wer ist der Mensch hinter der Uniform? Ist euch das bekannt?
    Es ist der selbe der noch eben in Zivil neben euch stand.
    Warum wird er gehasst und so selten respektiert?
    Warum ist er derjenige der seinen Hals für euch riskiert?
    Trägt der Bulle eine Weste, das hat er früher nie gemacht,
    die Zeiten haben sich geändert und jeder Dienst ist ein Kampf!
    Warum gibt’s das SEK und warum sind sie so brutal?
    Und wieso hat wieder einer mit seinem Leben bezahlt?

  • e ka


    Ich weiss dass dun Problem mit mir hast kleiner ;)


    Entweder du postest anständig oder lässt es sein danke.



    Ich werde das tutorial bei gelegenheit editieren und ausführlicher erklären.

    Wer ist der Mensch hinter der Uniform? Ist euch das bekannt?
    Es ist der selbe der noch eben in Zivil neben euch stand.
    Warum wird er gehasst und so selten respektiert?
    Warum ist er derjenige der seinen Hals für euch riskiert?
    Trägt der Bulle eine Weste, das hat er früher nie gemacht,
    die Zeiten haben sich geändert und jeder Dienst ist ein Kampf!
    Warum gibt’s das SEK und warum sind sie so brutal?
    Und wieso hat wieder einer mit seinem Leben bezahlt?