Jump to content
Sign in to follow this  
NazoX

[C++]Fix Shop Offline Ken

Recommended Posts

 

Bueno visto que no lo he visto en esta comunidad, traigo el fix de la tienda offline de ken para duplicar items en la offline, no lo he probado todavía ya que la estoy recién instalando, pero por algunos comentarios de diversos foros, funciona, bueno empecemos.

1º Solución, vamos a offlineshop_manager.cpp y buscamos la siguiente línea: void COfflineShopManager::TakeItem(LPCHARACTER ch, BYTE bPos)   y cambiamos el and status = 0 por 1 quedando así:

Quote

    DBManager::instance().DirectQuery("DELETE FROM %soffline_shop_item WHERE owner_id = %u and pos = %d and status = 1", get_table_postfix(), ch->GetPlayerID(), bPos);

Nota: Si no funciona buscamos and status = y todos los "0" remplazamos por "1"

2ºSolución, vamos a input_main.cpp, y buscamos la siguiente línea: "case SHOP_SUBHEADER_CG_TAKE_ITEM"

y remplazamos toda la función por lo siguiente:

		case SHOP_SUBHEADER_CG_TAKE_ITEM:
		{
			if (uiBytes < sizeof(BYTE))
				return -1;

			BYTE bPos = *c_pData;
			if (!COfflineShopManager::instance().HasOfflineShop(ch)){
				sys_log(0, "INPUT: %s OFFLINE_SHOP_TAKE_ITEM", ch->GetName());
				COfflineShopManager::instance().TakeItem(ch, bPos);
			}
			return (sizeof(BYTE));
		}

Nuevamente buscamos -> "case SHOP_SUBHEADER_CG_REFRESH_UNSOLD_ITEMS"

y remplazamos la función por lo siguiente: 

 

		case SHOP_SUBHEADER_CG_REFRESH_UNSOLD_ITEMS:
		{
			if (!COfflineShopManager::instance().HasOfflineShop(ch)){
				sys_log(0, "INPUT: %s OFFLINE_SHOP_REFRESH_UNSOLD_ITEMS", ch->GetName());
				COfflineShopManager::instance().RefreshUnsoldItems(ch);
			}
			return 0;
		}

Con esto debería bastar para solucionar el problema de duplicar items en la tienda 

Créditos: GucciMane. Según la otra persona, pudo solucionar el problema, solo utilizando el método 1, es decir el de "and status"

Otra solución para duplicar items en la tienda offline, (en general, otro sistema o incluso en la de Ken mismo, podéis probar esto)

vamos a input_main.cpp y buscamos esta función -> int CInputMain::MyOfflineShop(LPCHARACTER ch, const char * c_pData, size_t uiBytes)

y añadimos lo siguiente:

	if (ch->GetExchange() || ch->IsOpenSafebox() || ch->GetShopOwner() || ch->IsCubeOpen() || ch->GetOfflineShopOwner() || ch->IsAcceOpen())
    {
        ch->ChatPacket(CHAT_TYPE_NOTICE, ("This nigga try to make a bug -> %s."), ch->GetName());
        return (iExtraLen);
    }

Nota: Si no tenéis el "IsAcceOpen" a vosotros os dará el error, simplemente eliminar y cerrar en el anterior punto.

Otro fix para la parte de C++ en el cliente, para poder cambiar de precio los objetos de la tienda offline, debemos hacer esto. Nos dirigimos a: PythonNetworkPhaseGameItem.cpp

Una vez aquí, buscamos la siguiente línea -> bool CPythonNetworkStream :: SendChangePriceOfflineShopItem (BYTE bPos, int iPrice) lo cambiamos por lo siguiente:

Quote

pTable.bDisplayPos = 0; 
por: 
pTable.bDisplayPos = bPos;

Para terminar otra vez en C++ del servidor, vamos a input_main.cpp y buscamos esta línea-> COfflineShopManager :: instance (). ChangePrice (ch, pTable-> bPos, pTable-> lPrice); por esta

Quote

COfflineShopManager :: instance (). ChangePrice (ch, pTable-> bDisplayPos, pTable-> lPrice);

Créditos: DeYaN.

Aquí comentan algún fix mas para Ken

Debes iniciar sesión para ver el contenido del enlace en esta publicación.

 

Se agradecería que si funciona, comentéis cual método habéis usado, o si los de la web funcionan, para dejarlo claro y así los demás tengamos idea para usarlos, un saludo ^^

 

Share this post


Link to post
Share on other sites
hace 7 horas, NazoX dijo:

 

Bueno visto que no lo he visto en esta comunidad, traigo el fix de la tienda offline de ken para duplicar items en la offline, no lo he probado todavía ya que la estoy recién instalando, pero por algunos comentarios de diversos foros, funciona, bueno empecemos.

1º Solución, vamos a offlineshop_manager.cpp y buscamos la siguiente línea: void COfflineShopManager::TakeItem(LPCHARACTER ch, BYTE bPos)   y cambiamos el and status = 0 por 1 quedando así:

Nota: Si no funciona buscamos and status = y todos los "0" remplazamos por "1"

2ºSolución, vamos a input_main.cpp, y buscamos la siguiente línea: "case SHOP_SUBHEADER_CG_TAKE_ITEM"

y remplazamos toda la función por lo siguiente:

		case SHOP_SUBHEADER_CG_TAKE_ITEM:
		{
			if (uiBytes < sizeof(BYTE))
				return -1;

			BYTE bPos = *c_pData;
			if (!COfflineShopManager::instance().HasOfflineShop(ch)){
				sys_log(0, "INPUT: %s OFFLINE_SHOP_TAKE_ITEM", ch->GetName());
				COfflineShopManager::instance().TakeItem(ch, bPos);
			}
			return (sizeof(BYTE));
		}

Nuevamente buscamos -> "case SHOP_SUBHEADER_CG_REFRESH_UNSOLD_ITEMS"

y remplazamos la función por lo siguiente: 

 

		case SHOP_SUBHEADER_CG_REFRESH_UNSOLD_ITEMS:
		{
			if (!COfflineShopManager::instance().HasOfflineShop(ch)){
				sys_log(0, "INPUT: %s OFFLINE_SHOP_REFRESH_UNSOLD_ITEMS", ch->GetName());
				COfflineShopManager::instance().RefreshUnsoldItems(ch);
			}
			return 0;
		}

Con esto debería bastar para solucionar el problema de duplicar items en la tienda 

Créditos: GucciMane. Según la otra persona, pudo solucionar el problema, solo utilizando el método 1, es decir el de "and status"

Otra solución para duplicar items en la tienda offline, (en general, otro sistema o incluso en la de Ken mismo, podéis probar esto)

vamos a input_main.cpp y buscamos esta función -> int CInputMain::MyOfflineShop(LPCHARACTER ch, const char * c_pData, size_t uiBytes)

y añadimos lo siguiente:

	if (ch->GetExchange() || ch->IsOpenSafebox() || ch->GetShopOwner() || ch->IsCubeOpen() || ch->GetOfflineShopOwner() || ch->IsAcceOpen())
    {
        ch->ChatPacket(CHAT_TYPE_NOTICE, ("This nigga try to make a bug -> %s."), ch->GetName());
        return (iExtraLen);
    }

Nota: Si no tenéis el "IsAcceOpen" a vosotros os dará el error, simplemente eliminar y cerrar en el anterior punto.

Otro fix para la parte de C++ en el cliente, para poder cambiar de precio los objetos de la tienda offline, debemos hacer esto. Nos dirigimos a: PythonNetworkPhaseGameItem.cpp

Una vez aquí, buscamos la siguiente línea -> bool CPythonNetworkStream :: SendChangePriceOfflineShopItem (BYTE bPos, int iPrice) lo cambiamos por lo siguiente:

Para terminar otra vez en C++ del servidor, vamos a input_main.cpp y buscamos esta línea-> COfflineShopManager :: instance (). ChangePrice (ch, pTable-> bPos, pTable-> lPrice); por esta

Créditos: DeYaN.

Aquí comentan algún fix mas para Ken

Debes iniciar sesión para ver el contenido del enlace en esta publicación.

 

Se agradecería que si funciona, comentéis cual método habéis usado, o si los de la web funcionan, para dejarlo claro y así los demás tengamos idea para usarlos, un saludo ^^

 

Gracias linda, la probaré y vere que tal ! 😘

Share this post


Link to post
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.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...