7 mesaje
  • Mesaje: 25
  • Reacții: 9
  • Mesaje utile: 1
  • Regat: Jinno
  • Medalii

    *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."

    🔥 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ț
    Robot Robot
  • Mesaje: 122
  • Reacții: 0
  • Mesaje utile: 0
  • Status: Sunt doar un Bot :)
  • Regat: Shinsoo
  • Contact:

    Medalii

    Avatar utilizator
    Robot
    Robot

    Mesaj de Uriel »

    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
  • Mesaje: 27
  • Reacții: 67
  • Mesaje utile: 0
  • Status: Pierd vremea ^.^
  • Regat: Jinno
  • [ID Discord]
  • Contact:

    Medalii

    Mesaj de GRINCH »

    sursa game cauta si compara linile
    Administrator Administrator
  • Mesaje: 3449
  • Reacții: 48410
  • Mesaje utile: 29
  • Status: Pe aici.. 🤠
  • Server: Saga2 - Soon
  • Regat: Jinno
  • [ID Discord]
  • Contact:
    Avatar utilizator
    Administrator
    Administrator

    Mesaj de [HF]White »

    Ia un alt serverfiles care are acest sistem, si compari functiile din exchange.cpp ce tin de Woni.
    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: 25
  • Reacții: 9
  • Mesaje utile: 1
  • Regat: Jinno
  • Medalii

    Mesaj de br34k3r »

    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.";
  • Mesaje: 95
  • Reacții: 292
  • Mesaje utile: 0
  • Status: Incerc sa fac si eu un server!
  • Server: Ro/Eu TigerGhost
  • Regat: Jinno
  • [ID Discord]
  • Contact:

    Medalii

    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
  • Mesaje: 25
  • Reacții: 21
  • Mesaje utile: 5
  • Status: Pierd vremea ^.^
  • Regat: Jinno
  • Medalii

    Mesaj de Dintisor »

    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 !!

    🔥 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ț
    Închis

    Înapoi la “Arhivă probleme”

    Informații

    Utilizatori ce navighează pe acest forum: Niciun utilizator înregistrat și 1 vizitator

    Discord ID copiat: