6 mesaje
  • Mesaje: 4
  • Reacții: 1
  • Mesaje utile: 0
  • Status: Metin2Unirea
  • Regat: Shinsoo
  • Contact:

    Medalii

    De curând, am început să lucrez la un server de Metin2 și am setat buffurile permanente să expire în anul 2050, dar din pacate acestea nu funcționau corect. După mai multe încercări, am executat comanda:
    Code:
    SELECT UNIX_TIMESTAMP('2050-01-01');
    și am observat că îmi returna 0. Abia atunci am realizat că există o problemă. Căutând mai multe informații, am descoperit problema anului 2038 pe Wikipedia.


    [C++] Problema Year 2038 si Buffurile Permanente in Metin2 - Mesaj 1 - Imagine 1

    Ce este Year 2038 Problem?
    Problema anului 2038 (Year 2038 Problem) este o limitare a funcției UNIX_TIMESTAMP, care stochează timpul ca un număr întreg pe 4 bytes (32-bit). Deoarece acest timestamp este măsurat în secunde de la 1 ianuarie 1970, valoarea maximă pe care o poate reține un număr întreg semnat pe 4 bytes este 2147483647, care corespunde datei 03:14:08 UTC pe 19 ianuarie 2038.

    După această dată, timestamp-ul va depăși limita maximă și va cauza erori, deoarece va reveni la o valoare negativă, generând un comportament imprevizibil în baze de date și sisteme care se bazează pe această metodă de stocare a timpului.

    Impactul asupra Buffurilor Permanente în Metin2

    În Metin2, diverse buffuri și permisiuni sunt gestionate prin UNIX_TIMESTAMP, chiar dacă coloanele în baza de date sunt deja de tip DATETIME. Funcția UNIX_TIMESTAMP este utilizată pentru a calcula numărul de secunde rămase până la o anumită dată, însă, din cauza limitării la 32 de biți, orice dată mai mare decât 19 ianuarie 2038 va returna 0 sau o valoare incorectă.

    Printre buffurile afectate se numără:
    • UNIX_TIMESTAMP(silver_expire),
    • UNIX_TIMESTAMP(gold_expire),
    • UNIX_TIMESTAMP(safebox_expire),
    • UNIX_TIMESTAMP(autoloot_expire),
    • UNIX_TIMESTAMP(fish_mind_expire),
    • UNIX_TIMESTAMP(marriage_fast_expire),
    • UNIX_TIMESTAMP(money_drop_rate_expire),
    Această problemă poate duce la expirarea imediată a buffurilor sau la erori neașteptate în funcționarea serverului.

    Soluții posibile
    Pentru a evita această problemă, există câteva soluții viabile:
    • Utilizarea unei date care nu depășește limita
    • Schimba funcția UNIX_TIMESTAMP cu TO_SECONDS (nu am testato)

    🔥 Hai pe Discord! - Chat activ și support direct

    Te așteptăm și pe serverul de Discord - aici ne-am strâns toată comunitatea de Metin2 din România.

    Alătură-te acum!
    1300+ de membri activi!
    Robot Discord
    Roboțelu'
    Anunț
  • Mesaje: 78
  • Reacții: 51
  • Mesaje utile: 0
  • Status: Pierd vremea ^.^
  • Regat: Shinsoo
  • Medalii

    Mesaj de DEVE »

    De curând, am început să lucrez la un server de Metin2 și am setat buffurile permanente să expire în anul 2050,


    Care e logica de aici? Ori sunt permanente ori expira, nu faci un buff permanent prin metoda extinderi timpului cu 30 de ani, il faci permanent scotand timpul. Metoda ta de a face bufful permanent e proasta in primul rand. Metinul nu o sa ajunga in 2038 anyway.
  • Mesaje: 4
  • Reacții: 1
  • Mesaje utile: 0
  • Status: Metin2Unirea
  • Regat: Shinsoo
  • Contact:

    Medalii

    DEVE scrie: De curând, am început să lucrez la un server de Metin2 și am setat buffurile permanente să expire în anul 2050,


    Care e logica de aici? Ori sunt permanente ori expira, nu faci un buff permanent prin metoda extinderi timpului cu 30 de ani, il faci permanent scotand timpul. Metoda ta de a face bufful permanent e proasta in primul rand. Metinul nu o sa ajunga in 2038 anyway.
    Când vorbesc despre buffurile permanente, mă refer la acele bonusuri care apar în colțul din stânga sus, precum depozitul cu 3 sloturi, etc. Din câte știu eu, trebuie setată o dată mai mare decât TODAY în tabela account pentru a le activa.

    Dacă ai o altă metodă de implementare, te rog să o împărtășești cu ceilalți, în loc să critici doar metoda mea. :x
    Administrator Administrator
  • Mesaje: 3449
  • Reacții: 48411
  • Mesaje utile: 29
  • Status: Pe aici.. 🤠
  • Server: Saga2 - Soon
  • Regat: Jinno
  • [ID Discord]
  • Contact:
    Avatar utilizator
    Administrator
    Administrator

    Mesaj de [HF]White »

    in 2038 nu o sa mai funcționeze multe chestii.

    trebuie trecut din unix time 32 bit pe 64.

    Sunt multe părți din sursa care depind de unix time 32 bit.. exemplu timpul la costume, mounturi, peturi, etc.

    Pana atunci trebuie un tutorial full de trecere la 64 bits.
    Te asteptam si pe serverul de Discord :p - aici ne-am strans toata comunitatea de Metin2 din Romania.
    Link: https://discord.gg/jWxeDSf7HP

    Suntem peste 1700 membri! - Avem chat activ zilnic, support, cereri, resurse. :D :ymcowboy:




    See full signature
  • Mesaje: 4
  • Reacții: 1
  • Mesaje utile: 0
  • Status: Metin2Unirea
  • Regat: Shinsoo
  • Contact:

    Medalii

    [HF]White scrie: in 2038 nu o sa mai funcționeze multe chestii.

    trebuie trecut din unix time 32 bit pe 64.

    Sunt multe părți din sursa care depind de unix time 32 bit.. exemplu timpul la costume, mounturi, peturi, etc.

    Pana atunci trebuie un tutorial full de trecere la 64 bits.
    Din câte știu, modul cel mai ok de a rezolva această problemă este să folosesc MySQL 8, dar, momentan, nu am vrut să mă complic cu upgrade-ul. Este mult mai simplu așa pentru acum și îmi permite să lucrez mai rapid. :D Dacă însă proiectul se extinde, cu siguranță mă voi uita și la opțiuni mai avansate.
  • Mesaje: 17
  • Reacții: 158
  • Mesaje utile: 0
  • Status: THE WORLD IS YOURS
  • Server: SAPPHIRE
  • Regat: Chunjo
  • [ID Discord]
  • Contact:

    Medalii

    Mesaj de Reizo »

    Cosmin Irimescu scrie:
    DEVE scrie: De curând, am început să lucrez la un server de Metin2 și am setat buffurile permanente să expire în anul 2050,


    Care e logica de aici? Ori sunt permanente ori expira, nu faci un buff permanent prin metoda extinderi timpului cu 30 de ani, il faci permanent scotand timpul. Metoda ta de a face bufful permanent e proasta in primul rand. Metinul nu o sa ajunga in 2038 anyway.
    Când vorbesc despre buffurile permanente, mă refer la acele bonusuri care apar în colțul din stânga sus, precum depozitul cu 3 sloturi, etc. Din câte știu eu, trebuie setată o dată mai mare decât TODAY în tabela account pentru a le activa.

    Dacă ai o altă metodă de implementare, te rog să o împărtășești cu ceilalți, în loc să critici doar metoda mea. :x
    DEVE scrie: 12 Feb 2025, 23:25scotand timpul.
    nuj zic sio
    See full signature

    🔥 Hai pe Discord! - Chat activ și support direct

    Te așteptăm și pe serverul de Discord - aici ne-am strâns toată comunitatea de Metin2 din România.

    Alătură-te acum!
    1300+ de membri activi!
    Robot Discord
    Roboțelu'
    Anunț
    Scrie răspuns

    Creează-ți un cont sau autentifică-te pentru a participa la discuție

    Trebuie să fii membru pentru a răspunde

    Creează-ți un cont

    Membrii pot crea subiecte noi și pot descărca resurse Metin2 Gratuit!


    Te poți înregistra sau conecta rapid utilizând contul tău de Discord, Github sau Google.

    Înregistrare

    Autentifică-te

    Înapoi la “Tech”

    Informații

    Utilizatori ce navighează pe acest forum: Niciun utilizator înregistrat și 2 vizitatori

    Discord ID copiat: