Offline skidanje sati

Započeo Robijas, Novembar 22, 2023, 16:54:54 POSLE PODNE

prethodna tema - sledeća tema

0 članova i 3 gostiju pregledaju ovu temu.

Pitanje/savjet: Kako da napravim da se vipu skidaju sati kada je on offline
Opširnije: Znam da malo ispadam glup, ali nema veze, nisam baš radio ništa u vezi offline stvari tako da mi treba pomoć. Trenutno imam kod u skripti koji skida svaki sat točno u, na primjer, 13:00h, 14:00h. Igraću VIP sate za 1h, ali problem je što kada igrač ode offline, tada mu se ne skidaju sati i doslovno može imati VIP-a 2 mjeseca, bez obzira što ga je kupio na 24 sata. Sada mi treba kod koji će napraviti da se igraču skidaju sati čak i kada je offline, a ne samo kada je online. Ako može neko da pomogne bio bih jako zahvalan.
Dodatno:
Ovu funkciju pokrećem svaki točan sat, i tako skida vipsate igracima koji su online
Kod:
stock ProvjeraZaVipa(playerid)
{
   if(PlayerInfo[playerid][pVip] > 0)
   {
      PlayerInfo[playerid][pVipSati]--;
      if (PlayerInfo[playerid][pVipSati] <= 0)
      {
         PlayerInfo[playerid][pVip] = 0;
         PlayerInfo[playerid][pVipSati] = 0;
         BojaIgraca(playerid);
         new string[156];
         SCM(playerid, -1, ""CRVENA"[VIP]: "BIJELA"Upravo vam je istekao VIP");
         AdminPoruka(-1, string);
      }
   }
}

Ja bi za takve stvari odradio ovako nesto..

[pawn]
CMD:vipcic(playerid, params[])
{
    if(vreme < 1 || vreme > 14) return SendClientMessage(playerid, -1,"Broj dana ne moze biti manji od 1 i veci od 14");
    getdate(godina, mesec, dan);
    if(dan+vreme >= 30)
    {
        PlayerInfo[id][pVipIma] = 1; PlayerInfo[id][pVipDani] = (dan+vreme)-30; PlayerInfo[id][pVipMesec] = mesec+1; PlayerInfo[id][pVipGodina] = godina;
    }
    if(dan+vreme < 30)
    {
        PlayerInfo[id][pVipIma] = 1; PlayerInfo[id][pVipDani] = (dan+vreme); PlayerInfo[id][pVipMesec] = mesec; PlayerInfo[id][pVipGodina] = godina;
    }
    return 1;
}
i kod on playerlogin

new godina, mesec, dan;
    getdate(godina, mesec, dan;
    if(PlayerInfo[playerid][pVipIma] == 1)
    {
        if(PlayerInfo[playerid][pVipMesec] == mesec)
        {
            if(PlayerInfo[playerid][pVipDani] <= dan)
            {
                SCM(playerid, -1 ,"Vas Vip je istekao");
                PlayerInfo[playerid][pVipDani] = 0; PlayerInfo[playerid][pVipMesec] = 0; PlayerInfo[playerid][pVipGodina] = 0; PlayerInfo[playerid][pVipIma] = 0;
            }
        }
        else if(PlayerInfo[playerid][pVipMesec] < mesec)
        {
            SCM(playerid, -1 ,"Vas Vip je isteka");
            PlayerInfo[playerid][pVipDani] = 0; PlayerInfo[playerid][pVipMesec] = 0; PlayerInfo[playerid][pVipGodina] = 0; PlayerInfo[playerid][pVipIma] = 0;
        }
        return 1;
    }
[/pawn]


Citat: Robijas poslato Novembar 22, 2023, 16:54:54 POSLE PODNE
Pitanje/savjet: Kako da napravim da se vipu skidaju sati kada je on offline
Opširnije: Znam da malo ispadam glup, ali nema veze, nisam baš radio ništa u vezi offline stvari tako da mi treba pomoć. Trenutno imam kod u skripti koji skida svaki sat točno u, na primjer, 13:00h, 14:00h. Igraću VIP sate za 1h, ali problem je što kada igrač ode offline, tada mu se ne skidaju sati i doslovno može imati VIP-a 2 mjeseca, bez obzira što ga je kupio na 24 sata. Sada mi treba kod koji će napraviti da se igraču skidaju sati čak i kada je offline, a ne samo kada je online. Ako može neko da pomogne bio bih jako zahvalan.
Dodatno:
Ovu funkciju pokrećem svaki točan sat, i tako skida vipsate igracima koji su online
Kod:
stock ProvjeraZaVipa(playerid)
{
   if(PlayerInfo[playerid][pVip] > 0)
   {
      PlayerInfo[playerid][pVipSati]--;
      if (PlayerInfo[playerid][pVipSati] <= 0)
      {
         PlayerInfo[playerid][pVip] = 0;
         PlayerInfo[playerid][pVipSati] = 0;
         BojaIgraca(playerid);
         new string[156];
         SCM(playerid, -1, ""CRVENA"[VIP]: "BIJELA"Upravo vam je istekao VIP");
         AdminPoruka(-1, string);
      }
   }
}
Samo stavis timer igracu. i onda kada se igrac loginuje uradis proveru da li je timer istekao i tjt.

Citat: Wizzard1 poslato Novembar 22, 2023, 20:59:47 POSLE PODNE
Samo stavis timer igracu. i onda kada se igrac loginuje uradis proveru da li je timer istekao i tjt.
?HAHHAHAHAHAHHAHAHA

Citat: Wizzard1 poslato Novembar 22, 2023, 20:59:47 POSLE PODNE
Samo stavis timer igracu. i onda kada se igrac loginuje uradis proveru da li je timer istekao i tjt.
Sreca pa tvoj odgovor ima veze sa mozgom...

Meni radi,to sto vi nerazumete nije moj problem. Ja sam mu rekao kako da napravi da necu mozda sve da mu postavim citavu cmd?

https://sampwiki.blast.hk/wiki/Function:gettime
Ne cuvas broj sati vec vrijeme kada vip istice, sto znaci kad nekome postavis vipa na gettime mu dodas broj sati/dana koliko vip traje.
Kad se igrac uloguje, ili kako vec provjeravas, provjeri razliku vremena, i ako je trenutno vrijeme vece od vremena isteka skines mu vipa.

Citat: Robijas poslato Novembar 22, 2023, 16:54:54 POSLE PODNE
Pitanje/savjet: Kako da napravim da se vipu skidaju sati kada je on offline
Opširnije: Znam da malo ispadam glup, ali nema veze, nisam baš radio ništa u vezi offline stvari tako da mi treba pomoć. Trenutno imam kod u skripti koji skida svaki sat točno u, na primjer, 13:00h, 14:00h. Igraću VIP sate za 1h, ali problem je što kada igrač ode offline, tada mu se ne skidaju sati i doslovno može imati VIP-a 2 mjeseca, bez obzira što ga je kupio na 24 sata. Sada mi treba kod koji će napraviti da se igraču skidaju sati čak i kada je offline, a ne samo kada je online. Ako može neko da pomogne bio bih jako zahvalan.
Dodatno:
Ovu funkciju pokrećem svaki točan sat, i tako skida vipsate igracima koji su online
Kod:
stock ProveraZaVipa(playerid)
{
   if(PlayerInfo[playerid][pVip] > 0)
   {
      PlayerInfo[playerid][pVipSati]--;
      if (PlayerInfo[playerid][pVipSati] <= 0)
      {
         PlayerInfo[playerid][pVip] = 0;
         PlayerInfo[playerid][pVipSati] = 0;
         BojaIgraca(playerid);
         new string[156];
         SCM(playerid, -1, ""CRVENA"[VIP]: "BIJELA"Upravo vam je istekao VIP");
         AdminPoruka(-1, string);
      }
   }
}



Nije glupo  postaviti takvo pitanje, svaki pocetnik  se suočava s izazovima, a učenje novih stvari je ključno. Kako bi rešio svoj problem s oduzimanjem VIP sati i kada je igrač offline, trebaće ti neki mehanizam za praćenje vremena između svakog pokretanja tvog koda. Jedan od načina da to postigneš je korišćenje timestampova (vremenskih oznaka).

Evo kako to možeš implementirati:

1. **Prilikom postavljanja VIP-a:**
   - Kada igrač kupi VIP, zabeleži trenutno vreme (timestamp) i sačuvaj ga u podatkovnu strukturu igrača.

2. **Prilikom svake provere VIP vremena (u tvom trenutnom kodu):**
   - Proveri koliko je vremena prošlo od trenutnog timestampa do sada.
   - Ako je prošlo dovoljno vremena, oduzmi sate. Ako ne, ostavi sate nepromenjenima.

3. **Prilikom prijave igrača:**
   - Ako igrač nije online, prilikom prijave izračunaj koliko mu je VIP vremena isteklo od zadnjeg puta kada je bio online. Oduzmi to od ukupnog broja VIP sati.

Primer implementacije u tvom kodu:

[pawn]```pawn
stock ProveraZaVipa(playerid)
{
   if(PlayerInfo[playerid][pVip] > 0)
   {
      // Dobavi trenutni timestamp
      new trenutnoVreme = gettime();

      // Izračunaj proteklo vreme od zadnjeg puta
      new protekloVreme = trenutnoVreme - PlayerInfo[playerid][pPoslednjiLogin];

      // Oduzmi proteklo vreme od VIP sati
      PlayerInfo[playerid][pVipSati] -= protekloVreme;

      // Ažuriraj poslednji login timestamp
      PlayerInfo[playerid][pPoslednjiLogin] = trenutnoVreme;

      if (PlayerInfo[playerid][pVipSati] <= 0)
      {
         PlayerInfo[playerid][pVip] = 0;
         PlayerInfo[playerid][pVipSati] = 0;
         BojaIgraca(playerid);
         new string[156];
         SCM(playerid, -1, ""CRVENA"[VIP]: "BELA"Upravo vam je istekao VIP");
         AdminPoruka(-1, string);
      }
   }
}
```[[/pawn]

Ovaj primer pretpostavlja da imaš pVipSati, pPoslednjiLogin i možda neke druge promenljive u svojoj podatkovnoj strukturi za praćenje VIP informacija. Takođe, funkcija gettime() vraća trenutno vreme u sekundama, pa možeš koristiti tu razliku u vremenu za praćenje proteklog vremena. Ovo će omogućiti da se VIP sati oduzimaju i kada je igrač offline.
Poslednja Izmena: Novembar 23, 2023, 13:45:40 POSLE PODNE od Fake_Yoker
Yoker

SAMP 2006-2022


Citat: njoBe_ poslato Februar 10, 2023, 23:11:11 POSLE PODNE
koga boli k za tdove.. pokazi nesto sto server posjeduje od sistema ili generalno funkcionalnost njegovu. ocekujemo update.. gl

TIMESTAMP UN

1 minuta (60 sekundi) je 60 * 1 = 60
2 minute (120 sekundi) su 60 * 2 = 120

1 sat (60 minuta) je 60 * 60 = 3600
2 sata (120 minuta) su 60 * 120 = 7200

1 dan (24 sata) je 60 * 60 * 24 = 86400
2 dana (48 sati) su 60 * 60 * 48 = 172800

1 tjedan (7 dana) je 60 * 60 * 24 * 7 = 604800
2 tjedna (14 dana) su 60 * 60 * 24 * 14 = 1209600

1 mjesec (30 dana) je 60 * 60 * 24 * 30 = 2592000
2 mjeseca (60 dana) su 60 * 60 * 24 * 60 = 5184000

1 godina (365 dana) je 60 * 60 * 24 * 365 = 31536000
2 godine (730 dana) su 60 * 60 * 24 * 730 = 63072000
Upwork Skills
Back-end:
• PHP Frameworks (Laravel, Symfony,Codeigniter)
• Python/Django
• Node.js

Front-end:
• HTML
• CSS pre-processing (SASS, LESS)
• Javascript (JQuery, Ajax, Vue, Angular, React, etc.)
• Bootstrap

CMS
• Wordpress (Woocommerce)
• Shopify, Magento

Citat: sexeniiosi poslato Novembar 23, 2023, 20:34:56 POSLE PODNE
TIMESTAMP UN

1 minuta (60 sekundi) je 60 * 1 = 60
2 minute (120 sekundi) su 60 * 2 = 120

1 sat (60 minuta) je 60 * 60 = 3600
2 sata (120 minuta) su 60 * 120 = 7200

1 dan (24 sata) je 60 * 60 * 24 = 86400
2 dana (48 sati) su 60 * 60 * 48 = 172800

1 tjedan (7 dana) je 60 * 60 * 24 * 7 = 604800
2 tjedna (14 dana) su 60 * 60 * 24 * 14 = 1209600

1 mjesec (30 dana) je 60 * 60 * 24 * 30 = 2592000
2 mjeseca (60 dana) su 60 * 60 * 24 * 60 = 5184000

1 godina (365 dana) je 60 * 60 * 24 * 365 = 31536000
2 godine (730 dana) su 60 * 60 * 24 * 730 = 63072000
Hmmm dade mi ideju da produzim temp ban sa max 3 meseca na 10 godina.

Kad setas vip-a
[pawn]PlayerInfo[target][pVipTime] = gettime()+ 60*60*24*31; // Setamo VIP-a na 31 dan od sada[/pawn]

Kad se konektuje igra proveravamo

[pawn]if(gettime()-PlayerInfo[playerid][pVipTime] < 1){
// Znaci da je istokao suspendujemo
}
else {
     SendClientMessahe(playerid, -1, "[VIP] : Vas VIP nije istekao");
}[/pawn]