Avatar utilizator
br34k3r
Membru Avansat
Membru Avansat
  • Mesaje: 67
    Membru din: 20 Ian 2025, 11:17
  • Reacții: 70
  • Mesaje utile: 4
  • Regat: Jinno
  • Medalii

    Avatar utilizator
    br34k3r
    Membru Avansat
    Membru Avansat
    *Problemă/Întrebare:

    *Resursă folosită (sistem/funcție/modificare): Serverfiles Martysama 5.8 p23

    *Syserr:
    Code:
    SYSERR: Sep 16 20:05:05 :: locale_find: LOCALE_ERROR: "You can't trade because the other character exceeds 999 won.";
    SYSERR: Sep 16 20:05:05 :: Exchange: [OVERFLOW_CHEQUE] CHEQUE_ADD (0) id 5 name Test 


    *Fișier(e) cu problema (link pastebin / code):

    *Poze / Video:


    Salutare tuturor!
    Problema apare in fereastra de trade, dupa ce adaugi won valoarea poate fi modificata tragand yang din inventar, iar daca valoarea de yang este mai mare de 999 primesc:
    You can't trade because the other character exceeds 999 won."
    Avatar utilizator
    Uriel
    Robot
    Robot
  • Mesaje: 237
    Membru din: 17 Mai 2025, 15:58
  • Reacții: 0
  • Mesaje utile: 3
  • Status: Sunt doar un Bot :)
  • Regat: Shinsoo
  • Medalii

    Avatar utilizator
    Uriel
    Robot
    Robot

    Mesaj

    Salut, br34k3r!

    Îți recomand câteva link-uri utile care te pot ajuta să rezolvi problema mai rapid:

    - Alte probleme rezolvate
    - Fixuri Metin2
    - Tutoriale
    - Cum resetez parola MySQL
    - Compilare sursă Metin2
    - Lista FreeBSD pentru compilare


    Și dacă vrei ajutor direct, te așteptăm pe serverul nostru de Discord — chat activ, suport live și o comunitate faină gata să te ajute! Pentru a intra pe serverul de Discord: Click aici
    Notă: Acesta este un răspuns generat de AI și poate conține erori. Vă rugăm să-l tratați ca atare.

    Link-uri utile:

    - Alte probleme rezolvate
    - Fixuri Metin2
    - Tutoriale
    - Cum resetez parola MySQL
    - Compilare sursă Metin2
    - Lista FreeBSD pentru compilare


    Și dacă vrei ajutor direct, te așteptăm pe serverul nostru de Discord — chat activ, suport live și o comunitate gata să te ajute! Click aici
    See full signature
    Avatar utilizator
    GRINCH
    Membru Avansat
    Membru Avansat
  • Mesaje: 55
    Membru din: 28 Dec 2024, 10:14
  • Reacții: 284
  • Mesaje utile: 0
  • Status: Pierd vremea ^.^
  • Regat: Jinno
  • [ID Discord]
  • Medalii

    Avatar utilizator
    GRINCH
    Membru Avansat
    Membru Avansat

    Mesaj

    sursa game cauta si compara linile
    Avatar utilizator
    SCOOB
    Administrator
    Administrator
  • Mesaje: 4918
    Membru din: 07 Aug 2024, 18:53
  • Reacții: 122284
  • Mesaje utile: 47
  • Status: Pe aici.. 🤠
    Server: Saga2 - Soon
  • Regat: Jinno
  • [ID Discord]
  • Avatar utilizator
    SCOOB
    Administrator
    Administrator

    Mesaj

    Ia un alt serverfiles care are acest sistem, si compari functiile din exchange.cpp ce tin de Woni.
    Comunitatea Metin2 Romania este si pe Discord! :ymcowboy:

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

    ► discord.gg/jWxeDSf7HP ◄





    See full signature
    Avatar utilizator
    br34k3r
    Membru Avansat
    Membru Avansat
  • Mesaje: 67
    Membru din: 20 Ian 2025, 11:17
  • Reacții: 70
  • Mesaje utile: 4
  • Regat: Jinno
  • Medalii

    Avatar utilizator
    br34k3r
    Membru Avansat
    Membru Avansat

    Mesaj

    Nu există o metoda de a bloca chestia cu trasul de yang din inventar?

    Edit: am reusit sa elimin partea prin care Won-ul creste in functie de yang.
    Probleme ramase:
    Daca won este 0 in fereastra de trade si pui o valoare de yang egala sau mai mica cu won-ul detinut, se actualizeaza ambele valori(doar daca won nu a primit o valoare inca).
    Daca valoarea de yang este mai mare decat won-ul detinut se actualizeaza doar yangul.
    Daca yangul are o valoare mai mare de 999, se primeste warning:"You can't trade because the other character exceeds 999 won.";
    Avatar utilizator
    salexandru9982
    Contributor
    Contributor
  • Mesaje: 226
    Membru din: 26 Noi 2024, 08:43
  • Reacții: 1467
  • Mesaje utile: 1
  • Status: Uite si eu pe aici!
  • Regat: Jinno
  • [ID Discord]
  • Medalii

    Avatar utilizator
    salexandru9982
    Contributor
    Contributor

    Mesaj

    ai putea scoate drop ala de yang din inventar se poate face si cateva bug-uri de dublicare cu el eu l-am eliminat
    See full signature
    Avatar utilizator
    Dintisor
    Membru Avansat
    Membru Avansat
  • Mesaje: 59
    Membru din: 21 Dec 2024, 10:42
  • Reacții: 69
  • Mesaje utile: 7
  • Status: Pierd vremea ^.^
  • Regat: Jinno
  • Medalii

    Avatar utilizator
    Dintisor
    Membru Avansat
    Membru Avansat

    Mesaj

    De ce se întâmplă asta?

    În exchange.cpp (sau un fișier echivalent, depinde de surse), există o verificare:

    if (GetCheque() > 999)
    {
    ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You can't trade because the other character exceeds 999 won."));
    return false;
    }


    → asta limitează la 999 won maxim în trade.

    Când faci drag yang în trade, funcția CHEQUE_ADD sau conversia yang→won actualizează suma și verifică din nou acel prag.


    Soluții posibile

    🔹 1. Creșterea limitei

    Dacă vrei doar să permiți mai mult:

    Caută în surse exchange.cpp / char.cpp linia cu > 999 și modifică:

    if (GetCheque() > 9999) // sau ce limită dorești


    → recompilează game.

    🔹 2. Eliminarea limitării

    Dacă nu vrei nicio limită, comentează condiția:

    // if (GetCheque() > 999)
    // {
    // ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You can't trade because the other character exceeds 999 won."));
    // return false;
    // }

    🔹 3. Soluție mai „safe”

    Dacă păstrezi o limită foarte mare (ex. 1.000.000 won), eviți overflow la tipul de date int/long long.

    Verifică dacă în surse won-ul e ținut ca DWORD sau long long. Dacă e doar int, prea mult poate cauza overflow → recomand long long.


    Daca vrei să elimini complet limita de 999 won sau doar să o mărești (ex. la 9999 sau mai mult)

    1. Deschide fișierul exchange.cpp din surse (în src/game/).

    Caută funcția care se ocupă cu adăugarea de won în trade. La MartySama apare cam așa:

    bool CExchange::AddItem(TItemPos item_pos, BYTE count)
    {
    ...
    if (item->GetVnum() == ITEM_CHEQUE) // won
    {
    if (GetCheque() > 999)
    {
    m_pOwner->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You can't trade because the other character exceeds 999 won."));
    return false;
    }
    }
    ...
    }


    2. Modifică limita

    Ai două variante:

    🔹 Dacă vrei să mărești limita (ex. 9999 won):
    if (GetCheque() > 9999)
    {
    m_pOwner->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You can't trade because the other character exceeds 9999 won."));
    return false;
    }

    🔹 Dacă vrei să elimini complet limita:
    // if (GetCheque() > 999)
    // {
    // m_pOwner->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You can't trade because the other character exceeds 999 won."));
    // return false;
    // }

    3. Recompilează sursele

    Intră în folderul src/ și rulează:

    gmake clean && gmake -j20


    (sau make simplu, depinde de sistemul tău).

    Copiază noul game în server și repornește.

    4. Verifică tipul de variabilă

    Ca să fii sigur că nu ai probleme de overflow:

    În char.h sau exchange.h, caută unde e declarat won-ul (m_llCheque sau m_iCheque).

    Ideal: să fie long long sau int64_t. Dacă e int, limitează undeva la ~2.1 miliarde won.


    Sper sa te ajute ! Zi faina !!

    Înapoi la “Arhivă probleme”

    Discord ID copiat: