Jump to content

Crow

Inactive Member
  • Posts

    47
  • Joined

  • Last visited

  • Feedback

    0%

Everything posted by Crow

  1. EDIT: Solved. In World Editor I managed to change its color. Dear Devs, How can I recolor this quest arrow? 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.
  4. Thank you very much for your answers. I will try it and get back to you if there is any change.
  5. Dear Devs, Here's my problem: Items occupying 2 places: Items occupying 3 places: Items occupying 1 places: 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
  6. 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
  7. 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
  8. I'm making progress. I found it with the belt inventory here: metin2_patch_w21_etc.eix/epk But unfortunately I still can't find the itemshop warehouse icon. image: Found. It was in patch2.eix/epk.
  9. 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. 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
  10. Ahh finally solved. I just had to change the shadow color on the tga file. image:
  11. I've already done this. But there is still a semi-transparent gray background around the greenish-blue background. Where can I find it?
  12. 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: 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
  13. Thank you so much @ TAUMP ! It's working fine now!
  14. 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. 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.
  15. Dear Devs, I did it based on the following topic: [Hidden Content] 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
  16. 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
  17. Problem solved. Just changed byte to DWORD in char.h
  18. 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: 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
  19. 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
  20. 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.
  21. 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? 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
  22. Thank you very much for your help.
  23. I know. But if I try to rewrite it to DWORD or int32_t, it will display an error when compileing.
×
×
  • 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.