Jump to content

Crow

Inactive Member
  • Posts

    47
  • Joined

  • Last visited

  • Feedback

    0%

Posts posted by Crow

  1. EDIT:

    Solved.

    In World Editor I managed to change its color.

     

     

    Dear Devs,

    How can I recolor this quest arrow?

    spacer.png

    I tried to modify it here: 

    D:\metin2\crowmt2\Eternexus\Effect\ymir work\effect\etc\direction

    and these files:

    direction_land.mse
    direction_red.mse
    direciton_yellow.mse
    direction_green.mse

    But no changes are visible in the game.

    Thank you in advance for your answers.

    Sincerely, Crow

  2. Thank you @eddR

    Here's what I did:

    I tested it on a weapon with ID 7000.

    ID 7000 item_proto:

    7000	백선+0	ITEM_WEAPON	WEAPON_FAN	1	ANTI_MUSA | ANTI_ASSASSIN | ANTI_SURA	ITEM_TUNABLE	WEAR_WEAPON	NONE	0	0	7001	136(<-This is the refine_proto ID)	15	LEVEL	0	LIMIT_NONE	0	APPLY_ATT_SPEED	26	APPLY_NONE	0	APPLY_NONE	0	0	13	15	11	15	0	0	1	0

    In refine_proto, in the line with ID 136, I changed prob to 50.

    136	0	0	0	0	0	0	0	0	0	0	600	0	0	50

    This is how I tested it in the first round

    In char_item.cpp, I modified it like this:

    if (pkItemScroll->GetValue(0) == YONGSIN_SCROLL)
    		{
    			if (LC_IsYMIR() == true || LC_IsKorea() == true)
    				//success_prob = hyuniron_prob_euckr[MINMAX(0, item->GetRefineLevel(), 8)]; -- This is the original
    				success_prob = success_prob + 50;
    			else
    				//success_prob = hyuniron_prob[MINMAX(0, item->GetRefineLevel(), 8)]; -- This is the original
    				success_prob = success_prob + 50;
    		}

    So in refine_proto there is a 50% chance of success, but this is further increased by dragon scroll by +50%. This is 100% chance.

    (YONGSHIN_SCROLL is DRAGON_SCROLL, which I determined based on Value0.)

    See here:

    YONGSIN_SCROLL = 2,

    and in the database, value0 is = 2 for 39022 (dragon_scroll ID)

    In the first round, I have no idea how many objects I pulled up, but a lot from +0 to +1, and they all succeeded.

     

    In the second round..

    In char_item.cpp, I modified it like this: (What I really wanted)

    if (pkItemScroll->GetValue(0) == YONGSIN_SCROLL)
    		{
    			if (LC_IsYMIR() == true || LC_IsKorea() == true)
    				//success_prob = hyuniron_prob_euckr[MINMAX(0, item->GetRefineLevel(), 8)];
    				success_prob = success_prob + 10;
    			else
    				//success_prob = hyuniron_prob[MINMAX(0, item->GetRefineLevel(), 8)];
    				success_prob = success_prob + 10;
    		}

    Here we no longer succeeded in all. I had a 50+10=60% chance of improving it.

    So it worked too.

     

    I guess you know all of this, but I thought I'd write down what I changed and where in case it would be useful to someone who also doesn't know how to change it, like me.

  3. edit: I solved it.

    first:

    ### Description ###
    		self.AppendDescription(itemDesc, 26, self.NORMAL_COLOR)

    There was a second one:

    ### Hair Preview Image ###
    		if self.__IsHair(itemVnum):	
    			self.__AppendHairIcon(itemVnum)
    
    		### Description ###
    		self.AppendDescription(itemDesc, 26, self.NORMAL_COLOR)

    They are not snow-white, but.. Then I'll look at a different, easier to read color.

     

     

    Thank you. Maybe I should look at the client source as well. I might find something about itemSummary and make itemDesc based on it.

    • Good 1
  4. Dear Devs,

    Here's my problem:

    Items occupying 2 places:

    spacer.png

    Items occupying 3 places:

    spacer.png

    Items occupying 1 places:

    spacer.png

    The pictures show that items that take up 1 place in the inventory work excellently. However, items that take up 2 or 3 spaces have something wrong with them.

    On both the client and server side, I rewrote everything I had to do from byte to UINT, increased inventory max as much as needed, quickslot, etc.

    Has anyone ever encountered such an issue? The warehouse is working normally and it's bigger.

    Sincerely, Crow

  5. Dear Devs,

    I tried to find some description to see if anyone had a similar problem before, but I couldn't really find anything useful.

    In char_item.cpp I want to change the values of refine scrolls, etc. For example, Dragon scroll ingame says +10% success rate, but I don't see any trace of this in the source file. I guess the blacksmith handbook could be similar. Now I can't really get along with these items called CHUKBOK etc.

    There is a topic here that says that yongshin_scroll is blessing scroll and that in item_proto you have to look at value0, but for me value0 is 0 for blessing scroll.

    and in char_item.cpp:

    YONGSIN_SCROLL = 2,

    So I guess that's not the case.

    Actually, I don't want to rewrite it too much, I want the blessing scroll to draw with the prob in the database, the blacksmith handbook to give +10%, and the dragon scroll to give +20%.

    It's probably not as complicated as it seems, but I don't understand this part yet, so I hope someone can help.

    Sincerely, Crow

  6. Dear Devs,

    I want to change the color of my item descriptions.

    Currently, they are at the base, more gray or semi-white. I want them to be completely white.

    I found this line in uitooltip.py:

    		### Description ###
    		self.AppendDescription(itemDesc, 26)
    		self.AppendDescription(itemSummary, 26, self.CONDITION_COLOR)

    If I do itemDesc as an example of itemSummary, nothing happens.

    Does anyone know where these might be colored?

    In itemdesc.txt I tried the following: |cffffffffdescriptionhere...   But it did not become whiter, and even |c. text was written in front of it.

    Hope someone can help.

    Sincerely, Crow

  7. Dear Devs, 

    In 4250 client, where can I find the image below? I have already found and modified the costume and DS images. However, I haven't found the rest anywhere so far.

    spacer.png

     

    Here I have already searched:

    - ETC.eix/epk

    - metin2_patch_ds.eix/epk

    - metin2_patch_dss_box.eix/epk

    - metin2_patch_etc.eix/epk

    - metin2_patch_eu3.eix/epk

    - metin2_patch_eu4.eix/epk

    Of course I won't give up and keep looking, but if anyone knows could you share it with me?

    Sincerely, Crow

  8. Dear Devs,

    I want to change the colors of my thinboard. In the picture, I am progressing quite well, but I am stuck with the background color in the semi-transparent part of the corner and line section.

    Image:

    spacer.png

    Where can I find this section?

    I searched here: root/uiquest.py

    and here: root/ui.py

    I guess I should find something like this: grp.GenerateColor(0.0, 0.0, 0.0, 0.51)

    Someone could help please?

    Sincerely, Crow

  9. Thank you for your response. @ TAUMP

    Now its better but still not good something.

    On the picture the left sword is the last working space. I can move it. 

    But the right sword it's not moving anywhere.

    After i close the safebox, the left sword move to the first page but stays in the same place.

    The right sword it's disappear and i can place a new sword in the same place.

    But they are not truly disappear. I can see them in the database player/item table. 

    spacer.png

    What could be the problem?

    tables.h:

    #define SAFEBOX_MAX_NUM			270

    packet.h:

    typedef struct command_safebox_checkout
    {
    	BYTE	bHeader;
    	UINT	bSafePos;
    	TItemPos	ItemPos;
    } TPacketCGSafeboxCheckout;
    
    typedef struct command_safebox_checkin
    {
    	BYTE	bHeader;
    	UINT	bSafePos;
    	TItemPos	ItemPos;
    } TPacketCGSafeboxCheckin;

    safebox.cpp:

    if (m_iSize)
    		m_pkGrid = M2_NEW CGrid(10, m_iSize);
    	else
    		m_pkGrid = NULL;
    
    if (pkOldGrid)
    		m_pkGrid = M2_NEW CGrid(pkOldGrid, 10, m_iSize);
    	else
    		m_pkGrid = M2_NEW CGrid(10, m_iSize);
    
    if (bCell >= 10 * m_iSize)
    int max_position = 10 * m_iSize;
    
    LPITEM CSafebox::GetItem(UINT bCell)
    bool CSafebox::MoveItem(UINT bCell, UINT bDestCell, BYTE count)

    safebox.h:

    bool		MoveItem(UINT bCell, UINT bDestCell, BYTE count);
    LPITEM		GetItem(UINT bCell);

    packet.h:

    typedef struct command_safebox_checkout
    {
        BYTE        bHeader;
        UINT        bSafePos;
        TItemPos	ItemPos;
    } TPacketCGSafeboxCheckout;
    
    typedef struct command_safebox_checkin
    {
        BYTE        bHeader;
        UINT        bSafePos;
        TItemPos	ItemPos;
    } TPacketCGSafeboxCheckin;

    PythonNetworkStream.h:

    bool SendSafeBoxCheckinPacket(TItemPos InventoryPos, UINT bySafeBoxPos);
    bool SendSafeBoxCheckoutPacket(UINT bySafeBoxPos, TItemPos InventoryPos);
    bool SendSafeBoxItemMovePacket(UINT bySourcePos, UINT byTargetPos, uint8_t byCount);
    
    but I tried it that way (That wasn't good either)
    bool SendSafeBoxItemMovePacket(UINT bySourcePos, UINT byTargetPos, BYTE byCount);

    PythonNetworkStreamPhaseGameItem.cpp:

    bool CPythonNetworkStream::SendSafeBoxCheckinPacket(TItemPos InventoryPos, UINT bySafeBoxPos)
    bool CPythonNetworkStream::SendSafeBoxCheckoutPacket(UINT bySafeBoxPos, TItemPos InventoryPos)
    bool CPythonNetworkStream::SendSafeBoxItemMovePacket(UINT bySourcePos, UINT byTargetPos, uint8_t byCount)
    
    but I tried it that way (That wasn't good either)
    bool CPythonNetworkStream::SendSafeBoxItemMovePacket(UINT bySourcePos, UINT byTargetPos, BYTE byCount)

    PythonSafeBox.h:

    enum
    {
    	SAFEBOX_SLOT_X_COUNT = 10,
    	SAFEBOX_SLOT_Y_COUNT = 9,
    	SAFEBOX_PAGE_SIZE = SAFEBOX_SLOT_X_COUNT * SAFEBOX_SLOT_Y_COUNT,
    };

    I don't understand what's wrong.

    Everything looks fine.

  10. Dear Devs,

    I did it based on the following topic: 

    https://metin2.dev/forum/35-community-support-questions-answers/?do=add

     

    But I ran into a small problem.

    The first two pages work perfectly, but on the last page of the warehouse, if I put an item in the last two rows, I can't take it out or put it away.

    What's wrong?

    I couldn't find the lines in safebox.h that I had to search for, so I tried to modify it, maybe I did something wrong here?

    safebox.h:

    #ifndef __INC_METIN_II_GAME_SAFEBOX_H__
    #define __INC_METIN_II_GAME_SAFEBOX_H__
    
    class CHARACTER;
    class CItem;
    class CGrid;
    
    class CSafebox
    {
    	public:
    		CSafebox(LPCHARACTER pkChrOwner, int iSize, DWORD dwGold);
    		~CSafebox();
    
    		bool		Add(DWORD dwPos, LPITEM pkItem);
    		LPITEM		Get(DWORD dwPos);
    		LPITEM		Remove(DWORD dwPos);
    		void		ChangeSize(int iSize);
    
    		bool		MoveItem(UINT bCell, UINT bDestCell, DWORD count);
    		LPITEM		GetItem(UINT bCell);
    
    		void		Save();
    
    		bool		IsEmpty(DWORD dwPos, BYTE bSize);
    		bool		IsValidPosition(DWORD dwPos);
    
    		void		SetWindowMode(BYTE bWindowMode);
    
    	protected:
    		void		__Destroy();
    
    		LPCHARACTER	m_pkChrOwner;
    		LPITEM		m_pkItems[SAFEBOX_MAX_NUM];
    		CGrid *		m_pkGrid;
    		int		m_iSize;
    		long		m_lGold;
    
    		BYTE		m_bWindowMode;
    };
    
    #endif

    Thank you for your answers!

    Sincerely, Crow

  11. Dear Devs,

    I have a problem.

    I can put the item in the warehouse, the first 2 pages work normally. On the last page, however, I can't take it out or put it away in the bottom two rows.

    Also, I have a different safebox.h file. Did I do something wrong in this?

    code:

    #ifndef __INC_METIN_II_GAME_SAFEBOX_H__
    #define __INC_METIN_II_GAME_SAFEBOX_H__
    
    class CHARACTER;
    class CItem;
    class CGrid;
    
    class CSafebox
    {
    	public:
    		CSafebox(LPCHARACTER pkChrOwner, int iSize, DWORD dwGold);
    		~CSafebox();
    
    		bool		Add(DWORD dwPos, LPITEM pkItem);
    		LPITEM		Get(DWORD dwPos);
    		LPITEM		Remove(DWORD dwPos);
    		void		ChangeSize(int iSize);
    
    		bool		MoveItem(UINT bCell, UINT bDestCell, DWORD count);
    		LPITEM		GetItem(UINT bCell);
    
    		void		Save();
    
    		bool		IsEmpty(DWORD dwPos, BYTE bSize);
    		bool		IsValidPosition(DWORD dwPos);
    
    		void		SetWindowMode(BYTE bWindowMode);
    
    	protected:
    		void		__Destroy();
    
    		LPCHARACTER	m_pkChrOwner;
    		LPITEM		m_pkItems[SAFEBOX_MAX_NUM];
    		CGrid *		m_pkGrid;
    		int		m_iSize;
    		long		m_lGold;
    
    		BYTE		m_bWindowMode;
    };
    
    #endif

     

  12. Dear Devs,

    Since I couldn't find a topic like this, I thought I'd open one. My problem is that I just can't figure out where I can increase max inventory towards 256.

    Images:

    spacer.png

    spacer.png

    In the first picture, the first 4 inventories look like this, but the 5th can only hold 4 blessing scrolls. 4x63=252+4=256

    So I would have to rewrite BYTE, but it just doesn't work out anyway.

    I'll share a few lines of code that I've rewritten in case I need something else that I don't know about at the moment.

    exchange.cpp:

    bool CExchange::CheckSpace()
    {
    	static CGrid s_grid1(5, INVENTORY_MAX_NUM/5/6);
    	static CGrid s_grid2(5, INVENTORY_MAX_NUM/5/6);
    	static CGrid s_grid3(5, INVENTORY_MAX_NUM/5/6);
    	static CGrid s_grid4(5, INVENTORY_MAX_NUM/5/6);
    	static CGrid s_grid5(5, INVENTORY_MAX_NUM/5/6);
    	static CGrid s_grid6(5, INVENTORY_MAX_NUM/5/6);
    	
    	s_grid1.Clear();
    	s_grid2.Clear();
    	s_grid3.Clear();
    	s_grid4.Clear();
    	s_grid5.Clear();
    	s_grid6.Clear();
    
    	LPCHARACTER	victim = GetCompany()->GetOwner();
    	LPITEM item;
    
    	int i;
    
    	const int perPageSlotCount = INVENTORY_MAX_NUM / 6;
    
    	for (i = 0; i < INVENTORY_MAX_NUM; ++i) {
    		if (!(item = victim->GetInventoryItem(i)))
    			continue;
    
    		int32_t itemSize = item->GetSize();
    
    		if (i < perPageSlotCount)
    			s_grid1.Put(i, 1, itemSize);
    		else if (i < perPageSlotCount * 2)
    			s_grid2.Put(i - perPageSlotCount, 1, itemSize);
    		else if (i < perPageSlotCount * 3)
    			s_grid3.Put(i - perPageSlotCount * 2, 1, itemSize);
    		else if (i < perPageSlotCount * 4)
    			s_grid4.Put(i - perPageSlotCount * 3, 1, itemSize);
    		else if (i < perPageSlotCount * 5)
    			s_grid5.Put(i - perPageSlotCount * 4, 1, itemSize);
    		else
    			s_grid6.Put(i - perPageSlotCount * 5, 1, itemSize);
    	}
    	//-----------------------------------------------------------
    	
    	// ??... ??°ˇ °ł?´˝? °°??¸¸... ?????® ?????? ł?¸? ???? ?¸°? ??¶? ¸¸?? ł? ?߸???´? ¤?¤?
    	static std::vector <WORD> s_vDSGrid(DRAGON_SOUL_INVENTORY_MAX_NUM);
    	
    	// ??´? ?????®?? ±ł?????? ???? °ˇ´????? ????·?, ?????® ???? ????´? ?????®?? ???? ¶§ ????·? ??´?.
    	bool bDSInitialized = false;
    	
    	for (i = 0; i < EXCHANGE_ITEM_MAX_NUM; ++i)
    	{
    		if (!(item = m_apItems[i]))
    			continue;
    		
    		int32_t itemSize = item->GetSize();
    
    		if (item->IsDragonSoul())
    		{
    			if (!victim->DragonSoul_IsQualified())
    			{
    				return false;
    			}
    
    			if (!bDSInitialized)
    			{
    				bDSInitialized = true;
    				victim->CopyDragonSoulItemGrid(s_vDSGrid);
    			}
    
    			bool bExistEmptySpace = false;
    			WORD wBasePos = DSManager::instance().GetBasePosition(item);
    			if (wBasePos >= DRAGON_SOUL_INVENTORY_MAX_NUM)
    				return false;
    			
    			for (int i = 0; i < DRAGON_SOUL_BOX_SIZE; i++)
    			{
    				WORD wPos = wBasePos + i;
    				if (0 == s_vDSGrid[wPos])
    				{
    					bool bEmpty = true;
    					for (int j = 1; j < item->GetSize(); j++)
    					{
    						if (s_vDSGrid[wPos + j * DRAGON_SOUL_BOX_COLUMN_NUM])
    						{
    							bEmpty = false;
    							break;
    						}
    					}
    					if (bEmpty)
    					{
    						for (int j = 0; j < item->GetSize(); j++)
    						{
    							s_vDSGrid[wPos + j * DRAGON_SOUL_BOX_COLUMN_NUM] = wPos + 1;
    						}
    						bExistEmptySpace = true;
    						break;
    					}
    				}
    				if (bExistEmptySpace)
    					break;
    			}
    			if (!bExistEmptySpace)
    				return false;
    		}
    		else
    		{
    			int32_t iPos = s_grid1.FindBlank(1, itemSize);
    			if (iPos >= 0) {
    				s_grid1.Put(iPos, 1, itemSize);
    				continue;
    			}
    
    			iPos = s_grid2.FindBlank(1, itemSize);
    			if (iPos >= 0) {
    				s_grid2.Put(iPos, 1, itemSize);
    				continue;
    			}
    
    			iPos = s_grid3.FindBlank(1, itemSize);
    			if (iPos >= 0) {
    				s_grid3.Put(iPos, 1, itemSize);
    				continue;
    			}
    
    			iPos = s_grid4.FindBlank(1, itemSize);
    			if (iPos >= 0) {
    				s_grid4.Put(iPos, 1, itemSize);
    				continue;
    			}
    
    			iPos = s_grid5.FindBlank(1, itemSize);
    			if (iPos >= 0) {
    				s_grid5.Put(iPos, 1, itemSize);
    				continue;
    			}
    
    			iPos = s_grid6.FindBlank(1, itemSize);
    			if (iPos >= 0) {
    				s_grid6.Put(iPos, 1, itemSize);
    				continue;
    			}
    
    			return false;  // No space left in inventory
    			
    		}
    	}
    
    	return true;
    }

    char_item.cpp:

    bool CHARACTER::IsEmptyItemGrid(TItemPos Cell, BYTE bSize, int iExceptionCell) const
    {
    	switch (Cell.window_type)
    	{
    	case INVENTORY:
    		{
    			int32_t bCell = Cell.cell;
    
    			// bItemCell은 0이 false임을 나타내기 위해 + 1 해서 처리한다.
    			// 따라서 iExceptionCell에 1을 더해 비교한다.
    			++iExceptionCell;
    
    			if (Cell.IsBeltInventoryPosition())
    			{
    				LPITEM beltItem = GetWear(WEAR_BELT);
    
    				if (NULL == beltItem)
    					return false;
    
    				if (false == CBeltInventoryHelper::IsAvailableCell(bCell - BELT_INVENTORY_SLOT_START, beltItem->GetValue(0)))
    					return false;
    
    				if (m_pointsInstant.bItemGrid[bCell])
    				{
    					if (m_pointsInstant.bItemGrid[bCell] == iExceptionCell)
    						return true;
    
    					return false;
    				}
    
    				if (bSize == 1)
    					return true;
    
    			}
    			else if (bCell >= INVENTORY_MAX_NUM)
    				return false;
    
    			if (m_pointsInstant.bItemGrid[bCell])
    			{
    				if (m_pointsInstant.bItemGrid[bCell] == iExceptionCell)
    				{
    					if (bSize == 1)
    						return true;
    
    					int j = 1;
    					int32_t bPage = bCell / (INVENTORY_MAX_NUM / 6);
    
    					do
    					{
    						int32_t p = bCell + (5 * j);
    
    						if (p >= INVENTORY_MAX_NUM)
    							return false;
    
    						if (p / (INVENTORY_MAX_NUM / 6) != bPage)
    							return false;
    
    						if (m_pointsInstant.bItemGrid[p])
    							if (m_pointsInstant.bItemGrid[p] != iExceptionCell)
    								return false;
    					}
    					while (++j < bSize);
    
    					return true;
    				}
    				else
    					return false;
    			}
    
    			// 크기가 1이면 한칸을 차지하는 것이므로 그냥 리턴
    			if (1 == bSize)
    				return true;
    			else
    			{
    				int j = 1;
    				int32_t bPage = bCell / (INVENTORY_MAX_NUM / 6);
    
    				do
    				{
    					int32_t p = bCell + (5 * j);
    
    					if (p >= INVENTORY_MAX_NUM)
    						return false;
    
    					if (p / (INVENTORY_MAX_NUM / 6) != bPage)
    						return false;
    
    					if (m_pointsInstant.bItemGrid[p])
    						if (m_pointsInstant.bItemGrid[p] != iExceptionCell)
    							return false;
    				}
    				while (++j < bSize);
    
    				return true;
    			}
    		}

    length.h:

    INVENTORY_MAX_NUM		= 378,

    inventorywindow.py:

    EQUIPMENT_START_INDEX = 378

    uiinventory.py:

    self.inventoryTab.append(self.GetChild("Inventory_Tab_01"))
    self.inventoryTab.append(self.GetChild("Inventory_Tab_02"))
    self.inventoryTab.append(self.GetChild("Inventory_Tab_03"))
    self.inventoryTab.append(self.GetChild("Inventory_Tab_04"))
    self.inventoryTab.append(self.GetChild("Inventory_Tab_05"))
    self.inventoryTab.append(self.GetChild("Inventory_Tab_06"))
    
    self.inventoryTab[0].SetEvent(lambda arg=0: self.SetInventoryPage(arg))
    self.inventoryTab[1].SetEvent(lambda arg=1: self.SetInventoryPage(arg))
    self.inventoryTab[2].SetEvent(lambda arg=2: self.SetInventoryPage(arg))
    self.inventoryTab[3].SetEvent(lambda arg=3: self.SetInventoryPage(arg))
    self.inventoryTab[4].SetEvent(lambda arg=4: self.SetInventoryPage(arg))
    self.inventoryTab[5].SetEvent(lambda arg=5: self.SetInventoryPage(arg))
    self.inventoryTab[0].Down()
    self.inventoryPageIndex = 0
    
    def SetInventoryPage(self, page):
    self.inventoryTab[self.inventoryPageIndex].SetUp()
    self.inventoryPageIndex = page
    self.inventoryTab[self.inventoryPageIndex].Down()
    self.RefreshBagSlotWindow()
    
    if slotNumber >= player.INVENTORY_PAGE_SIZE*self.inventoryPageIndex:
    slotNumber -= player.INVENTORY_PAGE_SIZE*self.inventoryPageIndex

    beltinventorywindow.py:

    EQUIPMENT_START_INDEX = 378

    GameType.h:

    const DWORD c_Inventory_Page_Size = 7*9; // x*y
    const DWORD c_Inventory_Page_Count = 6;

    Hope someone can help.

    I have no idea what I'm missing out.

    Thank you in advance for your answers.

    Sincerely, Crow

  13. Dear Devs,

    I want to take the default ore spawn out of the game and control which one to dump from stone.txt per map, where, etc. I successfully solved this in stone.txt, although in mining.cpp even if I change the MAX_ORE from 18 to 0 and delete the contents of the MAX_ORE, it still spawns the ores.

    How can I eliminate their spawn completely?

    Thanks for your answers.

    Sincerely, Crow

    Solved. Removed r type 2001 vnums from stone.txt

  14. Hello,

    I don't know if the problem has been solved since then, or if it's still current, for you or anyone else, but there is a solution.

    Do this in char.cpp:

    void CHARACTER::DetermineDropMetinStone()
    {
        m_dwDropMetinStone = 0;
    }

    Then go here: usr/game/server/share/locale/xxx.(or whatever is your path) Edit this file here: mob_drop_item.txt

    Example:

    Group	비마석
    {
    	Mob	8001	--> Metin ID. 
    	Type	drop
    	1	28430	1	100		--> The last two values: quantity and % chance
    	2	28431	1	100
    	3	28432	1	100
    	4	28433	1	100
    	5	28434	1	100
    	6	28435	1	100
    	7	28436	1	100
    	8	28437	1	100
    	9	28438	1	100
    	10	28439	1	100
    	11	28440	1	100
    	12	28441	1	100
    	13	28442	1	100
    	14	28443	1	100
    }

    With this solution only +4 stones will drop from metins.

     

    • Metin2 Dev 1
  15. Dear Devs,

    When loading the 4 inventory, everything seemed to be fine at first. I entered the game, filled the last page with skill books, and after a quick entry and exit, they disappeared from the last row. They are probably there because I can't put anything in their place, but for some reason I can't see them. What's wrong?

    spacer.png

    I checked the client, client source, server side source, but everything is fine. 

    The items in the last two rows and the last two places in the third row are gone.

    But the place is still occupied.

    Solved

×
×
  • Create New...

Important Information

Terms of Use / Privacy Policy / Guidelines / We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.