Problema Chest View si special storage

Înainte de a posta o problemă, caută în acest forum și poate găsești rezolvare.
Avatar utilizator
Marius Dragomir
Membru Club

Membru Club
Mesaje: 1020
Membru din: 13 Noi 2017, 21:32
Server: HellHound
Regat: Jinno
Aprecieri: 499  
Mulţumiri: 1211  
Discord: Copiază ID
Medalii

*Problemă/Întrebare: Problema Chest View si special storage
Tipologie server: pvm
*Resursă folosită: Chest view 0.3 postat de mine pe aici
*ServerFiles utilizat: marty c11
*Syserr: -
Poză: -
*Detalii suplimentare: Am modificat special storage pentru a pune cufere si vrajeste obiectul, toate bune si frumoase, La cufere nu mai pot sa vad dropul cu chest view si pe langa asta daca dau relog dispar cuferele din inventarul special
Pentru acest mesaj, Marius Dragomir a primit 11 (de) mulţumiri
Frey444 • Pisti95 • Metin2Mirage • lakicspatrik • Yazi1337 • cyprien • Ciucciamelo • Ionut14 • Valki • denisdamian • dlklucian15
Continut: Ascuns
Trebuie sa multumesti autorului pentru a putea vedea mesajul.
Afișează semnătura
Avatar utilizator
amvenitsavadcv
Nivel 3

Nivel 3
Mesaje: 413
Membru din: 28 Iul 2018, 11:25
Server: da
Aprecieri: 44  
Mulţumiri: 156  
Medalii

Partea de chest view trebuie adaptata pt storage special.
Mai exact partea de input_main.cpp
Este ceva de genu pe acolo LPITEM pkItem = ch->GetInventoryItem(p->wInventoryCell);
Asta inseamna ca iti citeste itemu doar de pe sloturile din inventar.
Mai trebuie sa faci si partea de uispecialstorage.py si partea de uichestdrop.py
Să le adaptez pentru depozitu special.
Avatar utilizator
Marius Dragomir
Membru Club

Membru Club
Mesaje: 1020
Membru din: 13 Noi 2017, 21:32
Server: HellHound
Regat: Jinno
Aprecieri: 499  
Mulţumiri: 1211  
Discord: Copiază ID
Medalii

amvenitsavadcv scrie: ↑20 Dec 2020, 06:44 Partea de chest view trebuie adaptata pt storage special.
Mai exact partea de input_main.cpp
Este ceva de genu pe acolo LPITEM pkItem = ch->GetInventoryItem(p->wInventoryCell);
Asta inseamna ca iti citeste itemu doar de pe sloturile din inventar.
Mai trebuie sa faci si partea de uispecialstorage.py si partea de uichestdrop.py
Să le adaptez pentru depozitu special.
Am comparat input_main.cpp cu cel din serverfiles elysium postat de curand aici, la fel si cu uispecialstorage si chestdrop , le am identice pe funtiile pt special storage si chestview. O sa le mai dau inca o data un compare sa vad daca nu mi-a scapat ceva

EDIT: Problema asta tot din input_main se trage? https://i.gyazo.com/ebc9b4dda7bc81b1573 ... ec27f8.mp4

EDIT2: Ar trebuii editat asa?
	LPITEM pkItem = ch->GetInventoryItem(p->wInventoryCell || CHEST_INVENTORY);
Pentru acest mesaj, Marius Dragomir a primit 2 (de) mulţumiri
Ciucciamelo • Valki
Continut: Ascuns
Trebuie sa multumesti autorului pentru a putea vedea mesajul.
Afișează semnătura
Avatar utilizator
amvenitsavadcv
Nivel 3

Nivel 3
Mesaje: 413
Membru din: 28 Iul 2018, 11:25
Server: da
Aprecieri: 44  
Mulţumiri: 156  
Medalii

mariusdrg95 scrie: ↑20 Dec 2020, 07:37
amvenitsavadcv scrie: ↑20 Dec 2020, 06:44 Partea de chest view trebuie adaptata pt storage special.
Mai exact partea de input_main.cpp
Este ceva de genu pe acolo LPITEM pkItem = ch->GetInventoryItem(p->wInventoryCell);
Asta inseamna ca iti citeste itemu doar de pe sloturile din inventar.
Mai trebuie sa faci si partea de uispecialstorage.py si partea de uichestdrop.py
Să le adaptez pentru depozitu special.
Am comparat input_main.cpp cu cel din serverfiles elysium postat de curand aici, la fel si cu uispecialstorage si chestdrop , le am identice pe funtiile pt special storage si chestview. O sa le mai dau inca o data un compare sa vad daca nu mi-a scapat ceva

EDIT: Problema asta tot din input_main se trage? https://i.gyazo.com/ebc9b4dda7bc81b1573 ... ec27f8.mp4

EDIT2: Ar trebuii editat asa?
	LPITEM pkItem = ch->GetInventoryItem(p->wInventoryCell || CHEST_INVENTORY);
Prima problema nu se trage din input_main.cpp. Asta ti se intampla si cand iei iteme de jos?Sau doar cand iti dai iteme cu /i?
Poate fi din char_item.cpp functia ::GiveItem sau ::AutoGiveItem. Depinde acum.

Și la 2,nu nu ar trebui să arate așa :))
Nu are nici o logică ce e acolo, și o să primești și eroare la compilare.
Trebuie să faci un caz general, în așa fel încât să citească locația și din inventaru normal și din cel special.
Ai putea face să citească itemu direct din baza de date, să îl iei după type.
Ultima oară modificat 21 Dec 2020, 03:59 de către amvenitsavadcv, modificat 1 dată în total.
Avatar utilizator
Marius Dragomir
Membru Club

Membru Club
Mesaje: 1020
Membru din: 13 Noi 2017, 21:32
Server: HellHound
Regat: Jinno
Aprecieri: 499  
Mulţumiri: 1211  
Discord: Copiază ID
Medalii

amvenitsavadcv scrie: ↑21 Dec 2020, 03:48
mariusdrg95 scrie: ↑20 Dec 2020, 07:37
amvenitsavadcv scrie: ↑20 Dec 2020, 06:44 Partea de chest view trebuie adaptata pt storage special.
Mai exact partea de input_main.cpp
Este ceva de genu pe acolo LPITEM pkItem = ch->GetInventoryItem(p->wInventoryCell);
Asta inseamna ca iti citeste itemu doar de pe sloturile din inventar.
Mai trebuie sa faci si partea de uispecialstorage.py si partea de uichestdrop.py
Să le adaptez pentru depozitu special.
Am comparat input_main.cpp cu cel din serverfiles elysium postat de curand aici, la fel si cu uispecialstorage si chestdrop , le am identice pe funtiile pt special storage si chestview. O sa le mai dau inca o data un compare sa vad daca nu mi-a scapat ceva

EDIT: Problema asta tot din input_main se trage? https://i.gyazo.com/ebc9b4dda7bc81b1573 ... ec27f8.mp4

EDIT2: Ar trebuii editat asa?
	LPITEM pkItem = ch->GetInventoryItem(p->wInventoryCell || CHEST_INVENTORY);
Prima problema nu se trage din intpu_main. Asta ti se intampla si cand iei iteme de jos?Sau doar cand iti dai iteme cu /i?
Poate fi din char_item.cpp functia ::GiveItem sau ::AutoGiveItem. Depinde acum.

Și la 2,nu nu ar trebui să arate așa :))
Nu are nici o logică ce e acolo, și o să primești și eroare la compilare.
Trebuie să faci un caz general, în așa fel încât să citească locația și din inventaru normal și din cel special.
Ai putea face să citească itemu direct din baza de date, să îl iei după type.
Ce am pus cu gyazo e cand dau atat cu /i cat si de pe jos, cand dau prin comanda schimba nu reactioneaza asa. Oricum imi poti da un exemplu? Ca am verificat mai multe serverfiles care au si pentru cufere si schimba inventar special si nu e nici o buba pe acolo...
Adica totul e identic, dar totusi cand dau reboot ata schimba cat si cuferele dispar din inventarul special
Pentru acest mesaj, Marius Dragomir for the post:
Siro.killa
Continut: Ascuns
Trebuie sa multumesti autorului pentru a putea vedea mesajul.
Afișează semnătura
Avatar utilizator
amvenitsavadcv
Nivel 3

Nivel 3
Mesaje: 413
Membru din: 28 Iul 2018, 11:25
Server: da
Aprecieri: 44  
Mulţumiri: 156  
Medalii

mariusdrg95 scrie: ↑21 Dec 2020, 03:58
amvenitsavadcv scrie: ↑21 Dec 2020, 03:48
mariusdrg95 scrie: ↑20 Dec 2020, 07:37
Am comparat input_main.cpp cu cel din serverfiles elysium postat de curand aici, la fel si cu uispecialstorage si chestdrop , le am identice pe funtiile pt special storage si chestview. O sa le mai dau inca o data un compare sa vad daca nu mi-a scapat ceva

EDIT: Problema asta tot din input_main se trage? https://i.gyazo.com/ebc9b4dda7bc81b1573 ... ec27f8.mp4

EDIT2: Ar trebuii editat asa?
	LPITEM pkItem = ch->GetInventoryItem(p->wInventoryCell || CHEST_INVENTORY);
Prima problema nu se trage din intpu_main. Asta ti se intampla si cand iei iteme de jos?Sau doar cand iti dai iteme cu /i?
Poate fi din char_item.cpp functia ::GiveItem sau ::AutoGiveItem. Depinde acum.

Și la 2,nu nu ar trebui să arate așa :))
Nu are nici o logică ce e acolo, și o să primești și eroare la compilare.
Trebuie să faci un caz general, în așa fel încât să citească locația și din inventaru normal și din cel special.
Ai putea face să citească itemu direct din baza de date, să îl iei după type.
Ce am pus cu gyazo e cand dau atat cu /i cat si de pe jos, cand dau prin comanda schimba nu reactioneaza asa. Oricum imi poti da un exemplu? Ca am verificat mai multe serverfiles care au si pentru cufere si schimba inventar special si nu e nici o buba pe acolo...
Adica totul e identic, dar totusi cand dau reboot ata schimba cat si cuferele dispar din inventarul special
Daca dispar cuferele din inv special, inseamna ca partea de DB nu e facuta cum trebuie. Nu iti salveaza cuferele in baza de date.
Mai exact nu ai facut bine partea de ClientManagerPlayer.cpp daca nu ma insel.

Daca e si cu /i si de pe jos, verifica functia ::AutoGiveItem din char_item.cpp , daca o ai adaptata pentru depozitu special.
Avatar utilizator
Marius Dragomir
Membru Club

Membru Club
Mesaje: 1020
Membru din: 13 Noi 2017, 21:32
Server: HellHound
Regat: Jinno
Aprecieri: 499  
Mulţumiri: 1211  
Discord: Copiază ID
Medalii

amvenitsavadcv scrie: ↑21 Dec 2020, 04:03
mariusdrg95 scrie: ↑21 Dec 2020, 03:58
amvenitsavadcv scrie: ↑21 Dec 2020, 03:48

Prima problema nu se trage din intpu_main. Asta ti se intampla si cand iei iteme de jos?Sau doar cand iti dai iteme cu /i?
Poate fi din char_item.cpp functia ::GiveItem sau ::AutoGiveItem. Depinde acum.

Și la 2,nu nu ar trebui să arate așa :))
Nu are nici o logică ce e acolo, și o să primești și eroare la compilare.
Trebuie să faci un caz general, în așa fel încât să citească locația și din inventaru normal și din cel special.
Ai putea face să citească itemu direct din baza de date, să îl iei după type.
Ce am pus cu gyazo e cand dau atat cu /i cat si de pe jos, cand dau prin comanda schimba nu reactioneaza asa. Oricum imi poti da un exemplu? Ca am verificat mai multe serverfiles care au si pentru cufere si schimba inventar special si nu e nici o buba pe acolo...
Adica totul e identic, dar totusi cand dau reboot ata schimba cat si cuferele dispar din inventarul special
Daca dispar cuferele din inv special, inseamna ca partea de DB nu e facuta cum trebuie. Nu iti salveaza cuferele in baza de date.
Mai exact nu ai facut bine partea de ClientManagerPlayer.cpp daca nu ma insel.

Daca e si cu /i si de pe jos, verifica functia ::AutoGiveItem din char_item.cpp , daca o ai adaptata pentru depozitu special.
Pe inventarul cu schimba merge cum trebuie, doar pe cel de cufere face figuri cum am postat acel gif, o sa refac totul cu mai multa atentie iar, poate am ratat ceva.

EDIT: E bine daca fac asa pt type ?
bool CItem::IsBonus()
{
	return (GetVnum() == 71084 || GetSubtype() == USE_CHANGE_ATTRIBUTE);
}
bool CItem::IsChest()
{
	return (GetType() == ITEM_GIFTBOX);
}
Pentru acest mesaj, Marius Dragomir for the post:
Pisti95
Continut: Ascuns
Trebuie sa multumesti autorului pentru a putea vedea mesajul.
Afișează semnătura
Avatar utilizator
Marius Dragomir
Membru Club

Membru Club
Mesaje: 1020
Membru din: 13 Noi 2017, 21:32
Server: HellHound
Regat: Jinno
Aprecieri: 499  
Mulţumiri: 1211  
Discord: Copiază ID
Medalii

UP! Am facut cred ca toate functiile pentru chest drop din inventarul special. Poate sa imi zica cineva daca mai lipseste ceva?
Inpud_main.cpp
#ifdef ENABLE_SHOW_CHEST_DROP
void CInputMain::ChestDropInfo(LPCHARACTER ch, const char* c_pData)
{
	if (!ch)
		return;

	if (!c_pData)
		return;
	
	if (ch->IsOpenSafebox() || ch->GetShop() || ch->IsCubeOpen() || ch->IsDead() || ch->GetExchange() || ch->GetMyShop() || ch->isSashOpened(true) || ch->isSashOpened(false))
	{
		ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("CANT_DO_THIS_BECAUSE_OTHER_WINDOW_OPEN"));
		return;
	}

	TPacketCGChestDropInfo* p = (TPacketCGChestDropInfo*) c_pData;

	if(p->wInventoryCell >= SPECIAL_INVENTORY_MAX_NUM)
		return;
	
	LPITEM pkItem = ch->GetChestInventoryItem(p->wInventoryCell);

	if (!pkItem)
		return;
	
	std::vector<TChestDropInfoTable> vec_ItemList;
	ITEM_MANAGER::instance().GetChestItemList(pkItem->GetVnum(), vec_ItemList);

	TPacketGCChestDropInfo packet;
	packet.bHeader = HEADER_GC_CHEST_DROP_INFO;
	packet.wSize = sizeof(packet) + sizeof(TChestDropInfoTable) * vec_ItemList.size();
	packet.dwChestVnum = pkItem->GetVnum();

	ch->GetDesc()->BufferedPacket(&packet, sizeof(packet));
	ch->GetDesc()->Packet(&vec_ItemList[0], sizeof(TChestDropInfoTable) * vec_ItemList.size());
}
#endif

uispecialstorage.py
	def UseItemSlot(self, slotIndex):
		if constInfo.GET_ITEM_QUESTION_DIALOG_STATUS():
			return

		windowIndex = self.SLOT_WINDOW_TYPE[self.categoryPageIndex]["window"]
		slotIndex = self.__InventoryLocalSlotPosToGlobalSlotPos(slotIndex)

		#self.__UseItem(slotIndex)
		net.SendItemUsePacket(self.SLOT_WINDOW_TYPE[self.categoryPageIndex]["window"], slotIndex)

		if app.ENABLE_SHOW_CHEST_DROP:
			if windowIndex == player.CHEST_INVENTORY:
				ItemVNum = player.GetItemIndex(player.CHEST_INVENTORY, slotIndex)
				item.SelectItem(ItemVNum)

				if player.GetItemTypeBySlot(player.CHEST_INVENTORY, slotIndex) == item.ITEM_TYPE_GIFTBOX:
					if self.interface:
						if self.interface.dlgChestDrop:
							if not self.interface.dlgChestDrop.IsShow():
								self.interface.dlgChestDrop.Open(slotIndex)
								net.SendChestDropInfo(slotIndex)
				else:
					net.SendItemUsePacket(windowIndex, slotIndex)
			elif windowIndex == player.BOOK_INVENTORY and constInfo.BOOK_TRADE_WINDOW == 1:
				if self.interface:
					self.interface.AddBkTradeWindow(slotIndex)
			else:
				net.SendItemUsePacket(windowIndex, slotIndex)
		else:
			net.SendItemUsePacket(windowIndex, slotIndex)

		mouseModule.mouseController.DeattachObject()
		self.OverOutItem()
uichestdrop.py
	def SetInvItemSlot(self, invItemPos):
		self.invItemPos = invItemPos

		itemVnum = player.GetItemIndex(player.CHEST_INVENTORY, invItemPos)
		itemCount = player.GetItemCount(player.CHEST_INVENTORY, invItemPos)

		if itemVnum:
			self.openItemSlot.SetItemSlot(0, itemVnum, itemCount)
si
	def OnClickOpenChest(self):
		if self.invItemPos == -1:
			return
			
		#itemCount = player.GetItemCount(self.invItemPos)

		itemCount = player.GetItemCount(player.CHEST_INVENTORY, self.invItemPos)

		if itemCount >= self.openAmount:
			for i in xrange(self.openAmount):
				if itemCount == 1:
					net.SendItemUsePacket(player.CHEST_INVENTORY, self.invItemPos)
					self.OnPressEscapeKey()
					break
					
				net.SendItemUsePacket(player.CHEST_INVENTORY, self.invItemPos)
				itemCount = itemCount - 1
		else:
			for i in xrange(itemCount):
				if itemCount == 1:
					net.SendItemUsePacket(player.CHEST_INVENTORY, self.invItemPos)
					self.OnPressEscapeKey()
					break
					
				net.SendItemUsePacket(player.CHEST_INVENTORY, self.invItemPos)
				itemCount = itemCount - 1
Lipseste ceva sau am ceva in plus? Cuferele se deschid dar nu apare acel gui
Pentru acest mesaj, Marius Dragomir for the post:
midaci
Continut: Ascuns
Trebuie sa multumesti autorului pentru a putea vedea mesajul.
Afișează semnătura
Avatar utilizator
amvenitsavadcv
Nivel 3

Nivel 3
Mesaje: 413
Membru din: 28 Iul 2018, 11:25
Server: da
Aprecieri: 44  
Mulţumiri: 156  
Medalii

Partea de uispecialinventory.py nu o inteleg deloc, ce ai vrut sa faci pe acolo.
		if app.ENABLE_SHOW_CHEST_DROP:
				if player.GetItemTypeBySlot(player.CHEST_INVENTORY, slotIndex) == item.ITEM_TYPE_GIFTBOX:
					if app.IsPressed(app.DIK_LALT) or app.IsPressed(app.DIK_RALT):
						if self.interface:
							if self.interface.dlgChestDrop:
								if not self.interface.dlgChestDrop.IsShow():
									self.interface.dlgChestDrop.Open(slotIndex)
									net.SendChestDropInfo(slotIndex)
									return
Adauga asta in def UsetItemSlot

Oricum ce ai incercat sa faci tu acolo, o să ți citească doar cuferele din inv special acm.
Nu o să ți mai citească din inv normal,
Avatar utilizator
Marius Dragomir
Membru Club

Membru Club
Mesaje: 1020
Membru din: 13 Noi 2017, 21:32
Server: HellHound
Regat: Jinno
Aprecieri: 499  
Mulţumiri: 1211  
Discord: Copiază ID
Medalii

amvenitsavadcv scrie: ↑22 Dec 2020, 14:35 Partea de uispecialinventory.py nu o inteleg deloc, ce ai vrut sa faci pe acolo.
		if app.ENABLE_SHOW_CHEST_DROP:
				if player.GetItemTypeBySlot(player.CHEST_INVENTORY, slotIndex) == item.ITEM_TYPE_GIFTBOX:
					if app.IsPressed(app.DIK_LALT) or app.IsPressed(app.DIK_RALT):
						if self.interface:
							if self.interface.dlgChestDrop:
								if not self.interface.dlgChestDrop.IsShow():
									self.interface.dlgChestDrop.Open(slotIndex)
									net.SendChestDropInfo(slotIndex)
									return
Adauga asta in def UsetItemSlot

Oricum ce ai incercat sa faci tu acolo, o să ți citească doar cuferele din inv special acm.
Nu o să ți mai citească din inv normal,
Tot nu vrea sa se deschida acel gui, si da stiu ca nu o sa mai citeasca din inventarul normal dar nici nu vreau sa o faca avand in vedere ca toate se duc in inventarul special

EDIT: Asa am pus in uispecialstorage

Imagine
Pentru acest mesaj, Marius Dragomir for the post:
RHYTHM
Continut: Ascuns
Trebuie sa multumesti autorului pentru a putea vedea mesajul.
Afișează semnătura
Închis
Răspunsuri
3
Vizualizări
93
Răspunsuri
11
Vizualizări
453
Răspunsuri
6
Vizualizări
496
Răspunsuri
8
Vizualizări
473

Înapoi la “Probleme rezolvate”

  • Informaţie
  • Cine este conectat

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