Jump to content
metin2dev

Leaderboard


Popular Content

Showing content with the highest reputation since 05/19/2018 in all areas

  1. 14 points
    Hello. Today I'd like to share this little stuff what I reversed from the official binary a month ago. This will fix the positions of textails(name position changes by every update packet on the main character), and also the position of the emotions when you are on a mount . I've made a little demonstration video where you can see a private server without the fix, my fixxed version and the official aswell. 1. Client/bin/playersettingmodule.py 2. Client/bin/introLoading.py 3. Place the race_height.txt from the official client into the yours and pack it in the root. 4. Client/UserInterface/PythonCharacterManagerModule.cpp 5. Client/GameLib/RaceManager.h 6. Client/GameLib/RaceManager.cpp 7. Client/UserInterface/InstanceBase.h 8. Client/UserInterface/InstanceBase.cpp 9. Client/UserInterface/InstanceBaseEffect.cpp 10. Client/UserInterface/PythonTextTail.cpp 11. Client/GameLib/ActorInstance.cpp I hope you like it, and if you find any problem just let me know in this topic.
  2. 7 points
    Why are you criticizing someone who tries to share a work for the community what he has created? I didn't take a look on the code.. But why you don't give any code improvement suggestions? That would help the creators more to understand how to do something better! Your comment is meaningless in this regard! You have never released anything... I can't understand why you can't say just thank you .. P.S: @Whisy thank you for the release Best regards Raylee
  3. 7 points
    They did it again... Now the gameguard isn't runing. Here is the whole pack with item and mob protos, but the mob_proto isn't clear just dumped with false values, and ofc I don't recommend of use one of them either. (Exclude files: root, outdoor, outdoorempirebattle1) https://mega.nz/#!GBhjkLbZ!CU1tB_6RrgsD-PkosOJl-MeKXlwD3q7tSIufoxCyFJY
  4. 3 points
    Hi devs, I just discovered many client are using old versions of Unicows.dll, DevIL.dll and ILU.dll. It's not as hard to update them and if you are deeply into a client development you appreciate those SDK or PDB. DevIL & ILU (?) Default client is using 16 years old version. Come clean, looks horrible, right? These libraries are open source so you can modify them. Here you can download latest SDK. During those 16 years of development there have been a lot of changes, here is excerpt of them. Changes: DirectX 9 & 10 support New bilinear scaling routine Support for alpha-only formats Better support for ICO, GIF and DDS format Fixed minor bugs with BMP and PNG formats Fixed a lot of issues about DDS format A lot of bug fixes Unicows (?) Well, actually you can delete this library from your client and it won't have any effect on client proper working (Windows Vista and newer). However, you have to keep this library if you want to support compatibility with Windows 95, Windows 98 and Windows Millenium Edition. Here is available package which contains library, it's PDB and license. Sources: http://openil.sourceforge.net/ https://www.microsoft.com/en-us
  5. 3 points
    Hello guys. I'm Narvikz, I've been in the Metin2 scene since forever, actually I feel like I'm kind of the furniture already and unluckily full of dust by now This will actually be one of the slight amount of contributes I've given to metin2dev, I've jumped off ship a while back since this game died but apparently some troll still support it, anyway that's not related to this thread so let's keep it out of here. As there's still demand for some reason so is there a supply of game hacks, it's the basics of games, the more players there are the bigger the market for payhax and so the more profitable they are. I was contacted by a friend of mine (Runah Services) which told me that he wasn't unable to detect m2bob in any way, he also said that there are very few people who are doing it and those who are able to detect were keeping it private, he did not find anyone providing a satisfactory service to protect against these tools. What I have to say about this? You fools, you clueless fools. So, let's face it, you guys just don't have a clue about what you are doing. Right off the bat I could enumerate dozens of ways to systematically detect that m2bob is running on some system and think of its basic architecture. But first, let's talk about its architecture and how we can defeat it. Architecture M2Bob - Patcher.exe: This is the start up process when you first start using M2bob, this will generate a 128-bit Digest (probably md5) for each file that is to be checked on disk, send it through a POST HTML request to an API that will compare the client side files to the server side up-to-date files, if any file's digest is any different it will download the most up to date file using the HTTP protocol and replace it at disk. This patcher will connect to a web server hosted at the subdomain ni220471_1.vweb02.nitrado.net and as you can see in the spoiler, little reservations has Slait as to what's hosted there. Once everything is updated it will open M2Bob.exe which we'll talk about next. M2Bob.exe This file when opened from outside the Program Files will create a randomly named (yet with constant size - 10 characters) folder inside of the Program Files folder of your computer and then another one with the same template. After that it will spawn a copy of itself with a random name (yet same size once again) and do the same for the M2Bob_Dll.dll changing its extension to ".e" instead of "dll". After that it will open that randomly named executable and execute from there. Once you press the button to start the game it will spawn a metin2client instance, it will inject its module into the process memory. After that it doesn't close the open HANDLE to the game which leaves us a HUGE detection vector to take advantage of. M2Bob_Dll.dll This module once injected into metin2client will run a few Signature Scans to find the game's subroutines it needs to call in order to simulate game actions. If you take a look into the module's memory you can see those patterns and its masks quite easily, this uses a standard FindPattern function that's been around since the very start of the cheating scene. It will then automate the actions of the player using complex algorithms which are not relevant for what we care about. Security wise all M2Bob does is hooking Module32Next and whenever at your iteration through the module list you hit the m2bob random named module it jumps it to the next one, successfully hiding its module from the simplest of all module enumeration techniques. Good job Slait, always work for the minimal standards and do not think out of the box The hooking method used is the BIGGEST PILE OF CRAP I'VE EVER SEEN being done on a Windows NT based Operative System This is still a detour with a trampoline hook at function start but instead of replacing the first 5 bytes with a JMP + 32 bit absolute memory address he does THE MOST RETARDED SHIT I'VE SEEN IN A WHILE. Trust me guys, I've seen so much retarded shit lately, but Slait takes the crown on this one, he really deserves it since he's put a lot of effort into this. Instead of copying the first five bytes of this function, replacing it by a simple JMP to a memory region where it has these first five bytes followed by his detour function and then a trampoline JMP back to where it all started, he managed to do a 8 FUCKING BYTE LONG in-line hook, when literally every Windows API function is compatible with Hotpatching (easy first 5 bytes hooks). System Overview The whole system is really weak, it circumvents the protection mechanisms that is supposed to which are a PILE OF CRAP like Hackshield and GameGuard or whatever the fuck GameForge is using nowadays, but it doesn't really think out of the box when it comes to protection and obfuscation. Slait wouldn't stand a chance if GameForge purchased an actual decent service from someone who has a single clue about what they're doing (lol, even fucking Bastian Suter would perform better) instead of this pile of crap. There's no solid DRM and the system is overall really weak and shouldn't take much longer than a few hours to crack to a talented reverse engineer. Detection Vectors Well, I don't even know where to start, the whole system is flawed and weak, there's holes everywhere so I'll enumerate some quick detection vectors I can think off, and yes, I HAVE TESTED MOST OF THOSE AND THEY WORK Method #1 - Hidden Memory Pages (TESTED & WORKING) Iterate through memory pages and using VirtualQuery find those which are 4096 byte long (size of the PE Header) and being used, for those check if you can get a DOS MZ executable signature, and if you do then you most probably have a PE Header memory page. Interpret cast that memory address to NT Header and check the TimeDateStamp and or SizeOfCode or other parameters that are constant (there's tons of them) and allow you to uniquely identify m2bob. Method #2 - Open HANDLEs to game process (TESTED & WORKING) You're gonna have to use the Native API and some Undocumented structures and functions to get this done, it's really easy to do so though, shouldn't take you longer than an hour to being able to enumerate all you need to do this. Calling NtQuerySystemInformation with SystemHandleInformation as first parameter while the return value of this function is different than STATUS_INFO_LENGTH_MISMATCH or STATUS_BUFFER_OVERFLOW you are able to populate a SYSTEM_HANDLE_INFORMATION object which will have the first 4 bytes as the count of SYSTEM_HANDLE objects present in an array that follows it. This list once populated will contain a list that contains all the HANDLEs opened in your environment, this means all the File, Registry Keys, Processes, Threads, etc, HANDLEs will be enumerated and will be in that list. But to know the type of HANDLE you're dealing with you have to first call QueryObject on that HANDLE with ObjectTypeInformation to know more about it. This will get you a UNICODE string that will contain the HANDLE type, you only want the ones that are "Process" so you can filter the irrelevant ones out. Then you can check if the HANDLE is targeting your game's process id (you can get your process id at the PEB of your process), if it is you're gonna want to run some checks on that process to check whether if it's a legit one or a blacklisted one. You can do this by opening a HANDLE to it with OpenProcess and PROCESS_QUERY_LIMITED_INFORMATION as parameter. Then you're gonna want to get the executable path in disk using QueryFullProcessImageName, from there you can just read the first 4096 bytes of that file, cast them to NT Header and do the same checks as mentioned above. Alternatively you could just open the handle with PROCESS_VM_READ privileges, and use ReadProcessMemory to get the PE Header, but PROCESS_QUERY_LIMITED_INFORMATION never fails, even if the process is run as administrator or it is a system process and since m2bob doesn't use any Dynamic Forking technique it is pointless to use anything more than that. Method #3 - Integrity checks at Module32Next (TESTED & WORKING) Okay, this might sound retarded because there's malware that will spread to every process in the target system and hide itself using a user-mode rootkit that might hook Module32Next, thing is, Slait's kind of hooking is so retarded there is no actual way this would raise a false positive. This is his retarded hook: The 1st byte will always be FF, the 2nd will always be 25, the 7th will always be E4 and the 8th stays at a constant F8 as well. Check those and insert a huge dildo in Slait's ass, seriously, isn't that hard really. Do you think that's even hard? Please...... Method #4 - DNS Cache (Untested But Will Work) So, now we're jumping to the shitty methods that are only here to fill the thread just so you can be proven wrong when you say it can't be done. Basically whenever you resolve a domain name a UDP request is sent to your DNS Server asking for the resolution of a certain domain or subdomain, it will answer with some records for that domain, these records contain the IP Address it resolves to, and that IP address will be the one you'll connect using the Internet Protocol version 4. Your operative system will cache those resolutions so that each time you need to have that domain solved it doesn't bother your DNS Server with requests each time and there is a faster resolution, you can use this to beat M2Bob once again. You don't wanna look for m2bob.net since that could flag players that just crawled around that website, but if you flag their patch server subdomain, you can actually accurately flag players that have been using m2bob. Remember ni220471_1.vweb02.nitrado.net? Yup, flag the shit out of it. Method #5 - USN Journal (Untested But Will Work) The USN Journal is a system in the NTFS that keeps track of changes to files in the user's system. It will contain the timestamp of the said change, the file name and the reason for the log. The first two need no explanation, as to the third it could range from Opening the file, deleting, moving, renaming, creating, etc, etc. How's this useful? Remember how opening M2Bob.exe spawns a different executable in the Program Files folder and opens it? Well, you don't access that executable directly, you still open M2Bob.exe, this means that you could just look for entries in the USN Journal in the last 15 minutes or so that contain the name M2Bob.exe and are followed by some program in the Program Files folder a few milliseconds after (or even skip the latter) that has been opened and just kick the player from the game whenever you detect it. Aditional Methods Detection Vectors, detection vectors everywhere, I laugh at all the incompetents that for months tried to do it and failed systematically, you fools, how can you be so clueless? Even though Module32Next is hooked Module32NextW is not, which means that if you use the UNICODE alternative of the kernel32 library you will get unfiltered results - Good fucking job Slait, Incompetence at its fittest (inb4 every incompetent out there edits a public anti cheat source to use Module32NextW LOL) Haven't checked it, but even though Windows API module enumeration modules are hooked to spoof the results, you should be able to use the InInitializationOrderModuleList, InLoadOrderModuleList or the InMemoryOrderModuleList to find its module. Just be h4rdc0r3 and use Syscalls. Since you're incompetent you won't do this, hell you couldn't even get the indexes for your own operative system version let alone do it for 20 different versions per each function you wanna call. Anyway just implement the native API functions without actually calling them, this can be done really easy and WITH LITTLE INLINE ASM CODE using naked hooks, that will make sure that you don't break the stack inside of the function. You can look into this HERE. Your function call will be done within the kernel, meaning that this would bypass any placed hooks by Slait. Why the hell would your metin2 game process own 2 windows bruh? Doesn't make sense to me, just kick them dude. Signature Scans, this is pointless because his system is all flawed but could be a nice backup resort if he ever decides to use his brain. Pretty sure m2bob has some exported shit in their PE Header, just scan for it using the hidden PE Header detection shown above. As I'm really fucking tired already of writing a long ass thread incomparable to anything ever seen before here or anywhere released publicly online I won't even write down any more detection vectors, the system is filled with holes, I think I've proven my point already and it's pointless to keep doing this. This is a rant thread because you guys that own a metin2 server to make a quick buck should be ashamed of how unskilled you actually are, you are complete incompetents that keep leeching public releases and stealing other people's/servers' work, claiming it as your own or often not even mentioning it since people just don't even care any more. You provide public PAID services on an area you don't have a clue about, you're just scamming customers and selling them dreams. It is really frustrating for me since I left the scene when I was still a kid, I barely knew English and I stayed mostly on my local country's forums, my contributes back then were merely in the translation area, I've put a lot of effort into it now that I think about it, after that I limited my contributes to helping people with general Linux/BSD issues, but then it seemed that owning a Metin2 Private Servers built with pieces and pieces of stolen or leaked work was a trend, and I got really really pissed at the whole scene, I just started trolling all the retards asking for assistance with BSD issues that are from 101 classes, obvious errors that even my grandfather could solve and other retarded threads. Have Fun guys, I know most of you won't use this for anything since even being spoonfed all the methods you're so clueless you can't write this down on code, but maybe there's some one out there that will actually use some nice tips like this, and since I gave them to one guy privately on skype I might as well post them publicly for everyone to see. I've been contacted by SandMann016 to work with him, and to be honest it kind of makes me sad that I am releasing this, I never managed to proceed with those plans but still, he seemed to be a decent guy back when I first met him, but oh well, here it is now. /rant
  6. 3 points
    You don't need to ask them to logout, shutdown does this. Never lost items on my server.
  7. 3 points
    Hello, System is written me. System gif; +There are 9 effect. +And Clear Button. DOWLOAD : TIKLA VT : TIKLA Skype; whisytm05@gmail.com
  8. 3 points
    I've modified def __LoadRaceHeight for my own purpose, here it is in case someone needs it: I wanted to use comment tags inside the .txt file EDIT: iI think I was too sleepy at 4 AM when I wrote this reply, I didn't think I could modifty it into a dictionary def __LoadRaceHeight(): Dict = npcheight.NPC_HEIGHT for k,v in Dict.items(): chrmgr.SetRaceHeight(k, v) NPC_HEIGHT = { # horse 20030 : 220.00, 20101 : 220.00, 20102 : 220.00, 20103 : 220.00, 20104 : 220.00, 20105 : 220.00, 20106 : 220.00, 20107 : 220.00, 20108 : 220.00, 20109 : 220.00, # shop 30000 : 150.00, # mount 20212 : 0.01, # uff.. the mounts need to have 0.01 29212 : 0.01, # dragon 2493 : 300.00, }
  9. 3 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/
  10. 2 points
    If you have questions about the [Official] "Unpacked Updates Metin2.de", do not hesitate to ask them here!! This thread was created because more and more questions arise to this topic! It's not allowed to post here official patches! This thread is only for discuss about the new patches!! You can also ask if anyone is willing to share Official patches here. The official updates you can find as usual here! Best regards Metin2dev-Team
  11. 2 points
    Lul. You are not informing him when you ask "So, did you fix it?" but instead it sounds like a request from somebody who should only be grateful, if you want to help then go for a pull request implementing the feature/bugfix on your own. I've been helping random people way too much, that's why I understood that random people usually don't deserve anything :]. It's git tho, if you want to know if he updated the code then check the commits instead of asking here, you know.
  12. 2 points
    The Bank has the following facilities: Create a account Login on account Add money Withdraw money Send money Change password 1.) Create account: Length of characters allowed for the account name is 12 characters (as with login). Characters allowed for password length is 4 characters. You can generate a random password automatically in case you have not a good idea for a password, for security on your account we advise you to generate a random password, but take great care not to forget your password, so you have to contact the server team. You can not create an account already exists with that name. You can not enter special symbols in the same account name and password. Account name and password accept any type of data, such as numbers and 2.) Login on account : Timeout for logging into your account is a timer for 3 sec. The password will be secret in the edit window. During logging can detect the following: Connection success Connection Failed: The account name is wrong. Connection Failed: The password is wrong. 3.) Add money : You can not enter a smaller amount as in 1. You can not enter an amount less than or greater than that of the inventory. You can enter up to 10 numbers. (Ex: 1999999999) can change. 4.) Withdraw money: You can not enter a smaller amount as in 1. You can not enter an amount less than or greater than that of the bank. You can not withdraw an amount from the bank that exceeds the maximum limit of the server, for example if you have in inventory 1.3kkk, you can withdraw from the bank only 300kk, because GOLD_MAX = 2kkk. You can enter up to 10 numbers. (Ex: 1999999999) can change. 5.) Send money: You can not send money to an account that does not exist in the database. You can not send a smaller amount as 1. You can not send a larger amount of deposit that the banks. To transfer money from one account to another you need the account name asks that person to do that. An example conversation: A: Hello, i am your brother, send me 444 Yang please. B: Ok bro, give me your name account from bank for can do this. A: Here is my account name from bank: girl123 B: Done, already i send you 444 Yang, please check your account and you will see in logs. My name account is vegas123, check and you will see, good luck my brother. PHOTO FROM ACCOUNT GIRL123 6.) Change password: The new password must have a maximum of 4 characters. New password must be the same as repeating the password field of safety. You can not put the same password as current. Example: Old Password: psw8 New Password: psw8 It is not allowed entry same as the old password. Other informations: For every action that you take in your bank account logs exist, such as: Time action was taken. The time when the action was taken. The action that was taken. Ip from who make action. To / From is when you received, or sending money to another bank account. Amount sent or received. For every action there is a set time to run once the action 10 seconds, which means you can not withdraw / etc add money to your account within 10 seconds, you have to wait for each action separately this time. There can be no bug in the bank. You can not connect to another account if you do not account name and its password. You can not enter characters that go nowhere to exploit. You can enter the account name and truncate or drop etc. Logs are displayed depending on the new date, which means that the latest logs will always be displayed first. When you receive money from another person (another account) ip it will be removed. (Why this? Because we do not want players to have the chance to learn real ip a player, you can see only ip for your action.) Every action has a special type with a separate color. Everything is in real time. Causes no problems in server functions that communicate with the database are not very well optimized that will allow you to do any exploits or a flood that overloads the database. Date and time are taken in real time server, you must have time to FreeBSD updated in real time, it can test the console ssh “data”. How to change date and Timezone The maximum limit for logs is 1,000 logs which are set to 40 pages. Everything communicate with packet and everything is written in c ++. It is compatible with any version of the source. #
  13. 2 points
    Just to make it sure, right? The best part is the importing of the interfacemodule, you always made my day.
  14. 2 points
    if (pkAttacker->IsPC() == true) { iAtk -= (iAtk * pkVictim->GetPoint(POINT_RESIST_HUMAN)) / 100; switch (pkAttacker->GetJob()) { case JOB_WARRIOR: iAtk -= (iAtk * pkVictim->GetPoint(POINT_RESIST_WARRIOR)) / 100; break; case JOB_ASSASSIN: iAtk -= (iAtk * pkVictim->GetPoint(POINT_RESIST_ASSASSIN)) / 100; break; case JOB_SURA: iAtk -= (iAtk * pkVictim->GetPoint(POINT_RESIST_SURA)) / 100; break; case JOB_SHAMAN: iAtk -= (iAtk * pkVictim->GetPoint(POINT_RESIST_SHAMAN)) / 100; break; #ifdef ENABLE_WOLFMAN_CHARACTER case JOB_WOLFMAN: // TODO: 수인족 저항 처리 iAtk -= (iAtk * pkVictim->GetPoint(POINT_RESIST_WOLFMAN)) / 100; break; #endif } } iAtk -= (iAtk * pkVictim->GetPoint(POINT_RESIST_HUMAN)) / 100; GL
  15. 2 points
    Please wait weekend I'm busy
  16. 2 points
  17. 2 points
    I hate when some people delete their bug fix topic...
  18. 1 point
    File Name: WorldEditor ReMIX File Submitter: martysama0134 File Submitted: 27 Aug 2014 File Category: Tools Intro: This WE is a version compiled directly by me which includes infinite fixes and features. It's certain that you won't longer use the worldeditor_en! To make it simple, I wrote all the details about this feature and the common WE inside the relative config file: (called WorldEditor.txt) // I recently built a new worldeditor version with new features, so: Be a guinea pig of mine and test it all! // Info: (v24) // -) 100% translated // -) granny2.9 // -) F6 as Insert alternative // -) many default features not present inside the worldeditor_en (probably, that binary was taken out from an SVN long time ago and resource hacked) such as Ins for all regions and skyboxes // -) WASD UPLEFTDOWNRIGHT to move around (+asynchronous diagonally movements) // -) UP-LEFT-DOWN-RIGHT to move around*10 (+asynchronous diagonally movements) // -) config file for few things // Output options by default // few others such as default WASD movement // whether or not Insert should let you go where you were before the press // no MAI dump when saving atlas // whether or not DevIL should compress and remove alpha from minimap.dds // whether or not loading .mdatr building heights // default textureset when creating maps // overlapped tabs // other stuff // -) few bugfixes // default title app name // attempting to write to an empty textureset name when creating new maps // ViewRadius doubled every load&save // shadowmap.dds creation // assert when saving atlas // crash when adjusting height // many buffer under/overflows // *.mdc collision data saving (for game_test) // not checking output options when loading maps // water brush waterid bug (the id was increased until 256 each time the function was called; now it's based on the water height just like it should be) // init texture map reload map crash and last 2px always blank // if pack/property exists, it'll be read! (note: if found, the local property/ directory will not be considered!) // square shape even for up/down height brushes // add textureset texture button (+multiselection) // remove textureset texture feature (just selecting a texture from the list and pressing DELETE) // creation of empty textureset with index -1 (changed to 0) // change baseposition button // misspelled stuff // skybox bottom image (nb: you also need a fixed launcher for this) // removed the boring CTRL requirement (to move the camera) when editing daylight/attr // fixed refresh texture imagebox when onKey-pressing the down/up keys (like when onClicking them) // fixed TextureSet file creation if not existing // fixed new wolfman motion event handling // -) created new TextureSet field when creating new maps // -) created new Change/Delete Texture buttons when double-clicking a texture // -) created Background Music playback and Shadow Recalculate buttons // -) created water height "set 0z", "+1z", "-1z" buttons // -) server_attr generator // Note: // 0) there are no regressions in this version! a bug here means it'd also be present in older WE versions too! // 1) the shadow output option is tricky: when UpdateUI is called, shadows are hidden although the check is pressed (i implemented the shadow recalculate function for that) #fixed since v11 // 2) the bgm player requires /miles and the fadein/out doesn't work until you load the map // 3) the adjusting height button works only if mdatr height is detected // 4) the Debug version is laggy when working on maps such as n_flame_dungeon and n_ice_dungeon (by default, because SphereRadius are intensively checked in SphereLib\spherepack.h) // 5) if you load a map, the script panels (where you load .msa et similia) will have the camera perspective a little fucked up (0z instead of -32767z or 0x 0y -163,94z) // 6) few tree objects are not movable and/or highlightable after placed on the ground and their selection is invisible (you can still delete 'em) // trick: draw a square selecting a normal building and 'em, then move the building and you'll see all of 'em will be moved! // 7) the server_attr generator will clean all the unused flags! attr[idx]&=~0xFFFFFFF8; // 8) you can read files from pack/Index 'n stuff but be aware that Property will not be considered! #fixed since v15 // 9) the MonsterAreaInfo features are laggy and buggy as fuck // 10) even though you can select many textures at once (using ctrl+click on textureset list; for brushing or initializing a base texture), you can't delete more than one at the same time // 11) the .mdatr height is tricky; if you move a building, the height will not be refreshed until you put a new building or whatever you want to trigger the update event // 12) by default, the worldeditor tries to render only the first 8 terrain textures of a 32x32px region (nb: a 1x1 map is a 256x256 px region) // 13) the minimap rendering cannot catch the buildings/trees inside the first 2x2 regions due a ymir cache fault and you need to set the camera to "see" them // 14) when the textureset, environment, etc load fails, the old filename still remains loaded // 15) the attr flag "3" (three) has no implementation, so don't use it! // TODO: // A) look at more than 8 textures for region -> DONE // B) create a shortcut to fix the #5 note -> DONE // C) disable the radius <= GetRadius()+0.0001f check to fix the #4 note -> REJECTED // the worldeditor_en calls this assert and, if ignored, the lag ceases to exist (this will not occur in source version) // at least, if the release version is not a problem for you, use that in those few cases when .mse are abused and try to kill the debug one // D) translation in more languages other than english -> REJECTED // english should be enough! // E) alternative path for d: -> REJECTED // you can mount d as a subpath of c like this: // subst d: "c:\mt2stuff" // ### WE CONFIG FILE VIEW_CHAR_OUTPUT_BY_DEFAULT = 1 VIEW_SHADOW_OUTPUT_BY_DEFAULT = 1 VIEW_WATER_OUTPUT_BY_DEFAULT = 1 // WINDOW_HEIGHT_SIZE = 1080 // WINDOW_WIDTH_SIZE = 1920 WINDOW_FOV_SIZE = 45 // #100 = 1px (minimal px movement when pressing WASD) WASD_MINIMAL_MOVE = 100 // came back from where you were before pressing Insert/F6 NO_GOTO_AFTER_INSERT = 1 // disable MAI dumps when saving atlas and/or pressing Insert/F6 NOMAI_ATLAS_DUMP = 1 // disable minimap.dds alpha saving and enable compression NOMINIMAP_RAWALPHA = 1 // enable .mdatr height collision loading when moving on buildings or adjusting terrain DETECT_MDATR_HEIGHT = 1 // disable fog when loading maps NOFOG_ONMAPLOAD = 1 // refresh all checkbox configurations when loading maps 'n stuff REFRESHALL_ONUPDATEUI = 0 // set a default mapname prefix when creating new maps ("" to disable) NEW_MAP_MAPNAME_PREFIX = "metin2_map_" // display a default textureset when creating new maps ("" to disable) // note: it loads the filepath if exists, otherwise it will create an empty textureset file NEWMAP_TEXTURESETLOADPATH = "textureset\metin2_a1.txt" // create a default textureset as "textureset/{mapname}.txt" // note: this option is not considered if NEWMAP_TEXTURESETLOADPATH is not empty. [before v24] // note: this option is not considered if the TextureSet path input is not empty when creating a new map [since v24] NEWMAP_TEXTURESETSAVEASMAPNAME = 1 // ## SHORT-CUTs // # ESC(ape) Clean cursor // # Canc(el|Delete) Delete stuff such as selected buildings // # Ctrl+S Save map // # Ins(ert) or F6 Save shadowmap|minimap.dds // # F3 BoundGrid Show/Hide // # F4 Render UI Show/Hide // # F11 WireFrame Show/Hide // # R Reload Texture // # Z and X Decrease/Increase Texture Splat by 0.1 // # CapsLock Show GaussianCubic effect if shadows are displayed // # L-Shift+1-6 Show TextureCountThreshold flags (&2-7) as colors on the ground // # L-Shift+8 Set Max Showable texture to 8 (de-fix note 12) // # L-Shift+0 Set Max Showable texture to 255 (fix note 12) // # H Refresh MDATR Heights (useful when you move an object) (fix note 11) // # Y Set Perspective as default (fix note 5) // # T Set the Camera to catch all the object on the screen (w/a note 13) then you'll be ready to press Insert/F6 // # DO NOT HAVE AN OBJECT SELECTED WHEN USING THOSE SHORTCUTS (MW1-7) // # MouseWheel+1 move cursor x rotation // # MouseWheel+2 move cursor y rotation // # MouseWheel+3 move cursor z rotation // # MouseWheel+4 move cursor height base (1x) // # MouseWheel+5 move cursor height base (0.5x) // # MouseWheel+6 move cursor height base (0.05x) // # MouseWheel+7 move cursor ambience scale (1x) // # MouseWheel+Q move selected object height base (1x) // # MouseWheel+9 move selected object x position (1x) (+asyncronous) // # MouseWheel+0 move selected object y position (1x) (+asyncronous) // # MW+RSHIFT+9|0 as above but *10x (+asyncronous) // # MW+RCONTROL+9|0 as above but *100x (+asyncronous) // # MouseLeft Insert Objects // # MouseRight Move camera (it could require CTRL too) // # SPACE Start move/selected animation in Object/Effect/Fly CB // # ESC Stop animation in Effect/Fly CB NB: A space is required for such things: //*space*stuff KEY*space*=*space*VALUE Download: http://www.mediafire.com/download/c4yhd41ruy97c88/we_remix_v23__20140801-1859.rar http://www.mediafire.com/download/jxmemazw50vmnmj/we_remix_v24__20150621-0154.rar​ How To Map: This release will not cover this part. Look at CryPrime`s tutorials to understand how to do it. About the ServerAttr Generator: (since v14) This is a beta function but it should work fine. I tested it on gm_guild_build (1x1), metin2_map_a1 (4x5), metin2_map_trent (2x2), metin2_n_snowm_01 (6x6) and the result was the same as the blackyuko map editor. (I use a different lzo version and I clean deprecated and useless flags, so the size is different from this last one but the "final image" will be the same; using game_test to fix his server_attr will let mine and his perfectly equal byte per byte) I also give you the source code of my server_attr generator function. CLICK A server_attr file is based on all the attr.atr files merged into a one raw RGBA image and each one scaled from 256x256 to 512x512. After that, the image will be splitted into sectors of 128x128 px and each one compressed using lzo compression. The server_attr header is composed by the size of the map*4. (e.g. a 4x4 will have a 16x16 size with 256 sectors inside) (gj ymir CLICK) An uncompressed server_attr sector is just like this: CLICK (the sub 4 byte header is the size returned by the LzoCompress which indicates how much the compressed sector data are large) Each attr.atr is just like this: CLICK (the header is composed of 6 byte in total: 3 WORDs respectively for version, width and height; they are always 2634, 1, 1 so don't bother about it) A single attr.atr scaled from 256x256 to 512x512 will be just like this: CLICK You can use the game_test (from source) to perform few tasks like:Create a server_attr from a .mcd file (I won't suggest it) a <collision data filename> <map directory>Regenerate an old server_attr to server_attr.new using the current lzo compression and cleaning useless flag CLICK c <filename>Other stuff such as b to create a character instance or q to quit About the SkyBox Bottom pic fix: (since v21) Both metin2launch.exe and worldeditor.exe should be edited to see the bottom pic of the skybox. Ymir messed up the code wrongly flipping the bottom image. Open .SrcsClientEterLibSkyBox.cpp and replace ////// Face 5: BOTTOM v3QuadPoints[0] = D3DXVECTOR3(1.0f, -1.0f, -1.0f); v3QuadPoints[1] = D3DXVECTOR3(1.0f, 1.0f, -1.0f); v3QuadPoints[2] = D3DXVECTOR3(-1.0f, -1.0f, -1.0f); v3QuadPoints[3] = D3DXVECTOR3(-1.0f, 1.0f, -1.0f);with ////// Face 5: BOTTOM v3QuadPoints[0] = D3DXVECTOR3(1.0f, 1.0f, -1.0f); v3QuadPoints[1] = D3DXVECTOR3(1.0f, -1.0f, -1.0f); v3QuadPoints[2] = D3DXVECTOR3(-1.0f, 1.0f, -1.0f); v3QuadPoints[3] = D3DXVECTOR3(-1.0f, -1.0f, -1.0f); then recompile. Credits: Click here to download this file
  19. 1 point
    Hi guys i need your help for one more time! So my problem is when i start 2 times the client the graphics are be like this: http://prntscr.com/dj1eme thank you! (sorry for my bad english)
  20. 1 point
  21. 1 point
    mob_proto_de and mob_proto_hu. https://mega.nz/#!DRYA1Cxa!Yf_tRi6tHQ3fOOjFRzEaJPD_JDDspLZaTI5PeuEFXIU
  22. 1 point
    https://pastebin.com/SpMJEh2Y
  23. 1 point
    I'm now finished with the first season. It was really good If you are interested in the music of the first episode.. here is it. I love it Best regards Raylee
  24. 1 point
  25. 1 point
    If you tell me how I can help you with the translation, I do it with pleasure Btw, for those who don't speak German, the password for the file is: iace
×