Skidanje vip sati kada je igrac offlien

Započeo Robijas, Oktobar 30, 2022, 04:21:43 PRE PODNE

prethodna tema - sledeća tema

0 članova i 1 gost pregledaju ovu temu.

Pitanje/savjet: Skidanje vip sati offline
Opširnije: Nisam do sada radio sa time varijablama pa me zanima kako da napravim da se igracu skidaju vip sati kada je on offline, napravio sam da mu skida sate ingame ali mi treba da skida i offline jer ako lik uzme vipa na ono 20 dana moze ga imati doslovno 2 mjeseca
Dodatno: tjt...

Cuvaj kada mu istice, tacan trenutak. Recimo uzeo je sad, na 30 dana. Uzmes trenutno vreme, dodas 30 dana na to, i sacuvas. U ViP proveri gledas da li je trenutno vreme manje nego kad istice i ako omas levele i slicno.

Samo se ne zajebavaj previse sa danima, mesecima i slicno nego koristi timestamp gettime funkcija vraca koliko znam, imas wikini google ako ne znas sta je timestamp

https://github.com/Agneese-Saini/SA-MP/blob/master/pawno/include/timestamp.inc


imas i ovaj include, sa nekim korisnim funkcijama za vrijeme pa pogledaj ako hoces i ako bi ti znacilo

Citat: njoBe_ poslato Oktobar 30, 2022, 14:30:51 POSLE PODNE
https://github.com/Agneese-Saini/SA-MP/blob/master/pawno/include/timestamp.inc


imas i ovaj include, sa nekim korisnim funkcijama za vrijeme pa pogledaj ako hoces i ako bi ti znacilo
Je, kako ti je covek dao, brutalno ce ti pomoci oko prikazivanja vremena i datuma

Ako koristis mysql sistem cuvanja možeš staviti na 1h timer
Proveru za vreme i svakog dana u 00:00 saljes query da skine 1 dan svim userima ciji je value veci od 1, i kada se seta vip stavis dane tipa vip = 30 kao 30 dana, ako ti je potrebna pomoć javi se PP sastavicu ti query

[pawn]if(gettime() - PlayerInfo[playerid][VipVreme] > 1)
{
//Suspendujemo vip-a i napisemo poruku
}
else
{
// koristi timestamp kako bi proverio datum
new d,m,y,h,mi,s;
TimestampToDate(PlayerInfo[playerid][VipVreme],y,m,d,h,mi,s,2,1);
va_SendClientMessage(playerid, NS_YELLOW, "[VIP] {FFFFFF}Vas vip istice '%d/%d/%d'",d,m,y);
}[/pawn]
a kada setamo vip samo ides
[pawn]PlayerInfo[player][VipVreme] = gettime() + ( 60 * 60 *24);[/pawn]
Poslednja Izmena: Oktobar 31, 2022, 23:14:34 POSLE PODNE od Fergosonn

Citat: BTL | jevta poslato Oktobar 31, 2022, 23:02:41 POSLE PODNE
Ako koristis mysql sistem cuvanja možeš staviti na 1h timer
Proveru za vreme i svakog dana u 00:00 saljes query da skine 1 dan svim userima ciji je value veci od 1, i kada se seta vip stavis dane tipa vip = 30 kao 30 dana, ako ti je potrebna pomoć javi se PP sastavicu ti query
Nepotrebno sa tajmerima i cudima ako ima timestamp koji se samo uporedi. Bilo da koristi gettime u samp-u pa to da cuva, ili da koristi timestamp funkcije iz sql tipa NOW(), svejedno, ali je poenta da se proveri uporedjivanjem timestampa tako da ViP moze nekome dati i na 15 minuta da proba i slicno...Ne kazem da tvoj nacin ne bi radio ili da ne valja, ali postoji bolji i nema nikakvih tajmera i cuda, a uvek ces znati tacno u sekundu kolliko je preostalo vremena.

Citat: Deleted User poslato Oktobar 31, 2022, 23:49:42 POSLE PODNE
Nepotrebno sa tajmerima i cudima ako ima timestamp koji se samo uporedi. Bilo da koristi gettime u samp-u pa to da cuva, ili da koristi timestamp funkcije iz sql tipa NOW(), svejedno, ali je poenta da se proveri uporedjivanjem timestampa tako da ViP moze nekome dati i na 15 minuta da proba i slicno...Ne kazem da tvoj nacin ne bi radio ili da ne valja, ali postoji bolji i nema nikakvih tajmera i cuda, a uvek ces znati tacno u sekundu kolliko je preostalo vremena.
Naravno može i timestamp ali meni je ovako nekako prosto i brzo ide bukvalno jedan query (ako je mysql sistem čuvanja) može da reši sve to

Citat: BTL | jevta poslato Novembar 01, 2022, 02:28:08 PRE PODNE
Naravno može i timestamp ali meni je ovako nekako prosto i brzo ide bukvalno jedan query (ako je mysql sistem čuvanja) može da reši sve to

SELECT
  `ViP_Level`,
  TIMESTAMPDIFF(SECOND, NOW(), `ViP_TimeEnd`) AS `TimeLeft`
FROM
  `users`
WHERE
  `UserID` = 1

ViP_TimeEnd bi bio timestamp polje u DB kada ViP istice. TimeLeft je izvedeno (ne postoji u DB) i kaze kolliko je vremena preostalo u sekundama (moze i u minutima, satima, danima, itd...samo se zameni jedna rec).
To je samo kao primer sta mozes u SQL sa timestampovima. Mnogi ih izbegavaju i koriste razne tajmere misleci da ce brze i lakse odraditi nesto, dok sa timestampovima je to jos lakse i nema da pazis na to da li si skinuo nesto nekome ili nisi. Plus jako su korisni za logove i uvek mozes da znas sta je kada uzeto ili je isteklo.

PS: Nisam testirao query, mozda se zavukla greska u sintaksi negde, ali primer je validan 100%.

Citat: Deleted User poslato Novembar 01, 2022, 10:52:42 PRE PODNE

SELECT
  `ViP_Level`,
  TIMESTAMPDIFF(SECOND, NOW(), `ViP_TimeEnd`) AS `TimeLeft`
FROM
  `users`
WHERE
  `UserID` = 1

ViP_TimeEnd bi bio timestamp polje u DB kada ViP istice. TimeLeft je izvedeno (ne postoji u DB) i kaze kolliko je vremena preostalo u sekundama (moze i u minutima, satima, danima, itd...samo se zameni jedna rec).
To je samo kao primer sta mozes u SQL sa timestampovima. Mnogi ih izbegavaju i koriste razne tajmere misleci da ce brze i lakse odraditi nesto, dok sa timestampovima je to jos lakse i nema da pazis na to da li si skinuo nesto nekome ili nisi. Plus jako su korisni za logove i uvek mozes da znas sta je kada uzeto ili je isteklo.

PS: Nisam testirao query, mozda se zavukla greska u sintaksi negde, ali primer je validan 100%.
Da, validan je primer, samo bih ja stavio dane jer je realno lakse i praktičnije