Jump to content

[M2Dev] Advanced Files To Build Your Server: Src & Server Files & Client [x64 / DX9Ex / CMake / Python3.14 / FreeType / XChaCha20-Poly1305]


Recommended Posts

  • Honorable Member
10 hours ago, tw1x1 said:

Can you share link please? I didn’t know about the official Trello board, that’s why i’ve created another one.

 

Thank you!

Sure: https://trello.com/b/nbSvG4HP/m2dev-files

992404397646696589.png
Former C++ Developer at Gameloft on DML
Join my Discord: Distraught Labs

  • Honorable Member
On 12/9/2025 at 8:57 PM, tw1x1 said:

Can you grant access on Trello please? @r_tw1x1

Cannot see any content, thank you.

There is nothing there yet. But join guys to my Discord, there is a topic for the development of the files.

992404397646696589.png
Former C++ Developer at Gameloft on DML
Join my Discord: Distraught Labs

  • Active+ Member

New PRs submitted for all projects - 1st Major PR Update

As promised few weeks ago I started working in some of the project/system bugs as well as some of the game's most old original bugs! Even though some will take a little more time than expected I prepared a few fixes and PR'd them a while ago.

What to expect:

  1. The server source compiles in FreeBSD environments without any warning in any of the main or backing libs. The warnings were not suppresed but rather fixed introducing more modern coding strategies, type and definition conversions, elimination of Korean characters in source (the new special_item_group.txt from m2dev-server required for compatibility!!!) and more.
     
  2. The server now comes with 4 channels (channels.py), feel free to modify, I was just testing some things and uploaded without changing.
     
  3. The script now start.py turns on channel99 always, independently of how many channels user input has set for activation.
     
  4. The script stop.py now uses SIGTERM instead of SIGHUP. This prevents a bug that kept the cores and/or DB open even after executing the script (worked for me right?)
     
  5. libthecore: Uses `std::atomic<int>` instead of the legacy `volatile`, noticed slight improvement in startup time.
     
  6. Fixed the 2 bugs @ErLullo mentioned: 
     
  7. Changed the `player.player` table structure for hp and sp (from smallint(4) -> int(11)) for compatibility with the source code:
    // common/tables.h
    	...
    	// Fix
    	int32_t       hp;
    	int32_t       sp;
    	...

    If you have already setup your system and haven't done so, it's recommended that you manually design your table and implement this little change.
     

  8. New rules added in all .gitignore files for ignoring anything that ends in _BAK/.BAK or _BK/.BK (case-insensitive). Feel free to PR with as many backup files and folders as your heart desires! (It's the little things in life 😉)
     

  9. Strong body movement speed fix applied to all locales
     

  10. That's all I did... Nah I'm just playin' lol 🤣
     

  11. Negative value command core downer. Public fix by @ MT2Dev

    Never tried it before seeing this post, but please try it yourself before updating: /m 101 -1   🤣
     

  12. Login phase cannot handle packet header 100 (GC_MARK_LOGIN)... Well now it can.
     

  13. Fixed negative HP when dying. Now shows 0.
     

  14. Inventory supports active item toggle effects across all numbers of inventory pages (add as many as you like)
     

  15. Invisibility fix is here! Huge shoutout to Legend and @ Ikarus_ for making this possible

    • Works for Stealth, /inv and revive invisibility smoothly

    • Disappears from mini map

    • No dust when walking around

    • No equipment shining

    • Camera panning does not reset it

    • Stealth effect is visible to all characters (not just the user)!

    • Little preview



       

  16. Character stats correctly displayed in Select phase. Huge shoutout to @ masodikbela for this amazing fix. Stats show and initialize right and gauges respond accordingly.
     

  17. Messenger fix and cross-channel/core functionalityI teased about that like a week ago, it's finally here. Huge shoutout to @Ken and @ Amun for this! In this update the changes go a little deeper than what is publicly available:

    • Prevention from sending a second request while the first one is still active to the same person, with translated message

    • Prevention from sending a second request back to the person that already sent you first, while first request is unanswered, with translated message

    • Translated message added for trying to add yourself

    • Translated message added for trying to add an existing friend

    • Translated message for person is offline (huge shoutout to @ ergod for this fix! And YES after cross-channel implementation this is a fix!)

    • Cross-channel/core functionality for adding, removing, accepting requests and cross-channel/core ChatPacket support

    • Live updates in messenger window upon accepting and removing people in both parties. Target board "Friend" button also responding in both parties live. Updates work cross-channel/core

    • Messenger window initializes after loading so it receives all incoming updates from the start

    • Escape press denies the request when the dialog is open

    • Character disconnect/kick deletes all requests from and towards them

    • A second request from another character while a first one is active cancels the first one so that that person can try again without errors

    • Whisper and Remove buttons auto-disable when the selected friend removes you.

    • No more overlapping text in list with next name/"Empty" label after selected friend removes you

    • Little preview:

       

    • And a huge shoutout to @tw1x1 for the assistance in the final bugs!
       

  18. Skill Cooldown Fix and Total reworkThis one was a BITCH!

    • Cooldowns and active slot states transfer between grades and auto-update (huge shoutout to @Shang for this fix)

    • Persistent slot states when doing skillups, leaving Skill page, closing Character window completely, mounting/unmounting, teleporting, switching to Horse tab and back, etc...

    • NEW: Skill cooldown clears when changing level to 0. If activated togglable, deactivates. If togglable with affect, removes affect. Keeps affects from non-togglable skills (makes sense at least to me since togglables give affects that are maintained constantly, not one-offs. Modify as you like for your own specifications.). Uses togglable checks, not static vnums, feel free to add Wolfman or convert all buffs for all characters as togglables, it will work for them automatically.
      Works for active and horse skills.
      Works for individual resets and skill group resets
      Turns off Combo skill as well (when zeroing it with /setsk)

    • FIX: Horse page appears for riding skill (130) in level 21+ (not 20+)

    • NEW: Horse page appears even without a skill group (shoutout to @ VegaS™ for this fix)

    • NEW: Horse skills disappear from taskbar and page automatically switches to active skills when setting riding level below 21 (with /setsk)

    • NEW: Support skills do not reset when resetting skill groups.

    • NEW: This is an original bug (from before 40K files were released, haven't seen a public fix so far... And trust me I looked...)
      Persistent slot states after skill group resets. Re-written the way skill dictionaries get cleared and refilled, specifically excluded skill types, etc...
      Reproduce this bug by reseting your skill group and selecting skill group 1 while viewing skill group 2 in Skills view.

    • And of course huge shoutout to @tw1x1 for a small fix inside uiCharacter 😉

    • Little preview:


       

All changes (except m2dev-server and compiler warning fixes) are placed in macro definitions and the original code is kept. It is advised to extensively test and share feedback/improvements.

If an implementation proves to be solid, we can take it out of macro def and make it a permanent part of the codebase.

 

The bad news

CMake enhancements (Git submodules, SIL, etc...) support is discontinued after maintainer's request and lack of interest from the community. For everyone who wishes, custom branches are available in my Github page for both source codes, but they won't be receiving any source updates or support in the future.

 

Way more great things are coming along, not just by me but by people with way more experience and knowledge than me with the skills to take this project to another level! Let me know what you think about these new fixes and updates as soon as they are merged and tested!

 

Thanks to everyone for their support!

  • Metin2 Dev 3
  • Love 3
  • Active Member
1 hour ago, Mind Rapist said:

CTRL + Z is failing...

.png

@tw1x1 🤣 🤣

Coming sooner than I thought it would 😄

"СУКА БЛЯТЬ" in chat 🤣

  • Love 1
  • Active+ Member
32 minutes ago, Helia01 said:

"СУКА БЛЯТЬ" in chat 🤣

Please be our Russian tester for Cyrillic :DDDDDD

  • Love 1

For those interested in the Full unicode patch, I haven't PR'ed yet as I'm still working on the RTL for Arabic and trying to improve. The patch will allow you to use UTF8 encoding (65001) as default, compile binary source with Character Set Set Unicode Character Set for VS Project.

All your locale based text, will be and should be in format UTF8, who knows about UTF8 will know what's all about lol
Also in locale.cfg you'll have only the locale name:

It also comes with:

  • CTRL + A (select text and highlighted)
  • CTRL + C (copy)
  • CTRL + V (paste)
  • CTRL + X (cut)
  • CTRL + Z (undo)
  • CTRL + Y (redo)

General cleanup related to locale, encodings, code refactored was a must.

Once this is ready to be release, it will be PR'ed and also a special topic just for it.
Server side will have small changes (game / db).

  • Love 2
  • Active+ Member

DumpProto is back with some hot updates!

 

Check it out: 

This is the hidden content, please

 

The DumpProto project is now integrated and built along with the Client Source

 

 

Edited by Mind Rapist
  • Metin2 Dev 23
  • Good 6
  • Love 16

Thank you, it's a good fundation that's futureproof.For those who are annoyed by the locale promt every time you open the client, here's a fix:

Spoiler
Search:
const char* LSS_GLOBAL		= "GLOBAL";
Add After:
const char* SAVED_LOCALE_FILE = "config/locale.cfg";
Search the function:
LRESULT CALLBACK SelectDlgProc( HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam )
Replace with:
LRESULT CALLBACK SelectDlgProc( HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
	switch( uMsg ) {
	case WM_INITDIALOG : {
		char szLocalePath[256], szDisplayName[256];
		
		char savedLocale[256] = "";
		FILE* savedFile = fopen(SAVED_LOCALE_FILE, "rt");
		if(savedFile) {
			char line[256];
			if(fgets(line, sizeof(line)-1, savedFile)) {
				char localeName[256];
				int port, codepage;
				if(sscanf(line, "%d %d %s", &port, &codepage, localeName) == 3) {
					strcpy(savedLocale, localeName);
				}
			}
			fclose(savedFile);
		}
		
		int selectedIndex = -1;
		int itemCount = 0;
		for(int i=0; gs_stLocaleData[i].szServiceName; i++ ) {
			sprintf(szLocalePath, "locale/%s/item_proto", gs_stLocaleData[i].szLocaleName);
			if(CPackManager::Instance().IsExist(szLocalePath)) {
				sprintf(szDisplayName, "%s (%s, %d)", gs_stLocaleData[i].szLocaleName, gs_stLocaleData[i].szServiceName, gs_stLocaleData[i].wCodePage);
				int iIndex = ListBox_AddString(GetDlgItem(hDlg, IDC_LOCALE_LIST), szDisplayName);
				ListBox_SetItemData(GetDlgItem(hDlg, IDC_LOCALE_LIST), iIndex, i);
				
				if(stricmp(savedLocale, gs_stLocaleData[i].szLocaleName) == 0) {
					selectedIndex = itemCount;
					gs_iLocale = i;
				}
				itemCount++;
			}
		}
		
		if(selectedIndex >= 0) {
			ListBox_SetCurSel(GetDlgItem(hDlg, IDC_LOCALE_LIST), selectedIndex);
		}
		return TRUE;
		}
	case WM_COMMAND :
		switch( LOWORD( wParam ) ) {
		case IDC_LOCALE_LIST: {
			int iSelected = ListBox_GetCurSel(GetDlgItem(hDlg, IDC_LOCALE_LIST));
			switch(HIWORD(wParam)) {
			case LBN_SELCHANGE :
				gs_iLocale = ListBox_GetItemData(GetDlgItem(hDlg, IDC_LOCALE_LIST), iSelected);
				break;
			case LBN_DBLCLK :
				gs_iLocale = ListBox_GetItemData(GetDlgItem(hDlg, IDC_LOCALE_LIST), iSelected);
				::EndDialog(hDlg, 0);
				break;
			} 
			break;
			}
		case IDC_START: {
			if(gs_iLocale >= 0) {
				char localeConfigFile[256];
				sprintf(localeConfigFile, "config/locale_%s.cfg", gs_stLocaleData[gs_iLocale].szLocaleName);
				
				FILE* localeFile = fopen(localeConfigFile, "rt");
				if(localeFile) {
					char line[256];
					if(fgets(line, sizeof(line)-1, localeFile)) {
						int port, codepage;
						char localeName[256];
						if(sscanf(line, "%d %d %s", &port, &codepage, localeName) == 3) {
							MULTI_LOCALE_REPORT_PORT = port;
							MULTI_LOCALE_CODE = codepage;
							strcpy(MULTI_LOCALE_NAME, localeName);
							sprintf(MULTI_LOCALE_PATH, "locale/%s", localeName);
							strcpy(MULTI_LOCALE_SERVICE, gs_stLocaleData[gs_iLocale].szServiceName);
							
							FILE* savedFile = fopen(SAVED_LOCALE_FILE, "wt");
							if(savedFile) {
								fprintf(savedFile, "%s", line);
								fclose(savedFile);
							}
						}
					}
					fclose(localeFile);
				}
			}
			::EndDialog(hDlg, 0);
			break;
			}
		case IDC_EXIT: {
			gs_iLocale = -1;
			::EndDialog(hDlg, 0);
			break;
			}
		}
		return FALSE;
	}
	return FALSE;
}
Search the function:
bool LocaleService_LoadGlobal(HINSTANCE hInstance)
Replace the whole function with:
bool LocaleService_LoadGlobal(HINSTANCE hInstance)
{
	FILE* savedFile = fopen(SAVED_LOCALE_FILE, "rt");
	if(savedFile) {
		char line[256];
		if(fgets(line, sizeof(line)-1, savedFile)) {
			if(strlen(line) > 0 && line[0] != '\n' && line[0] != '\r') {
				int port, codepage;
				char localeName[256];
				if(sscanf(line, "%d %d %s", &port, &codepage, localeName) == 3) {
					for(int i=0; gs_stLocaleData[i].szServiceName; i++ ) {
						if(stricmp(localeName, gs_stLocaleData[i].szLocaleName) == 0) {
							char szLocalePath[256];
							sprintf(szLocalePath, "locale/%s/item_proto", localeName);
							if(CPackManager::Instance().IsExist(szLocalePath)) {
								gs_iLocale = i;
								MULTI_LOCALE_REPORT_PORT = port;
								MULTI_LOCALE_CODE = codepage;
								strcpy(MULTI_LOCALE_NAME, localeName);
								sprintf(MULTI_LOCALE_PATH, "locale/%s", localeName);
								strcpy(MULTI_LOCALE_SERVICE, gs_stLocaleData[gs_iLocale].szServiceName);
								
								if(gs_stLocaleData[gs_iLocale].szSecurityKey)
									__SECURITY_KEY_STRING__ = gs_stLocaleData[gs_iLocale].szSecurityKey;
								
								fclose(savedFile);
								return true;
							}
						}
					}
				}
			}
		}
		fclose(savedFile);
	}
	
	int nFoundLocales = 0;
	char szLocalePath[256];

	for(int i=0; gs_stLocaleData[i].szServiceName; i++ ) {
		sprintf(szLocalePath, "locale/%s/item_proto", gs_stLocaleData[i].szLocaleName);
		if(CPackManager::Instance().IsExist(szLocalePath)) {
			nFoundLocales++;
			if(gs_iLocale == -1)
				gs_iLocale = i;
		}
	}
	
	if (gs_iLocale < 0)
		return false;
	
	if(nFoundLocales > 1) {
		::DialogBox(hInstance, MAKEINTRESOURCE(IDD_SELECT_LOCALE), NULL, (DLGPROC) SelectDlgProc);
	}
	
	if (gs_iLocale < 0)
		return false;
	
	strcpy(MULTI_LOCALE_SERVICE, gs_stLocaleData[gs_iLocale].szServiceName);
	strcpy(MULTI_LOCALE_NAME, gs_stLocaleData[gs_iLocale].szLocaleName);
	sprintf(MULTI_LOCALE_PATH, "locale/%s", gs_stLocaleData[gs_iLocale].szLocaleName);
	MULTI_LOCALE_CODE = gs_stLocaleData[gs_iLocale].wCodePage;
	
	if(gs_stLocaleData[gs_iLocale].szSecurityKey)
		__SECURITY_KEY_STRING__ = gs_stLocaleData[gs_iLocale].szSecurityKey;
	
	return true;
}

 

If you're wondering what it does:

-Checks if config/locale.cfg is empty, if it is than displays the promt to select locale

-Once the locale is selected it searches for the correspondig locale.cfg for the selected language, ex locale_pl, searches for locale_pl.cfg in the config folder path

-It reads the data from that file than writes it to locale.cfg, in the given example  for locale_pl the data is 10012 1250 pl(this data gets copied to locale.cfg) and the client starts using locale_pl.

-Next time the client runs because the locale.cfg is no longer empty it doesn't show the promt to chose locale anymore.

That's about it, hope it helps!
 

Hello there! I'm following this project for a while and i've a question about it, metin community still have some players with x32 procesor arhitecture... Maybe it's possible dual compile and let for example autopatcher choose witch one to run it...?(Don't know if this was already discussed) 🤝

Edited by DDC
30 minutes ago, DDC said:

Hello there! I'm following this project for a while and i've a question about it, metin community still have some players with x32 procesor arhitecture... Maybe it's possible dual compile and let for example autopatcher choose witch one to run it...?(Don't know if this was already discussed) 🤝

I haven't tested this, but I can't imagine that anyone will still be using a 32-bit system in 2025. I believe the mainstream market has been using x64 since 2003. win10 was the last 32bit system. win11 only 64bit. 

Systems running on Linux 32-bit won't be able to start/play anything anyway.

Edited by DerUranov97
  • Love 1
  • Active+ Member
30 minutes ago, DDC said:

Hello there! I'm following this project for a while and i've a question about it, metin community still have some players with x32 procesor arhitecture... Maybe it's possible dual compile and let for example autopatcher choose witch one to run it...?(Don't know if this was already discussed) 🤝

Not an expert here but I think that the client is x64-buildable not x64-capable. You can easily add an x32 build configuration in VS and you're a go from there. Again I'm not an expert you may need to create an x32 Windows VM and test the client there see if it runs and everything works smoothly. If it IS x64-capable and cannot be ran in an x32 machine you can easily add compiling conditions within CMake/source and compare with older client sources in order to patch this up. A configuration with both x32 and x64 options for building as well as conditional code optimization for each seems like an amazing idea as most people use x64 machines but in some countries the standard is still x32. Might as well add it as a Trello suggestion 🙂

  • Good 1
  • Love 1

Hello everyone,
I’m having some issues on my Metin2 server and I hope someone can help me understand what’s causing them.

In the syserr of channel1/core1, the following errors appear repeatedly:

[2025-12-18 19:18:44.245] [error] [virtual bool CInputProcessor::Process(LPDESC, const void*, int, int&)()] 
SEQUENCE e8114a60 mismatch 0x4e != 0x64 header 254

and also in the syserr of channel1/core3:
 

[2025-12-18 19:40:14.676] [error] [bool quest::CQuestManager::Click(unsigned int, LPCHARACTER)()] CQuestManager::Click(pid=1, target_npc_name=Event Helper) - NOT EXIST NPC RACE VNUM[9004]

The first error seems related to a packet sequence mismatch (possibly client/server desync, wrong diffs, packet encryption issues, or source/client incompatibility).
The second error is related to an NPC called “Event Helper” with race vnum 9004 that does not exist, so it may be missing or incorrectly defined on the server or client side (npc.txt, mob_proto, quest files, etc.).

Has anyone encountered similar issues before, or can point me in the right direction on how to fix them?
Thanks in advance for any help.

Since like 2005 all the CPUs are x64 capable, why the hell would you want to compile the client on x86? Anyway you CAN build it x86, but it wont work because of datatype size mismatches / data padding differences, just look at all the commits that needed to be done to make it work. Otherwise, if the OS is x86 (WHY THE F would it be) it can only handle maximum 4gb of memory, which isn't enough to even run a chrome on W10. This files are for innovation/development not for going backwards to support old-ass shit PCs. There is plenty of options if you want x86. By the way, there is no such thing as x32. 

  • Love 4

🖥️ SysAdmin — Government (HU)
🛠️ Freelance Metin2 Dev • DevOps
🐧 FreeBSD / Linux | 🛡️ Security & WAF | 🚀 Performance | 🔥 Firewalls | ⚙ Automation
Open to work - Contact me on Discord @matteo_r

  • Active+ Member

New PR's uploaded for both sources!

What's updated:

  • @ Mali's reversed real-time character level updates for both game view and in-game windows for all viewing characters (e.g., Guild window). Affects both sources
  • @tw1x1's brand NEW completely custom fix for auto-reverting POS_FIGHTING back to POS_STANDING after 10 seconds of battle inactivity. What this means:
    • fresh start for functions checking for == POS_STANDING or != POS_FIGHTING
    • the logout countdown ALWAYS reverts to 3 seconds after character disengages battle
    • some pulse incompatibility issues/differences between localhost and VPS instances have been noticed and addressed successfully
    • tests performed and successfully reverted:
      • The character hits another character
      • The character gets hit by another character
      • The character hits a monster/stone
      • The character gets hit by a monster
      • The character uses an aggressive skill on another character
      • The character uses an aggressive skill on a monster/stone
      • An aggressive skill is being used on the character
      • A boss uses an aggressive skill on the character
    • All tests were performed without any entity ending up dead and the fix works successfully
    • Does not affect already handled position states (defeating a monster, etc...)
    • Affects the server source
    • In simple words: one hit was enough to render the character in constant fighting position until the time they disconnected/died. Not anymore. A small yet powerful fix that adds consistency to the gameplay experience and provides real-time state updates for the server.

Test as soon as it's merged and share your feedback!

  • Love 2
  • Active+ Member
On 12/18/2025 at 8:45 PM, ErLullo said:

Hello everyone,
I’m having some issues on my Metin2 server and I hope someone can help me understand what’s causing them.

In the syserr of channel1/core1, the following errors appear repeatedly:

[2025-12-18 19:18:44.245] [error] [virtual bool CInputProcessor::Process(LPDESC, const void*, int, int&)()] 
SEQUENCE e8114a60 mismatch 0x4e != 0x64 header 254

and also in the syserr of channel1/core3:
 

[2025-12-18 19:40:14.676] [error] [bool quest::CQuestManager::Click(unsigned int, LPCHARACTER)()] CQuestManager::Click(pid=1, target_npc_name=Event Helper) - NOT EXIST NPC RACE VNUM[9004]

The first error seems related to a packet sequence mismatch (possibly client/server desync, wrong diffs, packet encryption issues, or source/client incompatibility).
The second error is related to an NPC called “Event Helper” with race vnum 9004 that does not exist, so it may be missing or incorrectly defined on the server or client side (npc.txt, mob_proto, quest files, etc.).

Has anyone encountered similar issues before, or can point me in the right direction on how to fix them?
Thanks in advance for any help.

First error you can ignore... We are working on packet + sequence improvements in the upcoming updates.

Second one you can ignore as well if the shop or dialog opens up normally, just make sure you py make.py (in your quest folder) and restart the server if it doesn't.

  • Love 1
  • Active+ Member

VERY IMPORTANT ANNOUNCEMENT!

 

Latest PRs have been merged! This includes:

  • Messenger fix/enhancements
  • Stealth/Invisibility fixes
  • Skill slots rework and skills cooldowns auto-reseting when changing skill's level to 0
  • Auto-exiting fighting position after battle inactivity
  • Real-time level updates for all surrounding characters as well as window UIs
  • Other minor fixes

All information about the new updates were discussed in previous comments in this thread.

We also got out of using macro definitions and here is why I'm posting this now. The PRs are merging in patches and some of the files in your new downloads may have macro leftovers. I am posting the entire file(s) below so you can replace your latest pulls with them.

PLEASE COMPARE IF YOU'VE ALREADY MADE CHANGES AFTER PULLING, DON'T JUST BLINDLY REPLACE:

 

This is the hidden content, please

 

Here is also a little bonus that fixes 2 issues in the invisibility fix:

  1. Visual effects from skills while in /in mode do not appear when the character exits /in mode.
  2. Visual effects are visible again (to self only) when in /in mode and refreshing (mounting, reviving, etc...)

Fix: UserInterface/InstanceBase.cpp:

Spoiler
// In void CInstanceBase::Render() replace with this

		if (pkInstEach)
		{
			if (pkInstEach->IsAffect(AFFECT_INVISIBILITY) || pkInstEach->IsAffect(AFFECT_EUNHYEONG) || pkInstEach->IsAffect(AFFECT_REVIVE_INVISIBILITY))
			{
				if (CPythonPlayer::Instance().IsMainCharacterIndex(pkInstEach->GetVirtualID()) && !pkInstEach->IsAffect(AFFECT_INVISIBILITY))
					continue;

				if (pkInstEach->IsAffect(AFFECT_EUNHYEONG) && !pkInstEach->IsAffect(AFFECT_INVISIBILITY) && !pkInstEach->IsAffect(AFFECT_REVIVE_INVISIBILITY))
					pkInstEach->m_GraphicThingInstance.HideAllAttachingEffectForEunhyeong();
				else
					pkInstEach->m_GraphicThingInstance.HideAllAttachingEffect();
			}
			else
			{
				pkInstEach->m_GraphicThingInstance.ShowAllAttachingEffect();
			}
		}

 

That's it!

If you've already pulled the latest updates or just got started with these files apply these changes or wait for the next PR merge.

If you've already implemented your own changes after pulling the latest version of the repos, carefully compare my files to yours and apply only what's necessary to fix compilation/running issues, and of course modify according to your own specifications.

Have an amazing day and thank you for your support! 🔥🔥🔥

 

As of December 25 fixes are available in the official repos. Please make sure you pull the latest updates to include them.

Edited by Mind Rapist
  • Metin2 Dev 12
  • Good 2
  • Love 7
  • Active+ Member
1 hour ago, poszukiw said:

After downloading the latest mt2-client-src, the client won't compile - many build failures.

 

6 hours ago, Mind Rapist said:

VERY IMPORTANT ANNOUNCEMENT!

 

Latest PRs have been merged! This includes:

  • Messenger fix/enhancements
  • Stealth/Invisibility fixes
  • Skill slots rework and skills cooldowns auto-reseting when changing skill's level to 0
  • Auto-exiting fighting position after battle inactivity
  • Real-time level updates for all surrounding characters as well as window UIs
  • Other minor fixes

All information about the new updates were discussed in previous comments in this thread.

We also got out of using macro definitions and here is why I'm posting this now. The PRs are merging in patches and some of the files in your new downloads may have macro leftovers. I am posting the entire file(s) below so you can replace your latest pulls with them.

PLEASE COMPARE IF YOU'VE ALREADY MADE CHANGES AFTER PULLING, DON'T JUST BLINDLY REPLACE:

 

This is the hidden content, please

 

Here is also a little bonus that fixes 2 issues in the invisibility fix:

  1. Visual effects from skills while in /in mode do not appear when the character exits /in mode.
  2. Visual effects are visible again (to self only) when in /in mode and refreshing (mounting, reviving, etc...)

Fix: UserInterface/InstanceBase.cpp:

  Reveal hidden contents
// In void CInstanceBase::Render() replace with this

		if (pkInstEach)
		{
			if (pkInstEach->IsAffect(AFFECT_INVISIBILITY) || pkInstEach->IsAffect(AFFECT_EUNHYEONG) || pkInstEach->IsAffect(AFFECT_REVIVE_INVISIBILITY))
			{
				if (CPythonPlayer::Instance().IsMainCharacterIndex(pkInstEach->GetVirtualID()) && !pkInstEach->IsAffect(AFFECT_INVISIBILITY))
					continue;

				if (pkInstEach->IsAffect(AFFECT_EUNHYEONG) && !pkInstEach->IsAffect(AFFECT_INVISIBILITY) && !pkInstEach->IsAffect(AFFECT_REVIVE_INVISIBILITY))
					pkInstEach->m_GraphicThingInstance.HideAllAttachingEffectForEunhyeong();
				else
					pkInstEach->m_GraphicThingInstance.HideAllAttachingEffect();
			}
			else
			{
				pkInstEach->m_GraphicThingInstance.ShowAllAttachingEffect();
			}
		}

 

That's it!

If you've already pulled the latest updates or just got started with these files apply these changes or wait for the next PR merge.

If you've already implemented your own changes after pulling the latest version of the repos, carefully compare my files to yours and apply only what's necessary to fix compilation/running issues, and of course modify according to your own specifications.

Have an amazing day and thank you for your support! 🔥🔥🔥

This is the fix. Also replace uiCharacter with the one in the link

  • Metin2 Dev 1
  • Good 1
  • muscle 2
  • Love 1
  • Active+ Member

NOTICE

 

I would like to thank all of y'all once again for the tremendous support to this project. I was absent from the scene for many years before I started co-developing it with the guys and when I saw it it peaked my interest. When I tried it for the first time my thoughts were something like

Quote

Oh fuck, here we go again with the bugs.

After solving one, then the next, then the next, most of them with your help, I started seeing the potential this unique design has to offer so I decided to contribute more, in any way that I possibly can.

This source is almost 12 years old and it has more redundancies than necessities, technologies from 10+ years back and so far nothing has changed. I believe that this project is here to become the first of many changes around the scene.

UPDATES:

I know that our latest merges have incomplete parts such as macro leftovers. I have posted a temporary download link with the fixed files but the reason that I haven't pushed another PR to be merged yet is because I am also working on a messenger bug that I discovered. It's a small bug but I wanna push it all together.

Other than the correct files and the invisibility + messenger fixes, you can expect tiny little improvements such as activating dragonstone alchemy decks with CTRL+C/D, the shaman horse hitting fix, movable autopotions throughout the inventory while activated (no idea why they were locked in the first place) and possibly a few more. These fixes are small so it will not be considered a major update.

Again, sorry for the inconveniece and I appreciate your patience. If you are actively developing these files please take eatly push from Friday as an example and test everything thouroughly, always, otherwise you see how messy it can get later.

I also appreciate any help/contribution in advance regarding solving the messenger bug as well as other little persistent bugs that I'm facing.

As always thank you and I'll keep you posted 🙂

  • Metin2 Dev 1
  • Love 4

Don't use any images from : imgur, turkmmop, freakgamers, inforge, hizliresim... Or your content will be deleted without notice...
Use : https://metin2.download/media/add/

Please use https://metin2.download/ when uploading files smaller than 100MB, otherwise the approval will take longer due to manual upload.

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
×
×
  • 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.