Jump to content


  • Posts

  • Joined

  • Last visited

  • Days Won


Owsap last won the day on April 16

Owsap had the most liked content!

About Owsap

Metin2 Dev

  • Status


  • Country
  • Gender


Social Networks

Recent Profile Visitors

5,350 profile views

Owsap's Achievements


Collaborator (7/14)

  • Dedicated Rare
  • Very Popular Rare
  • First Post
  • Collaborator
  • Conversation Starter

Recent Badges




Community Answers

  1. Glad someone had to point that out, obviously, every allocation must be freed after using it but I wasn’t sure if IcmpSendEcho2 function cleared it for me, but honestly, I forgot about it. Since you had good eyes in pointing that out, you also forgot to mention to close the IcmpFile HANDLE. The file in the tutorial "UIScript/MiniMap.py" already contains the correct structure to attach more children in the window. If you didn't use the file you can do this (2 options); Or you can just add; Links & Repository Updated.
  2. M2 Download Center Download Here ( GitHub ) Download Here ( MEGA ) Download Here ( Internal ) Hey M2Dev, here is a little statistics overview of the Round Trip Time (RTT) Ping and Packet Loss. Usefully for some, useless for others, so I decided to share it. Preview The image is an example... The results where not captured accurately because they kept updating while I tried to take screenshots. You will not get any PING on localhost. If you find any problems let me know.
  3. ''' @ uiToolTip.py ''' # Function "SetTooltipPosition" allows you to do this. # You can use the position of your mouse using wndMgr. # Example: (mouseX, mouseY) = wndMgr.GetMousePosition() # Don't forget to import wndMgr toolTip.SetTooltipPosition(mouseX - x, mouseY - y) # Or you can set the position manually. toolTip.SetTooltipPosition(x, y)
  4. If you are rendering the frames while the client is minimized, then maybe try to disable it. /// 1. @ Source/Client/UserInterface/PythonApplication.cpp // Search if (m_isMinimizedWnd) { canRender = true; } // Replace with if (m_isMinimizedWnd) { canRender = false; } Also, update your DirectX: https://www.microsoft.com/en-us/download/details.aspx?id=35 If you say it runs well on Debug build then use the macros set for it on Release and Distribute builds. Click here to download StateManager files without the macros.
  5. First of all, double check if the coordinates and the map index are correct in the server files. Server/share/locale/map/index 103 metin2_map_t1 105 metin2_map_t2 110 metin2_map_t3 111 metin2_map_t4 Server/share/locale/map/metin2_map_t1/Setting.txt Server/share/locale/map/metin2_map_t2/Setting.txt Server/share/locale/map/metin2_map_t3/Setting.txt Server/share/locale/map/metin2_map_t4/Setting.txt Click here to download all the files mentioned above and the additional server_attr file for each map. Server/Game99/CONFIG MAP_INDEX: 103 105 110 111 In your client files, you should also check if the atlasinfo.txt contains the correct coordinates for each map as in your server files. Client/locale/atlasinfo.txt Client/root/atlasinfo.txt metin2_map_t1 0 25600 3 3 metin2_map_t2 6400 0 1 1 metin2_map_t3 32000 0 1 1 metin2_map_t4 57600 0 1 1 You should also double check if you have another map on top of the guild map's coordinates, sometimes this is a common issue when warping to a map or simply using the GM go command. Here is what I mean, Each block represents a map, as you can see T1, T2, T3 and T4 are separate from each other and no other map is on top of them. Now, in this case you can clearly see another map is on top of map T1 which will mess the coordinates of the map. Click here to download the tool "M2Koordinator - By KingSora!1" used in the demonstration above. There is also a possibility that the map index is not correct in your source, this should be a rare case but it should also be verified. Source/Server/game/war_map.h Make sure you are using the correct map index. enum EWarMapIndex { WAR_MAP_INDEX_NORMAL = 110, WAR_MAP_INDEX_FLAG = 111, }; Instead of using makequestbutton in the guild_war_join.quest you can use send_letter. Here is an example:
  6. As @TMP4said, Dump Proto does not dump some values to the protos as it isn't needed by the client. Although your tutorial orientation is correct @TMP4, you have to consider that BYTE is unsigned and it will not dump the correct value of the AddonType since, usually, it holds the value -1 or 0. So, @ ahmet199, I have made a complete tutorial on how you can add it correctly to your Dump Proto tool and call it from your client. Dump Proto source. Client source. Finally, here is how you can get that value from the item module. Client source. Root example.
  7. function notice_all_yellow(text) notice_all("|cFFFFFF00|H|h" .. text) end
  8. You can find the version number in the client's source at UserInterface/Locale_inc.h Good luck with that version...
  9. There isn't any other proper way to fix this unless you calculate the sash from the matrix of the bone. You can check the author of the topic below that provides the best fix for this. If you don't want to calculate the position for every animation (which isn't worth it) while you're on a specific mount, dead or any other animation, it's worth checking out the topic. 1. Scaling method.
  10. Thanks for sharing, as always! You could also check the position realtime while the player is in range so it updates faster. /// 1. @ UserInterface/PythonMiniMap.cpp // Search @ void CPythonMiniMap::RenderAtlas const auto& PartyInfo = it->second; __GlobalPositionToAtlasPosition(PartyInfo->lX - m_dwAtlasBaseX, PartyInfo->lY - m_dwAtlasBaseY, &PartyInfo->fScreenX, &PartyInfo->fScreenY); // Replace with long xPos = PartyInfo->lX; long yPos = PartyInfo->lY; CInstanceBase* pkInst = CPythonCharacterManager::Instance().GetInstancePtrByName(pPartyMemberInfo->strName.c_str()); if (pkInst) { TPixelPosition kInstPos; pkInst->NEW_GetPixelPosition(&kInstPos); xPos = kInstPos.x + m_dwAtlasBaseX; yPos = kInstPos.y + m_dwAtlasBaseY; } __GlobalPositionToAtlasPosition(xPos - m_dwAtlasBaseX, yPos - m_dwAtlasBaseY, &PartyInfo->fScreenX, &PartyInfo->fScreenY);
  11. /// 1. @ game/char_affect.cpp // Search @ void CHARACTER::ClearAffect if (IS_NO_CLEAR_ON_DEATH_AFFECT(pkAff->dwType) || IS_NO_SAVE_AFFECT(pkAff->dwType)) { ++it; continue; } // Add below #if defined(__ALIGNMENT_AFFECT__) if (pkAff->dwType >= AFFECT_ALIGNMENT) { ++it; continue; } #endif
  12. #include "db.h" in your questlua_global.cpp.
  13. Replace auto_ptr with unique_ptr. Reference: https://en.wikipedia.org/wiki/Auto_ptr
  14. This is due to the dump_proto only reading one value although you have more values separated with a delimiter so you have to make sure you have the right delimiter. If your mob_proto.txt has for example: ANIMAL,ZODIAC You have to make sure your dump_proto is reading the symboly , And if your dump_proto for example has: ANIMAL|ZODIAC Then the delimiter you should be using is | Here is an example. /// 1. @ dump_proto/ItemCSVReader.cpp // Search @ int get_Mob_RaceFlag_Value string* arInputString = StringSplit(inputString, "|"); // 프로토 정보 내용을 단어별로 쪼갠 배열. // Replace with string* arInputString = StringSplit(inputString, ","); // 프로토 정보 내용을 단어별로 쪼갠 배열.
  15. Here is a rather "complete" tutorial and I hope you understand. First, let's start with the Server Source. Server Source We can do the MySQL part now since we have finished with the server part. MySQL Now let's move on to the Client Source. Client Source Let's not forget our special tool, DumpProto. DumpProto Last but not least your client needs to read the new bonus type. Client Root And finally, your bonus needs a name. Client Locale ⚠ Following the order of the points and apply types are very important, make sure every modification is in order since an incorent order may read another bonus. Sincerely, Owasp.
  • 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.