Jump to content

OfflineShop - Function Open Bug Fix


Recommended Posts

Explain this bug:
--*You do shop with items up to 120kkk, and another player can buy your items, but your bank online store you get only 2kkk, and the remaining money is erased.
--* You need to do this check and function AddItem, because he still can not do this bug when you add items can add up to 120kkk.

 

 

 

A guy asked me to help him solve this problem a few months ago, I helped and I offered this little fix free without any money and he was placed and sold to other users on a lot of money and he made a lot of money on this crap fixed which was written in 5 minutes.

So I decided to put it for everyone to fix this problem, I mention this fix is for the offline shop's from Ken.

This fix applies to people who have no limit increased to yang in bank offlineshop, shop etc..

 

- [ File: /Src/common/service.h ]

#1.) Add this:

#define __OFFLINE_SHOP_FIX_OPEN	
#define __OFFLINE_SHOP_VALUE_MAX 2000000000
#define __OFFLINE_SHOP_WARNING "[Protect Offline] Have more than 2.000.000.000 Yang!"
 

- [ File: /Src/game/src/char.cpp ]

#1.) Search function:

	if (!LC_IsBrazil())
	{
		DWORD nTotalMoney = 0;
		for (BYTE n = 0; n < bItemCount; ++n)
			nTotalMoney += (pTable + n)->price;

		if (GOLD_MAX - 1 <= nTotalMoney)
		{
			sys_err("[OVERFLOW_GOLD] Overflow (GOLD_MAX) id %u name %s", GetPlayerID(), GetName());
			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("20억 냥을 초과하여 상점을 열수가 없습니다"));
			return;
		}
	}

 

#2.) Replace function with this:

#ifdef __OFFLINE_SHOP_FIX_OPEN
	int64_t szTotalMoney = 0;

	for (int n = 0; n < bItemCount; ++n)
	{
		szTotalMoney += static_cast<int64_t>((pTable+n)->price);
	}
	std::auto_ptr<SQLMsg> pMsg(DBManager::instance().DirectQuery("SELECT money FROM player.player WHERE id = %u", GetPlayerID()));
	if (pMsg->Get()->uiNumRows == 0)
		return;	
	
	DWORD dwCurrentMoney = 0;
	MYSQL_ROW row = mysql_fetch_row(pMsg->Get()->pSQLResult);
	str_to_number(dwCurrentMoney, row[0]);	

	szTotalMoney += static_cast<int64_t>(dwCurrentMoney);
	if (__OFFLINE_SHOP_VALUE_MAX <= szTotalMoney)
	{
		ChatPacket(CHAT_TYPE_INFO, __OFFLINE_SHOP_WARNING);
		return;
	}
#else		
	if (!LC_IsBrazil())
	{
		DWORD nTotalMoney = 0;
		for (BYTE n = 0; n < bItemCount; ++n)
			nTotalMoney += (pTable + n)->price;
		if (GOLD_MAX - 1 <= nTotalMoney)
		{
			sys_err("[OVERFLOW_GOLD] Overflow (GOLD_MAX) id %u name %s", GetPlayerID(), GetName());
			ChatPacket(CHAT_TYPE_INFO, LC_TEXT("20억 냥을 초과하여 상점을 열수가 없습니다"));
			return;
		}
	}
#endif	
  • Love 8
Link to comment
Share on other sites

  • 4 weeks later...
  • 1 year later...

Announcements



×
×
  • Create New...

Important Information

Terms of Use / Privacy Policy / Guidelines / We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.