Jump to content

masodikbela

Premium
  • Posts

    235
  • Joined

  • Last visited

  • Days Won

    28
  • Feedback

    100%

Everything posted by masodikbela

  1. masodikbela

    New Aeldra

    The selection (and probably the coursor movement as well then) is not bidi aware there, thats why I said proper.
  2. masodikbela

    New Aeldra

    Original aeldra never had lycan. Thats right, its got leaked late 2018 and ppl started to sell my wiki from it around 2019. Apart from that there is a really easy way to distinct if something is from the latest aeldra files or not, as no other server has text selection and proper bi-direction text implemented as far as I know and it was fairly new in aeldra from around May 2022. Just open a PM window or normal chat window and try to select/copy texts from it or pasting texts containing both english and arabic texts. Apart from the code other assets from the client have been extracted many times before its closure so thats not an indicator that files have been leaked.
  3. There was a correction today after many years past the release. There was a heap-use-after-free bug in the regen_free_map function, which means that the regen struct has been freed and after that in the increment part of for-loop accessed this deleted struct for the next regen in line. Normally while its not safe, it still doesn't cause any issues since the just-freed memory part is not overwritten yet, but in rare occasions it can happen. Also with debug mode or debuggers using shadow bytes to detect such cases would immediately notice it. This might have been the reason while my vs debugger got stuck back in the old days. Thanks to @ Karbust for noticing this problem with address sanitizer.
  4. As I explained in details in the "How does it work?" part, there is nothing really to fix in the update function. The main problem is that the newly created item overwrites the original stack, and doesn't remove it properly from the core, creating an actual memory leak and later on loading the id is inside the global id map thus preventing it to be created again. But besides all of this putting an item to an occupied cell is an invalid operation and should be always prohibited.
  5. Hi there devs, Its been a while since my last topic, and the reason for waking up from my eternal hyper dream is no less significant than a small possible item dupe exploit that is present in the original leaked source, and therefore very likely still present on most of the active servers including the official. I've seen topics from late 2021 where this bug was abused on prestigious international servers, so its for sure known by some people for a long time, moreover even a related partial fix for the exploit is already present on the board: How does it work? How to fix it? I think I filled my quota of talking in the how does it work section above, so without further ado:
  6. Alright lets see your points: Indeed sus, but on the other hand, if you think about it: how can you actually get your toplist well known by players if not convincing an actually running server to give some thoughts about using their site instead of other already existing and already popular sites. As I'm aware by that time there was no other running toplist that was actually trustable and were not already proven to be corrupt in some ways (purchasable votes, easily bottable or something like that). If I would about to start a toplist I for sure would go try convince a big server to consider switching their primary vote for buff system to my site or noone will ever know about my site. (For example see m2devs toplist, literally noone uses it as far as I see.) This is a vague topic since probably as many ppl as there are will see it differently, as for me I don't see any similarities, the serverlist's logo (as well as the whole design) looks really oldschool, couldn't even compare it with any other server's I know about. I'm clueless about web development (and if you ask me its work of Satan himself so if he exists he is definitely the real brain behind it). From what little I know I could imagine this might even be some kind of framework generated code or something like that no? Like I said I'm clueless so rather not guess anything else on this point. I can only say the same thing as I did on the first point. All in all I can definitely see some kind of connection between them, so being in partnership at least seems to be very likely and actually would be very logical since the aforementioned points. However these are no proofs to that the toplist is owned by the same person/team. As far as I'm aware the toplist is owned by Zerial, and I can tell that for sure that he is not the owner of Aeldra. I don't see much point of this topic, there is no actual hard proof, the only thing I can see is the likely frustration of the author whos' probable interested in other concurrent toplist that is slowly losing popularity to this toplist. If the site turns out to be corrupt as the others (favouring specific servers, selling votes or so) then bring us some proof and I will grab my pitchfork and join the crowd.
  7. It is, and its already have clipping inside it, you can control it with the m_renderBox. The values in left, top, right and bottom of that m_renderBox will determine how much space have to be clipped from each side in pixel positions. I made a small visual presentation about clipping, more specifically about text clipping, but the theory behind it applys to every kind of texture clipping. Some additional good read about texture positions and texture rendering: Texture Coordinates, Directly Mapping Texels to Pixels
  8. If its from the leaked AE wiki no, otherwise post the code and will do that.
  9. Here is a little collab for the clipping, this extends the ExpandedImageBox, so you can scale/rotate those images and still be able to clip them. The code contains very informative comments so if you want to learn a few tricks you might want to read them.
  10. I have limited knowledge of freebsd and network security, but most of the time what ppl do is create a whitelist for the gameserver who can connect to it. By this I mean that on clientside they silently connect or send a request to a different server and they solve some kind of quiz to validate that it is actually a client on this ip, and then they update the whitelist on the firewall side. Now there are lots of room to play, like this validator server could be on a different machine or just listen on a different ip, there could be many other validators, etc. This would solve many problem, like you mentioned normally the bottleneck is the application itself like auth which gets overrun by connection requests and then ends up in a spiral of death rendering the application totally irresponsive. Now I believe that the freebsd kernel (and probably most of the os kernels) is very effective dropping unwanted packets so this type of attacks would have little to no noticeable affects on your network/machine. I've seen relatively big botnets fail against this method. Obviously if the attack is so large that the kernel (more specifically the firewall) becomes the bottleneck and your hardware cannot keep up, or your network bandwidth becomes limited because of the amount of data you receive this wont work. In these cases probably nothing you can do anyway and you would require to have an industrial grade hardware firewall instance before your machine (or if you do have it like for example at ovh they do have it afaik you just need control over it). Now we can argue how effective is this extra validation method. To be able to manipulate the quiz you have to reverse engineer the client which is already a relatively difficult task and you can make it harder with virtualisations. After that you have to implement this to the botnet itself which is already a problem for some of the botnets, like you dont have that fine grade of control over it. Now you can say that you will just target the validators, this indeed could work but you can anytime add more, change validation method, etc. Also this would only mean that new ips wouldnt be able to connect to your server which would affect relatively few players, because lets say you allow the ips for 48 hours to be whitelisted. The majority of the players log in every day or at least every few days, so they would be fine. Like Shogun said its about counter measures, counter counter measures and so on, its just about how patient the attacker is. In general this method is more than enough for a metin server. Now about how to implement it: I don't know, never configured any firewalls, never wrote any rules and don't know what tools you have for example for pf on freebsd. Like I said, this is not my field of expertise so feel free to correct me if I'm just talking bullshit now.
  11. I meant "don't get scammed by random kids trying to sell public stuff for money" by "don't get scammed by randoms". Because in the early days of the leak I saw many trying to do that with the wiki.
  12. Just a heads up about wiki: If you are looking for the same one (aeldra leaked wiki) that everyone uses don't get scammed by randoms, you can find it on less respectful forums for free.
  13. This is because every CItem holds a pointer to the original proto vector (in TItemTable const * m_pProto), which if changes due to relocation or just reordering because of itemID change would obviously cause trouble.
  14. Very well organized article, good examples and followable thinking process. Rare to see the whats whys and hows answered in one place. Been a while since I had such a good reading from the metin community. Also really appreciate that you didn't post any ready to use implementation with it. This is how every topic should look like.
  15. Can you clarify your goal a little bit? So first of all you must know that by default the client will only be able to display characters from the selected codepage (and ofc these characters must be present in the font aswell). What it means that the client will always threat 1 byte of string as a single representable character, while a unicode codepoint can take up to 4 bytes of string (in utf8). If you just want to be able to login even tho its not displayed correctly, you can just use for example boost locale (boost::locale::conv::to_utf) with the codepage used on the string, to get a valid unicode string, and then send it to the server for comparison (note that you might have to do normalization on the string to make sure its in the same normalization form as the saved text in the database (in this case probably NFD would be a better choice because we want an exact match of codepoints used and not the physical result of the composed character)). This can be done with utf8proc for example. If you want to display characters correctly aswell, then you will have to completely rework the TextLine class and use sophisticated typography processors like uniscribe or directwrite(dx10+) or harfbuzz+fribidi+freetype.
  16. You can just save them like self.eventOverInItemArgs = args, and then later call the event with apply(self.eventOverInItem, self.eventOverInItemArgs). That will call the saved event with the passed arguments.
  17. [Hidden Content] Its explained really well here, basically its when you want to pass different amount of variables you can just use *args as last argument in the function definition catching any remaining variables. It will be a tuple, either with 0 or more than 0 elements.
  18. Well as far as I know its not really a good practice to use UDP and TCP together (its better to use only one) except if it really make sense. In our case the main connection would be the UDP one, so we should somehow find and bind the TCP connection to the same stuff in order to keep a track to our main character, which is necessary for example handling normal chat packet (need position to only send that to the nearby players). Well its always hard to start these kind of things and there is not much help I can provide for this. Maybe the best way to do it is just to start right away coding something. It could be an already public system or anything, the key is to have a goal, like "whenever I kill a monster I want the server to give me an item and write me something in the chat". Then you just split it to subtask like: How can I catch if a character dies? How do I know it was killed by a player? How do I know the dead character was a monster? How do I give item to a character? How do I send a chat message? And by doing this you can already see various parts of the server, including CHARACTER class, ITEM class, some netcode and many others. Oviously the more complicated the idea the more parts of the server you can explore that way.
  19. Huhh thats a little bit too much to ask. Back in its time the solutions they made for various problems were acceptable due to the hardware limits, but nowadays the whole server is utterly trash. The question is more like what is okay for modern needs. But to be a little more specific, here is some of the most annoying problems: No serverside checks for some critical game mechanics. There are numerous stuff that depends on the client, and therefore can be easily faked. For example when you attack, the client calculates the positions your attack would hit, and there is only a distance check on serverside if you really hit that entity. There is no other kind of checks, like combo, direction, or more fine tuned stuff. Nowadays it should be completely independent from the client, the server should determine every attack/movement, and the client should just receive the results. No standard packet protocol. The game uses some homemade messy hardcoded tcp network code, where the headers/packets can be messed up easily. Something like google protobuf should solve this problem. Also due to the use of tcp there are noticable delays in movement/attacks so that should be replaced with reliable udp aswell. The cores are single threaded (except the mysql working threads) and to spread the load across the cpu multiple cores are being used (so it means that best case you have one map / cpu core (which obviously very rare in production servers)). But on farmmaps especially on server openings there are large amount of players and sometimes it noticeably draws performance, and literally nothing you can do about it, since you cannot make it use more cpu threads. Because of this higher cpu clock speed is usually prefered over more cpu threads when selecting hardwares for metin servers.
  20. Except /reload p (because it reloads the protos too) its safe to use on live server, if you don't have any new system or adjustment related to those stuff (so considering you use the basic files its safe).
  21. ? Yes, the low-effort but working solution is this indeed. The difference between my suggestion and the "fix" from the other topic is that the latter just masks the problem making the client call render even if the client is minimized, so it uses all the functions it normally does, wasting the resources on something that nobody can see. The former one just calls the effect update which is a cpu-only task, and while normally its one of the performance bottlenecks, still doesn't use much resources on its own (without the other render calls). Well not sure what else can I add here, the lowest effort but working solution is the one you asked about. I won't write the code for you and basically I told everything you need for that. Its literally pasting one single line which updates the effects to the place where the game should render, but skips it only because the client is minimized. So here are your clues, its now time to split up and investigate.
  22. The content in that topic can be visualized in a single gif: The problem with the "speedy effects" after maximizing a minimized client lies here: As you can see the elapsed time is measured since... well... the last time the effect got updated. You might say that hey, thats ok... well it would be, but if you take a look at the messy game loop inside PythonApplication.cpp you will notice that the call for effect updates is only present in the RenderGame function, which is a render function as its name implies it, and its only called when the game is rendering. And since the game doesn't render anything if its minimized, the time for the effects basically stops, and when the game starts rendering again, it will resume it from that point when it got minimized. You might rightfully say that okay, but that doesn't explain the reason why is it "speedy" for a long time, since the time difference should be huge for only one call, then it should return to normal because the m_fLastTime got updated at the end of the function. And at this point I'm officially out of definitive answers. The real reason might be one of the following: On the first "big" time difference after maximizing the client destabilizes the effect instance, messing up the emission/decorator update on a weird way, making the following n updates unstable as well. The custom timer class is more than weird, it has a "real time" mode and a "custom time" mode, but as I see only the "custom time" mode is used, which works like advancing the timer every time the main loop is called. Since the advancing is always called (its in the update part, not the render part) I somewhat doubt that this is the real reason. Using a different timer (potentially std::chrono) here in the effect update would quickly evaluate this case. In short, fixing it could be done by: Using a maximum value for the elapsed time (like it cant be larger than 1/60). This would solve the "speedy" issue, but would cause another bug, making some effects stay longer alive (if you minimize the client). Calling effect update even when the client is minimized. This would make the client use somewhat more resource when its minimized, but would still use way more less resource compared to the "fix" in that topic. Digging a bit more deeper, finding more accurate solutions. (The effects are stateless, or at least it really seems so, so it should mean that the effect should work with any given "elapsed time" at any point, but like I said this might be violated somewhere. The effects are not stateless, since the particle positions are based on the last position + elapsedTime * acceleration.)
×
×
  • 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.