Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 07/04/19 in all areas

  1. M2 Download Center Download Here ( Internal ) Hello, thanks to @masodikbela ideea about motions i could find a way of how to improve the loading of players. You must follow the tutorial exactly as it is. 1. Open root/playersettingmodule.py and replace all RegisterCacheMotionData with RegisterMotionData 2. Open \UserInterface\PythonCharacterManagerModule.cpp Search for PyObject * chrmgrRegisterMotionData(PyObject* poSelf, PyObject* poArgs) Replace this line pRaceData->RegisterMotionData(iMode, iMotion, c_szFullFileName, iWeight); With const char * c_szFullFileName = CRaceManager::Instance().GetFullPathFileName(szFileName); CGraphicThing* pkMotionThing=pRaceData->RegisterMotionData(iMode, iMotion, c_szFullFileName, iWeight); if (pkMotionThing) CResourceManager::Instance().LoadStaticCache(pkMotionThing->GetFileName()); 3. Open \EterLib\ResourceManager.cpp and replace int g_iLoadingDelayTime = 1; const long c_Deleting_Wait_Time = 3600000*4; const long c_DeletingCountPerFrame = 1; const long c_Reference_Decrease_Wait_Time = 3600000*4; Search for and comment it (not really necessary, it's your will ) //m_pCacheMap.clear(); Search for GameLib\RaceData.cpp void CRaceData::RegisterMotionMode(WORD wMotionModeIndex) comment //pMotionModeData->MotionVectorMap.clear(); This is what will load for cache at your first login [Hidden Content] What will fix this: When your walk and see new players screen freeze whould be way shorter or not happening at all. Recommended after this tutorial to update the granny in the source and the gr2 models (except the buildings).
    3 points
  2. I heard someone mention my name? I'm not a good dev but, for sure, I can take a look at it. Would be a nice project to work on.
    2 points
  3. I think @Ikarus_ and Yiv or Chuck knows too all people are really good Developer with a gread knowlange about c++ Edit: @Vanilla i think too
    2 points
  4. item_names.txt (all countries without mother russia ?) please don't replace (just copy and past some parts). Patch v19.3.6 Download
    2 points
  5. Thank you for re-opening i know at the moment im not good enough to find a real Solution. I am only a Beginner in Learning C++ and reading Tons of Books.. but i know that this Topic is so Important ! That the Community have to Start working with each other and like i say before to talk again with each other ! i only seeing hate i see how bad people in the Community trying to harm each other but thats not right and i think we all love to develop on Metin2 and i just hope that we can find a solution because .DE has find it too ! so if .DE can do this we can also do that. and i hope that some Developers from Rubinum like @HuNterukh can say somenthing to this Topic too because Rubinum also improve the players Game Quality hope its okay to quoute you here Hunter. @Alpha also known as 'Tim66613' can also say somenthing to it i know Tim you dont speak much in the Community but maybe this once for me .. ! all the Big People could @martysama0134 and i hope they do for a little person like me and everyone. and maybe and i dont know but maybe @iMer too ! "Dont wondering why i quouting you all but read the topic and you will know" maybe you all hear me understand me and speak i hope so this text does not only goes to the big people that i know it goes to every developer that are great in C++ ! ? - Lovely Greetings / and sorry for my English The Little Meleys
    2 points
  6. However I can't blame gameforge because of everything. They are only a publisher of the game. So we have webzen as the developer, they decide what to code and what patch to give for the publishers. Publishers don't even have a say about it. So if webzen gives a patch with 6th 7th bonus, publishers can decide if they put the patch to live, or no. They can't undo this. They don't even have source or anything. I was doing a research some weeks ago if its possible to get a license from webzen, and if so will you have the right to change the game the way you would like to, and (I didn't talk to anybody nor contacted anybody, only read the available documents and stuff) I realized that no, its not possible. So currently we have 2 companies with license to metin according to webzen's homepage: Ongame (in brazil) and Gameforge (in europe). Yes, thats true that gameforge is still full of crap, and they are doing questionable things like this copyright strike, but still I can't blame them for everything. Not sure if they do or do not care about the feedbacks, or just webzen pisses off the players needs.
    2 points
  7. The original topic got updated/changed over time but I will not update this comment, so its normal to feel confused while reading it. I've run through the method you chose, and I have some notes about them. c_Reference_Decrease_Wait_Time is unused right now, because the client is not using other thread for background loading by default, so m_RequestMap will be empty always, so ms_loadingThread.Fetch(&pData) will return false always. Moreover, the whole ProcessBackgroundLoading function is unused right now, since it only do things if the mentioned background stuff is enabled. Editing g_iLoadingDelayTime in that file is probably pointless, since it will be overwritten by the config file. You should remove that option from the metin2.cfg. Editing __DestroyCacheMap is pointless aswell, since it will only run when you close the client. Also I would put a very very big red exclamation mark here, since you commented out m_pCacheMap.clear(). In theory (ofc it will never happen because the function runs only when you close the client so nobody will give a fck about that cache map anymore) this could lead to huge crashes since in CReferenceObject::Release a deallocation could happen (its possible that it won't, because its possible that at that point something is using that actual file for some reason, so the reference count will still be higher than 1). And after that since you don't clear the cache map, the next time when the system would try to use the cache map, it would receive a corrupt memory address, since we deallocated the object from that address. So anyway if you still want to make sure that nothing will call that function, just put a return to its beginning. About the last edit: I would put an even bigger red exclamation mark there. This requires some further explanation tho, so get ready for it. So first of all, let me talk about memory pools. So as you may know, our processors work better (talking about performance) if the memory addresses are close to each other. Also it works even better, if the affected memory block it needs to read is inside its cache. Also, allocating/deallocating memory runtime is an expensive operation. So long ago programmers came up with an idea: Lets allocate a big chunk of memory when we start our program, so we can put our instances inside it, so the data will be in one place close to each other, and we don't even have to bother with allocation and deallocation. So memory pooling was born. Now that we know this, lets talk about the implementation of CDynamicPool. So as you can see, we have 2 vectors inside it. m_kVct_pkData and m_kVct_pkFree. The first one contains all the ADDRESSES of the given object's instances (even if they are not used at the moment). The second one contains ADDRESSES of those objects that are no longer in use. (As you can see it contains ADDRESSES, so this type of implementation does not solve the problem with the "data in one place" problem, because its possible that we will get an address far far away from the previous one, but its irrelevant right now.) If you take a closer look, you will see new operator, but you won't see delete operator. (This is a possible memory leak factor tho, but since you don't remove those memory addresses from the union of those two vectors, its not the case in reality.) Moreover, if you check the Free function, you will only see that we just simply put an address to the pkFree vector. It means, that the destructor of the given object will not get called. (This could and probably do (in some cases) lead some actual memory leaks, but again, this is not what I want to talk about right now.) Okay, now lets say that we have 2 allocated instances, so we have 2 already-in-use addresses in pkData vector. Lets say that one of them gets "deleted". The Free function will put its address to the pkFree vector. Then, we say that uhhhh ummmmm wait wait, I need a new instance. Okay, we call Alloc. Lets see what will happen: pkFree is not empty, so it will not allocate a new instance, just simply gives the last free address back from pkFree. Looks safe and simple right? Yes, thats the case if you are aware that NO CONSTRUCTOR WILL BE CALLED THERE. Whats the problem with it you may ask... The problem is that we didn't change the content of that instance during this Free and Alloc call. (Sure if we've called some cleanup function outside of the CDynamicCache this is not the case like I said, but then it means you were aware of this problem.) So what you did when you commented out that pMotionModeData->MotionVectorMap.clear(); part was removing this correct cleanup. So what could happen (at least in theory)? Lets say we have a male warrior. This male warrior go away and all the data gets deleted after 4 hours, and you just simply stand still and no other characters appear. The game will remove the unused motions from the CDynamicCache. Then suddenly out of nowhere someone summons a wild dog. It will receive the same exact stuff from the pkFree vector that we just removed. So that wild dog will have 240+ motions loaded instead of 4 or something like that. Sadly we can state that our new wild dog won't run with the male warrior's animation, since in NEW_RegisterMotion that animation will be overwritten, so there will be no visual defects. I'm not sure about the chrmgrRegisterMotionData changes, but probably those don't add much to the final result. My opinion is that changing c_Deleting_Wait_Time to a much higher value was the only thing you did and actually helps in this problem. So basically what you did was: You changed that the unused files don't get deleted over time (or just after 4 hours), which means that in this specific case if you go to somewhere alone, and no other player appears for 4 hours (instead of the original 30 second) and after that someone with other type of character (so you are a warrior and the other player is not a warrior) appears, you will still have the same lag like before. Conclusion: Disregarding the wrong/useless parts, it doesn't solve the main problem. In the gif you shared its clearly visible, that not all the motions load during the loading screen. Example (what you should see) for female assassin (241 motions in total): Because of this, when you login the first time, and you meet a different type of character, you will still have the same lag as before. (The first time I had some doubts in myself tho, so I tested this one to be sure, and I was right, so this is the case.)
    2 points
  8. 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
  9. Hi guys, Since I keep seeing more and more people who want to get help to create their own server, very often with the idea of opening it to the public, I thought that it's time that someone explained to the beginners what this means in it's full depth. Some parts of this text may sound harsh but believe me I wish I had been told some of this stuff when I started. First of all, do not let the existence of "instant files" mislead you. A metin2 server is not something you install with an intutitive wizard and then edit to your liking with a point and click interface. YMIR never intended this software to be used by anybody else but people who have degrees in programming and design. This is though shit. There is a series of technologies involved which can take years to master separately. FreeBSD. Python. LUA. C++. DirectX. Mastering just one of these disciplines can get you a high paid job in Silicon Valley. If you don't have a bit of curiosity for learning and analytical thinking, just forget it. You will do yourself and everyone else a favor if you don't try to take on tasks that are beyond your abilities. Forget about the one man army. It's impossible to create anything worth playing just by yourself. Team up with people who complement your knowledge. Don't be greedy and offer to share your earnings with the people who help you. Respect those who worked to provide you with this game, YMIR. Respect those who worked to privide you the tools you use and give credit when due. Don't try to pass someone else's work as yours; this is the lamest thing on earth. Respect the players. Don't expect them to spend their time, money and effort on your game when you didn't do that yourself. If you have the time, play your own server (without using edited stuff and such of course) so you can get in the skin of your players. Don't be tempted to gift stuff and kick any GM that does so. Be in control of your server and get a good admin panel so you can see everything that's going on. Get DDoS protected hosting. Use SSH keys. Use Cloudflare for the website. Set up pf on the game server. Always look at the logs and read them instead of assuming it's gibberish. How often I have seen people puzzled at logs when the answer is written there in plain english. Make sure your dbcache port is not open to outside, and be careful who you give access to your server's shell. Make backups of your database at least daily. When you get stuck at a problem, use damn Google! Metin2 pservers and FreeBSD have existed for many years and copying and pasting an error message in the search bar will more often than not bring up posts from people who had the same issue before. Create something unique that will attract players to your server. Don't expect to upload some pub files, announce your server and get rich. It doesn't work like this, not for the last 3 years. There is a lot of competition and teams who started working years ago already are far ahead of whatever the [insert random pub files] have to offer. Use the newest files possible, even if you don't need the new features. Keep your FreeBSD up to date as well. Using old software is a security risk, and you could write a book with all the security flaws of game 2089. Promotion is everything. Hype your server. Make sure that the opening is announced well in advance and have the players excited to play it. The opening day will make or break your server. Get a Youtuber to review your game, preferably one who works for money if you can afford it (and if you don't have at least some money, opening a server might not be the best idea). If you have enough, open a Facebook account and take good care of it and promote your server through Facebook Ads (do not confuse with the fake likes that some people sell in places like epvp). Use remarketing with AdRoll (its quite cheap) to chase your visitors who did not sign up with banner ads. Watch your account table in Navicat so you see who is signing up. And if all of this sounds like too much work then just don't do it. There are plenty of people happily contributing as GM, designers, developers or server administrators in projects lead by other people, and that doesn't make them less important.
    1 point
  10. This release contain a new function which reading the locale_string.txt on channel booting. The default ymir's reading function is one of the best example of bad practice (open a .txt file as binary to reading text?). There the difference between my func and the ymir's func (in the image) TO USE FIX MUST HAVE C++11 DOWNLOAD
    1 point
  11. Gameforge started to strike all videos from private servers because they claim copyright and youtube is piece of shit, because 5+ sanctions and they deactivate your channel lol and you can't do anything. GG Gameforge.
    1 point
  12. Pay up my friend @iFreakTime~.~ your welcome, remember this, you could screw up bigger files for example changing char_item.cpp locale string lines with those kinds of mistake on the future.
    1 point
  13. It's because copy & paste, u need to paste them in a txt and edit with notepad++ and change the encoding to remove the unknown symbols there and after that you are able to paste them in visual studio binary source.
    1 point
  14. I think noone ever did anything like that in the mt2 scene what you are looking for right now. As others said probably the best way to start is to start analysing and understanding other already finished stuff, and modifying things inside them, what will happen, etc... Yes sometimes you will learn bad things or wrong things with this method, but if you do it long enough you will recognize them sooner or later. If you are looking for some other type of information, like how does this or that works (mostly in theory, so you need those type of information like I usually write in my comments) I'm your type of guy, so feel free to ask me, and if I have the time and mental power I won't hesitate to write long long explanations.
    1 point
  15. Okay, it feels like now you think I'm the bad ugly dev here, because I refused to share or sell this stuff here despite I having it for more than a year. Moreover you took my detailed review about this fix as a personal attack. Let me clear some stuff here (I hope you manage to chill by the time you are reading this). I wrote my answer without any hate or anything. Yes, like I said it felt a bit bad for not leaving any credit for the idea at least with a 1pt textsize that nobody can see but still there. My goal was to tell you the technical problems with your changes. I wrote nothing but the truth. Its always sad to see when someone ignores my technical advises but its more sad when someone misunderstands my intent. Truth sometimes painful but its always necessary. I could have write that "ahh man its even better than my solution, thank you very much, sorry for not telling you and releasing my version". Would it help? Not sure. Did the stuff I do help? In long term I'm sure, but even in short term you changed that now all the motions load correctly, so I guess it did worth. You were asking in the first comment for help and discussion, to improve your solution. I was hoping that my comment will serve this purpose. I wrote even more detailed in some topics there because you said that you are not a programmer. (I would have wrote it anyway because I know that there are not much people out there knowing about pooling and stuff.) I've stopped releasing stuff long time ago, because it felt like giving fully ready stuff under people butts are moving the community and the devs in the wrong way. I've realized that there are no or not much professional devs out there because they are not trying to dive into deep inside stuff and they are doing it because of the money only. So I was thinking what could I do for this community to change this, or help changing this so we could get other more professional devs, and making some competition for the other pros out there. I came to this conclusion that if I explain stuff like this or stuff like the rect clippin would probably impel others to get some experience. There is another reason why I didn't published this particular one is that I made this for a server as a freelancer under a contract, which says I can't share or sell stuff I made for them. Also (and I'm writing this only to inform you, so no hate or anything still) that removing contents are forbidden on this forum.
    1 point
  16. @Exygo Else part can be removed, it's not used at all. I left that line just because i wanted to see if there is happening an else. And first test it, it is a difference using RegisterCacheMotionData and RegisterMotionData.
    1 point
  17. This company was always a piece of sh*t. They blame private servers for losing players but they give a fu*k about their feedbacks. They ban everything and everybody for no reasons or crappy reasons and they expect to have success. Opening a new server and allow cun*s to transfer items from another server is annoying and that’s the main reason i quit this game.
    1 point
  18. put mt2 instead of metin2 It's like politicians with their own paid television
    1 point
  19. I don't have something like that on my server or something similar, but i know effects are power hungry. You can add them to an exception list. With all my changes this is how a first loading looks [Hidden Content] . At this point i succeeded in removing my screen freeze which was big.
    1 point
  20. I have once done that, and you will notice a huge increase in memory usage. In my case it jumped from 400 mb to 1.2GB .
    1 point
  21. I'm glad is working for you too. @Syriza i think we can't do much there, windows cuts the resources when a window it's minimized.
    1 point
  22. In ConstInfo.py: DONT_REMOVE_LOGIN_ID_PASSWORD_AFTER_WRONG_TRY = 0 Intrologin.py change the function SetPasswordEditLineFocus def SetPasswordEditLineFocus(self): if constInfo.DONT_REMOVE_LOGIN_ID_PASSWORD_AFTER_WRONG_TRY: if self.idEditLine != None: #0000862: [M2EU] 로그인창 팝업 에러: 종료시 먼저 None 설정됨 self.idEditLine.SetText("") self.idEditLine.SetFocus() #0000685: [M2EU] 아이디/비밀번호 유추 가능 버그 수정: 무조건 아이디로 포커스가 가게 만든다 if self.pwdEditLine != None: #0000862: [M2EU] 로그인창 팝업 에러: 종료시 먼저 None 설정됨 self.pwdEditLine.SetText("") else: if self.pwdEditLine != None: self.pwdEditLine.SetFocus()
    1 point
  23. Your life has been Questions and Answers ?, let's stop with off-topic. @TurKAdaM The previous reply was a joke, nobody can help you with a full guide how to develop everything in metin2, you need a lot of time to learn alone, so first one, start to learn programming. [Hidden Content] [Hidden Content] [Hidden Content]
    1 point
  24. This sounds like: Guys, help me to do money! Did you tried to contact Frankie? He knows everything, you just need to give him a Pioneer DJM 2000 and he'll show you all about metin2 development.
    1 point
  25. Haha, i did it long time ago, now you make it public, danke sexy p3nger. ? I think i will post my full version, soon.
    1 point
  26. No, I really don't need to.
    1 point
  27. [Hidden Content] As I said before, this is just an example, don't paste it into your source, it won't work with this base!
    1 point
  28. Something like that, but for weapons this is a bit messed up, not every camera view good for the different kind of weapons. But now I'm having fun. When I'm done I'll post it here, but my base is totally GF like, so, might not be fit 100% for this base.
    1 point
  29. I don't tested ingame just looked a little bit to codes probably there is have a memory leak, doesn't exist any exception handler and a typo issue. you can modify with; (not tested)
    1 point
  30. A guy from another country was crying a forum for a server that I was given the prize for the final winner of this complaint? - Did you use a skill during the event was punctuated ox and as you enter the bug event. Many people use skills during the event to no longer make them the ability cheer1 / cheer2 when they win because that question be entered by a bug in the event, or went with bug armor, etc. relog This lock not only help run a fair event, but also help to decrease the lag because many people use the skill's, buff etc in the event. You can enable/disable this protect for no use skill in map with: /e enable_block_skill_oxevent 1 /e enable_block_skill_oxevent 0 (0) - Disable protect (1) - Enable protect [File: Src/game/src/char_skill.cpp] //1.) Search: if (false == CanUseSkill(dwVnum)) return false; //2.) Add bellow: #ifdef ENABLE_BLOCK_SKILL_OXEVENT #include "questmanager.h" DWORD dwFlagBlockSkill = quest::CQuestManager::instance().GetEventFlag("enable_block_skill_oxevent"); if (dwFlagBlockSkill > 0 && GetMapIndex() == 113) { if (quest::CQuestManager::instance().GetEventFlag("oxevent_status") != 0) { ChatPacket(CHAT_TYPE_NOTICE, "[OXEVENT] You can not use skills during the event ox !"); return false; } } #endif [File: Src/game/common/service.h] #define ENABLE_BLOCK_SKILL_OXEVENT
    1 point
  31. You are wrong, wasn't about you. What you said was good. I will improve and understand completely how everything works this week.
    0 points
×
×
  • 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.