Balkan SA:MP

PAWN skriptanje, gamemodovi, filterskripte, include fajlovi, mape, pluginovi => Razgovor u vezi PAWN - skriptanja => Temu započeo: Robijas poslato Novembar 22, 2023, 16:54:54 POSLE PODNE

Naslov: Offline skidanje sati
Poruka od: 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);
      }
   }
}
Naslov: Odg: Offline skidanje sati
Poruka od: Goku ^ poslato Novembar 22, 2023, 17:40:32 POSLE PODNE
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]

Naslov: Odg: Offline skidanje sati
Poruka od: Wizzard1 poslato Novembar 22, 2023, 20:59:47 POSLE PODNE
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.
Naslov: Odg: Offline skidanje sati
Poruka od: michaelstar poslato Novembar 23, 2023, 08:57:00 PRE PODNE
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
Naslov: Odg: Offline skidanje sati
Poruka od: ʟᴀᴋᴇʀɪɴɢ poslato Novembar 23, 2023, 13:19:20 POSLE PODNE
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...
Naslov: Odg: Offline skidanje sati
Poruka od: Wizzard1 poslato Novembar 23, 2023, 13:32:21 POSLE PODNE
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?
Naslov: Odg: Offline skidanje sati
Poruka od: CADILAB poslato Novembar 23, 2023, 13:43:38 POSLE PODNE
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.
Naslov: Odg: Offline skidanje sati
Poruka od: Fake_Yoker poslato Novembar 23, 2023, 13:43:51 POSLE PODNE
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.
Naslov: Odg: Offline skidanje sati
Poruka od: №Grella 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
Naslov: Odg: Offline skidanje sati
Poruka od: Goku ^ poslato Novembar 23, 2023, 22:54:33 POSLE PODNE
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.
Naslov: Odg: Offline skidanje sati
Poruka od: Fergosonn poslato Novembar 25, 2023, 12:56:42 POSLE PODNE
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]