[CAMPANIE STAFF]Cautam moderatori si designeri activi!
Welcome to WTFCS Community Forums!
Servere gaming la super-preturi! [HOSTING SERVICE]
-->






Cum sa creezi un Payday
Author : mihay111, Category : Tutoriale, 0 Replyes, 347 Views
EVALUATE THIS TOPIC
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
1 Guest(s)
Moderator
     
577
POSTS
452
THREADS
190
REPUTATION
Male
Sex

WtfCs Coins: 0.15[w]

Suit Member
09-22-2021, 12:58 PM
#1
Autor: WiDuAIK

Dupa cum zice si titlul "Cum sa faci un PayDay". Payday inseamna plata zilei. Am sa va arat 2 metode de a face payday.
Prima metoda este cea UNIVERSALA. Aceasta metoda se aplica odata pe ora, la o ora fixa de exemplu: 9:00, 10:00, 11:00, 12.00, 13:00, 14:00 etc.
A 2-a metoda este de a face payday INDIVIDUAL. Individual in sensul ca jucatorul trebuie sa joace timp de o ora pe server ca sa primeasca payday. Va putea primi payday in orice minut al zilei. Aceasta depinde cat sta pe server , si cat va juca pe server.


Am sa definesc pentru ambele metode o variabila care o vom folosi.

Mergem la enumul pInfo si punem:



Code:
enum pInfo
{
    // variabilele voastre
    pPayday
};



Apoi mergem la callback-ul OnLogin si punem la verificarea "if(rows)":


Code:
public OnLogin(playerid)// facem publicul
{
    new rows, fields,temporar[200];
    cache_get_data(rows, fields);
    if(rows)
    {
        // extragerile voastre
        P_Data[playerid][pPayday] = cache_get_field_content_int(0, "PayDay");
    }
    ...
}

METODA I(metoda Universala)

Facem un nou callback numit Payday:
Avem nevoie si de include-ul foreach.



Code:
forward Payday();// definim callback-ul
public Payday()// facem public-ul
{
    foreach(Player,i)
    {
        new ore, minute, secunde;// facem variabilele de timp
        gettime(ore, minute, secunde);// definim variabilele de timp, ore, minute si secunde conform ceasului
        if(minute == 0 && secunde == 0)// daca minutele sunt egale cu 0
        {
            P_Data[i][pPayday] += 1;// dam tuturor jucatorilor un + payday
           
            mysql_format(handle, query, sizeof(query), "UPDATE `conturi` SET `PayDay`='%d' WHERE `Nume`='%e'", P_Data[i][pPayday], GetName(i));// facem update tuturor jucatorilor
            mysql_query(handle, query);//trimitem update-ul in baza de date.
        }
    }
    return 1;
}

Acum, mergem la OnGameModeInit si punem un timer pentru a se aplica payday:



Code:
public OnGameModeInit()
{
    SetTimer("Payday", 1000, 1);// se verifica din secunda in secunda daca este timpul de payday sau nu.
    // liniile voastre
    return 1;
}
Explicatie: Conform ceasului, o ora are 60 de minute. al 60-lea minut este 00, adica 12:00- al 60-lea minut. Cand trece 60 de minute, adica este o ora fixa, atunci tuturor playerilor li se atribuie 1+ payday.
Aceasta metoda nu este prea complicata, dar eu nu o folosesc, deoarece un jucator poate intra cu 5 minute inainte de a se da payday si ei vor primi la un + la fel ca jucatori care au jucat o ora intreaga.
Pe partea cealalta, ei pot juca aproape o ora intrega si din cauza unor probleme personale, inchid jocul si pierd payday.

Pentru a crea in baza de date noua variabila faceti in felul urmator:[b]

[Image: olEEIhd.jpg?1]
[/b]


[Image: TYOUC7X.jpg?1]

[Image: OqOtyhT.jpg?1]



Metoda 2(metoda Individuala)
Aceasta metoda este mai recomandata, deoarece ei primesc pe merit un + la payday , nu odata pe ora, si nu vor pierde nimic.
Facem variabila pLogin, pentru a verifica daca este conectat si logat.


Code:
new pLogin[MAX_PLAYERS]; // aceasta variabila i se poate atribui tuturor playerilor de pe server



Mergem la OnPlayerConnect si punem:




Code:
public OnPlayerConnect(playerid)
{
    pLogin[playerid] = 0; // cand se va conecta pLogin va avea valoarea 0
    // liniile voastre
    return 1;
}

Mergem tot la enum-ul pInfo si punem:


Code:
enum pInfo
{
    // variabilele voastre
    pPayday,
    pTimePayday
};

Mergem la callback-ul OnLogin si adaugam:






Code:
public OnLogin(playerid)// facem publicul
{
    new rows, fields,temporar[200];
    cache_get_data(rows, fields);
    if(rows)
    {
        // extragerile voastre
        P_Data[playerid][pPayday] = cache_get_field_content_int(0, "PayDay");
        P_Data[playerid][pTimePayday] = cache_get_field_content_int(0, "TimePayDay");
       
        pLogin[playerid] = 1;// cand se va loga, pLogin va avea valoarea 1
    }
    ...
}


Acum vom face un callback separat in care vom face un algoritm(o operatie matematica) in care vom seta timpul de payday.


Code:
forward PaydayIndividual();
public PaydayIndividual()
{
    new query[80]; // Cream query-ul cu care vom trimite mesajul in baza de date
    foreach(Player, i)
    {
        if(pLogin[i] == 1)
        {
            if(P_Data[i][pTimePayday] > 0)
            {
                P_Data[i][pTimePayday] --;
               
                mysql_format(handle, query, sizeof(query), "UPDATE `conturi` SET `TimePayDay`='%d' WHERE `Nume`='%e'", P_Data[i][pTimePayday], GetName(i));// facem update tuturor jucatorilor
                mysql_query(handle, query);//trimitem update-ul in baza de date.
            }
            if(P_Data[i][pTimePayday] <= 0)
            {
                P_Data[i][pPayday] += 1;
               
                mysql_format(handle, query, sizeof(query), "UPDATE `conturi` SET `PayDay`='%d' WHERE `Nume`='%e'", P_Data[i][pPayday], GetName(i));// facem update tuturor jucatorilor
                mysql_query(handle, query);//trimitem update-ul in baza de date.
               
                P_Data[i][pTimePayday] = 60 * 60;
               
                mysql_format(handle, query, sizeof(query), "UPDATE `conturi` SET `TimePayDay`='%d' WHERE `Nume`='%e'", P_Data[i][pTimePayday], GetName(i));// facem update tuturor jucatorilor
                mysql_query(handle, query);//trimitem update-ul in baza de date.
            }
        }
    }
    return 1;
}

Adaugam un timer la OnGameModeInit pentru a fi activ:



Code:
public OnGameModeInit()
{
    SetTimer("PaydayIndividual", 1000, 1);// se verifica odata pe secunda daca jucatorul a stat pe server o ora.
    // liniile voastre
    return 1;
}

Si ca atunci cand jucatorul se inregistreaza pentru prima data, sa nu primeasca payday adaugam la dialogul de register:


Code:
case DIALOG_REGISTER:
        {
            if(!response)
                    return Kick(playerid);
            if(response)
            {
                if(!strlen(inputtext)
                        return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Parola incorecta!", "Introdu-ti o parola pentru a te inregistra pe server! \n", "Inregistreaza", "Exit");

                GetPlayerIp(playerid, ip, sizeof(ip));
                mysql_format(handle, query, sizeof(query), "INSERT INTO conturi (Nume, Parola, IP) VALUES ('%s', '%e', '%s')", GetName(playerid), inputtext, ip);
                mysql_tquery(handle, query);
               
                P_Data[playerid][pTimePayday] = 60 * 60;
               
                mysql_format(handle, query, sizeof(query), "UPDATE `conturi` SET `TimePayDay`='%d' WHERE `Nume`='%e'", P_Data[playerid][pTimePayday], GetName(playerid));// facem update tuturor jucatorilor
                mysql_query(handle, query);//trimitem update-ul in baza de date.
                // liniile voastre..
               
            }
            return 1;
        }


Iar apoi facem in baza de date tabelele.[b]

[Image: olEEIhd.jpg?1]
[/b]


[Image: wqysyl9.jpg?1]

[Image: GCF1j5i.jpg?1]



ATENTIE: Daca va folositi de metoda universala, nu completati tabel cu TimePayDay.

EXPLICATIE: Atunci cand jucatorul se in registreaza, el primeste 60 * 60 = 3600 secunde = 60 minute.
In timp ce este conectat i se scade secunda cu secunda jucatorului. Cand ajunge la secunda 0, adica cand a stat pe server 60 minute, primeste PayDay.
Daca vreti sa vedeti cate minute mai sunt pana la urmatorul payday faceti un format de genu:




Code:
format(string, sizeof(string), "Mai ai %d minute pana la urmatorul payday.", P_Data[playerid][pTimePayday] / 60);
[b]
Impartim la 60 pentru a ne da un rezultat de 60 de ori mai mic, iar pentru ca avem intenger si nu float ne va da rezultatul rotunjit.
Exemplu, noi mai avem 3
[/b]100 secunde pana la urmatorul payday, impartim 3100 / 60 = 51,66666666(6 in perioada), iar pentru ca avem intenger ne va rezulta: 51, deci 51 minute pana la urmatorul payday.
Mihai nu face flotari, el le cumpara gata facute!
Mihai s-a nascut intr-o cabana construita de el.
Mihai a omorat 50 de teroristi din 2 gloante.Primul a fost de avertizare.
Mihai poate sa isi faca poze cu telefonul fix.
Mihai a raspuns la un apel pierdut.
Singura femeie care si-a permis sa faca glume despre Mihai a fost Elodia, de aia nu mai este.
Cand Mihai iti arata degetul nu o face ca sa te injure... doar iti arata cate secunde mai ai de trait!
You are not allowed to view links. Register or Login to view.


Messages In This Thread
Cum sa creezi un Payday - by mihay111 - 09-22-2021, 12:58 PM

Forum Jump: