Register for your free account! | Forgot your password?

You last visited: Today at 14:12

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



[RLS] Markierung neu gedroppter Items

Discussion on [RLS] Markierung neu gedroppter Items within the Metin2 PServer Guides & Strategies forum part of the Metin2 Private Server category.

Reply
 
Old   #1
 
Yiv's Avatar
 
elite*gold: 47
Join Date: Feb 2012
Posts: 2,282
Received Thanks: 2,579
[RLS] Markierung neu gedroppter Items

Guten Abend,

da **** meint, Teile meines Codes in seinen Produkten, die er verkauft, verwenden zu müssen, habe ich mich nun dazu entschlossen, das ganze zu publizieren.

Das Release bewirkt, dass Items, welche ihr neu erhaltet, im Inventar markiert werden (wie ein aktivierter Auto-Pott).


Einbau

1. Client-Source
Datei: PythonSlotWindow.h (EterPythonLib)
Das 1. suchen und mit dem 2. ersetzen:
Code:
CAniImageBox * m_pSlotActiveEffect;
Code:
CAniImageBox* m_apSlotActiveEffect[3];
Datei: PythonSlotWindow.cpp (EterPythonLib)
Das 1. suchen und mit dem 2. ersetzen:
Code:
if (!m_pSlotActiveEffect)
Code:
if (!m_apSlotActiveEffect[0] ||
	!m_apSlotActiveEffect[1] ||
	!m_apSlotActiveEffect[2])
Das 1. suchen und mit dem 2. ersetzen:
Code:
if (m_pSlotActiveEffect)
	m_pSlotActiveEffect->Update();
Code:
for (int i = 0; i < 3; ++i)
	if (m_apSlotActiveEffect[i])
		m_apSlotActiveEffect[i]->Update();
Das 1. suchen und mit dem 2. ersetzen:
Code:
if (rSlot.bActive)
if (m_pSlotActiveEffect)
{
	int ix = m_rect.left + rSlot.ixPosition;
	int iy = m_rect.top + rSlot.iyPosition;
	m_pSlotActiveEffect->SetPosition(ix, iy);
	m_pSlotActiveEffect->Render();
}
Code:
if (rSlot.bActive)
{
	int iSize = ((int)rSlot.byyPlacedItemSize) - 1;
	if (iSize >= 0 && iSize < 3 && m_apSlotActiveEffect[iSize])
	{
		int ix = m_rect.left + rSlot.ixPosition;
		int iy = m_rect.top + rSlot.iyPosition;
		m_apSlotActiveEffect[iSize]->SetPosition(ix, iy);
		m_apSlotActiveEffect[iSize]->Render();
	}
}
Das 1. suchen und mit dem 2. ersetzen:
Code:
m_pSlotActiveEffect = new CAniImageBox(NULL);
m_pSlotActiveEffect->AppendImage("d:/ymir work/ui/public/slotactiveeffect/00.sub");
m_pSlotActiveEffect->AppendImage("d:/ymir work/ui/public/slotactiveeffect/01.sub");
m_pSlotActiveEffect->AppendImage("d:/ymir work/ui/public/slotactiveeffect/02.sub");
m_pSlotActiveEffect->AppendImage("d:/ymir work/ui/public/slotactiveeffect/03.sub");
m_pSlotActiveEffect->AppendImage("d:/ymir work/ui/public/slotactiveeffect/04.sub");
m_pSlotActiveEffect->AppendImage("d:/ymir work/ui/public/slotactiveeffect/05.sub");
m_pSlotActiveEffect->AppendImage("d:/ymir work/ui/public/slotactiveeffect/06.sub");
m_pSlotActiveEffect->AppendImage("d:/ymir work/ui/public/slotactiveeffect/07.sub");
m_pSlotActiveEffect->AppendImage("d:/ymir work/ui/public/slotactiveeffect/08.sub");
m_pSlotActiveEffect->AppendImage("d:/ymir work/ui/public/slotactiveeffect/09.sub");
m_pSlotActiveEffect->AppendImage("d:/ymir work/ui/public/slotactiveeffect/10.sub");
m_pSlotActiveEffect->AppendImage("d:/ymir work/ui/public/slotactiveeffect/11.sub");
m_pSlotActiveEffect->AppendImage("d:/ymir work/ui/public/slotactiveeffect/12.sub");
m_pSlotActiveEffect->SetRenderingMode(CGraphicExpandedImageInstance::RENDERING_MODE_SCREEN);
m_pSlotActiveEffect->Show();
Code:
for (int i = 0; i < 3; ++i)
{
	CAniImageBox* pEff = new CAniImageBox(NULL);

	for (int j = 0; j <= 12; ++j)
	{
		char buf[64+1];
		sprintf_s(buf, "d:/ymir work/ui/public/slotactiveeffect/slot%d/%02d.sub", (i+1), j);
		pEff->AppendImage(buf);
	}

	pEff->SetRenderingMode(CGraphicExpandedImageInstance::RENDERING_MODE_SCREEN);
	pEff->Show();

	m_apSlotActiveEffect[i] = pEff;
}
Das 1. suchen und mit dem 2. ersetzen:
Code:
if (m_pSlotActiveEffect)
{
	delete m_pSlotActiveEffect;
	m_pSlotActiveEffect = NULL;
}
Code:
for (int i = 0; i < 3; ++i)
{
	if (m_apSlotActiveEffect[i])
	{
		delete m_apSlotActiveEffect[i];
		m_apSlotActiveEffect[i] = NULL;
	}
}
Das 1. suchen und mit dem 2. ersetzen:
Code:
m_pSlotActiveEffect = NULL;
Code:
for (int i = 0; i < 3; ++i)
	m_apSlotActiveEffect[i] = NULL;

2. Client
Datei: interfaceModule.py
Das 1. suchen und mit dem 2. ersetzen:
Code:
def Highligt_Item(self, inven_type, inven_pos):
	if player.DRAGON_SOUL_INVENTORY == inven_type:
		if app.ENABLE_DRAGON_SOUL_SYSTEM:
			self.wndDragonSoul.HighlightSlot(inven_pos)
Code:
def Highligt_Item(self, inven_type, inven_pos):
	if player.DRAGON_SOUL_INVENTORY == inven_type:
		if app.ENABLE_DRAGON_SOUL_SYSTEM:
			self.wndDragonSoul.HighlightSlot(inven_pos)
	elif player.SLOT_TYPE_INVENTORY == inven_type:
		self.wndInventory.HighlightSlot(inven_pos)
Datei: uiInventory.py
Das 1. suchen und mit dem 2. ersetzen:
Code:
class InventoryWindow(ui.ScriptWindow):
Code:
class InventoryWindow(ui.ScriptWindow):
	liHighlightedItems = []
Das 1. suchen und mit dem 2. ersetzen:
Code:
	def OverInItem(self, overSlotPos):
		overSlotPos = self.__InventoryLocalSlotPosToGlobalSlotPos(overSlotPos)
		self.wndItem.SetUsableItem(False)

		if mouseModule.mouseController.isAttached():
			attachedItemType = mouseModule.mouseController.GetAttachedType()
			if player.SLOT_TYPE_INVENTORY == attachedItemType:

				attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber()
				attachedItemVNum = mouseModule.mouseController.GetAttachedItemIndex()
				
				if self.__CanUseSrcItemToDstItem(attachedItemVNum, attachedSlotPos, overSlotPos):
					self.wndItem.SetUsableItem(True)
					self.ShowToolTip(overSlotPos)
					return
				
		self.ShowToolTip(overSlotPos)
Code:
	def OverInItem(self, overSlotPos):
		overSlotPosGlobal = self.__InventoryLocalSlotPosToGlobalSlotPos(overSlotPos)
		self.wndItem.SetUsableItem(False)
		
		if overSlotPosGlobal in self.liHighlightedItems:
			self.liHighlightedItems.remove(overSlotPosGlobal)
			self.wndItem.DeactivateSlot(overSlotPos)
		
		if mouseModule.mouseController.isAttached():
			attachedItemType = mouseModule.mouseController.GetAttachedType()
			if player.SLOT_TYPE_INVENTORY == attachedItemType:
				
				attachedSlotPos = mouseModule.mouseController.GetAttachedSlotNumber()
				attachedItemVNum = mouseModule.mouseController.GetAttachedItemIndex()
				
				if self.__CanUseSrcItemToDstItem(attachedItemVNum, attachedSlotPos, overSlotPosGlobal):
					self.wndItem.SetUsableItem(True)
					self.ShowToolTip(overSlotPosGlobal)
					return
		
		self.ShowToolTip(overSlotPosGlobal)
Die Methode InventoryWindow.RefreshBagSlotWindow(self) wie folgt anpassen:
Code:
	def RefreshBagSlotWindow(self):
		# [...]
		for i in xrange(player.INVENTORY_PAGE_SIZE):
			# [...]
			itemVnum = getItemVNum(slotNumber)
			setItemVNum(i, itemVnum, itemCount)
			
			#################### NEW PART ####################
			if itemVnum == 0 and slotNumber in self.liHighlightedItems:
				self.liHightlightedItems.remove(slotNumber)
			##################################################
			
			if constInfo.IS_AUTO_POTION(itemVnum):
				# [...]
		#################### NEW PART ####################
			else:
				self.wndItem.DeactivateSlot(slotNumber)
		
		self.__RefreshHighlights()
		##################################################
		# [...]
Der Klasse InventoryWindow folgende Methoden hinzufügen:
Code:
	def HighlightSlot(self, slot):
		if not slot in self.liHighlightedItems:
			self.liHighlightedItems.append(slot)
	
	def __RefreshHighlights(self):
		for i in xrange(player.INVENTORY_PAGE_SIZE):
			slotNumber = self.__InventoryLocalSlotPosToGlobalSlotPos(i)
			if slotNumber in self.liHighlightedItems:
				self.wndItem.ActivateSlot(i)

3. Server-Source (Game)
Datei: char.h
Das 1. suchen und mit dem 2. ersetzen:
Code:
void			SetItem(TItemPos Cell, LPITEM item);
Code:
void			SetItem(TItemPos Cell, LPITEM item, bool bWereMine = false);
Datei: char_item.cpp
Das 1. suchen und mit dem 2. ersetzen:
Code:
void CHARACTER::SetItem(TItemPos Cell, LPITEM pItem)
Code:
void CHARACTER::SetItem(TItemPos Cell, LPITEM pItem, bool bWereMine)
Das 1. suchen und mit dem 2. ersetzen:
Code:
pack.highlight = (Cell.window_type == DRAGON_SOUL_INVENTORY);
Code:
pack.highlight = !bWereMine || (Cell.window_type == DRAGON_SOUL_INVENTORY);
Das 1. suchen und mit dem 2. ersetzen:
Code:
SetItem(DestCell, item);
Code:
SetItem(DestCell, item, true);
Datei: input_db.cpp
Der Methode CInputDB::ItemLoad(LPDESC d, const char * c_pData) folgendes hinzufügen:
Code:
void CInputDB::ItemLoad(LPDESC d, const char * c_pData)
{
	// [...]
	for (DWORD i = 0; i < dwCount; ++i, ++p)
	{
		LPITEM item = ITEM_MANAGER::instance().CreateItem(p->vnum, p->count, p->id);

		if (!item)
		{
			// [...]
		}

		item->SetSkipSave(true);
		item->SetSockets(p->alSockets);
		item->SetAttributes(p->aAttr);
		
		/********* NEW **********/
		item->SetLastOwnerPID(p->owner);
		/************************/
		
		// [...]

		if ((p->window == INVENTORY && ch->GetInventoryItem(p->pos)) ||
				(p->window == EQUIPMENT && ch->GetWear(p->pos)))
		{
			// [...]
		}
		else
		{
			// [...]
		}
		// [...]
	}
	// [...]
}
Datei: item.h
Das 1. suchen und mit dem 2. ersetzen:
Code:
		DWORD		GetLastOwnerPID()	{ return m_dwLastOwnerPID; }
Code:
		void		SetLastOwnerPID(DWORD pid) { m_dwLastOwnerPID = pid; }
		DWORD		GetLastOwnerPID()	{ return m_dwLastOwnerPID; }
Datei: item.cpp
Der Methode CItem::AddToCharacter(LPDESC d, const char * c_pData) folgendes hinzufügen:
Code:
bool CItem::AddToCharacter(LPCHARACTER ch, TItemPos Cell)
{
	// [...]
	if (INVENTORY == window_type)
	{
		// [...]
	}
	else if (DRAGON_SOUL_INVENTORY == window_type)
	{
		// [...]
	}
	
	/********* NEW *********/
	bool bWereMine = this->GetLastOwnerPID() == ch->GetPlayerID();
	/***********************/
	
	if (ch->GetDesc())
		m_dwLastOwnerPID = ch->GetPlayerID();

	event_cancel(&m_pkDestroyEvent);

	// OLD: ch->SetItem(TItemPos(window_type, pos), this);
	ch->SetItem(TItemPos(window_type, pos), this, bWereMine);
	// [...]
}



Die Dateien im Anhang in bspw. das ETC Archiv packen in das Verzeichnis D:/ymir work/ui/

Special Thanks geht hierbei an Souza, da er mich dazu gebracht hat, das ganze zu schreiben.

RE-Releases erlaubt und ERWÜNSCHT, solange meine Credits bestehen bleiben!

MfG
Attached Files
File Type: rar ui.rar (35.1 KB, 956 views)
File Type: rar comparable-files.rar (108.5 KB, 848 views)
Yiv is offline  
Thanks
59 Users
Old 02/11/2016, 23:09   #2
 
I´m Raylee's Avatar
 
elite*gold: 105
Join Date: Jun 2015
Posts: 453
Received Thanks: 294
****...
Und ich kaufte dieses Features erst vor einer Woche bei KEN!...
Irgendwie wird immer alles pub :P

Aber danke für das coole release!
I´m Raylee is offline  
Thanks
1 User
Old 02/11/2016, 23:22   #3
 
BizepsSupportAccount's Avatar
 
elite*gold: 0
Join Date: Dec 2014
Posts: 1,015
Received Thanks: 498
yiv for president!!
und schade das es so kommen musste..
BizepsSupportAccount is offline  
Thanks
1 User
Old 02/11/2016, 23:27   #4
 
elite*gold: 1
Join Date: Mar 2011
Posts: 44
Received Thanks: 14
Sowas ähnliches haben wir gecodet und heute ist es pub.. Echt schade , schönes Release ! Aber nun sieht man was das für eine com ist
sapaul2009 is offline  
Thanks
1 User
Old 02/11/2016, 23:30   #5
 
Yiv's Avatar
 
elite*gold: 47
Join Date: Feb 2012
Posts: 2,282
Received Thanks: 2,579
Quote:
Originally Posted by sapaul2009 View Post
[...] Aber nun sieht man was das für eine com ist
Ich kann aus deinem Post leider nicht entnehmen, auf was du diese Aussage beziehst

MfG
Yiv is offline  
Thanks
1 User
Old 02/11/2016, 23:32   #6

 
elite*gold: 192
Join Date: Aug 2009
Posts: 5,797
Received Thanks: 3,141
Boha .. habe es doch bisher immer so schön verkauft. Warum machst du es jetzt pub? Dein Code hat sich verkauft wie Kondome an Fasching!
[-Lee-] is offline  
Thanks
2 Users
Old 02/11/2016, 23:39   #7
 
elite*gold: 1
Join Date: Mar 2011
Posts: 44
Received Thanks: 14
Quote:
Originally Posted by Yiv View Post
Ich kann aus deinem Post leider nicht entnehmen, auf was du diese Aussage beziehst

MfG
Man erstellt was "einzigartiges" beispielsweise , kommt ein anderer und codet es nach.

Mfg
sapaul2009 is offline  
Old 02/11/2016, 23:47   #8
 
Yiv's Avatar
 
elite*gold: 47
Join Date: Feb 2012
Posts: 2,282
Received Thanks: 2,579
Quote:
Originally Posted by sapaul2009 View Post
Man erstellt was "einzigartiges" beispielsweise , kommt ein anderer und codet es nach.

Mfg
Abgesehen davon, dass das ein Feature von DE ist seit Ewigkeiten, ist es 100% nachgecodet .. ?

Quote:
Originally Posted by sapaul2009 View Post
Brauchst du evtl eine dicke Gurke ? Schalte Mal dein Brain an , es geht grade nicht um YIV sondern andere Leute
Entschuldigung, falsch verstanden.

MfG
Yiv is offline  
Thanks
1 User
Old 02/11/2016, 23:51   #9
 
elite*gold: 1
Join Date: Mar 2011
Posts: 44
Received Thanks: 14
Quote:
Originally Posted by [-Lee-] View Post
ehmmmm brauchst ein Lolli?
ER hat auch die Drachensteinalchemie von euch nachgecodet BRUDAAHHH

Brauchst du evtl eine dicke Gurke ? Schalte Mal dein Brain an , es geht grade nicht um YIV sondern andere Leute
sapaul2009 is offline  
Old 02/12/2016, 02:06   #10
 
elite*gold: 0
Join Date: May 2015
Posts: 7
Received Thanks: 0
can you help me?And if you can upload a better tutorial e.g. images or something..
CloseSource is offline  
Old 02/12/2016, 02:27   #11
 
Yiv's Avatar
 
elite*gold: 47
Join Date: Feb 2012
Posts: 2,282
Received Thanks: 2,579
Sorry, replace self.inventory with self.wndItem in uiInventory.py.

I won't do a better tutorial for now because I do not have any free time for that.

Regards
Yiv is offline  
Old 02/12/2016, 02:58   #12
 
Premiumlike's Avatar
 
elite*gold: 7
Join Date: Jul 2013
Posts: 439
Received Thanks: 166
Nice ding wollte es erst kaufen aber jetzt ist es hier danke dir Yiv
Premiumlike is offline  
Thanks
1 User
Old 02/12/2016, 06:47   #13
 
.T4Ump's Avatar
 
elite*gold: 0
Join Date: Oct 2013
Posts: 115
Received Thanks: 193
Someone can post here bin-source files? For compare.
.T4Ump is offline  
Old 02/12/2016, 10:02   #14
 
elite*gold: 0
Join Date: Aug 2009
Posts: 1,421
Received Thanks: 1,367
Sehr nett von dir, da spare ich mir die Zeit
blackout85 is offline  
Thanks
2 Users
Old 02/12/2016, 10:19   #15
 
[GA]LeNnT's Avatar
 
elite*gold: 0
Join Date: Jun 2015
Posts: 54
Received Thanks: 19
Now my customers (how buy yet the system) can confirm that isn't exactly same of your. I do by myself my codes and I would want to ask, all the proof that you code them before me because the system was coded just after a my customer ask and I've all the proof to confirm when was coded. And I don't consider what you say because I know that I copy nobody codes. You're python part it's a copy of dragon soul functions.



You can't accuse me, just because I load the effects slot in a loop.

My one in __CreateSlotEnableEffect() isn't show the effect (that's already make a big difference, you can understand by yourself it isn't your).
[GA]LeNnT is offline  
Reply


Similar Threads Similar Threads
Facebook Markierung
03/27/2015 - Off Topic - 3 Replies
Heyho! Kann mir jemand sagen, ob ich Leute markieren kann, die ich abonniert habe? Laut anderer Personen soll dies möglich sein, sobald ich ein @ eingebe, werden mir diese Personen aber nicht angezeigt. Hat sonst noch jemand eine Möglichkeit, Personen zu markieren, mit denen ich nicht befreundet bin? LG
Markierung der Landschaft-Addon?
01/14/2014 - WoW Bots - 2 Replies
Suche zum erstellen von HB Profilen ein Addon wo ich Ingame grafisch Hotspots erstellen kann. Nicht das sie HB automatisch erkennt, nur für mich, damit ich weis, wo ich bereits einen erstellt habe. Zb mit einem Roten Kreis an der stelle, gibt es sowas?
WoltLab - Online-Markierung
05/24/2013 - Metin2 Private Server - 1 Replies
Ahoi, bei mir kann ich die Ranggrafiken nicht anzeigen lassen. Benutzerrang ist erstellt, dort wird auch das Bild angezeigt, aber in der Teamliste unter meinem Namen nicht. Benutzerrang ist auch der Benutzergruppe zugewiesen. Ich hoffe ihr wisst was ich dagegen machen kann... Lg und danke im Vorraus
Raid addon für Rdy check Pull timer und Boden markierung
04/04/2013 - World of Warcraft - 2 Replies
Hallo Ich suche ein Addon für meinen Tank. Da ich kein klassisches ui verwende fehlt mir die Möglichkeit die Farbigen marks auf dne Boden zu setzen udn Rdy checks zu machen. Manche Tanks haben auch so einen pull timer also 5,4,3,2,1 los.
GTA: Samp, Unfreiwilliger Teleport bei Map Markierung?
09/08/2012 - Grand Theft Auto - 9 Replies
Warum werde ich teleportiert wenn ich irgendwas auf der Map markiere? Also auf der Karte? Geht auch ohne Admin Rechte! Wie Kann ich das nur für Admins einstellen?



All times are GMT +2. The time now is 14:12.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.