Premium System vervollständigen

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 liebe Community
    ich habe ein Premium System, wobei es 2 Varianten gibt
    1. Die Zeit läuft von der server zeit ab
    2 die Andere ist dass die Online Zeit abgezogen wird


    Jetzt brauche ich folgendes
    -Ein Timer der Jede Sekunde einen Wert X abzieht
    -Speichern in der DB
    -Auslesen aus der DB





    Hier ein Teil meines Scriptes

    Spoiler anzeigen
    ocmd:setpremium(playerid,params[])
    {
    new id, days, std, mins, premlevel, sys, premzeit=0;
    if(!isAdmin(playerid, 8))return 1; //premlevel //"Benutzung: /setpremium [Name / ID] [Premiumlevel] [Tage] [Stunden] [Minuten]"
    if(sscanf(params, "uiiii", id, sys, days, std, mins))return SendClientMessage(playerid, -1, "Benutzung: /setpremium [Name / ID] [0=Onlinezeit | 1=Serverzeit] [Tage] [Stunden] [Minuten]");
    if(sInfo[id][premiumzeit] > gettime())premzeit = sInfo[id][premiumzeit] - gettime();
    if(sInfo[id][premiumSys]==1&&sys!=1)premzeit=sInfo[id][premiumzeit]-gettime();
    else if(sInfo[id][premiumSys]==0&&sys!=0)premzeit=sInfo[id][premiumzeit]+gettime();
    sInfo[id][premiumSys]=sys;
    new premdays = days * 60 * 60 * 24;
    new premstds = std * 60 * 60;
    new premmins = mins * 60;
    new premgestime = premdays+premstds+premmins;
    if(sys==1)
    {
    if(sInfo[id][premiumzeit] > gettime())premgestime+=premzeit;
    premgestime+=gettime();
    new string[128];
    format(string, sizeof(string) ,"Der Admin %s hat deine Premiumzeit auf %i Tage, %i Stunden und %i Minuten gesetzt/erweitert.", getPlayerName(playerid),days, std, mins);
    SendClientMessage(id, -1, string);
    format(string, sizeof(string), "Du hast die Premiumzeit des Spielers %s auf %i Tage. %i Stunden und %i Minuten gesetzt/erweitert.", getPlayerName(id), days, std, mins);
    SendClientMessage(playerid, -1, string);
    }
    else
    {
    if(sInfo[id][premiumzeit] > 0)premgestime+=premzeit;
    new string[128];
    format(string, sizeof(string) ,"Der Admin %s hat deine Premiumzeit auf %i Tage, %i Stunden und %i Minuten gesetzt/erweitert.", getPlayerName(playerid),days, std, mins);
    SendClientMessage(id, -1, string);
    format(string, sizeof(string), "Du hast die Premiumzeit des Spielers %s auf %i Tage. %i Stunden und %i Minuten gesetzt/erweitert.", getPlayerName(id), days, std, mins);
    SendClientMessage(playerid, -1, string);
    }
    sInfo[id][premiumzeit] = premgestime;
    sInfo[id][premiumlevel] = premlevel;
    format(sInfo[id][premiumGivenBy], MAX_PLAYER_NAME, "%s", getPlayerName(playerid));
    sInfo[id][premiumGivenTS] = gettime();
    return 1;
    }



    ich bin auch per SKYPE und TS erreichbar


    Skype: jannis50002


    TS: 94.101.39.18:9988



    Danke

  • Willkommen in der Scripting Base!


    Einen Timer mit einer Sekunde erstellst du so:
    OnGameModeInit:
    SetTimer("SekundenTimer", 1000, true);


    forward SekundenTimer();
    public SekundenTimer()
    {
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i))
    {
    //Hier dann die Spielervariable um eins kleiner machen. z.B.
    //i = playerid
    //Je nach dem was du machen willst.
    sInfo[i][premiumzeit]--;
    }
    }
    return 1;
    }



    Zum Speichern/Laden: Hast du denn schon ein System mit dem du Statistiken lädst und speicherst? Wenn ja, dann füge da einfach einen Premium-Stat hinzu.

  • Dort musst du eine Spalte erstellen, in der du den Wert der Variable speicherst, den du speichern willst.
    Du hast ja sicher schon ein Login und eine Speicher System. Da kannst du dir einen Stat als Beispiel nehmen, zum Beispiel die Kills oder sowas.


    Falls du nicht weiter kommst, kannst du auch mal dein Login und Speicher System posten, dann können wir dir helfen.

  • sorry hab momentan echt den Kopf voll und krieg das net auf die Reihe




    Spoiler anzeigen
    public OnPasswordResponse(playerid)
    {
    new num_fields,num_rows;
    cache_get_data(num_rows,num_fields,dbhandle);
    if(num_rows==1)
    {
    //passwort richtig
    sInfo[playerid][eingeloggt] = 1;
    SendClientMessage(playerid,CLGREEN,"Du hast dich erfolgreich eingeloggt");
    sInfo[playerid][level] = cache_get_field_content_int(0,"level",dbhandle);
    SetPlayerScore(playerid,sInfo[playerid][level]);


    SetPlayerMoney(playerid,cache_get_field_content_int(0,"Money",dbhandle));

    sInfo[playerid][alevel] = cache_get_field_content_int(0,"alevel",dbhandle);
    sInfo[playerid][rang] = cache_get_field_content_int(0,"rang",dbhandle) ;
    sInfo[playerid][fraktion] = cache_get_field_content_int(0,"fraktion",dbhandle) ;
    sInfo[playerid][Payday] = cache_get_field_content_int(0,"Payday",dbhandle);
    sInfo[playerid][PaydayTime] = cache_get_field_content_int(0,"PaydayTime",dbhandle);
    sInfo[playerid][db_id] = cache_get_field_content_int(0,"id",dbhandle);
    sInfo[playerid][spawnchange] = cache_get_field_content_int(0,"spawnchange",dbhandle);
    sInfo[playerid][rollerschein] = cache_get_field_content_int(0,"rollerschein",dbhandle);
    sInfo[playerid][autoschein] = cache_get_field_content_int(0,"autoschein",dbhandle);
    sInfo[playerid][premiumSys] = cache_get_field_content_int(0, "PremSys", dbhandle);
    sInfo[playerid][premiumzeit] = cache_get_field_content_int(0, "premiumzeit", dbhandle);

    //auslesen aus der datenbank
    printf("Es wurden alle Daten geladen");
    loadPlayerCars(playerid);
    TextDrawHideForPlayer(playerid, Textdraw0);
    TextDrawHideForPlayer(playerid, Textdraw1);
    TextDrawHideForPlayer(playerid, Textdraw2);
    TextDrawHideForPlayer(playerid, Textdraw3);
    TextDrawHideForPlayer(playerid, Textdraw3_1);
    TextDrawHideForPlayer(playerid, Textdraw4);
    TextDrawHideForPlayer(playerid, Textdraw5);
    TextDrawHideForPlayer(playerid, Textdraw6);
    TextDrawHideForPlayer(playerid, Textdraw7);
    TextDrawHideForPlayer(playerid, Textdraw8);
    TogglePlayerSpectating(playerid, 0);
    CancelSelectTextDraw(playerid);
    new query[128];
    mysql_escape_string(getPlayerName(playerid), getPlayerName(playerid));
    format(query, sizeof(query), "SELECT * FROM gebannt WHERE Name='%s'", getPlayerName(playerid));
    mysql_function_query(dbhandle, query, true, "BanCheck", "i", playerid);
    SetSpawnInfo(playerid, 0, 0, 861.1640,-1663.8556,13.5469,272.6934,0,0,0,0,0,0);
    SpawnPlayer(playerid);
    }
    else
    {
    //Passwort falsch
    SendClientMessage(playerid,RED,"Das eingegebene Passwort ist falsch!");
    ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"Login","Gib bitte dein Passwort ein","Login","Abbruch");

    Spoiler anzeigen
    }
    return 1;
    }

  • Du speicherst die Premium Zeit doch schon, und lädst sie auch schon, was willst du denn dann speichern?
    sInfo[playerid][premiumzeit] = cache_get_field_content_int(0, "premiumzeit", dbhandle);


    Falls du einen neuen Stat laden willst, musst du es nach dem gleichen Prinzip machen.
    sInfo[playerid][neuerstat] = cache_get_field_content_int(0, "neuerstat", dbhandle);


    Das speichern musst du dann natürlich noch machen. Einfach wie hier, die Werte ändern.

  • momentan, speichern müsste dann das sein:


    Spoiler anzeigen
    savePlayer(playerid)
    {
    if(sInfo[playerid][eingeloggt]==0)return 1;
    //Speichern level,money
    new query[256];
    format(query,sizeof(query),"UPDATE user SET level='%i',Money='%i',alevel='%i',fraktion='%i',rang='%i',spawnchange='%i',Payday='%i',PaydayTime='%i',rollerschein='%i',autoschein='%i',premiumSys='%i' WHERE id='%i'",sInfo[playerid][level],
    GetPlayerMoney(playerid),sInfo[playerid][alevel],sInfo[playerid][fraktion],sInfo[playerid][rang],sInfo[playerid][spawnchange],sInfo[playerid][Payday],sInfo[playerid][PaydayTime],sInfo[playerid][rollerschein],sInfo[playerid][autoschein],sInfo[playerid][premiumSys],sInfo[playerid][db_id]);
    mysql_function_query(dbhandle,query,false,"","");
    printf("savePlayer Wurde aufgerufen");
    printf("Level = %i, Money = %i,alevel = %i, fraktion=%i, ID %i,Payday='%i',PaydayTime='%i' ",sInfo[playerid][level],GetPlayerMoney(playerid),sInfo[playerid][alevel],sInfo[playerid][fraktion],sInfo[playerid][db_id],sInfo[playerid][Payday],sInfo[playerid][PaydayTime]);
    return 1;
    }


    nur ich muss das ja dann noch in der DB eintragen - das krieg ich net auf die Reihe
    Siehe Dateianhang

  • Und du willst jetzt die premiumzeit speichern, korrekt?
    Wenn ja, dann:


    format(query,sizeof(query),"UPDATE user SET level='%i',Money='%i',alevel='%i',fraktion='%i',rang='%i',spawnchange='%i',Payday='%i',PaydayTime='%i',rollerschein='%i',autoschein='%i',premiumSys='%i' WHERE id='%i'",sInfo[playerid][level],
    GetPlayerMoney(playerid),sInfo[playerid][alevel],sInfo[playerid][fraktion],sInfo[playerid][rang],sInfo[playerid][spawnchange],sInfo[playerid][Payday],sInfo[playerid][PaydayTime],sInfo[playerid][rollerschein],sInfo[playerid][autoschein],sInfo[playerid][premiumSys],sInfo[playerid][db_id]);


    zu:
    format(query,sizeof(query),"UPDATE user SET level='%i',Money='%i',alevel='%i',fraktion='%i',rang='%i',spawnchange='%i',Payday='%i',PaydayTime='%i',rollerschein='%i',autoschein='%i',premiumSys='%i',premiumzeit='%i' WHERE id='%i'",sInfo[playerid][level],
    GetPlayerMoney(playerid),sInfo[playerid][alevel],sInfo[playerid][fraktion],sInfo[playerid][rang],sInfo[playerid][spawnchange],sInfo[playerid][Payday],sInfo[playerid][PaydayTime],sInfo[playerid][rollerschein],sInfo[playerid][autoschein],sInfo[playerid][premiumSys],sInfo[playerid][premiumzeit],sInfo[playerid][db_id]);


    Das Laden hast du ja bereits.


    Hast du in deiner Datenbank auch eine Spalte die "premiumzeit" heißt? Wenn nein, dann füge diese Spalte noch in der Struktur deiner Tabelle hinzu.