View Single Post
  #18  
Old 10-14-2012, 02:37 AM
lerxst2112
Demi-God
 
Join Date: Aug 2010
Posts: 1,742
Default

Well, the answer is that Client::AddMoneyToPP() has a bug in it. It's hard to see because it's hideously formatted and a bizarre way to split the digits up, but whatever.

Code:
Index: client.cpp
===================================================================
--- client.cpp	(revision 2230)
+++ client.cpp	(working copy)
@@ -2154,6 +2154,7 @@
 	//tmp	= tmp - (tmp2* 10);
     //if (updateclient)
 	//	SendClientMoneyUpdate(0,tmp);
+	tmp2 = tmp;
     new_val = m_pp.copper + tmp2;
     if(new_val < 0) {
         m_pp.copper = 0;
The copper value was never assigned to tmp2 (nice variables names!) so it stayed whatever the silver value was.

If I were the truly ambitious sort I'd replace that entire function with something like this:

Code:
void Client::AddMoneyToPP(uint64 copper, bool updateclient) {
	sint32 platinum = copper / 1000;
	sint32 gold = (copper / 100) % 10;
	sint32 silver = (copper / 10) % 10;
	copper %= 10;
	AddMoneyToPP( copper, silver, gold, platinum, updateclient );
}
Reply With Quote