Jump to content

How To Install Global GameLauncher Community Version


Recommended Posts

  • Premium

M2 Download Center

This is the hidden content, please
( Internal )

 

Spoiler

 

 

Features

  • Written in c++, best performance with multithreading
  • Beautiful GUI, inspired in Blizzard
  • All errors and exceptions throw user friendly messages
  • International Multilanguage
  • Fast download files
  • Method of Hash (CRC32) by default
  • Banner in home (Promotion, Event, New Image, etc...) + News / Patch notes
  • Initialize client with arguments
  • Tool user friendly for generate serverlist hashs
  • New config game for Metin built-in (Requirements: metin2client source)

Languages Availables

  • English (US) (Full language correctly)
  • Espanhol (ES) (Translate by : Jesús )
  • Portuguese (BR) (Full language correctly)
  • Romanian (RO) (Translate by: Abel (Tiger) )
  • German (DE) (Translate by :  Core | Simplex2 )
  • Turkish (TR) (Need review)
  • Czech (Translate by : Joseph Lochy )

If your language needs review, or you want to help translate the language of their country to add to the list, you can contact me by skype and help correct .

Some Community version limitations
- News/PatchNotes maximum 255 characters
- Without support for client initialize with arguments
- Without change Icon Application
- Without change Logo (Metin2 logo default)
- Without change Background
- Without custom Layout
- Without possibility of choose hash method
- Receive updates direct in Topic/forum
- Without support Skype
- Binarie name default for initialize: metin2client.exe

 

INSTALL PART SERVER

Rev: 140816

This is the hidden content, please

[ChangeLog 090816.1]

- Fix Application crash when all files updated.

[ChangeLog 090816.2]

- Removed limit bandwith of Community Version: because failing to download multiple files/ buffer fail.

[ChangeLog 140816]

- Added Language Czech (translate by : Joseph Lochy )

- Update Language Spanish ( translate by : Jesús )

- Update Language Romanian ( translate by: Abel (Tiger) )

VirusScan : 

This is the hidden content, please

1. In his HOST, upload the files from the "Host Files"

2. Open GameLauncher_Manager.exe select "TAB" Server Hash.

3. Select the client directory and generate the Hash

4. Put the new "serverlist.data" in /gamelauncher/conf/

Structure
[patch.notes] = Here you put an text (news/patch notes)
[serverlist.data] = Responsible for client hash
[slide1.png] = Banner image. The extension must be .png and same size .

5. Put the client files in the folder "/gamelauncher/data/" (host)

5e1856cb5817451d9f30a3859da849dc.png

 

INSTALL PART CLIENT

Structure
[ldata] = Folder that stores settings (This folder is the one that does not create automatic. It must exist for GameLauncher work.)
[gameconfig.ini] = Metin2 client config
[LauncherConfig.ini] = Launcher Config
[serverconf.data] = Host configs

1. Open GameLauncher_Manager.exe and select "TAB" Config for GameLauncher

fe21825d74c64d7ea8edff71f059b9c1.png

Fill in the fields

Homepage: Here you put the link to your website. This link must be prefixed with http://
URL Hosting: Here you put the link from the main folder where you will create the folder "gamelauncher" e.g. metin2server.net (public_html)

2. Click in "Save". Will generate a file "serverconf.data".Place in the "ldata" folder within the client.

INSTALL PART CLIENT SOURCE

1. In "PythonSystem.cpp", put in header

//Boost
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/ini_parser.hpp>
#include <boost/lexical_cast.hpp>

#define ENABLE_NEWGAMECONFIG

2. In "PythonSystem.cpp" search function "LoadConfig()"
And replace with :

bool CPythonSystem::LoadConfig()
{
#ifdef ENABLE_NEWGAMECONFIG
	boost::property_tree::ptree r_pt;
	/**
	* File exists? 
	*/
	try
	{
		boost::property_tree::ini_parser::read_ini("ldata/gameconfig.ini", r_pt);

		//resolution
		m_Config.width = r_pt.get<DWORD>("Metin2.WIDTH");
		m_Config.height = r_pt.get<DWORD>("Metin2.HEIGHT");
		//frequency
		m_Config.frequency = r_pt.get<DWORD>("Metin2.FREQUENCY");
		//gamma
		m_Config.gamma = r_pt.get<int>("Metin2.GAMMA");
		//windowmode //fullscreen
		m_Config.bWindowed = r_pt.get<bool>("Metin2.WINDOW_MODE");
		//software cursor
		m_Config.is_software_cursor = r_pt.get<bool>("Metin2.SOFTWARE_CURSOR");
		//Sound Music
		m_Config.music_volume = r_pt.get<float>("Metin2.MUSIC", 0.0f);
		//Sound Effects
		m_Config.voice_volume = (char)r_pt.get<int>("Metin2.EFFECTS");
		//fog
		m_Config.iDistance = r_pt.get<int>("Metin2.VISIBILITY");
		//tln
		m_Config.bSoftwareTiling = (r_pt.get<std::string>("Metin2.SOFTWARE_TILING").length() > 1 ? 0 : r_pt.get<int>("Metin2.SOFTWARE_TILING")); //INT in byte
		//shadow
		m_Config.iShadowLevel = r_pt.get<int>("Metin2.SHADOW");
		//IME GAME
		m_Config.bUseDefaultIME = r_pt.get<bool>("Metin2.GAME_IME");
		//IME Extern
		m_Config.bUseDefaultIME = r_pt.get<bool>("Metin2.EXTERN_IME");

		//Others
		m_Config.bDecompressDDS = r_pt.get<bool>("Metin2.DECOMPRESSED_TEXTURE");
		m_Config.bViewChat = r_pt.get<bool>("Metin2.VIEW_CHAT");
		m_Config.bAlwaysShowName = r_pt.get<bool>("Metin2.ALWAYS_VIEW_NAME");
		m_Config.bShowDamage = r_pt.get<bool>("Metin2.SHOW_DAMAGE");
		m_Config.bShowSalesText = r_pt.get<bool>("Metin2.SHOW_SALESTEXT");
		m_Config.bNoSoundCard = false;


		if (m_Config.bWindowed)
		{
			unsigned screen_width = GetSystemMetrics(SM_CXFULLSCREEN);
			unsigned screen_height = GetSystemMetrics(SM_CYFULLSCREEN);

			if (m_Config.width >= screen_width)
			{
				m_Config.width = screen_width;
			}
			if (m_Config.height >= screen_height)
			{
				m_Config.height = screen_height;
			}
		}

		m_OldConfig = m_Config;

	}
	catch (boost::property_tree::ini_parser_error &e)
	{
		fprintf(stderr, "Game Config Error: %s\n", e.message().c_str());
	}
	catch(const boost::property_tree::ptree_error &e)
	{
		fprintf(stderr, "Game Config Error: %s\n", e.what());
	}

	return true;
	
#else
	FILE * fp = NULL;

	if (NULL == (fp = fopen("metin2.cfg", "rt")))
		return false;

	char buf[256];
	char command[256];
	char value[256];

	while (fgets(buf, 256, fp))
	{
		if (sscanf(buf, " %s %s\n", command, value) == EOF)
			break;

		if (!stricmp(command, "WIDTH"))
			m_Config.width		= atoi(value);
		else if (!stricmp(command, "HEIGHT"))
			m_Config.height	= atoi(value);
		else if (!stricmp(command, "BPP"))
			m_Config.bpp		= atoi(value);
		else if (!stricmp(command, "FREQUENCY"))
			m_Config.frequency = atoi(value);
		else if (!stricmp(command, "SOFTWARE_CURSOR"))
			m_Config.is_software_cursor = atoi(value) ? true : false;
		else if (!stricmp(command, "OBJECT_CULLING"))
			m_Config.is_object_culling = atoi(value) ? true : false;
		else if (!stricmp(command, "VISIBILITY"))
			m_Config.iDistance = atoi(value);
		else if (!stricmp(command, "MUSIC_VOLUME")) {
			if(strchr(value, '.') == 0) { // Old compatiability
				m_Config.music_volume = pow(10.0f, (-1.0f + (((float) atoi(value)) / 5.0f)));
				if(atoi(value) == 0)
					m_Config.music_volume = 0.0f;
			} else
				m_Config.music_volume = atof(value);
		} else if (!stricmp(command, "VOICE_VOLUME"))
			m_Config.voice_volume = (char) atoi(value);
		else if (!stricmp(command, "GAMMA"))
			m_Config.gamma = atoi(value);
		else if (!stricmp(command, "IS_SAVE_ID"))
			m_Config.isSaveID = atoi(value);
		else if (!stricmp(command, "SAVE_ID"))
			strncpy(m_Config.SaveID, value, 20);
		else if (!stricmp(command, "PRE_LOADING_DELAY_TIME"))
			g_iLoadingDelayTime = atoi(value);
		else if (!stricmp(command, "WINDOWED"))
		{
			m_Config.bWindowed = atoi(value) == 1 ? true : false;
		}
		else if (!stricmp(command, "USE_DEFAULT_IME"))
			m_Config.bUseDefaultIME = atoi(value) == 1 ? true : false;
		else if (!stricmp(command, "SOFTWARE_TILING"))
			m_Config.bSoftwareTiling = atoi(value);
		else if (!stricmp(command, "SHADOW_LEVEL"))
			m_Config.iShadowLevel = atoi(value);
		else if (!stricmp(command, "DECOMPRESSED_TEXTURE"))
			m_Config.bDecompressDDS = atoi(value) == 1 ? true : false;
		else if (!stricmp(command, "NO_SOUND_CARD"))
			m_Config.bNoSoundCard = atoi(value) == 1 ? true : false;
		else if (!stricmp(command, "VIEW_CHAT"))
			m_Config.bViewChat = atoi(value) == 1 ? true : false;
		else if (!stricmp(command, "ALWAYS_VIEW_NAME"))
			m_Config.bAlwaysShowName = atoi(value) == 1 ? true : false;
		else if (!stricmp(command, "SHOW_DAMAGE"))
			m_Config.bShowDamage = atoi(value) == 1 ? true : false;
		else if (!stricmp(command, "SHOW_SALESTEXT"))
			m_Config.bShowSalesText = atoi(value) == 1 ? true : false;
	}

	if (m_Config.bWindowed)
	{
		unsigned screen_width = GetSystemMetrics(SM_CXFULLSCREEN);
		unsigned screen_height = GetSystemMetrics(SM_CYFULLSCREEN);

		if (m_Config.width >= screen_width)
		{
			m_Config.width = screen_width;
		}
		if (m_Config.height >= screen_height)
		{
			m_Config.height = screen_height;
		}
	}

	m_OldConfig = m_Config;

	fclose(fp);

	//	Tracef("LoadConfig: Resolution: %dx%d %dBPP %dHZ Software Cursor: %d, Music/Voice Volume: %d/%d Gamma: %d\n",
	//		m_Config.width,
	//		m_Config.height,
	//		m_Config.bpp,
	//		m_Config.frequency,
	//		m_Config.is_software_cursor,
	//		m_Config.music_volume,
	//		m_Config.voice_volume,
	//		m_Config.gamma);

	return true;
#endif // ENABLE_NEWGAMECONFIG
}

3. Search function "SaveConfig()" and replace with:

bool CPythonSystem::SaveConfig()
{
#ifdef ENABLE_NEWGAMECONFIG
	boost::property_tree::ptree pt;
	pt.put("Metin2.WIDTH", m_Config.width);
	pt.put("Metin2.HEIGHT", m_Config.height);
	pt.put("Metin2.FREQUENCY", m_Config.frequency);
	pt.put("Metin2.GAMMA", m_Config.gamma);
	pt.put("Metin2.WINDOW_MODE", (m_Config.bWindowed == 1 ? 1 : 0));
	pt.put("Metin2.FULLSCREEN", (m_Config.bWindowed == 1 ? 0 : 1));
	pt.put("Metin2.SOFTWARE_CURSOR", boost::lexical_cast<std::string>(m_Config.is_software_cursor));
	pt.put("Metin2.MUSIC", m_Config.music_volume);
	pt.put("Metin2.EFFECTS", m_Config.voice_volume);
	pt.put("Metin2.VISIBILITY", m_Config.iDistance);
	pt.put("Metin2.SOFTWARE_TILING", m_Config.bSoftwareTiling); //tln
	pt.put("Metin2.SHADOW", m_Config.iShadowLevel);
	pt.put("Metin2.GAME_IME", (m_Config.bUseDefaultIME == true ? 0 : 1));
	pt.put("Metin2.EXTERN_IME", (m_Config.bUseDefaultIME == true ? 1 : 0));

	//Game Config Others
	pt.put("Metin2.DECOMPRESSED_TEXTURE", (m_Config.bDecompressDDS == true ? 1 : 0));
	pt.put("Metin2.VIEW_CHAT", (m_Config.bViewChat == true ? 1 : 0));
	pt.put("Metin2.ALWAYS_VIEW_NAME", (m_Config.bAlwaysShowName == true ? 1 : 0));
	pt.put("Metin2.SHOW_DAMAGE", (m_Config.bShowDamage == true ? 1 : 0));
	pt.put("Metin2.SHOW_SALESTEXT", (m_Config.bShowSalesText == true ? 1 : 0));

	try
	{
		boost::property_tree::ini_parser::write_ini("ldata/gameconfig.ini", pt);
		
	}
	catch (boost::property_tree::ini_parser_error &e)
	{
		fprintf(stderr, "Game Config Error: %s\n", e.message().c_str());
	}
	catch(const boost::property_tree::ptree_error &e)
	{
		fprintf(stderr, "Game Config Error: %s\n", e.what());
	}

	return true;

#else
	FILE *fp;

	if (NULL == (fp = fopen("metin2.cfg", "wt")))
		return false;

	fprintf(fp, "WIDTH						%d\n"
		"HEIGHT						%d\n"
		"BPP						%d\n"
		"FREQUENCY					%d\n"
		"SOFTWARE_CURSOR			%d\n"
		"OBJECT_CULLING				%d\n"
		"VISIBILITY					%d\n"
		"MUSIC_VOLUME				%.3f\n"
		"VOICE_VOLUME				%d\n"
		"GAMMA						%d\n"
		"IS_SAVE_ID					%d\n"
		"SAVE_ID					%s\n"
		"PRE_LOADING_DELAY_TIME		%d\n"
		"DECOMPRESSED_TEXTURE		%d\n",
		m_Config.width,
		m_Config.height,
		m_Config.bpp,
		m_Config.frequency,
		m_Config.is_software_cursor,
		m_Config.is_object_culling,
		m_Config.iDistance,
		m_Config.music_volume,
		m_Config.voice_volume,
		m_Config.gamma,
		m_Config.isSaveID,
		m_Config.SaveID,
		g_iLoadingDelayTime,
		m_Config.bDecompressDDS);

	if (m_Config.bWindowed == 1)
		fprintf(fp, "WINDOWED				%d\n", m_Config.bWindowed);
	if (m_Config.bViewChat == 0)
		fprintf(fp, "VIEW_CHAT				%d\n", m_Config.bViewChat);
	if (m_Config.bAlwaysShowName != DEFAULT_VALUE_ALWAYS_SHOW_NAME)
		fprintf(fp, "ALWAYS_VIEW_NAME		%d\n", m_Config.bAlwaysShowName);
	if (m_Config.bShowDamage == 0)
		fprintf(fp, "SHOW_DAMAGE		%d\n", m_Config.bShowDamage);
	if (m_Config.bShowSalesText == 0)
		fprintf(fp, "SHOW_SALESTEXT		%d\n", m_Config.bShowSalesText);

	fprintf(fp, "USE_DEFAULT_IME		%d\n", m_Config.bUseDefaultIME);
	fprintf(fp, "SOFTWARE_TILING		%d\n", m_Config.bSoftwareTiling);
	fprintf(fp, "SHADOW_LEVEL			%d\n", m_Config.iShadowLevel);
	fprintf(fp, "\n");

	fclose(fp);
	return true;
#endif // ENABLE_NEWGAMECONFIG
	
}

 

Notes: Any doubt or mistake you can ask here on the topic. To more details about the PRO version, you can contact me by skype.
Request in my profile or PM

Edited by Metin2 Dev
Core X - External 2 Internal
  • Metin2 Dev 46
  • kekw 1
  • Dislove 1
  • Angry 1
  • Sad 2
  • Think 1
  • Confused 1
  • Good 20
  • Love 3
  • Love 58
Link to comment
Share on other sites

  • Premium
1 hour ago, Crystal™ said:

Please can you share with us the GameLauncher.exe's source?

Only Paid, sorry

37 minutes ago, Tr3l said:

Romanian (RO) 


Why not download the files ? 

You may have set config wrong.

Spoiler

Edited by Metin2 Dev
Core X - External 2 Internal
Link to comment
Share on other sites

This looks very good, but i have a error when i try to compile binary source:

	Error    1    fatal error C1083: Cannot open include file: 'boost/property_tree/ptree.hpp': No such file or directory    e:\Sursa server\SursaLauncher BUNA\UserInterface\PythonSystem.cpp    6    UserInterface
Error    2    error BK1506 : cannot open file '.\Release\PythonSystem.sbr': No such file or directory    BSCMAKE    UserInterface

Link to comment
Share on other sites

  • Premium
18 hours ago, ladcatalin said:

This looks very good, but i have a error when i try to compile binary source:

 


	Error    1    fatal error C1083: Cannot open include file: 'boost/property_tree/ptree.hpp': No such file or directory    e:\Sursa server\SursaLauncher BUNA\UserInterface\PythonSystem.cpp    6    UserInterface
Error    2    error BK1506 : cannot open file '.\Release\PythonSystem.sbr': No such file or directory    BSCMAKE    UserInterface

 

You need library boost in extern folder

Link to comment
Share on other sites

  • Premium
On 12/08/2016 at 2:58 PM, ladcatalin said:

Can you give me this files? I dont have this in extern/include/boost


boost/property_tree/ptree.hpp
boost/property_tree/ini_parser.hpp

 

Depends of your visual studio version. I using vs2010, anyway : https://sourceforge.net/projects/boost/files/boost/1.61.0/

  • Metin2 Dev 1
  • Love 4
Link to comment
Share on other sites

Announcements



×
×
  • 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.