Jump to content

[C++] OfflineShop - Function open <Exploit fix>


VegaS™
 Share

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

- [ 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 iTotalAmount = 0;

	for (int n = 0; n < bItemCount; ++n)
		iTotalAmount += 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)
		return;	

	iTotalAmount += static_cast<int64_t>(atoi(mysql_fetch_row(pMsg->Get()->pSQLResult)[0]));
	if (__OFFLINE_SHOP_VALUE_MAX <= iTotalAmount)
	{
		ChatPacket(CHAT_TYPE_INFO, "[Protect Offline] Have more than 2.000.000.000 Yang!");
		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	

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...