Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 04/25/24 in Posts

  1. Download Alternative download links → GG Drive Hello all, I decided to offer this package for free to someone who really needs it. The archive contains everything you need to modify this template Careful! The interface is PSD only You can contact me anytime if you want to edit something Have fun!
    2 points
  2. INTRODUCTION & PROBLEM Hello, today we will fix a few errors, especially the error that caused the core down by giving an unexpected negative (-) arg (number) in the commands (Example; /mob 101 -1), and we will also regulate the use of "ChatPacket" in this functions. WHY ? GMs are already part of the team, you may ask why we need this, you are right, but do not forget that a GM who does not have coding knowledge may accidentally trigger this, let's not leave it to chance. SOLUTION The process we will do is simple, it will be enough to make sure that the given arg value is within the range we want, let's get started. [Hidden Content]
    2 points
  3. Arween2 Trailer By SpiroArts
    1 point
  4. Download Easy , simple presentation page made for oldgodsmt2 server , You can modify it as you want .
    1 point
  5. Once I planned to create a football map, but the idea was scrapped in the early stages. I'm handing over the map to you in an incomplete form (perhaps it will serve as a basis for someone to create their own football ground). Download: [Hidden Content]
    1 point
  6. M2 Download Center Download Here ( Internal ) Hi, I don't think I have to tell much about this. It'll look like the official one, some code is c&p from the official root files. Most of the own written code is NOT like the offical one. I added a new python module ("renderTarget"), so you don't need methods which officials use, like this: "playerm2g2.MyShopDecoShow( True )" You are able to display more than one render target at the same time. If you want to know more, take a look at the code. If there are any bugs, just message me. Download: [Hidden Content] Password: Cxl.Services
    1 point
  7. M2 Download Center Download Here ( Internal )
    1 point
  8. M2 Download Center Download Here ( Internal ) Download Here ( GitHub ) Everything works fine, just add a part of "python" client, so that users change language with a button, i was lazy to do it. [Hidden Content] - The system saves one language per account. - It's capable of translating quest, client, etc. - The system takes the language from the client's mylang.cfg file and save on DB of this account in the client. The guide simply focuses on looking for DEFINE: ENABLE_MULTILANGUAGE So you can see how I placed it.
    1 point
  9. Soon I want to release another version of myslq8 and directx9 files with fixes and additions. Should I add some systems too? I'm mainly thinking about the now rather basic systems such as mounts, cheque, etc. I'm thinking about talismans and the elemental system, but for now I just fixed type 33 and use these slots for experience rings, etc.
    1 point
  10. M2 Download Center Download Here ( Internal ) So, someone asked me to do this some time ago, I know some servers have already thought of this idea and have been present for some time but anyway I will share it since I haven’t seen nothing similar shared elsewhere and this has been sitting around my hard drive. Although it's something very simple, it’s a good feeling to see from the inventory the status of the dragon soul. Instead of adding the tutorial here I will link a repository to the guidelines. Git Repository [Hidden Content]
    1 point
  11. Download Alternative download links → M2DL (Without VDI) The file uploaded to Google Drive. Hello! Today i want to share my modifications what i changed on the @ TMP4 base. (Thanks for your work guys.♥) So whats inside in this modified TMP4 base? Quest message shown faster. GIF Sash system. GIF Infinity Bravery cape + the percentage of the pulled mobs increased to 80% (default was 50%) If you kill a mob, will despawn faster. 3 sec. (default was 10 sec) GIF Emoji in textline. GIF ID, Type, Subtype in tooltip, only for GMs. GIF Mount's rotate speed increased. GIF Offline shop (Great) + offline shop search. GIF Weapon costume.(The costumes are only illustration for better understand.) GIF Mount follow + mount item goes to the costume window. GIF Shining system by Sanii. GIF Inbuilt GR2 animation. GIF Won system. DS slot active effect. GIF Mount - unmount delay fix. GIF Fast exit button(The client will close immediately if you click on 'Exit game' button.) Multilanguage. (Only for item names (client side)) GIF Clickable buttons in inventory for open off shop and itemshop storage. Add 10x statpoints by pressing CTRL+Lclick. GIF 4 inventory, 6th skills. Known bugs/problems: The sash is not attached to the character's back properly when mounting. (This is a common bug/problem. If you know a fix for it, share it with us, please.) The multilanguage is only translating the item names, cuz the mob names arent read from client. Last but not least, i hope i did'nt brake any rules with this "release", cuz i really dont want to. Link for V2: Sincerely: Ulthar
    1 point
  12. M2 Download Center Download Here ( Internal ) Conversation between me and vegas: [21:18:22] ####:: VegaS are you here? [21:18:31] VegaS™: Yes. [21:19:09] ####: Man, some people sell your title system what was public on tur****. [21:22:14] ####:: [Hidden Content] [21:22:22] ####:: Here is this shit what he sell. [21:28:33] ####:: Shit all resellers , dude . [21:34:50] VegaS™: There are many whores in this area, so best bet would be to post this system because some hookers make money from him unjustly. So send them harlots that vegas has big dick and that will fuck all in the ass. This system has a crappy code, you can keep the recycle bin, is the first version of shit. I apologize for what my clients who bought this system, but I'll make updates to it and will be more advanced. I can not enter metin2dev this time because my account is suspended for a short period of time, but I will return very soon, remember that. Why has reached this release online? Since titlesystem first version had over 35 buyers from title and I sold at all retarded. But now these latest systems and will not sell than some people you know for a long time and know 100% that they are not whores. Latest systems are stored for each client, I know 100% who I was because when you reach for resellers or free. And remember one thing: - I Will never sell any system or any other things for Romanian people, if someone tries to sell it or mean it's fucking scammer, and if u see Something scammer who sell my works, you can report this to me. Soon it ready new website, where there will be all new systems sales and presentations. ^^ Go on metin2dev and post system and send them the message that I told you. (sorry for my english) Download: [Hidden Content] Have fun, scammer ^^ #request close topic, so much spam xD
    1 point
  13. Hi all, i created a tool for my Server that can be used to create from scratch a mob drop item (should be faster than doing it by hand). I decided to post it for the community hoping that it will help on building your servers speeding up the annoying steps of adjusting the drop of your mobs manually. In order to change the language of the mobs / items that are going to be used in the software you need to use your mob_names.txt and item_names.txt and place it in the folder names of the software. Download Link: MobDropHelper Source code: GITHUB or M2DL VirusTotal: Virustotal Create txt: Will create an empty txt file called mob_drop_info.txt if it does not exist in a subfolder called mob_drop where the exe file is located. Open file: Will open automatically and show the content of the mob_drop_info.txt from the mob_drop folder Open group: Will open a new group in your mob_drop_info.txt using the name of the mob you are indicating in the search box on the left side Add Field: will add the drop value with the corresponding values you choosed Close Group: will close the current group Write to file: will automatically write the content of the text you see in the program to the mob_drop_info.txt in the mob_drop folder (it will empty the file and the write the current content) Hopefully this will help you improving the speed of building a decent drop for your servers. Regards. 4lphA
    1 point
  14. Download Center Internal Mega.nz GitHub Hi devs, I wanted to add this feature to my mainlines, being that this system is now considered standard in all servers. I downloaded the public version that emulated how the Pet System worked, but I decided to make my own (and am sharing it so you can test it for me as well) In game pic: Pros: Fewer lines of code (50 or so, versus 1200+ in the public system) By not using apply_type and value to assign the monster to ride, we will not lose a usable bonus Being horse-based, trivially it is code that has been tested for years. If you are on the mount and warp, you will still be on the mount at login (being that we use EnterHorse) You can take advantage of the horse name system with a few modifications You only get mount bonuses if you are riding it and not while it is summoned Cons: I couldn't find any Thanks to @ HFWhite for testing. You should at least have the mount costume system.
    1 point
  15. M2 Download Center Download Here ( Google Drive ) Download Here ( Internal ) I made a collection of official login, loading screens and wallpapers. There are over 100 picture, here is a quick preview: Don't worry, you will find categorized folders at the link, not in bulk. I may extend it in the future since there are more, mostly newer images. Regards, TMP4
    1 point
  16. This itemshop is an open source project written by CYN3 with the assistance of the sura_head community. Special thanks to: CYN3 Amas KaiaProductions Installation guide: [Hidden Content]
    1 point
  17. Special Item Group Creator A web tool created and designed to facilitate and save time. We have all been there, editing a giftbox and having to edit the index of the items, finding the virtual number (vnum), name, etc... These steps can be time wasting and sometimes frustrating so the point of this tool is to simply help you in that term. Let me introduce you to, An example of what it does, The previews of the web tool are self-explanatory and demonstrates exactly what it does. I have been tempted in the past to make this web tool but I never had the chance, but it's finally done! Enough talking about what it does and the story behind it, check it for yourself! You can access this tool via, [Hidden Content] More Information This web tool uses the latest available protos shared on M2Dev. There are currently 9 languages available to switch between. If you want to contribute in adding more languages or if you find any issues on current translations don't hesitate to contact me or reply on this topic. This tool is only focused on special item group, "special_item_group.txt". There is support for multiple drop types, you can find more information about them on the FAQ below the group type selection field. The tool will be updated every time there is a new proto and if there are any issues reported with the same. Finally, please take in consideration that this web tool is new and currently on a beta version, if you find any minority, please report the issue. . Hope you like it
    1 point
  18. M2 Download Center Download Here ( Internal ) Hello everyone, is my first release and it is something that many people already have, but for those who do not have it, I share it. Then, let's start. root/contsinfo.py root/interfacemodule.py root/uiinventory.py: root/uitaskbar.py: locale_xx/locale/xx/ui/taskbar.py locale_xx/locale/xx/locale_interface.txt uiscript ---> Create a new file with this name expandedmoneytaskbar.py and paste this: One extra step: locale_xx/locale/xx/ui/inventorywindow.py or uiscript/inventorywindow.py or uiscript/inventorywindowex.py If you have this error: InventoryWindow.LoadWindow.BindObject - <type 'exceptions.AttributeError'>:'ImageBox' object has no attribute 'SetEvent' Then: open root/ui.py: If you do not have ENABLE_CHEQUE_SYSTEM and ENABLE_GEM_SYSTEM in your src client, then delete those parts of the code or open: UserInterface/PythonApplicationModule.cpp: I recommend putting this as long as you have cheque_system and gem_system (otherwise the interface is a little ugly) I hope it serves some people, greetings!!
    1 point
  19. Reversed From Official Binary A feature created so that each character has a separate config settings [Hidden Content] [Hidden Content]
    1 point
  20. M2 Download Center Download Here ( Internal ) Hi, here I publish my edit of the public Render Target System. I hate it, when people earn money with public systems. Preview: [Hidden Content] DL: [Hidden Content] Original Thread [Hidden Content]
    1 point
  21. M2 Download Center Download Here ( Internal ) Hi devs, today I will release the fix I made for the skill cooldown, already fixed on official servers, this is the bug it self: And this is the fix: Regards! Fix skill cooldown ~ Shang.rar ### root/ui.py ### Search: def SetSlotCoolTimeColor(self, slotIndex, r, g, b, a): wndMgr.SetSlotCoolTimeColor(self.hWnd, slotIndex, r, g, b, a) ### Add after: def StoreSlotCoolTime(self, key, slotIndex, coolTime, elapsedTime = 0.0): wndMgr.StoreSlotCoolTime(self.hWnd, key, slotIndex, coolTime, elapsedTime) def RestoreSlotCoolTime(self, key): wndMgr.RestoreSlotCoolTime(self.hWnd, key) Thanks to @Horinna for report that bug. Here's the fix: """ Find this: elif (not self.__CanUseSkillNow()) or (skillGrade != j): skillPage.SetSlotCount(realSlotIndex, 0) skillPage.DisableCoverButton(realSlotIndex) Add this under:""" skillPage.DeactivateSlot(realSlotIndex) # After the else, paste this: if player.IsSkillActive(slotIndex) and (skillGrade == j): # fix001 skillPage.ActivateSlot(realSlotIndex) # The if should look like this: if (skillGrade == skill.SKILL_GRADE_COUNT) and j == (skill.SKILL_GRADE_COUNT-1): skillPage.SetSlotCountNew(realSlotIndex, skillGrade, skillLevel) elif (not self.__CanUseSkillNow()) or (skillGrade != j): skillPage.SetSlotCount(realSlotIndex, 0) skillPage.DisableCoverButton(realSlotIndex) skillPage.DeactivateSlot(realSlotIndex) # fix else: skillPage.SetSlotCountNew(realSlotIndex, skillGrade, skillLevel) if player.IsSkillActive(slotIndex) and (skillGrade == j): # fix skillPage.ActivateSlot(realSlotIndex)
    1 point
  22. Hello community, The values associated with movespeed are BYTE (255) by default, in this short guide I'll teach you how to change them to short (65535). Step by Step [Hidden Content]
    1 point
  23. Hello community, I have received several messages asking for a patcher that will update files, no matter how small the change, and that will not alert to viruses. I will share with you for free the solution I use in my projects. VirusTotal [Hidden Content] Preview Step by Step [Hidden Content] Thanks to @ martysama0134 for some files.
    1 point
  24. Download [Hidden Content] Hello Metin2 Dev. I'm here to share 2 of my hunting missions. How do they work? The player receive a scroll with the mission details. It will give the player 2 options. After complete the mission, the player receives his reward. The second mission only appears after concluding the first one. It will show on mission panel how many left is there to kill. As always is a pleasure to work with this community. Any error or problem, text here or contact me in private. With best Regards, Doose.
    1 point
  25. Download Center Github or Internal Link With this 'system' you will be able to open the PM Window just by clicking on the Player Name on any Chat Category not only on Global (normal, group, guild...) I use martysama so if you use anything else you need to edit it for your sources. Because i did not found an full tutorial here it is, is not perfect i know. Preview: [Hidden Content] Bellow is just an example, follow the tutorial on github or download it from dev. Pack Search inside interfacemodule.py and edit it like bellow: def MakeHyperlinkTooltip(self, hyperlink): tokens = hyperlink.split(":") if tokens and len(tokens): type = tokens[0] if "item" == type: self.hyperlinkItemTooltip.SetHyperlinkItem(tokens) # Add this under like here elif "msg" == type and str(tokens[1]) != player.GetMainCharacterName(): self.OpenWhisperDialog(str(tokens[1])) Server Srcs Search inside input_main.cpp and make the changes like bellow: // With Chat Color #ifdef ENABLE_CHAT_COLOR_SYSTEM static const char* colorbuf[] = {"|cFFffa200|H|h[Staff]|h|r", "|cFFff0000|H|h[Shinsoo]|h|r", "|cFFffc700|H|h[Chunjo]|h|r", "|cFF000bff|H|h[Jinno]|h|r"}; int len = snprintf(chatbuf, sizeof(chatbuf), "%s |Hmsg:%s|h%s|h|r : %s", (ch->IsGM()?colorbuf[0]:colorbuf[MINMAX(0, ch->GetEmpire(), 3)]), ch->GetName(), ch->GetName(), buf); #endif // Without Chat Color just change it like this int len = snprintf(chatbuf, sizeof(chatbuf), "|Hmsg:%s|h%s|h|r : %s", ch->GetName(), ch->GetName(), buf); Source @ Sanchez Client Srcs Search inside PythonNetworkStreamPhaseGame.cpp bool CPythonNetworkStream::RecvChatPacket() { .. // Search this like case CHAT_TYPE_WHISPER: { .. } .. } And add this inside the case, like this:
    1 point
  26. Hello everyone I bring a contribution to the quest section that in my opinion will be very useful for all the levels that I have seen in the forums that I have known. I saw some people who are just learning and some who are very talented, and I'm sure they'll tap into their potential with this hands-on tutorial. It's totally worth it. I did the Spanish version and it was a success. Now the English version, let's see how it goes. The minimum knowledge that you must have to perform this tutorial is to know how to compile the quests and optionally the source code on the server side. My recommendation to read the tutorial is that you first read it superficially from the beginning to the end, and then start from the beginning to the end applying the steps. The tutorial is about a real case I had with one of my clients, and he gave me permission to share it. Although the way of explaining is not how I would really do it, I made it easier to understand with the aim of teaching. Test video: [Hidden Content] Any questions or requests you have about me or my work, I will gladly reply to the private message of this forum. How to Tanaka event or M2DL Love and peace for everyone.
    1 point
  27. The problem: Mobs are using CHARACTER_POINT_INSTANT struct, which contains fixed size arrays for dragon soul, items etc. For every mob these arrays are allocating memory, but mobs obviously don't use items... The solution: Replace fixed size arrays with std::map or other data type From my own testing i saw over 70% memory usage reduction with special inventory system and optimized variables listed below: bItemGrid pItems pDSItems wDSItemGrid Below i am sharing example implementation in clean source for bItemGrid variable
    1 point
  28. Hi. Based on this I tried to do this feature, continuously throws an error message. Do you have a solution? Error log: Attached my ClientManager.cpp Thy ClientManager.rar
    1 point
  29. Download Metin2 Download [Hidden Content] Me and @Gurgarath tested it on windows server, we didn't see any problem. If you have a problem with time(_t) or another bug, let me know so I can fix it. Idea is from Sogma
    1 point
  30. Hi, I have a problem. When I did everything from the tutorial I get this error. I don't have this file in the downloaded folders from this tutorial or from my source. Should I change the name or I messed up somewhere? I only have this .py but this is for just testing the character details window I suppose (See in the imgur link). I tried to add it to the uiscript folder but it still crashed with the same error.
    1 point
  31. I've solved the problem! I simply removed the ETC files from the old archive files during the 18.4.12 update and added them to my own pack files. Everything worked smoothly after that! Big thanks to @ Mali for their help - you're an amazing person! archive link: [Hidden Content]
    1 point
  32. M2 Download Center Download Here ( Internal ) Hi devs! The original equipment viewer is not updated for the new equipments I am thinking of costumes + rings + belt Here is the extended version. Here are my modified files to root and uiscript package, the .py files: uiEquipDialog.py Pastebin ~ MEGA UIScriptEquipmentDialog.py Pastebin ~ MEGA UIScriptCostumeEquipmentDialog.py Pastebin ~ MEGA Ehm yeah this was the easiest part of this, now comin' the serverside and binary parts. Server: 1.) Open gamepacket.h than search for: "typedef struct pakcet_view_equip" and replace all structure with this: typedef struct pakcet_view_equip { BYTE header; DWORD vid; struct { DWORD vnum; BYTE count; long alSockets[ITEM_SOCKET_MAX_NUM]; TPlayerItemAttribute aAttr[ITEM_ATTRIBUTE_MAX_NUM]; } equips[16]; } TPacketViewEquip; PS: lel "pakcet" xD nevermind Save&Close 2.) Open char.cpp and search for this: "void CHARACTER::SendEquipment(LPCHARACTER ch)" and replace the event with this(Thanks ATAG): void CHARACTER::SendEquipment(LPCHARACTER ch) { TPacketViewEquip p; p.header = HEADER_GC_VIEW_EQUIP; p.vid = GetVID(); int pos[16] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 19, 20, 21, 22, 23 }; for (int i = 0; i < 16; i++) { LPITEM item = GetWear(pos[i]); if (item) { p.equips[i].vnum = item->GetVnum(); p.equips[i].count = item->GetCount(); thecore_memcpy(p.equips[i].alSockets, item->GetSockets(), sizeof(p.equips[i].alSockets)); thecore_memcpy(p.equips[i].aAttr, item->GetAttributes(), sizeof(p.equips[i].aAttr)); } else { p.equips[i].vnum = 0; } } ch->GetDesc()->Packet(&p, sizeof(p)); } Serverside done! - Build! Binary: 1.) Open UserInterfacePacket.h than search for this: "typedef struct pakcet_view_equip" and replace with this: typedef struct pakcet_view_equip { BYTE header; DWORD dwVID; TEquipmentItemSet equips[16]; } TPacketGCViewEquip; PS: we met again with pakcet xD, Save&Close. 2.) Open UserInterfacePythonNetworkStreamPhaseGame.cpp than search for this: "bool CPythonNetworkStream::RecvViewEquipPacket()" and replace with this: bool CPythonNetworkStream::RecvViewEquipPacket() { TPacketGCViewEquip kViewEquipPacket; if (!Recv(sizeof(kViewEquipPacket), &kViewEquipPacket)) return false; PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "OpenEquipmentDialog", Py_BuildValue("(i)", kViewEquipPacket.dwVID)); for (int i = 0; i < 16; ++i) { TEquipmentItemSet & rItemSet = kViewEquipPacket.equips[i]; PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "SetEquipmentDialogItem", Py_BuildValue("(iiii)", kViewEquipPacket.dwVID, i, rItemSet.vnum, rItemSet.count)); for (int j = 0; j < ITEM_SOCKET_SLOT_MAX_NUM; ++j) PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "SetEquipmentDialogSocket", Py_BuildValue("(iiii)", kViewEquipPacket.dwVID, i, j, rItemSet.alSockets[j])); for (int k = 0; k < ITEM_ATTRIBUTE_SLOT_MAX_NUM; ++k) PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "SetEquipmentDialogAttr", Py_BuildValue("(iiiii)", kViewEquipPacket.dwVID, i, k, rItemSet.aAttr[k].bType, rItemSet.aAttr[k].sValue)); } return true; } Binaryside done! - Build! ---Edit---- Multiple opening bugfix: Open interFaceModule.py and search for this: "def OpenEquipmentDialog(self, vid):" if you found it replace that function with this: def OpenEquipmentDialog(self, vid): if self.equipmentDialogDict.has_key(vid): self.equipmentDialogDict[vid].Destroy() self.CloseEquipmentDialog(vid) dlg = uiEquipmentDialog.EquipmentDialog() dlg.SetItemToolTip(self.tooltipItem) dlg.SetCloseEvent(ui.__mem_func__(self.CloseEquipmentDialog)) dlg.Open(vid) self.equipmentDialogDict[vid] = dlg Show the "View equip" button on the targetbar: Open uitarget.py and check this diff to fix it for yourself: [Hidden Content] ( ----EndEdit---- Ohh I almost forgot, here are the bgs ^^-> ui.7z - MEGA All done, press escape to exit... :')
    1 point
  33. Hello fine people, A little bit of context, recently we have been talking with @ msnas about doing an action upon server closure. Which is what the db/game should be doing by default when it exits MainLoop. However, I noticed that because of the way I shutdown my core, I wasn't receiving the right signal and was exiting the server before I can do any other actions. He then told me that he noticed this issue a long time ago because it was also present for him, only on Windows. Well, after a little bit of digging, I noticed that the signal was simply not handled on a Windows server. So here is a rudimentary (but working) signal management for Windows. I guess you can still rewrite the whole thing using more modern stuff like boost signal. But so far so good. Please not that you should close your db / game using CTRL+C or CTRL+BREAK if you want to gracefully shutdown. As a forced closure (closing the window, shutdown or task manager) would still not allow for the server to properly close, notably because it doesn't give enough grace time. So, here is the fix: Have a nice day!
    1 point
  34. Download Metin2 Download [Hidden Content] If you do not add vnum to portal.txt, that portal will not have any level limit.
    1 point
  35. M2 Download Center Download Here ( Internal ) The new Metin2 client modified the way it loads the pack/Index file, while I can't be sure this changes are 100% identical to the official server, it work without a lot of issues. The second changes that the official server did, was changing the loading of Minimap waypoints (stored in locale/xx/map). You can find the two changes here: [Hidden Content] [Hidden Content] Good luck. (EDIT: I realzied later Penger already released the MarkInfo and I realized that after making this release lmao rip)
    1 point
  36. Thx you for your help,i use the last "version" postet on turkysh forum and this is the oficial link download: I think it's easier to look here, but the problem it is rare .. hmm
    1 point
  37. M2 Download Center Download Here ( Internal ) Poly Marble Shop It's simple system which allows players to buy marbles directly from gui. You can set price for each marble. Remember to set same price in client and server.
    1 point
  38. Latest Update: [Hidden Content] includes all fixxes and some improvements
    1 point
  39. This bug is not related to my fix since I didn't touch the uiTaskbar.py. But you can try this to fix the activate animation to be resetted all the time: EterPythonLib/PythonSlotWindow.cpp: On void CSlotWindow::ActivateSlot(DWORD dwIndex) method add this under return: if (pSlot->bActive) return; And to fix the ActivateSlot to be propagating to the slot you put the icon on the taskbar you can try this fix: On void CSlotWindow::ClearSlot(TSlot * pSlot) method find the ActiveEffect array hiding and just replace it with __DestroySlotEnableEffect(); or however your function is called. Long time but finally here, I bring to you the second version of this fix. I think I fixed every bug I saw on this post. New download link: [Hidden Content] If missed something or just new bugs are found write on the post. Please do not create new threads trying to get help from something related to this post, just write here. I modified every file you find on the .zip so if you already installed the first version check everything again. PS: If any Moderator sees this, update the first post please.
    1 point
  40. 1 point
  41. 1 point
  42. Something other games got for years now but didnt saw before at metin2 before your topic. Details like this is what truly make servers distinguish themselfs from others
    1 point
  43. Hello everybody, I was trying to add the v17.5 Archer Skill, i followed this : link It works fine, the only problem is that the "bomb" is fixed to the pg body as tou can see HERE The player should drop the bomb to the ground and not carrying it himself. In the given code, HERE , i found out that the new skill is using the Aura War skill effect as a base code, so it attaches the effect to the body. I think the problem can be resolved in this portion of code: void CInstanceBase::__Assassin_SetGyeongGongAffect(bool isVisible) { if (isVisible) { if (IsWearingDress()) return; if (m_kAssassin.m_dwGyeongGongEffect) __DetachEffect(m_kAssassin.m_dwGyeongGongEffect); m_GraphicThingInstance.SetReachScale(1.5f); m_kAssassin.m_dwGyeongGongEffect = __AttachEffect(EFFECT_GYEONGGONG_BOOM); } else { m_GraphicThingInstance.SetReachScale(1.0f); __DetachEffect(m_kAssassin.m_dwGyeongGongEffect); m_kAssassin.m_dwGyeongGongEffect = 0; } } And more closely, this particular part m_kAssassin.m_dwGyeongGongEffect = __AttachEffect(EFFECT_GYEONGGONG_BOOM); I thought it should be replaced with something like m_GraphicThingInstance But I really don't know how t make it work. Thank you to everyone who will help Regards
    1 point
  44. [Hidden Content] new DL link. IDK how to edit post ^^
    1 point
  45. M2 Download Center Download Here ( Internal ) Download Here ( GitHub ) Hi this is timer for python. Like queue in gamesource.
    1 point
  46. M2 Download Center Download Here ( Internal ) Download Here ( GitHub ) This feature allows you to drop items only on a certain map
    1 point
  47. M2 Download Center Download Here ( Internal )
    1 point
  48. Sorry I have backup [Hidden Content]
    1 point
  49. quest deviltower_zone begin state start begin when login begin if pc.get_map_index() == 66 then if pc.get_x() < 2048+88 or pc.get_y() < 6656+577 or pc.get_x() > 2048+236 or pc.get_y() > 6656+737 then pc.warp((5376+532)*100, (512+596+4)*100, 65) end pc.set_warp_location(65, 5376+532, 512+596+4) if pc.get_map_index() > 660000 and pc.get_map_index() < 670000 then pc.set_warp_location(65, 5376+532, 512+596+4) end end when 20348.click begin if pc.get_level() < 30 then say_title("Guardian of demons tower") say("") say("You have not accumulated enough combat") say("experience!") say("") say_reward("Come back here once you reach level 30.") return end if pc.get_level() > 29 and pc.get_level() < 75 then say_title("Guardian of demons tower") say("") say("The Demon Tower is home to horrible creatures,") say("who love nothing more than to kill you.") say("The bonuses 'Strong against undead' and 'Arrow resistant'") say("you could be very helpful!") say("") say_reward("Do you really want to enter the Demon Tower?") local betreten = select("Enter Demon Tower", "Abort") if betreten == 1 then pc.warp(216500, 727000) end if betreten == 2 then return end end if pc.get_level() > 74 then say_title("Guardian of demons tower") say("") say("The Demon Tower is home to horrible creatures,") say("who love nothing more than to kill you.") say("The bonuses 'Strong against undead' and 'Arrow resistant'") say("you could be very helpful!") say("") say_reward("As you reach level 75, you can choose") say_reward("your group from the normal entry and the entry.") local betreten_75 = select("Enter Demon Tower normal", "Enter Demon Tower as a group", "Abort") if betreten_75 == 1 then pc.warp(216500, 727000) end if betreten_75 == 2 then if party.is_party() then say_title("Guardian of demons tower") say("") say("Please make sure that all group members are in") say("the temple!") say("") say_reward("Do you really want to enter the Demon Tower") say_reward("with your group?") local gruppe_betreten = select("Enter Demon Tower as a group", "Abort") if gruppe_betreten == 1 then d.join(66, special.devil_tower[1][1], special.devil_tower[1][2]) d.spawn_mob(8015, 120, 615) end if gruppe_betreten == 2 then return end end if not party.is_party() then say_title("Guardian of demons tower") say("") say("You can specify this option only run when") say("you find yourself in a group.") say("") say_reward("You find yourself in any groups.") return end end if betreten_75 == 3 then return end end end when 8015.kill begin timer("zeit_bis_port", 10) d.notice("You have the Metin hardness destroyed!") d.notice("In 10 seconds you will be teleported to the first level.") end when zeit_bis_port.timer begin d.new_jump_all(66, special.devil_tower[1][1], special.devil_tower[1][2]) d.regen_file("data/dungeon/deviltower2_regen.txt") d.set_warp_at_eliminate(4, d.get_map_index(), special.devil_tower[2][1], special.devil_tower[2][2], "data/dungeon/deviltower3_regen.txt") end --when devil_stone2.kill begin --d.jump_all_local(special.devil_tower[2][1], special.devil_tower[2][2]) --end when devil_stone3.kill begin --d.jump_all_local(special.devil_tower[3][1], special.devil_tower[3][2]) --d.set_exit_all_at_eliminate(6) --d.set_warp_at_eliminate(6, d.get_map_index(), 100, 100) --d.set_warp_at_eliminate(4, 65, 5376+532, 512+596+4) d.set_warp_at_eliminate(4, d.get_map_index(), special.devil_tower[3][1], special.devil_tower[3][2], "data/dungeon/deviltower4_regen.txt") d.check_eliminated() --d.exit_all() end function get_4floor_stone_pos() local positions = { {368, 629}, {419, 630}, {428, 653}, {422, 679}, {395, 689}, {369, 679}, {361, 658}, } for i = 1, 6 do local j = number(i, 7) if i != j then local t = positions[i]; positions[i] = positions[j]; positions[j] = t; end end --for i = 1, 7 do -- positions[i][1] = positions[i][1] * 100 -- positions[i][2] = positions[i][2] * 100 -- end return positions end when 8016.kill with pc.in_dungeon() and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 begin d.setf("level", 4) -- ¦A²{¤j¶q©Çª«¤Î»s³y¯u¥ÛÀY©M°²¥ÛÀY --d.regen_file("data/dungeon/deviltower4_regen.txt") local positions = deviltower_zone.get_4floor_stone_pos() for i = 1, 6 do chat(positions[i][1], positions[i][2]) d.set_unique("fake" .. i , d.spawn_mob(8017, positions[i][1], positions[i][2])) end chat(positions[7][1], positions[7][2]) local vid = d.spawn_mob(8017, positions[7][1], positions[7][2]) chat(vid) d.set_unique("real", vid) server_loop_timer('devil_stone4_update', 10, pc.get_map_index()) server_timer('devil_stone4_fail1', 5*60, pc.get_map_index()) d.notice("Find the right Metinstone and destroyed him."); d.notice("The false Metin stones will disappear!"); d.notice("You have 15 minutes time!"); end when devil_stone4_fail1.server_timer begin if d.select(get_server_timer_arg()) then d.notice("Remaining time: 10 minutes") server_timer('devil_stone4_fail2', 5*60, get_server_timer_arg()) end end when devil_stone4_fail2.server_timer begin if d.select(get_server_timer_arg()) then d.notice("Remaining time: 5 minutes") server_timer('devil_stone4_fail', 5*60, get_server_timer_arg()) end end when devil_stone4_fail.server_timer begin if d.select(get_server_timer_arg()) then d.notice("The time is up") d.notice("You will now be teleported to the outsidet") d.exit_all() clear_server_timer('devil_stone4_update', get_server_timer_arg()) end end when devil_stone4_update.server_timer begin if d.select(get_server_timer_arg()) then if not d.is_unique_dead("real") then for i = 1, 6 do if d.getf("fakedead" .. i) == 0 then if d.unique_get_hp_perc("fake" .. i) < 50 then d.purge_unique("fake" .. i) d.setf("fakedead" .. i, 1) d.notice("The wrong Metin Stone has disappeared.."); end end end else --d.clear_regen() --d.regen_file("data/dungeon/deviltower5_regen.txt") server_timer("devil_stone4_end", 5, get_server_timer_arg()) d.notice("You have destroyed the right Metin stone."); d.notice("You will now be teleported to the next level") clear_server_timer('devil_stone4_fail1', get_server_timer_arg()) clear_server_timer('devil_stone4_fail2', get_server_timer_arg()) clear_server_timer('devil_stone4_fail', get_server_timer_arg()) end else server_timer('devil_stone4_stop_timer', 1, get_server_timer_arg()) end end when devil_stone4_stop_timer.server_timer begin clear_server_timer('devil_stone4_update', get_server_timer_arg()) end when devil_stone4_end.server_timer begin if d.select(get_server_timer_arg()) then d.setf("level", 5) d.setf("stone_count", 5) d.notice("You are now in the 5th. Layer") d.notice("open all old seal to get to the next level.") d.notice("You have 20 minutes to open all the seals.") d.jump_all(special.devil_tower[4][1], special.devil_tower[4][2]) server_timer('devil_stone5_fail1', 5*60, get_server_timer_arg()) clear_server_timer('devil_stone4_update', get_server_timer_arg()) d.set_regen_file("data/dungeon/deviltower5_regen.txt") d.spawn_mob(20073, 421, 452) d.spawn_mob(20073, 380, 460) d.spawn_mob(20073, 428, 414) d.spawn_mob(20073, 398, 392) d.spawn_mob(20073, 359, 426) end end when devil_stone5_fail1.server_timer begin if d.select(get_server_timer_arg()) then d.notice("Remaining time: 15 Minutes") server_timer('devil_stone5_fail2', 5*60, get_server_timer_arg()) end end when devil_stone5_fail2.server_timer begin if d.select(get_server_timer_arg()) then d.notice("Remaining time: 10 Minutes") server_timer('devil_stone5_fail3', 5*60, get_server_timer_arg()) end end when devil_stone5_fail3.server_timer begin if d.select(get_server_timer_arg()) then d.notice("Remaining time: 5 Minutes") server_timer('devil_stone5_fail', 5*60, get_server_timer_arg()) end end when devil_stone5_fail.server_timer begin if d.select(get_server_timer_arg()) then d.notice("The time is up") d.notice("You will now be teleported to the outside") d.exit_all() end end --when devil_stone4.kill begin --d.setf("level", 5) --d.setf("stone_count", 4) --d.clear_regen() --d.regen_file("data/dungeon/deviltower5_regen.txt") --d.jump_all_local(special.devil_tower[4][1], special.devil_tower[4][2]) --end when 1062.kill with pc.in_dungeon() and d.getf("level") == 5 begin local KILL_COUNT_FOR_DROP_KEY = 5 --if is_test_server() then --KILL_COUNT_FOR_DROP_KEY = 1 --end local n =d.getf("count") + 1 d.setf("count", n) if n == KILL_COUNT_FOR_DROP_KEY then -- bla bla 3 game.drop_item(50084, 1) d.setf("count", 0) end end when devil_stone5.take with item.vnum == 50084 begin npc.purge() item.remove() d.setf("stone_count", d.getf("stone_count") - 1) if d.getf("stone_count") <= 0 then d.setf("level", 6) d.clear_regen() d.regen_file("data/dungeon/deviltower6_regen.txt") d.notice("You have opened all the old seal.") d.notice("You will now be teleported to the 6th level.") d.jump_all(special.devil_tower[5][1], special.devil_tower[5][2]) clear_server_timer('devil_stone5_fail1', get_server_timer_arg()) clear_server_timer('devil_stone5_fail2', get_server_timer_arg()) clear_server_timer('devil_stone5_fail3', get_server_timer_arg()) clear_server_timer('devil_stone5_fail', get_server_timer_arg()) else d.notice("There remains a number of "..d.getf("stone_count").." Sealing") end end when devil_stone6.kill begin --d.jump_all(special.devil_tower[6][1], special.devil_tower[6][2]) d.kill_all() -- d.set_warp_at_eliminate(3*60, 65, 5376+532, 512+596+4) d.check_eliminated() timer("stolzerking_killed", 5) end when stolzerking_killed.timer begin cmdchat("CMD1") d.spawn_mob(9012, 395, 200) d.spawn_mob(20074, 392, 209) d.spawn_mob(20075, 405, 209) d.spawn_mob(20076, 399, 209) d.spawn_mob(9003, 402, 200) d.setqf("can_refine", 1) d.notice("You killed the proud demon king, thus completing the first part of the dungeon.") d.notice("As a reward, you are allowed an item if the demonic forging improve.") d.notice("If you need something for the second part of the dungeon, you can buy it at the General Store.") d.notice("You will be teleported in 2 Minutes automatically to the next level.") timer("zeit_zum_uppen", 110) end when zeit_zum_uppen.timer begin d.notice("In 10 seconds you will be teleported to the next level.") timer("zeit_bis_mordesebene", 10) end when zeit_bis_mordesebene.timer begin d.clear_regen() d.spawn_mob(8018, 639, 658) d.spawn_mob(8018, 611, 637) d.spawn_mob(8018, 596, 674) d.spawn_mob(8018, 629, 670) d.setf("level", 7) d.jump_all(2048+590, 6656+638) end when 8018.kill with pc.in_dungeon() and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 begin local cont = d.getf("7_stone_kill") + 1 d.setf("7_stone_kill", cont) if cont >= 4 then d.setf("7_stone_kill", 0) d.set_regen_file("data/dungeon/deviltower7_regen.txt") end end when 8019.kill with pc.in_dungeon() and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 begin game.drop_item(30300, 1) end when 30300.use with pc.in_dungeon() and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 begin pc.remove_item("30300", 1) local pct = number(1,10) if pct == 1 then -- bla bla 7 game.drop_item(30302, 1) d.clear_regen() else -- bla bla 8 game.drop_item(30301, 1) end end when 30302.use with pc.in_dungeon() and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 begin -- bla bla 9 say_title("Map of Zin Grotto") say("") say("Congratulations! You've found the right card.") say("") say_reward("You will be teleported to the next level now.") pc.remove_item("30302", 1) timer("devil_jump_8", 6) d.clear_regen() end when devil_jump_8.timer begin d.setf("level", 8) d.jump_all(2048+590, 6656+403) d.set_regen_file("data/dungeon/deviltower8_regen.txt") d.spawn_mob(20366, 640, 460) local _count= pc.count_item(30302)-- bla bla 11 pc.remove_item(30302,_count) end when 1040.kill with pc.in_dungeon() and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 begin local pct1 = number(1, 5) if pct1 == 1 then local pct2 = number(1, 10) if pct2 == 1 then -- bla bla 12 game.drop_item(30304, 1) else -- bla bla 13 game.drop_item(30304, 1) end else return end end when 20366.take with item.vnum == 30304 begin -- bla bla 14 npc.purge() item.remove() d.kill_all() timer("devil_jump_9", 6) end when devil_jump_9.timer begin d.setf("level", 9) d.jump_all(2048+590, 6656+155) d.regen_file("data/dungeon/deviltower9_regen.txt") end when 1093.kill with pc.in_dungeon() and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 begin d.kill_all() timer("sensi_killed", 5) end when sensi_killed.timer begin cmdchat("CMD1") d.kill_all() d.spawn_mob(9012, 618, 187) d.spawn_mob(20074, 611, 179) d.spawn_mob(20075, 620, 170) d.spawn_mob(20076, 628, 179) d.spawn_mob(9003, 621, 187) d.setqf("can_refine", 1) d.notice("You killed the Grim Reaper, thus completing the second part of the dungeon.") d.notice("As a reward, you are allowed an item if the demonic forging improve.") d.notice("If you would like to continue the dungeon, you can buy potions you again at the General Store.") d.notice("You will be teleported in 2 Minutes automatically to the next level.") timer("zeit_nach_sensi", 110) end when zeit_nach_sensi.timer begin d.notice("In 10 seconds you will be teleported to the next level.") timer("zeit_bis_gemeinerking", 10) end when zeit_bis_gemeinerking.timer begin d.jump_all(2048+590, 6656+155) d.kill_all() d.spawn_mob(1094, 620, 170) d.notice("The Common Demon King is on the loose here.") d.notice("Kill him to get to the next level.") end when 1094.kill with pc.in_dungeon() and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 begin timer("zeit_bis_bt", 10) d.notice("You killed the demon king Commons.") d.notice("In 10 seconds you will be teleported to the last level.") end when zeit_bis_bt.timer begin d.jump_all(2048+590, 6656+155) d.kill_all() d.spawn_mob(1095, 620, 170) d.notice("Du befindest dich auf der letzten Ebene des Dämonenturmes.") d.notice("Töte den Blauen Tod und du wirst reich belohnt!") end when 1095.kill with pc.in_dungeon() and pc.get_map_index() >= 660000 and pc.get_map_index() < 670000 begin cmdchat("CMD1") d.kill_all() d.spawn_mob(9012, 618, 187) d.spawn_mob(20074, 611, 179) d.spawn_mob(20075, 620, 170) d.spawn_mob(20076, 628, 179) d.spawn_mob(9003, 621, 187) d.setqf("can_refine", 1) d.notice("You killed the blue death, thus completing the Demon Tower.") d.notice("Congratulations!") d.notice("You can once again an item if the demonic forging improve. Best of luck!") notice_all("".. pc.get_name() .." has killed the blue death, thus completing the Demon Tower.") end end end English version ( I hope you're like it ) Meanwhile thanks for topic. Kind Regards HaveBeen
    1 point
×
×
  • 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.