Jump to content
  • 0

Cum Creez Teritorii


Guest Underflash

Question

2 answers to this question

Recommended Posts

Guest
This topic is now closed to further replies.
  • Similar Content

    • By WiDuAlK
      Salut SA-MP.RO, am venit cu un alt tutorial, posibil sa fie ultimul de acest tip/gen. Acest tutorial l-am scris acum foarte mult timp, dar pentru ca am vazut ca tutorialele mele sunt copiate fara a fii macar gandite sau intelese, nu l-am mai postat. Pentru acest fapt cred cred ca e ultimul tutorial legat de construirea unui GM. Deci sa incepem.
      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.
      Ne vom folosi de ACEST TUTORIAL
      Am sa definesc pentru ambele metode o variabila care o vom folosi.
      Mergem la enumul pInfo si punem:

       
      enum pInfo { // variabilele voastre pPayday };
      Apoi mergem la callback-ul OnLogin si punem la verificarea "if(rows)":
      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.
      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:
      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 face-ti in felul urmator:



      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.

       
      new pLogin[MAX_PLAYERS]; // aceasta variabila i se poate atribui tuturor playerilor de pe server Mergem la OnPlayerConnect si punem:

       
      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:

       
      enum pInfo { // variabilele voastre pPayday, pTimePayday };
      Mergem la callback-ul OnLogin si adaugam:
      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.
      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:

       
      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:
      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.



      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:
      format(string, sizeof(string), "Mai ai %d minute pana la urmatorul payday.", P_Data[playerid][pTimePayday] / 60); 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 3100 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.
       
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. For more details you can also review our Terms of Use and Privacy Policy.