LOGO
Username Icons
100$
Username Effects
150$
Username Change
300$
Profile Cover
250$
Userbar Hue
100$
Change Username Color
1000$
Spotify listening status
150$
Arcade access
400$
Reputation power
500$
Warn Remover ( -1 )
5000$
Customize your MyBB profile with our shop’s options! Choose from username changes, colors, and profile covers and more others to enhance your forum identity.
Go to shop
CSGO.WTFCS.COM
Connect
CS.WTFCS.COM
Connect
XMAS.WTFCS.COM
Connect
PB.WTFCS.COM
Connect
DR.WTFCS.COM
Connect
WAR.WTFCS.COM
Connect
WAR1.WTFCS.COM
Connect
www.Game-State.com
SAMP
Connect
www.Game-State.com
MINECRAFT
Connect
Hello There, Guest!
If you encounter issues with quick login, use the link below for direct access.
Open Log In ( Directly page )
×
Register
Show Serverlist
ChatBox
345
Cum sa creezi un Payday
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
#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.
You are not allowed to view links. Register or Login to view. You are not allowed to view links. Register or Login to view. 


Forum Jump:


Users browsing this thread: 1 Guest(s)