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."
br34k3r
📢 Resurse Metin2 Premium!
Zeci de resurse Metin2 Premium - exclusive și 100% funcționale începând cu 15.99€!.
Ș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
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.";
Î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;
// }