Jump to content
metin2dev

Leaderboard


Popular Content

Showing content with the highest reputation since 06/20/2017 in all areas

  1. 28 points
    v17.5 Beta new packs are here! New dungeon w/ weapons, armors, mobs, sashes. New Halloween minigame gui files, costumes, pet and mount with 2 textures. And so on.. https://mega.nz/#!OUIyVZDD!ype03n5EIuKbBkz0JzSGHCMHPBtjhZbbwUSYxYgt2ew I wasn't update my proto packer yet. I cannot decrypt the mob_proto because of the changed structure. And the item_proto is containing a lot of new informations, new types, subtypes, applytypes and so on. item_proto: https://mega.nz/#!qBwCmKBC!wYp28d456Npdza9xOHZ5_zjFTQRRhNCtj9rxUtSHurE
  2. 25 points
    Hi there devs, Probably the most of us know the problem when an image contains alpha/fully transparent parts but you can't click trough them and it would be very necessary to do so. This problem is very common with the taskbars, for example with the ilumina taskbar (you know when it looks like you are clicking the ground, but the image is still there but that part is transparent). Video: How to: EterPythonLib\PythonWindow.h EterPythonLib\PythonWindowManagerModule.cpp EterPythonLib\PythonWindow.cpp EterLib\GrpImageTexture.cpp EterLib\GrpImageInstance.h EterLib\GrpImageInstance.cpp By default it won't check the alpha value, so it means that you have to add manually the "alpha_sensitive" flag to the preferred windows/objects (also note that its only effective with an expandedImageBox object and it has some interference with the "float" flag (if both added to the same object)). For the usage check the video. If you have any question, remark, or anything that you like to ask or suggest, feel free to post it here, or send it in PM. Have a nice day, ~masodikbela
  3. 24 points
    Hello guys. I'm here with the v17.2 and the v17.3 patches. 17.3 New gaya gui files + npcs New fish event gui files New changelook gui file (I've got this 3 weeks ago :P) New party match gui files New ranking gui files Unpacked protos: DE, CZ and HU (XML + TXT) Dumped root files + builtins <!> INFORMATIONS ONLY <!> https://mega.nz/#!aNgABRjS!SUCh-DVHxvc5LWbTMow9VOcGKPAvZmtQjeiEDz6ynmg
  4. 20 points
  5. 20 points
    The textures of this water are ideally joined by no visible textures (seams). Colors are well matched to the climate of the metin. If you like this look here: https://metin2dev.org/board/index.php?/topic/16751-3d-art-tatsumaru/
  6. 20 points
    Hi there devs, A few months ago I've made a solution for the well-known problems with the character select/logging out which is: once you are about to change character, the stats (ht, st, playtime, etc...) and parts (armor/head) don't update properly: you have to do it twice to see the correct values/items when a character is logging out from the game near to your character you can see a fast equipment change (the character is unequipping everything from him/herself) Explanation for the problems The usual coding video The fix GL for the setup and if you have further question(s), remark(s), or anything that you want to ask or suggest, feel free to post it here, or send it in PM. If you get error(s) please upload the affected (and edited) file(s) to http://pastebin.com/ and link it in your post, to make my work easier and probably I will be able to help you only in one post, so please spare me from asking basic requests like "Could you upload...". Thank you Have a nice day, ~masodikbela
  7. 20 points
    Hello everyone, Today I'm gonna share with you the clientside root from the end of the year 2015 by Webzen. Include codes of new interfaces(charselect, charcreate, selectempire), wolfman, acce, pet, costume and skillbook combination, selectattr, pshop search and a lots of modification. These codes are using a lot of new and expanded functions, constant variables which require the source modification. https://mega.nz/#!zcICCARZ!HZl-MVyeWukXb676qs9KCUV2q6S-wL_WXn_DedaPNiI #nosupport #no-no&no
  8. 19 points
    Hello, This little thing is marks your pet seal into your inventory like the autopotion. This arrives with the v17.5 patch. Open PetSystem.cpp and replace or make it fit for you: void CPetActor::SetSummonItem(LPITEM pItem) { if (NULL == pItem) { LPITEM pSummonItem = ITEM_MANAGER::instance().FindByVID(m_dwSummonItemVID); if (NULL != pSummonItem) pSummonItem->SetSocket(1, FALSE); m_dwSummonItemVID = 0; m_dwSummonItemVnum = 0; return; } pItem->SetSocket(1, TRUE); m_dwSummonItemVID = pItem->GetVID(); m_dwSummonItemVnum = pItem->GetVnum(); } After that open the uiInventory.py and paste this code below the autopotion if-statement in the RefreshBagSlotWindow function. elif itemVnum >= 53001 and itemVnum <= 53256: metinSocket = [player.GetItemMetinSocket(globalSlotNumber, j) for j in xrange(player.METIN_SOCKET_MAX_NUM)]# <!> globalSlotNumber may be different <!> isActivated = 0 != metinSocket[1] if isActivated: self.wndItem.ActivateSlot(i) else: self.wndItem.DeactivateSlot(i)
  9. 19 points
    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)
  10. 19 points
    Hello guys, here you can see my new work, I can not say when it will be finished cause i work realy much with Details and effects (with textures and Environment) so i hope you like this work. you can find solitary v1 here: here are some Screens from solitary v2: map size: 3 x 3 map atlas you can vote here for release the map if i finish it, subscribe for news my channel on YouTube: https://www.youtube.com/user/DesGameTV Ace,
  11. 19 points
    Hello. I saw this stuff on this and on another board also with bugs or it was incomplete, and I made it to myself. Feel free to use it with your brain. Good to know about this: The name of those items which have attributes will be golden. The skillbook and skillforget items will show the name of skill also. If the item isn't yours than the ownership color will be red instead of yellow. * Készségkönyv = Skillbook(id:50300) * Feledés könyve = Skillforget book(id:70037) PS.: If you have problems with the implementation: start to upgrade your programming knowledges and don't disturb me in private message, I won't answer. Thank you for understanding. https://mega.nz/#!KAh3DQqL!yQQX9o4N8sTsS7Woa4W07C8t5jwp0TV5xg7MHLSFz5Y
  12. 17 points
    v17.4 Beta new packs (Nothing special) https://mega.nz/#!uVIjQDoY!kukBR-pFoxQqMzgt7cbVIAmYnTnepcXu6-_op1CDKVI
  13. 14 points
    Hey there, I have an Halloween gift for you all. i have been working for a few hours on official like element image on target window(See screenshots below). When you click on a mob if it is defined as elemental, it will open an element image in addition to the target window. Don't forget to hit the like button! (C) Metin2 guild wars - coded by [GA]Ruin - 27/10/2017 (I create custom metin2 systems in c++/python. if you want a custom system send me a pm and we can talk over skype). Client files: element_image_client_files.rar Let's begin! Server Side: Open service.h, add in the end: #define ELEMENT_TARGET Open char.cpp, search for else { p.dwVID = 0; p.bHPPercent = 0; } add below: #ifdef ELEMENT_TARGET const int ELEMENT_BASE = 11; DWORD curElementBase = ELEMENT_BASE; DWORD raceFlag; if (m_pkChrTarget && m_pkChrTarget->IsMonster() && (raceFlag = m_pkChrTarget->GetMobTable().dwRaceFlag) >= RACE_FLAG_ATT_ELEC) { for (int i = RACE_FLAG_ATT_ELEC; i <= RACE_FLAG_ATT_DARK; i *= 2) { curElementBase++; int diff = raceFlag - i; if (abs(diff) <= 1024) break; } p.bElement = curElementBase - ELEMENT_BASE; } else { p.bElement = 0; } #endif open packet.h, search for: } TPacketGCTarget; add above: #ifdef ELEMENT_TARGET BYTE bElement; #endif Client side: open locale_inc.h, add in the end: #define ELEMENT_TARGET open packet.h, search for } TPacketGCTarget; add above: #ifdef ELEMENT_TARGET BYTE bElement; #endif open PythonNetworkPhaseGame.cpp, look for: else if (pInstPlayer->CanViewTargetHP(*pInstTarget)) replace below with the following: #ifdef ELEMENT_TARGET PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "SetHPTargetBoard", Py_BuildValue("(iii)", TargetPacket.dwVID, TargetPacket.bHPPercent, TargetPacket.bElement)); #else PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "SetHPTargetBoard", Py_BuildValue("(ii)", TargetPacket.dwVID, TargetPacket.bHPPercent)); #endif open PythonApplicationModule.cpp, look for #ifdef ENABLE_ENERGY_SYSTEM add above: #ifdef ELEMENT_TARGET PyModule_AddIntConstant(poModule, "ENABLE_VIEW_ELEMENT", 1); #else PyModule_AddIntConstant(poModule, "ENABLE_VIEW_ELEMENT", 0); #endif open game.py, look for def SetHPTargetBoard(self, vid, hpPercentage): if vid != self.targetBoard.GetTargetVID(): self.targetBoard.ResetTargetBoard() self.targetBoard.SetEnemyVID(vid) self.targetBoard.SetHP(hpPercentage) self.targetBoard.Show() replace with: if app.ENABLE_VIEW_ELEMENT: def SetHPTargetBoard(self, vid, hpPercentage,bElement): if vid != self.targetBoard.GetTargetVID(): self.targetBoard.ResetTargetBoard() self.targetBoard.SetEnemyVID(vid) self.targetBoard.SetHP(hpPercentage) self.targetBoard.SetElementImage(bElement) self.targetBoard.Show() else: def SetHPTargetBoard(self, vid, hpPercentage): if vid != self.targetBoard.GetTargetVID(): self.targetBoard.ResetTargetBoard() self.targetBoard.SetEnemyVID(vid) self.targetBoard.SetHP(hpPercentage) self.targetBoard.Show() open uitarget.py, look for import background add below: if app.ENABLE_VIEW_ELEMENT: ELEMENT_IMAGE_DIC = {1: "elect", 2: "fire", 3: "ice", 4: "wind", 5: "earth", 6 : "dark"} look for: self.isShowButton = False add below: if app.ENABLE_VIEW_ELEMENT: self.elementImage = None inside Destroy method, look for: self.__Initialize() add below: if app.ENABLE_VIEW_ELEMENT: self.elementImage = None inside ResetTargetBoard method, look for: self.hpGauge.Hide() add below: if app.ENABLE_VIEW_ELEMENT and self.elementImage: self.elementImage = None look for : def SetElementImage(self,elementId): add above: if app.ENABLE_VIEW_ELEMENT: def SetElementImage(self,elementId): try: if elementId > 0 and elementId in ELEMENT_IMAGE_DIC.keys(): self.elementImage = ui.ImageBox() self.elementImage.SetParent(self.name) self.elementImage.SetPosition(-60,-12) self.elementImage.LoadImage("d:/ymir work/ui/game/12zi/element/%s.sub" % (ELEMENT_IMAGE_DIC[elementId])) self.elementImage.Show() except: pass Compile server, client source and root pack and that's it! Enjoy! Happy halloween! element_image_client_files.rar
  14. 14 points
    Version 1.0 Hair pinned with Japanese pins for shaman girl. - a face with artificial shadow on the texture was added to the hair. This solution recompense to some extent the lack of shadows in the game engine - the model is carefully crafted - the model has a hair icon - the texture is in good quality NOTE: Please do not change hair to other characters class. The hair looks just fine only on shaman girl. Do not spoil it. Comment or Like = more good models, remember.
  15. 14 points
    Hey there, so I got very good responds due to my last video, so I made the full package Login + Select + Empire + Create. Hope you like it and for more information contact me at skype: geo.geani94 . Special thanks to: @VegaS @All of you for the feedback from the other topic.
  16. 14 points
    Hi, I'd like to share a small fix about the messenger system. what exactly are we fixing? The main problem is when you remove any person from your list, the companion's messenger list is not refreshing until relog in. Webzen has fixed this situation with a small packet. That packet will provide to remove the name from the list. There is no part of Python because it's already done by Ymir. For serverside For client side Best Regards Ken
  17. 13 points
    (Video at the end) Lockpicking is the new system which allows you to train special ability. This ability upgrade your skill of opening new boxes which are on maps(like npc). Every level gives higher chance to open box and probability to get more rewards. To train Lockpicking skill players have to read special books. You can set the level from which players can use this system. Maximum level of skill is 40, but it's configurable. Player can check how many boxes found. System support multilang servers. Missions Additionaly you will get special missions for this sytem, you can easily configure them or add new ones(just add new item to the table). After finished mission player receive reward directly in Quest Scroll. Configuration ItemShop Also you can earn some money from itemshop by this system : ) Magical key rises you chance to open box to 100%, but count of items which you can get from box still depends on skill level. The Key can be used only 10 times. Download & Scan http://www19.zippyshare.com/v/ECjEXsuj/file.html https://www.virustotal.com/#/file/d4fb8b52a8ed74f3a2fbf74efdbd2cc2c042ed82b243fea4d7d18561fa206750/detection
  18. 13 points
    Story: Over time I learned that the SetEvent function can cause weird problems in Metin2, maybe you have this bug or maybe not, I actually encountered this problem and found the fix. How to trigger the bug: 1. Use this quest for a test: quest test begin state start begin when 9003.chat."quest test" begin say("Hey we are doing a test here") local o = select("option 1","option 2") if o == 1 then return elseif o == 2 then return end end end end 2. Now you click on the NPC, choose "quest test" option and don't click on any option(1,2) 3. /transfer your_character with another GM account 4. The character who clicked on "quest test" option and didn't choose any of the sub-options (1 or 2 ) will now have an invisible stucked window on the center and can't click on the ground or click the area in the center of the screen(where the quest ui was before teleportation) How to fix it: 1. Go to uiQuest.py 2. In def MakeQuestion find the SetEvent functions and edit them as below: def MakeQuestion(self, n): global entire_questbutton_number global entire_questpage_number global cur_questpage_number entire_questpage_number = ((n-2)/7)+1 entire_questbutton_number = n if not self.board: return self.btnAnswer = [self.MakeEachButton(i) for i in xrange (n)] import localeInfo self.prevbutton = self.MakeNextPrevPageButton() self.prevbutton.SetPosition(self.sx+self.board.GetWidth()/2-164, self.board.GetHeight()/2-16) self.prevbutton.SetText(localeInfo.UI_PREVPAGE) #self.prevbutton.SetEvent(self.PrevQuestPageEvent, 1, n) # buggy self.prevbutton.SAFE_SetEvent(self.PrevQuestPageEvent, 1, n) # unbuggy self.nextbutton = self.MakeNextPrevPageButton() self.nextbutton.SetPosition(self.sx+self.board.GetWidth()/2+112, self.board.GetHeight()/2-16) self.nextbutton.SetText(localeInfo.UI_NEXTPAGE) #self.nextbutton.SetEvent(self.NextQuestPageEvent, 1, n) # buggy self.nextbutton.SAFE_SetEvent(self.NextQuestPageEvent, 1, n) # unbuggy if cur_questpage_number != 1: cur_questpage_number = 1 Note: After that you should check for other SetEvent functions (comment them and see if the bug still happens) Info: The bug has something to do with the function arguments Other locations where this bug caused problems: intrologin.py - can cause the arrow keys,enter,esc to not work in the select character phase
  19. 12 points
    WorldEditor Pr-Pack Datei anzeigen Here a list of the files: 1.603 new Objects 337 HD textures 271 vegetations size of the file: 2.10 GB Demo Videos: if you use the files, or release it on another board so please take my YouTube Chanel as credits. Hochgeladen von Ace Hochgeladen 10.07.2017 Kategorie 3d Models  
  20. 12 points
    Hi, everyone. Most people know when you are trying to connect the server with a lot of people, the server can not respond to you or something might go wrong. This example is same for warp too. Webzen did something about this too and I'd like to share it with you. What are exactly are we doing? If the client can not connect to the server, the client will wait one second to connect the server again. Open NetStream.cpp. Find Connect function and replace with this bool CNetworkStream::Connect(const CNetworkAddress& c_rkNetAddr, int limitSec) { Clear(); m_addr = c_rkNetAddr; m_sock = socket(AF_INET, SOCK_STREAM, 0); if (m_sock == INVALID_SOCKET) { Clear(); OnConnectFailure(); return false; } DWORD arg = 1; ioctlsocket(m_sock, FIONBIO, &arg); // Non-blocking mode if (connect(m_sock, reinterpret_cast<PSOCKADDR>(&m_addr), m_addr.GetSize()) == SOCKET_ERROR) { int error = WSAGetLastError(); // If something went wrong, the client will wait one second to connect the server again. // Of course, it will clear and setting up everything again. if (error != WSAEWOULDBLOCK) { Sleep(1000); Clear(); m_sock = socket(AF_INET, SOCK_STREAM, 0); if (m_sock == INVALID_SOCKET) { Clear(); OnConnectFailure(); return false; } ioctlsocket(m_sock, FIONBIO, &arg); if (connect(m_sock, reinterpret_cast<PSOCKADDR>(&m_addr), m_addr.GetSize()) == SOCKET_ERROR) { Tracen("error != WSAEWOULDBLOCK"); Clear(); OnConnectFailure(); return false; } } } m_connectLimitTime = time(NULL) + limitSec; return true; } Best Regards Ken
  21. 12 points
    POST EDITED: V2 PROJECT HAS BEEN SOLD TO SOMEONE WHO WANT KEEP TO BE ANONYME, THE PROJECT HAS BEEN SOLD 7500$ Thank you everyone.
  22. 11 points
    Greetings! The new beta is finished! I'm proud to present r71480. This time a few things have changed. And in this revision, we have a lot of new stuff. In the following I'll provide the download link along with the things I'd love you to test. *** DISCLAIMER *** The core is marked as stable. Anyway, I'll make it clear that I'm not responsible if you use this core since I can't give a warranty that I fixed every single security breach that potentially could happen - that's totally impossible. But we all together made the source great and secure so every public issue is fixed by now. You can use it in production environments now. So... What's new? boot-trigger for quests With this you can execute commands, timers, and all the stuff you'd like to have just on boot-time! revisioning of the 'unique class' (+ a ton of posibilities) added the functionality to create unique-groups temp-Variables for quests upgraded all libs moved completely to the newest clang version fixed some big security issues in the source code fixed the ingame ban and unban commands unified tables and gave them a new way: unify! file clean-up revisioned the makefiles gave the source a new, easier structure removed all external dependencies just install them by ports.. No external-folder necessary! removed 'boost' dependency (no boost lib needed yay) partial implementation of the wolfman (claws etc. are added, needs review) And basically everything that has been offered in the earlier versions of the vanilla core. Nothing should be missing. And if you miss something, just feel free to tell me! What needs testing? There are few things I'd love you to test out: Please check if the core is vulnerable to any security breaches you may know (also the public ones, don't know if I missed something) Please test out the new features! I'd really love to know if the new unique-functions and the boot-trigger does the job. Explanation to new features: Unique with container support Unique has evolved! This time you have a few new possibilities. Don't know what unique is? Here's a short explanation: With the unique-questfunctions you can spawn or set mobs, npcs and now even players to have a unique name. This name is stored into a unique-container. You can access this container and get all the vid's by their unique name (also called: the key) So for example you can spawn a boss with a key. Later on you can check if this specific mob has been killed or not. Or you can set his hp on-the-fly. There's basically no limits! And now with the revised system you'll have even more options. The new unique system works with containers. By default there are two containers reserved: __DEFAULT__ and __CHARACTER__. The first one is for all the basic stuff. And the second one is reserved for players. Now, as you may have noticed, there's a default one which means that the container-stuff is optional. If you just use the unique functions without specifying a container, it'll just use the default stuff. But you CAN use your own containers just as you want to. You can create, delete and list all the containers running. There is a list with all the quest-functions down below. boot-trigger This is pretty self-explanatory. With this release you can use "when boot begin" to specify a block of code that will be executed once the core has been booted. temp-variables With the new temp-variables you can set and remove player-specific variables. They are stored in the core and not written to disk or database. So be careful because they might get dropped once the core shutdowns. It's just a quick storage for people who want to have something like a cache for quick access. new quest functions nil unique.spawn_unique(string key, int vnum, string pos=unused, string container=optional) nil unique.set_unique(string key, int vid, string container=optional) nil unique.purge_unique(string key, string container=optional) nil unique.kill_unique(string key, string container=optional) bool unique.is_unique_dead(string key, string container=optional) int unique.get_hp_perc(string key, string container=optional) nil unique.set_def_grade(string key, int def, string container=optional) nil unique.set_hp(string key, int hp, string container=optional) nil unique.set_max_hp(string key, int maxhp, string container=optional) int unique.get_vid(string key, string container=optional) bool unique.exists(string key, string container=optional) table unique.get_container_list() this prints out all the unique containers table unique.get_container_list(string key) this prints out all the vids in the unique-container "key" nil unique.remove_container(string key) removes a whole container (flushes it when called on standard containers) nil pc.temp_var_set(string key, string value) string pc.temp_var_get(string key) nil pc.temp_var_delete(string key) Thanks a lot for participating! If there are any questions, this is the topic related to it. Further releases will be made public here too! If you'd like to contribute, just post code additions here. Changelog older changelogs Download Useful information: All necessary libs are included. If you're building your own vanilla binary you'll first have to move into every project of the Internal directory and rebuild the libs. The main makefile is not adapted yet, I was too lazy (ps: Still too lazy!) rev 71480 see this post: rev 70220 STABLE Core Sourcecode rev 70140 BETA Core Sourcecode Password for the archive is: vanilla Password for older source archives: vanillamt2 Best Regards Vanilla
  23. 11 points
  24. 10 points
    Please stop posting this ...
  25. 10 points
    I want a ferrari, ships and bitches. TY
×