SA-MP Forums

Go Back   SA-MP Forums > Non-English > Languages > Română/Romanian

Reply
 
Thread Tools Display Modes
Old 28/03/2011, 11:12 AM   #1
cristi_bubu
Big Clucker
 
Join Date: Apr 2010
Posts: 102
Reputation: -1
Default Ore,minute,secunde

Salut am un mod de DM si doresc sa pun la /stats sa arate cate ore,minute si secunde a jucat sau macar orele , am incercat cu ptime dar am diferit stats cu GetPlayer.... am mai vazut asa pe mai multe servere !
__________________
cristi_bubu is offline   Reply With Quote
Old 28/03/2011, 11:25 AM   #2
antonio112
High-roller
 
antonio112's Avatar
 
Join Date: Aug 2009
Location: Romania
Posts: 1,011
Reputation: 86
Default Re: Ore,minute,secunde

Hm, singura solutie la care ma pot gandi acum, este urmatoarea:

Faci in felul urmator:
pawn Code:
new OreOn[MAX_PLAYERS];
new SecundeOn[MAX_PLAYERS];

pawn Code:
public public OnPlayerConnect(playerid)
{
        SetTimerEx("OreOn", (1000 * 60) * 60, true, "i", playerid);
        SetTimerEx("SecundeOn", 1000, true, "i", playerid);
    return 1;
}

pawn Code:
forward OreOn(playerid);
public OreOn(playerid)
{
       OreOn[playerid] +=;
}
 
forward SecundeOn(playerid);
public SecundeOn(playerid)
{
      SecundeOn[playerid] +=;
}

Eh, ma rog ... nu stiu daca e perfect 100% dar ar trebui sa mearga. Cu salvatul, va trebui sa te descurci tu.
__________________
antonio112 is offline   Reply With Quote
Old 28/03/2011, 02:56 PM   #3
cristi_bubu
Big Clucker
 
Join Date: Apr 2010
Posts: 102
Reputation: -1
Default Re: Ore,minute,secunde

Nu merge
__________________
cristi_bubu is offline   Reply With Quote
Old 28/03/2011, 04:11 PM   #4
[NoV]LaZ
High-roller
 
Join Date: May 2008
Posts: 1,464
Reputation: 85
Default Re: Ore,minute,secunde

Pune "++" in loc de "+=".
[NoV]LaZ is offline   Reply With Quote
Old 28/03/2011, 04:12 PM   #5
xxmitsu
Gangsta
 
Join Date: Feb 2009
Posts: 629
Reputation: 35
Default Re: Ore,minute,secunde

Nu e nevoie sa folosesti decat o unitate de timp atata vreme cat poti gasi o formula de-a deduce celalalte in functie de ea.

Nu trebuie sa fie 'rocket scientist' sa-ti dai seama ca folosind secundele, poti afla minutele impartind la 60 sau orele impartind la 3600. Sau, pt a nu te confrunta cu asa cifre mari, mai bine folosesti minute si de acolo deduci orele prin inmultire si respectiv secundele prin impartire.


De asemenea: nu recomand folosirea a cate un timer pentru fiecare jucator conectat.

mai fine folosesti un singur timer, global, care sa ruleze in permanenta la intervale de 1 minut (foare convenabil si dpdv al resurselor si dpdv al faptului ca noi avem nevoie de minutele petrecute pe server), si care sa incrementeze o variabila.

Situatia gandita de mine ar arata astfel:
Code:
ongamemodeinit
{
.......
settimer(functie,60000) -- la 60 secunde.

}


undeva in gm...

public functie();
forward functie()
{
   for(new i; i< MAX_PLAYERS; i++)
   {
     if(gPlayerLoggedin[i]) TimpPetrecut[i]++;
   }
   return 1;
}
Astfel, se verifica daca jucatorul este logat: gplayerlogged.. si se incrementeaza la fiecare minut variabila unde stocam nr de minute petrecute.

PS: sectiunea prezentata mai sus e mai mult un 'pseudocod' am insirat-o doar pentru a intelege la ce ma refer. Nu incerca sa dai copy + paste si sa te intrebi de ce nu functioneaza.
__________________
aka xanto - Retired - Former eGaming.ro technical staff.
xxmitsu is offline   Reply With Quote
Old 28/03/2011, 04:36 PM   #6
Zh3r0
Godfather
 
Join Date: Mar 2008
Posts: 5,591
Reputation: 381
Default Re: Ore,minute,secunde

Quote:
Originally Posted by antonio112 View Post
Hm, singura solutie la care ma pot gandi acum, este urmatoarea:

Faci in felul urmator:
pawn Code:
new OreOn[MAX_PLAYERS];
new SecundeOn[MAX_PLAYERS];

pawn Code:
public public OnPlayerConnect(playerid)
{
        SetTimerEx("OreOn", (1000 * 60) * 60, true, "i", playerid);
        SetTimerEx("SecundeOn", 1000, true, "i", playerid);
    return 1;
}

pawn Code:
forward OreOn(playerid);
public OreOn(playerid)
{
       OreOn[playerid] +=;
}
 
forward SecundeOn(playerid);
public SecundeOn(playerid)
{
      SecundeOn[playerid] +=;
}

Eh, ma rog ... nu stiu daca e perfect 100% dar ar trebui sa mearga. Cu salvatul, va trebui sa te descurci tu.
Sti ca codul tau nare sens? Secundele pot trece de 60 ...iar ora se updateaza abea peste o ora, deci ala daca iese din ora-n ora, nu face nimica!
__________________
Zh3r0 is offline   Reply With Quote
Old 28/03/2011, 05:09 PM   #7
antonio112
High-roller
 
antonio112's Avatar
 
Join Date: Aug 2009
Location: Romania
Posts: 1,011
Reputation: 86
Default Re: Ore,minute,secunde

Cum sa n`aiba sens Zh3r0? Ideea e sa stea on o ora intreaga ... nu ca intra in ultimele 3 minute si i se adauga o ora in plus... :P N`am mai stat sa fac si calcule, ca daca secundele sunt mai mult de 60, sa se updateze o alta variabila (minute) ... si tot asa ... am dat doar un scurt exemplu, de acolo poate el dezvolta daca`l intereseaza.

ps: Eh oricum, am incercat. Fa cum a zis xxmitsu, e mai bine cu doar un timer pentru toti playerii.

Ca sa nu apara astfel de probleme, cum a mentionat Zh3r0, mai bine faci update la minute ... astfel, daca player`ul sta on 59 de minute, raman salvat 59 de minute ... daca e in ore, nu ti se pune ora respectiva, trebuie sa ai minim 60 de minute on
__________________
antonio112 is offline   Reply With Quote
Old 28/03/2011, 05:47 PM   #8
Zh3r0
Godfather
 
Join Date: Mar 2008
Posts: 5,591
Reputation: 381
Default Re: Ore,minute,secunde

Cea mai buna metoda este asta! Calculeaza la perfectie!

pawn Code:
//Sus de tot in script. Dar inainte de #include <a_samp>
enum P_ENUM_DATA
{
   Hours,
   Minutes,
   Seconds,
   ConnTime,
   TotalTime
};
zpData[ MAX_PLAYERS ][ P_ENUM_DATA ];

//Pune asta in interioru acestui callback.
public OnPlayerConnect( playerid )
{
     //Cu asta luam timpul total. Mai tarziu il divizam in Ore Minute si Secunde!
     zpData[ playerid ][ ConnTime]   = gettime( );
     return 1;
}

//Asta pune-l in josul scriptului, gamemodului.
//Cu ajutorul acestei functii calculezi secundele, minutele si orele
//petrecute pe server, defapt tot ce face e sa divida, imparta,
//inmulteasca variabila zpData[ playerid ][ ConnTime]
TotalGameTime(playerid, &h=0, &m=0, &s=0)
{
    zpData[ playerid ][ TotalTime ] = ( (gettime() - zpData[ playerid ][ ConnTime ]) + (zpData[ playerid ][ Hours ]*60*60) + (zpData[ playerid ][ Minutes ]*60) + (zpData[ playerid ][ Seconds ]) );

    h = floatround(zpData[ playerid ][ TotalTime ] / 3600, floatround_floor);
    m = floatround(zpData[ playerid ][ TotalTime ] / 60,   floatround_floor) % 60;
    s = floatround(zpData[ playerid ][ TotalTime ] % 60,   floatround_floor);

    return zpData[ playerid ][ TotalTime ];
}


//Folosire:
//Aceasta este o comanda care se pune sub public OnPlayerCommandText
if ( !strcmp( cmdtext, "/stats" ) )
{
      //Cream variabile in care stocamecundele minutele si orele.
     new H, M, S;
     
     //Cu aceasta functie si algorithm gasim secundele minutele si orele si le stocam in H M S
     TotalGameTime( playerid, H, M, S );

     //Cream un string pe care-l formatam sa arate datele.
     new Str[ 256 ];

     //Formatam stringul cu datele H M S.
     format( Str, 256, "Ai stat pe server %d ore %d minute si %d secunde!", H, M, S );
     
     //Trimitem mesajul formatat jucatorului
     SendClientMessage( playerid, 0xFF00FFFF, Str );

     //Comanda a fost procesata, returnam 1.
     return 1;
}


/*Ca sa salvezi faci la fel cum am facut la /stats
doar ca vei folosi systemul tau de scriere/citire de fisiere.*/
__________________
Zh3r0 is offline   Reply With Quote
Old 28/03/2011, 05:54 PM   #9
xxmitsu
Gangsta
 
Join Date: Feb 2009
Posts: 629
Reputation: 35
Default Re: Ore,minute,secunde

Cod preluat din LAdmin. Parerea mea ca nu-i cea mai buna solutie atata vreme cat o singura variabila unde sa stochezi timpul petrecut este suficienta.
__________________
aka xanto - Retired - Former eGaming.ro technical staff.
xxmitsu is offline   Reply With Quote
Old 29/03/2011, 05:25 AM   #10
cristi_bubu
Big Clucker
 
Join Date: Apr 2010
Posts: 102
Reputation: -1
Default Re: Ore,minute,secunde

Quote:
Originally Posted by Zh3r0 View Post
Cea mai buna metoda este asta! Calculeaza la perfectie!

pawn Code:
//Sus de tot in script. Dar inainte de #include <a_samp>
enum P_ENUM_DATA
{
   Hours,
   Minutes,
   Seconds,
   ConnTime,
   TotalTime
};
zpData[ MAX_PLAYERS ][ P_ENUM_DATA ];

//Pune asta in interioru acestui callback.
public OnPlayerConnect( playerid )
{
     //Cu asta luam timpul total. Mai tarziu il divizam in Ore Minute si Secunde!
     zpData[ playerid ][ ConnTime]   = gettime( );
     return 1;
}

//Asta pune-l in josul scriptului, gamemodului.
//Cu ajutorul acestei functii calculezi secundele, minutele si orele
//petrecute pe server, defapt tot ce face e sa divida, imparta,
//inmulteasca variabila zpData[ playerid ][ ConnTime]
TotalGameTime(playerid, &h=0, &m=0, &s=0)
{
    zpData[ playerid ][ TotalTime ] = ( (gettime() - zpData[ playerid ][ ConnTime ]) + (zpData[ playerid ][ Hours ]*60*60) + (zpData[ playerid ][ Minutes ]*60) + (zpData[ playerid ][ Seconds ]) );

    h = floatround(zpData[ playerid ][ TotalTime ] / 3600, floatround_floor);
    m = floatround(zpData[ playerid ][ TotalTime ] / 60,   floatround_floor) % 60;
    s = floatround(zpData[ playerid ][ TotalTime ] % 60,   floatround_floor);

    return zpData[ playerid ][ TotalTime ];
}


//Folosire:
//Aceasta este o comanda care se pune sub public OnPlayerCommandText
if ( !strcmp( cmdtext, "/stats" ) )
{
      //Cream variabile in care stocamecundele minutele si orele.
     new H, M, S;
     
     //Cu aceasta functie si algorithm gasim secundele minutele si orele si le stocam in H M S
     TotalGameTime( playerid, H, M, S );

     //Cream un string pe care-l formatam sa arate datele.
     new Str[ 256 ];

     //Formatam stringul cu datele H M S.
     format( Str, 256, "Ai stat pe server %d ore %d minute si %d secunde!", H, M, S );
     
     //Trimitem mesajul formatat jucatorului
     SendClientMessage( playerid, 0xFF00FFFF, Str );

     //Comanda a fost procesata, returnam 1.
     return 1;
}


/*Ca sa salvezi faci la fel cum am facut la /stats
doar ca vei folosi systemul tau de scriere/citire de fisiere.*/
Imi da 5 erori spune ca zpada nu se defineste restu merge ok si /stats nu am probleme doar astea cu zpada !

Quote:
error 010: invalid function or declaration
error 017: undefined symbol "zpData"
warning 215: expression has no effect
error 001: expected token: ";", but found "]"
error 029: invalid expression, assumed zero
fatal error 107: too many error messages on one line
Poftiti si o poza ! http://oi56.tinypic.com/o7kgh2.jpg
__________________
cristi_bubu is offline   Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
5 points per minute Jack_Rocker Help Archive 6 20/01/2011 07:54 PM
Do you got a minute? Facepunch Help Archive 5 06/01/2011 07:18 PM
Score Goes Up By Minute Ownzer Help Archive 13 12/07/2009 05:18 AM
[HELP] How much milliseconds is a minute? joeri55 Help Archive 1 03/06/2009 11:48 PM


All times are GMT. The time now is 02:24 AM.


Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.