I don't recall anything like this, but anyway, here is my point of view.
To send the monetary value to the trade window (because that's the only place it's displayed in the client), simply change it (on the example OTX engine) here:
otxserver/sources/protocolgame.cpp at 536277dd84f89739f3cd30aa1dea4ed9e2a510a1 · mattyx14/otxserver (https://github.com/mattyx14/otxserver/blob/536277dd84f89739f3cd30aa1dea4ed9e2a510a1/sources/protocolgame.cpp#L1984-L1990) to
C++:
uint64_t money = g_game.getMoney(player);
msg->add<uint64_t>(money);
To display a larger value in the client, you should:
The only catch is that while it's relatively easy to "force" the client to store a 64-bit value in memory, displaying it in the trade window is a bit more difficult, and in my opinion, pointless, as these values won't fit in that tiny window anyway.
What I'd suggest is dividing the displayed value by 10 until it falls below the int32 limit, which is 2,147,483,647. For example, if we wanted to "send" 3,000,000,000 gold from the server to the client, we'd display the value 300,000,000, and if we want to "send" 123,456,789,000, we'd display 1,234,567,890 - which doesn't matter anyway, because it's just a label, and the actual validation is on the server anyway. I've attached a DLL file that implements this, along with a video showing how it works, and additional code (in C++ and ASM) for future generations.
Watch "chrome_4S2fRbrc0C.mp4" on Streamable.
streamable.com
C++:
DWORD captureShopGoldValue() {
DWORDLONG captured1 = NetworkGetU32();
DWORDLONG captured2 = NetworkGetU32();
DWORDLONG sum = captured1 + captured2 * 0x100000000;
while (sum > 0x7FFFFFFF) {
sum /= 10;
}
return static_cast<DWORD>(sum);
}
C++:
extern "C" DWORD __declspec(naked) captureShopGoldValue() {
__asm {
call NetworkGetU32
push eax
call NetworkGetU32
mov edx, eax
pop eax
mov ecx, 10
scale_loop:
test edx, edx
jnz divide
cmp eax, 0x7FFFFFFF
ja divide
ret
divide:
div ecx
xor edx, edx
jmp scale_loop
}
}