[Problema] Buy with items

Înainte de a posta o problemă, caută în acest forum și poate găsești rezolvare.
Avatar utilizator
k4nab1s
Nivel 1

Nivel 1
Mesaje: 122
Membru din: 20 Aug 2017, 21:37
Server: Metin2Ro
Regat: Chunjo
Aprecieri: 318  
Mulţumiri: 3  
Discord: Copiază ID
Medalii

*Problemă/Întrebare: Nu imi arata itemul pe care trebuie sa il ceara la cumparare, arata yang.
Tipologie server(PvM / PvP): PvM
*Resursă folosită: sursa/buy-with-items-t83097.html
*ServerFiles utilizat: serverfiles/serverfiles-just4metin-cura ... 82055.html
*Syserr:
DB

[Sursa=]SYSERR: Nov 6 12:58:22 :: pid_init:
Start of pid: 1046

SYSERR: Nov 6 12:58:22 :: Start: TABLE_POSTFIX not configured use default[/Sursa]
CH1
[Sursa=]SYSERR: Nov 6 12:58:26 :: pid_init:
Start of pid: 1052

SYSERR: Nov 6 12:58:26 :: LoadPackageCryptInfo: [PackageCryptInfo] Failed to load package/cshybridcrypt_metin2_patch_sg1.dat
SYSERR: Nov 6 13:02:45 :: Process: SEQUENCE 293e6780 mismatch 0xaf != 0x64 header 254
SYSERR: Nov 6 13:02:45 :: Process: SEQUENCE_LOG [UNKNOWN]-------------
[254 : 0xaf]

SYSERR: Nov 6 13:39:55 :: Process: SEQUENCE 293e6780 mismatch 0xaf != 0x64 header 254
SYSERR: Nov 6 13:39:55 :: Process: SEQUENCE_LOG [UNKNOWN]-------------
[254 : 0xaf]

SYSERR: Nov 6 13:58:58 :: UseItemEx: Item type NONE Inel Teleportare
SYSERR: Nov 6 14:02:21 :: Process: SEQUENCE 424a0d00 mismatch 0xaf != 0x64 header 254
SYSERR: Nov 6 14:02:21 :: Process: SEQUENCE_LOG [UNKNOWN]-------------
[254 : 0xaf]

SYSERR: Nov 6 14:28:40 :: Process: SEQUENCE 293e6780 mismatch 0xaf != 0x64 header 254
SYSERR: Nov 6 14:28:40 :: Process: SEQUENCE_LOG [UNKNOWN]-------------
[254 : 0xaf][/Sursa]
CH99 GOL
AUTH GOL
CLIENT GOL
Poză:
*Detalii suplimentare: Am scris totul cap coada, am verificat iar codul, nici o eroare sau warning la compilari. Am mai cautat si am gasit o functie anume: am bagat si aceasta functie, degeaba. A mai patit cineva la fel pe forum si a reusit dar nu raspunde la PM-uri.
Avatar utilizator
k4nab1s
Nivel 1

Nivel 1
Mesaje: 122
Membru din: 20 Aug 2017, 21:37
Server: Metin2Ro
Regat: Chunjo
Aprecieri: 318  
Mulţumiri: 3  
Discord: Copiază ID
Medalii

Vaynz scrie: ↑06 Noi 2019, 16:38 Ai sters shop_item din Navicat --> Player? Ai rulat sql-ul?
Da. Imi pare rau am uitat sa mentionez.
Avatar utilizator
k4nab1s
Nivel 1

Nivel 1
Mesaje: 122
Membru din: 20 Aug 2017, 21:37
Server: Metin2Ro
Regat: Chunjo
Aprecieri: 318  
Mulţumiri: 3  
Discord: Copiază ID
Medalii

Cel de la Athero [din arhiva]
Avatar utilizator
k4nab1s
Nivel 1

Nivel 1
Mesaje: 122
Membru din: 20 Aug 2017, 21:37
Server: Metin2Ro
Regat: Chunjo
Aprecieri: 318  
Mulţumiri: 3  
Discord: Copiază ID
Medalii

Am facut tot. Am urcat tot, s-au compilat fara probleme. Sistemul merge, oarecum. Daca ai itemul in inventar cu care trebuie sa cumperi si 0 yang il cumpara, daca ai itemul necesar si yang in inventar il cumpara dar iti i-a si yangul. Problema este ca i-a din yang si ca nu apare itemul necesar pentru cumparare.
Avatar utilizator
k4nab1s
Nivel 1

Nivel 1
Mesaje: 122
Membru din: 20 Aug 2017, 21:37
Server: Metin2Ro
Regat: Chunjo
Aprecieri: 318  
Mulţumiri: 3  
Discord: Copiază ID
Medalii

Vaynz scrie: ↑06 Noi 2019, 18:48 Te duci sursa - game / shop.cpp
Cauti functia : if (r_item.price <= 0) schimbi cu if (r_item.price < 0)
Am facut deja asta.
Avatar utilizator
k4nab1s
Nivel 1

Nivel 1
Mesaje: 122
Membru din: 20 Aug 2017, 21:37
Server: Metin2Ro
Regat: Chunjo
Aprecieri: 318  
Mulţumiri: 3  
Discord: Copiază ID
Medalii

Vaynz scrie: ↑06 Noi 2019, 19:13 Navicat --> in item_proto si cauta linia Gold si acolo modifici suma ( Daca folosesti .txt faci in txt )
Functioneaza pentru yang. Multumesc
Dar tot nu arata itemul care il cere.
Avatar utilizator
k4nab1s
Nivel 1

Nivel 1
Mesaje: 122
Membru din: 20 Aug 2017, 21:37
Server: Metin2Ro
Regat: Chunjo
Aprecieri: 318  
Mulţumiri: 3  
Discord: Copiază ID
Medalii

Vaynz scrie: ↑06 Noi 2019, 19:33 Verifica daca nu iti da ceva in sysser.
Nimic. Sunt aceleasi pe care le postai.
Avatar utilizator
k4nab1s
Nivel 1

Nivel 1
Mesaje: 122
Membru din: 20 Aug 2017, 21:37
Server: Metin2Ro
Regat: Chunjo
Aprecieri: 318  
Mulţumiri: 3  
Discord: Copiază ID
Medalii

Vaynz scrie: ↑06 Noi 2019, 19:51 Incearca sa stergi din nou shop item si sa rulezi sql-ul din nou.
Tot asa
Avatar utilizator
Backus
Utilizator interzis !

Utilizator interzis !
Mesaje: 86
Membru din: 07 Apr 2019, 17:21
Server: None
Regat: Chunjo
Aprecieri: 454  
Mulţumiri: 3  
Medalii

Nu ai facut bine,ia clientul de la eternity sau orice alt svf ce contine sistemul si compara.
Pentru acest mesaj, Backus for the post:
k4nab1s
Avatar utilizator
k4nab1s
Nivel 1

Nivel 1
Mesaje: 122
Membru din: 20 Aug 2017, 21:37
Server: Metin2Ro
Regat: Chunjo
Aprecieri: 318  
Mulţumiri: 3  
Discord: Copiază ID
Medalii

Backus scrie: ↑06 Noi 2019, 20:54 Nu ai facut bine,ia clientul de la eternity sau orice alt svf ce contine sistemul si compara.
Am refacut totul in parte de binary, merge acum.
Multumesc mult Vaynz si Backus.

Rezolvari:

1.Cand iti i-a si YANG si ITEM pe itemul care doresti sa il cumperi, te duci si in item_proto sau item_proto.txt in caz ca aveti .txt ii setati valoarea 0.

2.Cand nu iti arata itemul cerut si iti arata yang. [Nu va pot arata o rezolvare exacta dar va pot arata cum arata la mine]

2.1.Binary
GameType.h
typedef struct packet_shop_item
{
    DWORD       vnum;
    DWORD       price;
    BYTE        count;
#ifdef ENABLE_MULTISHOP
	DWORD		wPriceVnum;
	DWORD		wPrice;
#endif
	BYTE		display_pos;
	long		alSockets[ITEM_SOCKET_SLOT_MAX_NUM];
    TPlayerItemAttribute aAttr[ITEM_ATTRIBUTE_SLOT_MAX_NUM];
} TShopItemData;
Packet.h
typedef struct SShopItemTable
{
    DWORD		vnum;
    BYTE		count;
	
    TItemPos	pos;			// PC 상점에만 이용
    DWORD		price;		// PC 상점에만 이용
#ifdef ENABLE_MULTISHOP
	DWORD		wPriceVnum;
	DWORD		wPrice;
#endif
    BYTE		display_pos;	//	PC 상점에만 이용, 보일 위치.
} TShopItemTable;
Packet.h
enum EPacketShopSubHeaders
{
	SHOP_SUBHEADER_GC_START,
    SHOP_SUBHEADER_GC_END,
	SHOP_SUBHEADER_GC_UPDATE_ITEM,
	SHOP_SUBHEADER_GC_UPDATE_PRICE,
#ifdef ENABLE_MULTISHOP
	SHOP_SUBHEADER_GC_NOT_ENOUGH_ITEM,
#endif
    SHOP_SUBHEADER_GC_OK,
    SHOP_SUBHEADER_GC_NOT_ENOUGH_MONEY,
    SHOP_SUBHEADER_GC_SOLDOUT,
    SHOP_SUBHEADER_GC_INVENTORY_FULL,
    SHOP_SUBHEADER_GC_INVALID_POS,
	SHOP_SUBHEADER_GC_SOLD_OUT,
	SHOP_SUBHEADER_GC_START_EX,
	SHOP_SUBHEADER_GC_NOT_ENOUGH_MONEY_EX,
};
PythonApplicationModule.cpp
Asta il adaugati undeva mai jos printre alte #ifdef nu fix sub
PyModule_AddIntConstant(poModule, "CAMERA_STOP", CPythonApplication::CAMERA_STOP);
La mine arata asa
	PyModule_AddIntConstant(poModule, "CAMERA_STOP",			CPythonApplication::CAMERA_STOP);

#ifdef ENABLE_COSTUME_SYSTEM
	PyModule_AddIntConstant(poModule, "ENABLE_COSTUME_SYSTEM",	1);
#else
	PyModule_AddIntConstant(poModule, "ENABLE_COSTUME_SYSTEM",	0);
#endif

#ifdef ENABLE_AGGREGATE_MONSTER_EFFECT
	PyModule_AddIntConstant(poModule, "ENABLE_AGGREGATE_MONSTER_EFFECT", 1);
#else
	PyModule_AddIntConstant(poModule, "ENABLE_AGGREGATE_MONSTER_EFFECT",	0);
#endif

#ifdef ENABLE_ENERGY_SYSTEM
	PyModule_AddIntConstant(poModule, "ENABLE_ENERGY_SYSTEM",	1);
#else
	PyModule_AddIntConstant(poModule, "ENABLE_ENERGY_SYSTEM",	0);
#endif

#ifdef ENABLE_MULTISHOP
	PyModule_AddIntConstant(poModule, "ENABLE_MULTISHOP", 1);
#else
	PyModule_AddIntConstant(poModule, "ENABLE_MULTISHOP", 0);
#endif

#ifdef ENABLE_DRAGON_SOUL_SYSTEM
	PyModule_AddIntConstant(poModule, "ENABLE_DRAGON_SOUL_SYSTEM",	1);
#else
	PyModule_AddIntConstant(poModule, "ENABLE_DRAGON_SOUL_SYSTEM",	0);
#endif
PythonNetworkStreamPhaseGame.cpp
		case SHOP_SUBHEADER_GC_NOT_ENOUGH_MONEY:
			PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "OnShopError", Py_BuildValue("(s)", "NOT_ENOUGH_MONEY"));
			break;

#ifdef ENABLE_MULTISHOP
		case SHOP_SUBHEADER_GC_NOT_ENOUGH_ITEM:
			PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "OnShopError", Py_BuildValue("(s)", "NOT_ENOUGH_ITEM"));
			break;
#endif
PythonShop.cpp
PyObject * shopGetItemMetinSocket(PyObject * poSelf, PyObject * poArgs)
{
 [...]
}
#ifdef ENABLE_MULTISHOP
PyObject * shopGetBuyWithItem(PyObject * poSelf, PyObject * poArgs)
{
 [...]
}
#endif
		{ "GetItemPrice",				shopGetItemPrice,				METH_VARARGS },
#ifdef ENABLE_MULTISHOP
		{ "GetBuyWithItem",				shopGetBuyWithItem,				METH_VARARGS },
		{ "GetBuyWithItemCount",		shopGetBuyWithItemCount,		METH_VARARGS },
#endif
PythonItemModule.cpp
PyObject * itemSelectItem(PyObject * poSelf, PyObject * poArgs)
{
  [...]
}

PyObject * itemGetCurrentItemVnum(PyObject * poSelf, PyObject * poArgs)
{
    CItemData * pItemData = CItemManager::Instance().GetSelectedItemDataPointer();
    if (!pItemData)
        return Py_BuildException("no selected item data");
 
    return Py_BuildValue("i", pItemData->GetIndex());
}
Si
		{ "GetISellItemPrice",				itemGetISellItemPrice,					METH_VARARGS },
		{ "GetVnum",						itemGetCurrentItemVnum,					METH_VARARGS },
2.2.Python
localeinfo.py
SHOP_ERROR_DICT = {
	"NOT_ENOUGH_MONEY" : SHOP_NOT_ENOUGH_MONEY,
	"SOLDOUT" : SHOP_SOLDOUT,
	"INVENTORY_FULL" : SHOP_INVENTORY_FULL,
	"INVALID_POS" : SHOP_INVALID_POS,
	"NOT_ENOUGH_MONEY_EX" : SHOP_NOT_ENOUGH_MONEY_EX,
}

if app.ENABLE_MULTISHOP:
	SHOP_ERROR_DICT.update({
		"NOT_ENOUGH_ITEM" : SHOP_NOT_ENOUGH_ITEM,
		}
	)
Si
def FISHING_SUCCESS(isFish, fishName) :
	if isFish :
		return FISHING_SUCCESS1 % (fishName)
	else :
		return FISHING_SUCCESS2 % (fishName)
        
if app.ENABLE_MULTISHOP:
	def NumberToWithItemString(n,c):
		if n <= 0:
			return "0 %s" % (c)
		return "%s %s" % ('.'.join([ i-3<0 and str(n)[:i] or str(n)[i-3:i] for i in range(len(str(n))%3, len(str(n))+1, 3) if i ]), c)
			
def NumberToMoneyString(n) :
	if n <= 0 :
		return "0 %s" % (MONETARY_UNIT0)

	return "%s %s" % ('.'.join([ i-3<0 and str(n)[:i] or str(n)[i-3:i] for i in range(len(str(n))%3, len(str(n))+1, 3) if i ]), MONETARY_UNIT0) 

def NumberToSecondaryCoinString(n) :
	if n <= 0 :
		return "0 %s" % (MONETARY_UNIT_JUN)

	return "%s %s" % ('.'.join([ i-3<0 and str(n)[:i] or str(n)[i-3:i] for i in range(len(str(n))%3, len(str(n))+1, 3) if i ]), MONETARY_UNIT_JUN) 
uitooltip.py
	def SetShopItem(self, slotIndex):
		itemVnum = shop.GetItemID(slotIndex)
		if 0 == itemVnum:
			return

		price = shop.GetItemPrice(slotIndex)
		self.ClearToolTip()
		self.isShopItem = TRUE

		metinSlot = []
		for i in xrange(player.METIN_SOCKET_MAX_NUM):
			metinSlot.append(shop.GetItemMetinSocket(slotIndex, i))
		attrSlot = []
		for i in xrange(player.ATTRIBUTE_SLOT_MAX_NUM):
			attrSlot.append(shop.GetItemAttribute(slotIndex, i))

		self.AddItemData(itemVnum, metinSlot, attrSlot)
		if app.ENABLE_MULTISHOP:
			if shop.GetBuyWithItem(slotIndex) != 0:
				self.AppendPriceTextLine(shop.GetBuyWithItemCount(slotIndex), shop.GetBuyWithItem(slotIndex))
			else:
				self.AppendPrice(price)
		else:
			self.AppendPrice(price)
Si
	def __DragonSoulInfoString (self, dwVnum):
		step = (dwVnum / 100) % 10
		refine = (dwVnum / 10) % 10
		if 0 == step:
			return localeInfo.DRAGON_SOUL_STEP_LEVEL1 + " " + localeInfo.DRAGON_SOUL_STRENGTH(refine)
		elif 1 == step:
			return localeInfo.DRAGON_SOUL_STEP_LEVEL2 + " " + localeInfo.DRAGON_SOUL_STRENGTH(refine)
		elif 2 == step:
			return localeInfo.DRAGON_SOUL_STEP_LEVEL3 + " " + localeInfo.DRAGON_SOUL_STRENGTH(refine)
		elif 3 == step:
			return localeInfo.DRAGON_SOUL_STEP_LEVEL4 + " " + localeInfo.DRAGON_SOUL_STRENGTH(refine)
		elif 4 == step:
			return localeInfo.DRAGON_SOUL_STEP_LEVEL5 + " " + localeInfo.DRAGON_SOUL_STRENGTH(refine)
		else:
			return ""

	if app.ENABLE_MULTISHOP:
		def AppendPriceTextLine(self, price, priceVnum):
			item.SelectItem(priceVnum)
			windowBack = ui.Window()
			windowBack.SetParent(self)

			textLine = ui.TextLine()
			textLine.SetParent(windowBack)
			textLine.SetFontName(self.defFontName)
			textLine.SetPackedFontColor(self.FONT_COLOR)
			textLine.SetText("%sx" % (localeInfo.TOOLTIP_BUYPRICE % int(price)))
			textLine.SetOutline()
			textLine.SetFeather(False)
			textLine.SetPosition(0, 10)
			textLine.Show()

			itemImage = ui.ImageBox()
			itemImage.SetParent(windowBack)
			itemImage.LoadImage(item.GetIconImageFileName())
			itemImage.SetPosition(textLine.GetTextSize()[0] + 2, 0)
			itemImage.Show()

			textLineName = ui.TextLine()
			textLineName.SetParent(windowBack)
			textLineName.SetFontName(self.defFontName)
			textLineName.SetPackedFontColor(self.FONT_COLOR)
			textLineName.SetText("%s" % item.GetItemName())
			textLineName.SetOutline()
			textLineName.SetFeather(False)
			textLineName.SetPosition(textLine.GetTextSize()[0] + itemImage.GetWidth() + 4, 10)
			textLineName.Show()

			windowBack.SetPosition(0, self.toolTipHeight)
			windowBack.SetSize(textLine.GetTextSize()[0] + itemImage.GetWidth() + textLineName.GetTextSize()[0] + 6, 32)
			windowBack.SetWindowHorizontalAlignCenter()
			windowBack.Show()

			self.toolTipHeight += itemImage.GetHeight()

			self.childrenList.append(textLine)
			self.childrenList.append(textLineName)
			self.childrenList.append(itemImage)
			self.childrenList.append(windowBack)
			self.ResizeToolTip()
ATENTIE EU DOAR VA ARATAI CUM ARATA LA MINE
Închis
Răspunsuri
3
Vizualizări
423
Răspunsuri
23
Vizualizări
2287
Răspunsuri
2
Vizualizări
318

Înapoi la “Probleme rezolvate”

  • Informaţie
  • Cine este conectat

    Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 8 vizitatori