Avatar utilizator
Cosmin Irimescu
Membru Începător
Membru Începător
  • Mesaje: 4
    Membru din: 11 Ian 2025, 22:54
  • Reacții: 1
  • Mesaje utile: 0
  • Status: Metin2Unirea
  • Regat: Shinsoo
  • Medalii

    Avatar utilizator
    Cosmin Irimescu
    Membru Începător
    Membru Începător
    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)
    Avatar utilizator
    DEVE
    Utilizator interzis
    Utilizator interzis
  • Mesaje: 223
    Membru din: 04 Oct 2024, 06:31
  • Reacții: 2392
  • Mesaje utile: 1
  • Status: Pierd vremea ^.^
  • Regat: Shinsoo
  • Avatar utilizator
    DEVE
    Utilizator interzis
    Utilizator interzis

    Mesaj

    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.
    Avatar utilizator
    Cosmin Irimescu
    Membru Începător
    Membru Începător
  • Mesaje: 4
    Membru din: 11 Ian 2025, 22:54
  • Reacții: 1
  • Mesaje utile: 0
  • Status: Metin2Unirea
  • Regat: Shinsoo
  • Medalii

    Avatar utilizator
    Cosmin Irimescu
    Membru Începător
    Membru Începător

    Mesaj

    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
    Avatar utilizator
    SCOOB
    Administrator
    Administrator
  • Mesaje: 4900
    Membru din: 07 Aug 2024, 18:53
  • Reacții: 121739
  • Mesaje utile: 47
  • Status: Pe aici.. 🤠
    Server: Saga2 - Soon
  • Regat: Jinno
  • [ID Discord]
  • Avatar utilizator
    SCOOB
    Administrator
    Administrator

    Mesaj

    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.
    Comunitatea Metin2 Romania este si pe Discord! :ymcowboy:

    2500+ membri • Chat activ zilnic • Support • Cereri & Resurse

    ► discord.gg/jWxeDSf7HP ◄





    See full signature
    Avatar utilizator
    Cosmin Irimescu
    Membru Începător
    Membru Începător
  • Mesaje: 4
    Membru din: 11 Ian 2025, 22:54
  • Reacții: 1
  • Mesaje utile: 0
  • Status: Metin2Unirea
  • Regat: Shinsoo
  • Medalii

    Avatar utilizator
    Cosmin Irimescu
    Membru Începător
    Membru Începător

    Mesaj

    [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.
    Avatar utilizator
    Reizo
    Membru Ucenic
    Membru Ucenic
  • Mesaje: 17
    Membru din: 14 Ian 2025, 16:50
  • Reacții: 234
  • Mesaje utile: 0
  • Status: THE WORLD IS YOURS
    YouTube: reizo.cf
    Server: SAPPHIRE
  • Regat: Chunjo
  • [ID Discord]
  • Medalii

    Avatar utilizator
    Reizo
    Membru Ucenic
    Membru Ucenic

    Mesaj

    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, 21:25scotand timpul.
    nuj zic sio
    See full signature
    Avatar utilizator
    Shalom
    Membru Începător
    Membru Începător
    Mesaje: 2
    Membru din: 02 Iul 2026, 03:59
  • Reacții: 0
  • Mesaje utile: 0
  • Status: Pierd vremea ^.^
  • Regat: Chunjo
  • Medalii

    Avatar utilizator
    Shalom
    Membru Începător
    Membru Începător

    Mesaj

    Metoda ta de a face bufful permanent e proasta in primul rand.
    skysmotor.co.uk comercializează online următoarele produse: Platformă liniară motorizată, Platformă liniară manuală, drivere pentru motoare pas cu pas, cutie de viteze planetară și pot fi achiziționate online, dacă este necesar.
    See full signature
    Avatar utilizator
    Shalom
    Membru Începător
    Membru Începător
    Mesaje: 2
    Membru din: 02 Iul 2026, 03:59
  • Reacții: 0
  • Mesaje utile: 0
  • Status: Pierd vremea ^.^
  • Regat: Chunjo
  • Medalii

    Avatar utilizator
    Shalom
    Membru Începător
    Membru Începător

    Mesaj

    trebuie trecut din unix time 32 bit pe 64.
    skysmotor.co.uk comercializează online următoarele produse: Platformă liniară motorizată, Platformă liniară manuală, drivere pentru motoare pas cu pas, cutie de viteze planetară și pot fi achiziționate online, dacă este necesar.
    See full signature
    Avatar utilizator
    ManiacRobert
    Membru Începător
    Membru Începător
  • Mesaje: 2
    Membru din: 01 Oct 2024, 19:07
  • Reacții: 3
  • Mesaje utile: 0
  • Server: Sinners
  • Regat: Jinno
  • Medalii

    Avatar utilizator
    ManiacRobert
    Membru Începător
    Membru Începător

    Mesaj

    Moare metinu pana atunci

    Înapoi la “Tech”

    Discord ID copiat: