Offline skidanje sati

Započeo Robijas
pre 2 godine
593
pregleda
11
postova
Kikisa
Wheel Man
pre 2 godine
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 > 0)
{
PlayerInfo--;
if (PlayerInfo <= 0)
{
PlayerInfo = 0;
PlayerInfo = 0;
BojaIgraca(playerid);
new string;
SCM(playerid, -1, ""CRVENA": "BIJELA"Upravo vam je istekao VIP");
AdminPoruka(-1, string);
}
}
}
Dime123
Made Man
pre 2 godine
Ja bi za takve stvari odradio ovako nesto..

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 = 1; PlayerInfo = (dan+vreme)-30; PlayerInfo = mesec+1; PlayerInfo = godina;
    }
    if(dan+vreme < 30)
    {
        PlayerInfo = 1; PlayerInfo = (dan+vreme); PlayerInfo = mesec; PlayerInfo = godina;
    }
    return 1;
}
i kod on playerlogin

new godina, mesec, dan;
    getdate(godina, mesec, dan;
    if(PlayerInfo == 1)
    {
        if(PlayerInfo == mesec)
        {
            if(PlayerInfo <= dan)
            {
                SCM(playerid, -1 ,"Vas Vip je istekao");
                PlayerInfo = 0; PlayerInfo = 0; PlayerInfo = 0; PlayerInfo = 0;
            }
        }
        else if(PlayerInfo < mesec)
        {
            SCM(playerid, -1 ,"Vas Vip je isteka");
            PlayerInfo = 0; PlayerInfo = 0; PlayerInfo = 0; PlayerInfo = 0;
        }
        return 1;
    }
Wizzard1
Shot Caller
pre 2 godine
Robijas wrote on November 22, 2023, 3:54 pm:
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 > 0)
{
PlayerInfo--;
if (PlayerInfo <= 0)
{
PlayerInfo = 0;
PlayerInfo = 0;
BojaIgraca(playerid);
new string;
SCM(playerid, -1, ""CRVENA": "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.
michaelstar
Hustler
pre 2 godine
Wizzard1 wrote on November 22, 2023, 7:59 pm:
Samo stavis timer igracu. i onda kada se igrac loginuje uradis proveru da li je timer istekao i tjt.
?HAHHAHAHAHAHHAHAHA
Lakering
Made Man
pre 2 godine
Wizzard1 wrote on November 22, 2023, 7:59 pm:
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...
Wizzard1
Shot Caller
pre 2 godine
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?
cadilab
Administrator
pre 2 godine
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.
Xyza
Enforcer
pre 2 godine
Robijas wrote on November 22, 2023, 3:54 pm:
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 > 0)
{
PlayerInfo--;
if (PlayerInfo <= 0)
{
PlayerInfo = 0;
PlayerInfo = 0;
BojaIgraca(playerid);
new string;
SCM(playerid, -1, ""CRVENA": "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
stock ProveraZaVipa(playerid)
{
  if(PlayerInfo > 0)
  {
      // Dobavi trenutni timestamp
      new trenutnoVreme = gettime();

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

      // Oduzmi proteklo vreme od VIP sati
      PlayerInfo -= protekloVreme;

      // Ažuriraj poslednji login timestamp
      PlayerInfo = trenutnoVreme;

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


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.
Raskiselišelitiseopanci
Enforcer
pre 2 godine
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
Fergosonn
Made Man
pre 2 godine
Kad setas vip-a
PlayerInfo = gettime()+ 60*60*24*31; // Setamo VIP-a na 31 dan od sada


Kad se konektuje igra proveravamo
if(gettime()-PlayerInfo < 1){
// Znaci da je istokao suspendujemo
}
else {
    SendClientMessahe(playerid, -1, " : Vas VIP nije istekao");
}

Morate biti prijavljeni da biste odgovorili na ovu temu.

Prijava