Jump to content
metin2dev

Leaderboard


Popular Content

Showing content with the highest reputation since 09/15/2018 in all areas

  1. 10 points
    Hi guys. I know it has been a long time since I posted something on the website, but I really been busy. A few days ago I've seen some videos were Metin2 graphic was taken to next level. I said to myself to have a go and try to update the game engine to change entirely the graphic level. Also worth mentioned that I've seen the bold attempt of PW1 to build a new MMO in this topic: I really think it is a good idea and I will try to do it myself. In this topic I will post all my updates regarding my progress, starting with basic intrduction of the Game engine and content builder. Fist attempt: Second attempt: animation correction Short Introduction to World Editor Please feel free to comment. Looking forward for oppinions and suggestions. Soon new updates on building a level from scratch and adding content from Metin2 to new Map.
  2. 4 points
    Premise:The system in question is integrated into the client through the use of existing libraries! it was enough to enable it through some modifications of the source and to define the various commands, make the installation very simple and intuitive I assure you! What can i do?It is expected that by the end of the realization of this system you can fully use the client "PG, game windows and maybe even chat", at the moment you can use the PG. Have you a release date?At the moment no, the work still requires the care of many details.Have a video about this system?This V 0.1 Alpha "DirectInput" This V 0.2 Alpha "XInput" This V 0.3 Alpha "New Functions" FEATURES: * Migration to XInput and abandonment of DirectInput support * Adding vibration vibration & low life "PS and Xbox Controller" * QuickSlot that can be recalled by pressing the O (PSX) or B (X360) button * Defined DeadZone "Analog" * Added Settings window "Under construction" * Added virtual keyboard to write in chat and more; * Added character selection via controller; * Addition of Auto-Select NPC / MOB / PG and with the pressure of X (PS) A (XBOX) its relative function; * Added quest and selection navigation;
  3. 4 points
    Hi! I want show you New Temple Weapon Set I hope that you like it More on my website dzekonstudio.com
  4. 3 points
    Download Link. Virus Total.
  5. 3 points
    Fastest way Edit locale_game.txt And add after "LOGIN_CONNETING" |cffRRGGBB RR - Red value in hex GG - Green value in hex BB - Blue value in hex //Addon: cff -> alpha value in hex Result:
  6. 3 points
    but you said that this is a (LIKE GF) version. (CHECK REAL GF VERSION) https://gyazo.com/706a2535d1f7359e5c24ae661c6ccf5c
  7. 2 points
    Hello everybody, since I've heard that a lot of servers (and even the most recent vanilla source release) have no fix for this hack I decided to release this. It's not too big, but I really would like to make it visible for everybody. I highly dislike hacks in every form and I'll gladly develop such fixes. So, the fix is quite easy. It's a bug from metin2. They decided to add a check if the target is too far away to be attacked and yeah, that works. Targets only receive damage once they're within range. But the problem is that modern moblock tools do that a different way. They send attack packets to every mob in the near surrounding which triggers aggr towards the player. You may ask: Why does it trigger aggr and let the mobs move to the player? Well, as mentioned, the source has a fix for that - but it's implemented too late. 1. Open char_battle.cpp and search for this function: CHARACTER::Attack First you may notice that there's literally no check for distance. The distance check is implemented in battle.cpp in the function battle_melee_attack. That's fine and we don't need to modify anything about this. 2. If you scroll down you'll see the following lines: pkVictim->SetSyncOwner(this); if (pkVictim->CanBeginFight()) pkVictim->BeginFight(this); Noticed something? Yeah, the check is - as mentioned before - in the function battle_melee_attack. The problem is, that these lines are executed before the check happens. So hackers will be visible in logfiles (syslog should spam distance errors) but they're still free to hack like they want to. 3. Move the lines below the battle type segment So, how do we fix this? We'd simply move it down below the battle type functions. So you'd move it just before the line "if (iRet == BATTLE_DAMAGE || iRet == BATTLE_DEAD)". But still that won't be enough since these lines would still be executed. We don't want them to be executed. So we wrap a condition around it. 4. modify these lines so they look like this: if(iRet != BATTLE_NONE) { pkVictim->SetSyncOwner(this); if (pkVictim->CanBeginFight()) pkVictim->BeginFight(this); } If we take a look on the battle type functions we'll notice that they return the BATTLE_NONE if something goes wrong - for example the distance is invalid. 5. you're done! The fix pretty much solves this issue. If you still know hacks that work feel free to write in this topic, I'll gladly share solutions once I've developed them. Enjoy!
  8. 2 points
    Opinion about this armor
  9. 2 points
    Download: https://mega.nz/#!YexyCCQa!qwodIe974BtVZeCl-_UwXZly6QoGusPODeU7l1Rn36w
  10. 2 points
    maybe miss object, texture its reason why map kick you
  11. 2 points
    I found in source what we needed. In char_item.cpp remove: if (!item && bCell == WEAR_WEAPON) { if (IsAffectFlag(AFF_GWIGUM)) RemoveAffect(SKILL_GWIGEOM); if (IsAffectFlag(AFF_GEOMGYEONG)) RemoveAffect(SKILL_GEOMKYUNG); } Important fix. Add in bool CHARACTER::CanUnequipNow if (item->GetType() == ITEM_WEAPON) { if (IsAffectFlag(AFF_GWIGUM)) RemoveAffect(SKILL_GWIGEOM); if (IsAffectFlag(AFF_GEOMGYEONG)) RemoveAffect(SKILL_GEOMKYUNG); }
  12. 2 points
    This is open source but hell yeah.
  13. 2 points
    If you just need the images and PSD files, you can use my original files: Preview: Link:
  14. 1 point
  15. 1 point
    Hey, Here is my version of clean and stable client: * based on 2k10 client with updated maps/textures etc. working on 40k binary * client weight ~ 630MB (removed many unused files) * maps in separated in two folders: outdoor and indoor * many new features SUPPORTED LANGUAGES: EN, PL Preview: https://imgur.com/a/pwpTE Changelog: Download: Client_1.12 - entire client: mirror #1 https://mega.nz/#!xkxEgTTD!-SMjZSX12EyWSVvNxdYhMmp9Zeb-B-iRmL_z-NNS1uE Update_1.2 - contains: binary source with extern and update: mirror #1 https://mega.nz/#!Q0w2BKIK!Hl0g5Eojygy5CZDe3ZYI1aDP1wIpcM_9ohk-eIQwwfM mirror #2 http://www117.zippyshare.com/v/xvD6EYNI/file.html Update_1.4: mirror #1 http://www.mediafire.com/file/a7day8bejaydbqi/update_1.4.7z Update_1.5 mirror #1 https://www.mediafire.com/file/vkgkzrghijvakv3/Update1.5.7z Update_1.5.1 mirros #1 https://www.mediafire.com/file/4cesrfr25ismk87/Update_1.5.1.7z ---------------------------------------------------------------------- Windows Server Files development machine with source mirror #1 http://www.mediafire.com/file/5mmi4m4knr6p6yf/ServerWindowsSF.7z Server source + Windows SF + Ymir documentations (translated into english)
  16. 1 point
  17. 1 point
    #closed on request Best regards Raylee
  18. 1 point
    I will do the unmount automatic system thank for the suggestion I make a system on source part for unmount automaticaly the player just by checking the ATTR_WATER with coordinates of the player
  19. 1 point
    Will be cool , but I think this is better to wait everything are uploaded
  20. 1 point
    Yes it's currently in upload.
  21. 1 point
    Download Map. Virus Total.
  22. 1 point
    Welcome back , hope you're not a ****head anymore
  23. 1 point
    def BINARY_Highlight_Item(self, inven_type, inven_pos): if self.interface: self.interface.Highligt_Item(inven_type, inven_pos) try this.
  24. 1 point
    Hellow, I want to share my work, I've created 2 year ago, for my old server (Resthea). So, what is it exacly? It's python libraries and code that allow us to have many environment (clouds, light settings, flare and so on) on one map. By default, you can have only one environment for each map. How does it work? Well, once every 30 seconds (you can configure that time) checks our coordinates and compare it to jpg file, which size is the same as map size. Diffrent colors mean diffrent msenv file. What this pack contains? possibility to add up to 16777215 areas with diffrent environment on every map. possibility to add diffrent music on these areas possibility to add random snow on these areas 28 ready skyboxes possibility to choose skyboxes quality possibility to configure the time script refreshes possibility to add special xmas configuration easy configuration via text file code is easy to modify bugfix for night and snow systems Disadvantages: not so optimal solution .jpg format has indirect coloring between two colors, which sometimes could lead to problems xmas song probably doesn't work (I haven't got time to fix it) lots of redundant libraries, because i've uploaded whole Lib folder descriptions how to add this are in polish, you can use google translate , if you wish i can translate it too. Screens: Code sample: def __SpecialEnvironmentEnable(self, Env, Resthea, SnowEnable, NightEnable, ConfigTime, ConfigSkybox, XmasEvent): ### START OF ENVIRONMENT MODULE Resthea.eu, qentinios self.Env = Env self.Resthea = Resthea self.SnowEnable = SnowEnable self.NightEnable = NightEnable self.ConfigTime = ConfigTime self.ConfigSkybox = ConfigSkybox self.XmasEvent = XmasEvent czass = str(time.ctime()) sekundy = czass[17:19] bg = background.GetCurrentMapName() if ConfigTime == 0: try: ConfigTime = int(linecache.getline("config.cfg", 2)) except: chat.AppendChat(chat.CHAT_TYPE_INFO, "Error while changing environment") chat.AppendChat(chat.CHAT_TYPE_INFO, "Cannot open file: config.cfg") if ConfigTime == -1: return map = ( "metin2_map_4_wiatry", "metin2_map_krance_swiata", "metin2_map_srodziemie", "metin2_map_resthea", ) if bg in map and sekundy != Env: if ConfigTime == 5 and int(sekundy) in (5,10,15,20,25,30,35,40,45,50,55,00): self.Env = sekundy pass elif ConfigTime == 15 and int(sekundy) in (15,30,45,00): self.Env = sekundy pass elif ConfigTime == 30 and int(sekundy) in (30,00): self.Env = sekundy pass elif ConfigTime == 60 and int(sekundy) == 30: pass else: if ConfigTime not in (-1,5,15,30,60) and int(sekundy) == 30: chat.AppendChat(chat.CHAT_TYPE_INFO, "Error while changing environment") chat.AppendChat(chat.CHAT_TYPE_INFO, "Wrong data: " + ConfigTime + ", config.cfg, line 2") self.Env = sekundy return else: return minuty = czass[14:16] godziny = czass[11:13] czas = int(godziny + minuty) try: im = Image.open("msenv/" + bg + ".jpg") except: chat.AppendChat(chat.CHAT_TYPE_INFO, "Error while changing environment") chat.AppendChat(chat.CHAT_TYPE_INFO, "Cannot open file: " + "msenv/" + bg + ".jpg") return (x, y, z) = player.GetMainCharacterPosition() x = int(x/100) y = int(y/100) try: color = str(im.getpixel((int(x),int(y)))) except: chat.AppendChat(chat.CHAT_TYPE_INFO, "Error while changing environment") chat.AppendChat(chat.CHAT_TYPE_INFO, "Not exist pixel: " + str(x) + ", " + str(y) + "; " + "msenv/" + bg + ".jpg") return #Skybox config if ConfigSkybox == "0": try: ConfigSkybox = linecache.getline("config.cfg", 5) except: ConfigSkybox = "_1k" if ConfigSkybox in ("_512n","_1kn","_1.5kn"): ConfigSkybox = ConfigSkybox[:-1] if ConfigSkybox not in ("_512","_1k","_1.5k"): ConfigSkybox = "_1k" #End of skybox config #Xmas event if XmasEvent == -1: try: XmasEvent = int(linecache.getline("config.cfg", 8)) except: XmasEvent = 0 if XmasEvent == 1: ColorList={ #Color (RGB) 1 : ("(255, 255, 255)", "(241, 255, 158)", "(254, 0, 0)", "(0, 255, 127)", "(158, 255, 248)", "(253, 254, 62)", "(255, 176, 63)", "(222, 255, 0)", "(95, 255, 0)", "(50, 121, 19)", "(95, 192, 35)", "(214, 214, 214)", "(148, 0, 0)", "(142, 142, 142)", "(251, 165, 0)"), #Msenv 2 : ("snowm02", "map_n_desert_01", "fire_low", "white_sky", "default", "rainy", "sand_mountain", "vanilia_white", "trent", "trent02", "vanilia", "snowm02", "fire_low", "default", "desert_cloud"), #Mp3 3 : ("christmas/4w/xmas", "christmas/4w/xmas", "christmas/4w/xmas", "christmas/4w/xmas", "christmas/4w/xmas", "christmas/krance/xmas", "christmas/krance/xmas", "christmas/krance/xmas", "christmas/krance/xmas", "christmas/krance/xmas", "christmas/srodziemie/xmas", "christmas/srodziemie/xmas", "christmas/srodziemie/xmas", "christmas/resthea/xmas", "christmas/resthea/xmas_wyspa"), #Snow 4 : (1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1) } #End of Xmas event else: ColorList={ #Color (RGB) 1 : ("(255, 255, 255)", "(241, 255, 158)", "(254, 0, 0)", "(0, 255, 127)", "(158, 255, 248)", "(253, 254, 62)", "(255, 176, 63)", "(222, 255, 0)", "(95, 255, 0)", "(50, 121, 19)", "(95, 192, 35)", "(214, 214, 214)", "(148, 0, 0)", "(142, 142, 142)", "(251, 165, 0)"), #Msenv 2 : ("snowm02", "map_n_desert_01", "fire_low", "white_sky", "default", "rainy", "sand_mountain", "vanilia_white", "trent", "trent02", "vanilia", "snowm02", "fire_low", "default", "desert_cloud"), #Mp3 3 : ("4w/lodowa", "4w/pustynia", "4w/ognista", "4w/orki", "4w/srodek", "krance/przeklete", "krance/pustynia", "krance/swiatynia", "krance/las", "krance/las2", "srodziemie/trawa", "srodziemie/lodowa", "srodziemie/ognista", "resthea/trawa", "resthea/wyspa"), #Snow 4 : (1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0) } i = 0 Colors = ColorList[1] length = len(Colors) for ColorItem in xrange(length): if color == Colors[ColorItem]: #START OF SNOW EFFECT Snow = ColorList[4] if SnowEnable != 1: if Snow[ColorItem] == 1 and int(minuty) in (2,7,12,17,22,27,32,37,42,47,52,57) and int(sekundy) in (00,01,30,31): random = app.GetRandom(1,3) if random == 1: background.EnableSnow(1) else: background.EnableSnow(0) if Snow[ColorItem] == 0: background.EnableSnow(0) #END OF SNOW EFFECT if Resthea == color: break #START OF MUSIC MODULE Music = ColorList[3] if app.IsExistFile("BGM/" + Music[ColorItem] + ".mp3")==1: if musicInfo.fieldMusic != "": snd.FadeOutMusic("BGM/" + musicInfo.fieldMusic) musicInfo.fieldMusic = (Music[ColorItem] + ".mp3") snd.FadeInMusic("BGM/" + musicInfo.fieldMusic) else: if musicInfo.fieldMusic != "": snd.FadeOutMusic("BGM/" + musicInfo.fieldMusic) musicInfo.fieldMusic=musicInfo.METIN2THEMA snd.FadeInMusic("BGM/" + musicInfo.fieldMusic) #END OF MUSIC MODULE Msenv = ColorList[2] if NightEnable == 1 and self.__IsXMasMap(): background.RegisterEnvironmentData(1, constInfo.ENVIRONMENT_NIGHT) background.SetEnvironmentData(1) else: background.RegisterEnvironmentData(1, "d:/ymir work/environment/" + Msenv[ColorItem] + ConfigSkybox + ".msenv") background.SetEnvironmentData(1) self.Resthea = color break else: i = i+1 if i == length: background.SetEnvironmentData(0) snd.FadeOutMusic("BGM/" + musicInfo.fieldMusic) musicInfo.fieldMusic=musicInfo.METIN2THEMA snd.FadeInMusic("BGM/" + musicInfo.fieldMusic) self.Resthea = color ### END OF ENVIRONMENT MODULE Resthea.eu, qentinios Old video with system: https://www.youtube.com/watch?v=sz1njy6sBqQ Download: Without skyboxes: https://www.mediafire.com/?edtdz50gc4tzmqj With skyboxes: https://www.mediafire.com/?y14v0yir24tqbvv
  25. 1 point
    This is not fix, this is just a stupid workaround.
×