Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 02/20/20 in all areas

  1. In EterPackManager.cpp update this: bool CEterPackManager::Get(CMappedFile & rMappedFile, const char * c_szFileName, LPCVOID * pData) { if (m_iSearchMode == SEARCH_PACK_FIRST) { if (GetFromPack(rMappedFile, c_szFileName, pData)) return true; if (c_szFileName[1] != ':' && GetFromFile(rMappedFile, c_szFileName, pData)) { TraceError("%s", c_szFileName); // only for log. it's not an error. return true; } } if (m_iSearchMode == SEARCH_FILE_FIRST) { if (GetFromFile(rMappedFile, c_szFileName, pData)) return true; return GetFromPack(rMappedFile, c_szFileName, pData); } return false; } And bool CEterPackManager::isExist(const char * c_szFileName) { return isExistInPack(c_szFileName); } In CEterPackManager::GetFromFile comment if(m_bTryRelativePath) {.....} (not sure necessary, i did it in the past) In UserInterface set bPackFirst to true to not load from d:/ and false to load from d:/ bool bPackFirst = TRUE; bPackFirst = TRUE; There is a common problem on all metin2 sources. The game will first load the files which are in d:/ymir work folder and if you have a dvd/cd-rom with letter D the game will load very slow and have big fps drops (for some players the game can be unplayable). I know many players who had a dvd-rom with letter D and reported me how bad the client works. Using this solution: 1. The game will no longer load d:/ymir files. 2. Client will open faster, load the files faster. 3. Less fps drop. Normal metin2 client without fix and with a dvd-rom that has letter D assigned: [Hidden Content] After fix: [Hidden Content] Check this video:
    11 points
  2. Hello friends, While I was adjusting my skills and doing some updates to them, I encoutered a funny bug I had never noticed. I asked my friends and tried some servers and they either had this bug or they had it "fixed" already. I didn't try the official but they surely patched it in 17.5NB. You will see that when you use this skill, two things can happen based on your server: Your character will walk toward the ennemy and launch the skill. The skill will hit the target but nothing will happen. No processing, no damage, no aggro, simply nothing. The skill will be effective only at point blank range. Screencap below. You will launch the skill as long as you have an attackable opponent targeted. That's the "fix" I talked about, which is more like a workaroundNB. Preview of the bug: [Hidden Content] (Thanks @Veltor88) This is an easy fix that probably anyone can come up with, but I would like to share it with you, let's make the game better for everyone. Open Server/char_battle.cpp and search for the following case in class CFuncShoot: case SKILL_YONGBI: { m_me->OnMove(true); } break; Delete the case. It simply makes you move to the target, launch the skill and that's it. Probably an unfinished piece of code that made it's way to the final game. Search for (in the same class): case SKILL_TUSOK: case SKILL_BIPABU: case SKILL_NOEJEON: case SKILL_GEOMPUNG: case SKILL_SANGONG: case SKILL_MAHWAN: case SKILL_PABEOB: And extend the check with: case SKILL_YONGBI: //Fix for Shooting Dragon Now your character will walk to the ennemy, launch the skill and deal damages as well as triggering the aggro and stuff like that. NB: The bug highlighted in the screecap was made and reproduced on the latest official client (as of February the 20th). A matching 17.5 skilltable (client->server) was also running at that time. The "work-around" I mentioned is surely happening if you have skill datas prior to the patch 17.5 as it was probably how the skill was back then and how it was intended to work. It might seem odd anyway and you might want to fix it. Also, you may encounter a "double-triggering" bug when launching the skill at point black. For those two cases, I forward you to this great post, giving you a fix. I don't know if I have this bug (and will provide you with all the necessary files if I happen to have it). I didn't do any checks on the clientside as I was simply trusting Ymir and using latest (supposedly working and tested) skill datas both serverside and clientside. Enjoy!
    3 points
  3. M2 Download Center Download Here ( Internal ) Download Here ( Latest Version ) 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 WorldEditorRemix.ini) ; Info: ; -) 100% translated ; -) granny2.11 ; -) 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 ; -) several 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 ; 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 boring CTRL requirement (to move the camera) when editing daylight/attr ; fixed refresh texture imagebox onKey pressing the down/up keys (like when onClicking them) ; fixed TextureSet file creation if not existing ; fixed new wolfman motion event handling ; fixed crash when editing animation attack bones and 00010.gr2 was missing ; fixed locale/ymir/mob_proto load (it autodetects the most common structures) and <map>/regen.txt load/save ; fixed ./group.txt load ; fixed load/save/edit <map>/regen.txt (very nice for "m" regens, untested for "g") ; load from PACK is available if pack/property is present! Be sure pack/Index exists! ; fixed multi-object selection crash ; fixed crash when previewing a missing texture ; fixed not clearing of old environment (e.g. skybox) when switching maps ; fixed not creating property folders in root tree (object tab) ; fixed object attachment in Model Tab ; fixed newly particles names in Effect Tab ; fixed crash when saving a .mse script with no mesh model ; fixed crash when inserting a lower gradient ; -) 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 ; -) every crash will generate a logs/WorldEditorRemix_{target}_{date}.dmp file useful for debugging ; -) implemented a "water path" mapsettings option (the launcher requires additional code) ; -) implemented a "wind strength" msenv option (the launcher requires additional code) ; -) the "encrypt data" feature does nothing (unimplemented) ; 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! ; 16) load from PACK doesn't load texturesets from files for first (if they are already in pack/), and the object placer's object list will remain empty because it takes the list from property/ (and not from pack/property) ; 17) to save the regen.txt you press CTRL+S ; 18) if you enable the wireframe (f4) when on Attr Tab, you see the terrain all white ; 19) the water brush disappears when the camera renders the waterwheel small/big effect ; 20) the monster area info goes under ground if you're outside the relative sectree ; 21) the full skybox may be displayed only after the top picture has been added (if the other textures have already been inserted) ; 22) the slider in the Attr Tab is something like "16 photoshop layers" in which you can split your attrs; not so helpful and quite confusing sometimes ; 23) the fixed model - object attachment attaches static objects (hairs'skeleton will not mirror the playing animation) ; 24) in environment tab, if you insert lower gradients, you may end up with an out of range crash #fixed since v30 ; 25) brushes working out-of-screen/map-range may affect random terrain places ; 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" ; F) need to fix note #19 #25 -> TODO [shortcuts] ; ### SHORTCUTS ; # 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 [config] ; ### CONFIG OPTIONS 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 ; remove the weird attr flags from the generated server_attr SERVERATTR_REMOVE_WEIRD_FLAGS = 1 ; show diffuse lighting to object VIEW_OBJECT_LIGHTING = 1 ; path of mob_proto used for regen MOB_PROTO_PATH = "locale/ymir/mob_proto" ; select monster area info checkbox at startup VIEW_MONSTER_AREA_INFO = 0 ; brush cursor / object selection color RGB float between 0.0 to 1.0 (default: green -> 0 1 0) RENDER_CURSOR_COLOR_R = 0.0 RENDER_CURSOR_COLOR_G = 1.0 RENDER_CURSOR_COLOR_B = 0.0 Download: [Hidden Content] 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 ./Srcs/Client/EterLib/SkyBox.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:
    1 point
  4. M2 Download Center Download Here ( Internal )
    1 point
  5. M2 Download Center Download Here ( Internal ) Hi there devs, I made some new reload commands about 2 weeks ago and published a tutorial about it on our Hungarian forum (you may saw them in the samurai core) and today I had some time to make the translation. What can I reload now? refine_proto (this is the only one which is not mine, its @xP3NG3Rx's, and already public here, but I added it, because I think this package has to contain it ) command: /reload p shop_item table (npc's shops) command: /reload p item_attr && item_attr_rare table; command: /reload p etc_drop_item.txt, mob_drop_item.txt, special_item_group.txt; command: /reload drop group.txt, group_group.txt; command: /reload group regen.txt, npc.txt, boss.txt, stone.txt (only on the current map) command: /reload regen because of the new "reload regen" command, I had to write a new purge command that destroys all mobs, npcs, stones (and so on...) on the current map, so I added a new /p map command to the "/p" commands that are already exists (no, the "/p all" only destroys the mobs on the current sectree (current block)) also I had to create a new command that stops all the regens (and ofc. deletes them from the memory) on the current map, so I added a new "/free_regens" command (because why not ) Its only deletes the loaded regens, and prevents the mobs from respawning (its not necessary to use this before the /reload regen) Known bug Well its not a serious problem, but for some unknown reason, when I'm debugging the core on windows server (no, not debug mode, but vs 13's debugger) and I try to do /reload regen, the core starts to consume ~40% cpu, and doesn't want to do anything (so stops working, but doesn't crash). It has no affect on FreeBSD and release or debug mode (without visual studio's debugger) on windows. game/src cmd.cpp cmd_gm.cpp input_db.cpp shop_manager.cpp refine.cpp char_manager.cpp char_manager.h item_manager.h item_manager_read_tables.cpp mob_manager.h mob_manager.cpp char.cpp sectree_manager.cpp regen.h regen.cpp shop.h shop.cpp db/src ClientManager.cpp And finally let me wish you all good luck for the setup If you have further question(s), remark(s), or anything that you want to ask or suggest, feel free to post it here, or send it in PM. If you get error(s) please upload the affected (and edited) file to [Hidden Content] and link it in your post, to make my work easier and probably I will be able to help you only in one post, so please spare me from asking basic requests like "Could you upload...". Thank you Have a nice day, ~masodikbela
    1 point
  6. M2 Download Center Download Here ( Internal ) [Hidden Content] Enjoy.
    1 point
  7. Hey, I want to share a fix about the SKILL_MUYEONG, Official fixed this before some months ago, but nobody care in such details so we still have the same issue in our servers. The SKILL_MUYEONG is still attacking while you riding but doesn't make any damage. Preview with Fixed SKILL_MUYEONG while you riding: [Hidden Content]
    1 point
  8. Thank you but this is not Dragon's Roar. ?
    1 point
  9. You misunderstood me, I didn't wanted to criticize your work in any way. I just wanted to achieve this without losing the functionality that search the file in the file directory if not found in the packs. But as you said, it should only be used in test env. Why couldn't we talk about other options or improving options ? As you said before: I don't understand your reaction. Maybe you had a hard day.
    1 point
  10. I've tested it, and works great! Why are you caring about someone else's opinion? Who cares what he/she thinks... I've implemented it, and works well, lags are gone. Big thanks!
    1 point
  11. If you bought the system from him, then ask him. In any other case, get out of here, you're not welcome.
    1 point
  12. Haha, you're not a noob, that was not what I was saying. Here's what I may suggest you to not takeof some functionalities of the eterpack: In the function: bool CEterPackManager::Get(CMappedFile & rMappedFile, const char * c_szFileName, LPCVOID * pData) Adding a condition to check if the filename redirect in a drive in the condition that check if we search from client file first instead of pack file as following: if (m_iSearchMode == SEARCH_FILE_FIRST && c_szFileName[1] != ':') { if (GetFromFile(rMappedFile, c_szFileName, pData)) return true; return GetFromPack(rMappedFile, c_szFileName, pData); } if (GetFromPack(rMappedFile, c_szFileName, pData)) return true; return GetFromFile(rMappedFile, c_szFileName, pData); and using this same structure we can then write the isExist function as following: bool CEterPackManager::isExist(const char * c_szFileName) { if (m_iSearchMode == SEARCH_FILE_FIRST && c_szFileName[1] != ':') { if (_access(c_szFileName, 0) == 0) return true; return isExistInPack(c_szFileName); } if (isExistInPack(c_szFileName)) return true; return _access(c_szFileName, 0) == 0 ? true : false; } What do you think ?
    1 point
  13. @Cripplez Look mob_proto like: 8001 is STUN,SLOW,CURSE,TERROR make it to STUN,SLOW,CURSE,TERROR,POISON Control -> lenght.h EImmuneFlags like [Hidden Content] and ItemData.h -> is the same
    1 point
  14. The basic changes are: From: def __SelectSkillGroup(self, index): for btn in self.skillGroupButton: btn.SetUp() self.skillGroupButton[index].Down() if self.__CanUseHorseSkill(): if 0 == index: index = net.GetMainActorSkillGroup()-1 elif 1 == index: index = self.PAGE_HORSE self.curSelectedSkillGroup = index self.__SetSkillSlotData(net.GetMainActorRace(), index+1, net.GetMainActorEmpire()) To: [Hidden Content] After some minutes of debugging I rewrote this shit, there're more changes, when i'll have some free time (at Monday), i'll post the code. Without skill group +/- horse riding: [Hidden Content] With skill group +/- horse riding: [Hidden Content]
    1 point
  15. Default code for SecondToXXX: My extendable version: (I wrote that fast, so, if there's a problem with it, write me a pm, let's don't spam the topic.) [Hidden Content] Results: print sec2time(100000, "DHMS") >>> 1Days 3Hours 46Minutes 40Seconds print sec2time(10000, "HMS") >>> 2Hours 46Minutes 40Seconds print sec2time(1000, "MS") >>> 16Minutes 40Seconds print sec2time(1000, "M") >>> 16Minutes print sec2time(100, "S") >>> 40Seconds print sec2time(3600, "DHMS", True) >>> 0Days 1Hours 0Minutes 0Seconds print sec2time(3600, "DHMS") >>> 1Hours I still don't have the right time to update the module but i'll do it asap.
    1 point
  16. If someone has the same issues as me with elements sometimes being shown wrong replace this part of function in char.cpp: for (int i = RACE_FLAG_ATT_ELEC; i <= RACE_FLAG_ATT_DARK; i *= 2) { int diff = raceFlag - i; if (abs(diff) <= 1024) break; } to this: for (int i = RACE_FLAG_ATT_ELEC; i <= RACE_FLAG_ATT_DARK; i *= 2) { curElementBase++; if (raceFlag & i) break; }
    1 point
  17. M2 Download Center Download Here ( Internal ) Download Here ( GitHub ) Somebody asked me about auto night and day change(server time). I coded simple func and added few features. •Auto night and day change: •Auto snow mode at winter: •Reminder for special days: •Announcement every hour You can add new features like this.
    1 point
  18. M2 Download Center Download Here ( Internal ) Hi everyone! So, after serveral days of searching a tool that could change the texture path of a .gr2 file, I found the tool(probably all of you know it, the texture changer by marv). After that I tried to change the texture paths of some gr2 models of a weapon, and guess what, it didn't work. I'm gonna reupload the file, because I didn't seen it on metin2dev, and I'm gonna teach you how to use it. First of all, I don't know about others, but for me it didn't work to change anything with this (I'm running windows 7 x64 bit). Some of guys told me that this "texture changer" works only on windows 7 x86 bit, so I reinstalled my windows(I really needed that tool), of course, it didn't work either way. So, go in Start and search cmd, and run it. After the cmd started you'll see a path right there C:\Users\Name (Instead of Name you'll have your username of computer administrator, or the account you're logged in), now that's the path where we can work with the tool. PAY ATTENTION!!! IF YOU START THE TOOL IN OTHER FOLDER INSTEAD OF C:\Users\Name THE TOOL WILL NOT WORK, AND YOU WILL NOT BE ABLE TO SAVE THE NEW MODEL. Exctract all the files from the archive(I'll post it below), and start Metin2TextureChanger.exe. Now click "Load" to choose a gr2 file you want to change texture path, BUT, the model name can't have spaces in name(devil sword.gr2 for example, it's wrong, the tool won't read it, and you'll not be able to save your new gr2 model), so if you want to change for example devil sword.gr2 you need to rename it into devil_sword.gr2 or devilsword.gr2 or any other name without spaces betwen. Where is "Neuer Texturpfad" we will chose the new path for texture, for example d:\ymir work\test\devil_sword_blue.dds , there you can choose any other path, but you can't modify "d:\ymir work" or you won't be able to see the weapon/armour in-game. Now we save the file wherever we want, it doesn't matter, this way must work for everybody. AGAIN, THIS TOOL WASN'T MADE BY ME. And I made this post because I've searched many days a tool that would work, but neither didn't work, and this tool didn't work for me either just when I used this method. So, this post is for guys who had the same problem like me (they had the tool, but couldn't save the new model) that's why I wanted to help them, and any other people who weren't been able to use it. And about the other tool I've found on this forum, the tool "made" by thunder-core, I didn't find that tool satisfying, it worked, but after the new model was made, I wasn't been able to import it in 3d max, or to convert the model from file format revision 7 to 6. So you were basicaly forced to upgrade your client to granny 2.9, and I found that inconvenient, because, I don't know about others, but I don't use source for binary, and because of that it's imposible to see the model in-game. And of course, the new model you've created, with the tool in attachement, is revision 7, so you need the new granny if you want to see it in-game, but you can use the converter from archive to convert from revision 7, to revision 6 (old), and you'll be able to see it in-game. If you already see it in-game, you don't need to use the converter. If you found this post helpful I'm glad I could help you.
    1 point
  19. You can do this extension very easy. root/game.py # Search for: self.interface = interfaceModule.Interface() # Replace with: self.interface = interfaceModule.Interface(self) root/interfaceModule.py # Search for: def __init__(self): systemSetting.SetInterfaceHandler(self) # Replace with: def __init__(self, wndGame): self.wndGame = wndGame systemSetting.SetInterfaceHandler(self) root/uiInventory.py # PrintButton self.printButton = self.GetChild2("PrintButton") if self.printButton: self.printButton.SetEvent(ui.__mem_func__(self.ClickPrintButton)) def ClickPrintButton(self): wndGame = self.interface.wndGame if wndGame: wndGame.BINARY_SetBigMessage('click_print_button') # Function from game.py
    1 point
  20. The title says it all. - Programming meme - Metin2 meme Please, no memes with people with disabilities. Please use also the spoiler function. I'll start: @martysama0134
    0 points
  21. M2 Download Center Download Here ( Internal )
    0 points
  22. @IGNEEL @martysama0134
    0 points
  23. 0 points
  24. Vegas be like: ”I had few hours free and i decided to release this sh*t”
    0 points
  25. Others ? Turkmmo coding. Searching for C++ functions. Take care . @ManiacRobert After u drink ur coffe and ur going to see if your source is compiling succesfully , but u got an error that's telling you missed ";" on line ...
    0 points
  26. How the python syserr works... Using " else if " instead to make the function using " for ". When you finally finished the your code...
    0 points
  27. 0 points
  28. M2 Download Center Download Here ( Internal ) Heyhoo újra Equipable pencil item to make your chat colorful. Client side we only gonna work in the UserInterface: Open packet.h Search: typedef struct packet_chatting { BYTE header; WORD size; BYTE type; DWORD dwVID; BYTE bEmpire; } TPacketGCChat; Replace: typedef struct packet_chatting { BYTE header; WORD size; BYTE type; DWORD dwVID; BYTE bEmpire; BYTE TypingColor; } TPacketGCChat; Open PythonNetworkStreamPhaseGame.cpp and search for RecvChatPacket function. In this func. search for TPacketGCChat kChat; TPacketGCChat kChat; char buf[1024 + 1]; char line[1024 + 1]; Add after: string colored_p; string colored_buf; Go down till _snprintf(line, sizeof(line), "%s", p); Add it before: switch (kChat.TypingColor) { case 1: colored_p = "|cff00ffff" + string(p) + "|r"; colored_buf = "|cff00ffff" + string(buf) + "|r"; break; case 2: colored_p = "|cffff0000" + string(p) + "|r"; colored_buf = "|cffff0000" + string(buf) + "|r"; break; case 3: colored_p = "|cffADFF2F" + string(p) + "|r"; colored_buf = "|cffADFF2F" + string(buf) + "|r"; break; case 4: colored_p = "|cffFF4500" + string(p) + "|r"; colored_buf = "|cffFF4500" + string(buf) + "|r"; break; case 5: colored_p = "|cffC67171" + string(p) + "|r"; colored_buf = "|cffC67171" + string(buf) + "|r"; break; default: colored_p = string(p); colored_buf = string(buf); break; } Modify the mentioned line from _snprintf(line, sizeof(line), "%s", p); to _snprintf(line, sizeof(line), "%s", colored_p.c_str()); Find in this func if (pkInstChatter->IsPC()) CPythonChat::Instance().AppendChat(kChat.type, buf); Modify the line to CPythonChat::Instance().AppendChat(kChat.type, colored_buf.c_str()); Compile client binary. We have to add a new item subtype to the dump_proto. In ItemCSVReader.cpp search for get_Item_SubType_Value func. and modify arSub16 array: string arSub16[] = { "UNIQUE_NONE", "UNIQUE_BOOK", "UNIQUE_SPECIAL_RIDE", "UNIQUE_SPECIAL_MOUNT_RIDE", "UNIQUE_COLOR", "UNIQUE_5", "UNIQUE_6", "UNIQUE_7", "UNIQUE_8", "UNIQUE_9", "USE_SPECIAL"}; Compile. Server side: game directory: Open packet.h Search for typedef struct packet_chat // 가변 패킷 { BYTE header; WORD size; BYTE type; DWORD id; BYTE bEmpire; } TPacketGCChat; Modify like: typedef struct packet_chat // 가변 패킷 { BYTE header; WORD size; BYTE type; DWORD id; BYTE bEmpire; BYTE TypingColor; } TPacketGCChat; Open input_main.cpp and search for Chat func. Find the pack_chat.header = HEADER_GC_CHAT; pack_chat.size = sizeof(TPacketGCChat) + len; pack_chat.type = pinfo->type; pack_chat.id = ch->GetVID(); part and modify like: pack_chat.header = HEADER_GC_CHAT; pack_chat.size = sizeof(TPacketGCChat) + len; pack_chat.type = pinfo->type; pack_chat.id = ch->GetVID(); pack_chat.TypingColor = ch->GetTypingColor(); Open char.h and search for bool m_bWalking; Add before: BYTE TypingColor; Search: bool IsStateMove() const { return IsState((CState&)m_stateMove); } Add before: BYTE GetTypingColor() { return TypingColor; } BYTE SetTypingColor(BYTE _c) { TypingColor = _c; } Open char.cpp, search for Initialize func. Put it before: TypingColor = 0; Open item.cpp and search for EquipTo func. You'll see this at the beginning: if (!ch) { sys_err("EquipTo: nil character"); return false; } Add after: if(GetType() == ITEM_UNIQUE && GetSubType() == UNIQUE_COLOR) ch->SetTypingColor(GetValue(1)); Find the Unequip func. Search for this part: if (this != m_pOwner->GetWear(GetCell() - INVENTORY_MAX_NUM)) { sys_err("m_pOwner->GetWear() != this"); return false; } Add after: if(GetType() == ITEM_UNIQUE && GetSubType() == UNIQUE_COLOR) m_pOwner->SetTypingColor(0); common/item_length.h: Search for enum EUniqueSubTypes { UNIQUE_NONE, UNIQUE_BOOK, UNIQUE_SPECIAL_RIDE, UNIQUE_SPECIAL_MOUNT_RIDE, }; Modify like enum EUniqueSubTypes { UNIQUE_NONE, UNIQUE_BOOK, UNIQUE_SPECIAL_RIDE, UNIQUE_SPECIAL_MOUNT_RIDE, UNIQUE_COLOR, }; Compile game. DB: open ProtoReader.cpp and search for get_Item_SubType_Value func. Modify arSub16 array like static string arSub16[] = { "UNIQUE_NONE", "UNIQUE_BOOK", "UNIQUE_SPECIAL_RIDE", "UNIQUE_SPECIAL_MOUNT_RIDE", "UNIQUE_COLOR", "UNIQUE_5", "UNIQUE_6", "UNIQUE_7", "UNIQUE_8", "UNIQUE_9", "USE_SPECIAL"}; Compile. item_proto: 20111 pencil_cyan ITEM_UNIQUE UNIQUE_COLOR 1 ANTI_DROP | ANTI_SELL | ANTI_GIVE | ANTI_STACK | ANTI_MYSHOP LOG WEAR_SHIELD 0 0 0 0 0 LIMIT_NONE 0 LIMIT_NONE 0 APPLY_NONE 0 APPLY_NONE 0 APPLY_NONE 0 0 1 0 0 0 0 0 0 0 20112 pencil_cyan ITEM_UNIQUE UNIQUE_COLOR 1 ANTI_DROP | ANTI_SELL | ANTI_GIVE | ANTI_STACK | ANTI_MYSHOP LOG WEAR_SHIELD 0 0 0 0 0 LIMIT_NONE 0 LIMIT_NONE 0 APPLY_NONE 0 APPLY_NONE 0 APPLY_NONE 0 0 2 0 0 0 0 0 0 0 20113 pencil_cyan ITEM_UNIQUE UNIQUE_COLOR 1 ANTI_DROP | ANTI_SELL | ANTI_GIVE | ANTI_STACK | ANTI_MYSHOP LOG WEAR_SHIELD 0 0 0 0 0 LIMIT_NONE 0 LIMIT_NONE 0 APPLY_NONE 0 APPLY_NONE 0 APPLY_NONE 0 0 3 0 0 0 0 0 0 0 20114 pencil_cyan ITEM_UNIQUE UNIQUE_COLOR 1 ANTI_DROP | ANTI_SELL | ANTI_GIVE | ANTI_STACK | ANTI_MYSHOP LOG WEAR_SHIELD 0 0 0 0 0 LIMIT_NONE 0 LIMIT_NONE 0 APPLY_NONE 0 APPLY_NONE 0 APPLY_NONE 0 0 4 0 0 0 0 0 0 0 20115 pencil_cyan ITEM_UNIQUE UNIQUE_COLOR 1 ANTI_DROP | ANTI_SELL | ANTI_GIVE | ANTI_STACK | ANTI_MYSHOP LOG WEAR_SHIELD 0 0 0 0 0 LIMIT_NONE 0 LIMIT_NONE 0 APPLY_NONE 0 APPLY_NONE 0 APPLY_NONE 0 0 5 0 0 0 0 0 0 0 item_names: 20111 Ceruza 20112 Ceruza 20113 Ceruza 20114 Ceruza 20115 Ceruza item_list: 20111 ETC icon/item/color_cyan.tga 20112 ETC icon/item/color_red.tga 20113 ETC icon/item/color_green.tga 20114 ETC icon/item/color_orange.tga 20115 ETC icon/item/color_brown.tga Icons are attached.
    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.