Jump to content

Jok3RxD

P-Server Owner
  • Posts

    28
  • Joined

  • Last visited

  • Feedback

    0%

Posts posted by Jok3RxD

  1. https://i.ibb.co/5RdnWvP/Ho-M2-Logo1.png

    HoM2 - Website

    Welcome to the world of nostalgia - HoM2: History of Metin2!

    Discover the charm of the golden era:
    If you long to travel back in time and relive the adrenaline-fueled adventures of the years 2006-2007, then you're in the right place! HoM2 is designed to offer you an authentic experience of the original Metin2, where every step will teleport you back to your childhood, in a world full of dangers and challenges.

    What awaits you on our server?
    1. Authentic atmosphere: Enjoy the original graphics, retro interfaces, and classic gameplay that will make you feel like you've stepped back in time.
    2. Classic rates: Experience, yang, and items - all set to reflect as faithfully as possible the initial experience of the game.
    3. Shops full of treasures: Discover a variety of classic items, inspired by the golden age of Metin2, in our shops. From weapons and armor to accessories and consumables, you'll find everything you need to strengthen your character and reach your full potential.
    4. A modest start: Begin with a +0 sword and 5 red potions - nothing more, nothing less. This means that everything you earn, you'll truly earn through hard work and determination.
    5. Old official missions: Explore our vast and surprise-filled world, completing classic missions that will test your skills and reveal the hidden mysteries of this fascinating universe.

    Why choose HoM2?
    - Because we're more than just a private Metin2 server - we're a gateway to precious memories and immortal adventures.
    - Because we care about our community and strive to create a friendly and lively environment for all our players.
    - Because we're dedicated to keeping the flame of Metin2 alive and offering an authentic experience to all who wish to live it.

    Join us and be part of history!
    HoM2 opens its doors to your childhood adventures and invites you to be part of a community full of passion and enthusiasm for the original Metin2. Don't hesitate - join us today and start your journey to absolute nostalgia!

    Together, we'll remake the history!

    Short presentation - Soon the server will become INTERNATIONAL!

     

  2. Just now, Exynox said:

    Oh, thank you!

     

    It seems that I already have this file catalogued as an official Yitian2 / Metin2 client run by CATV from 2005:

      Hide contents

    Name: Metin2_CN_2005.exe
    Size: 304870262 bytes (290 MiB)
    CRC32: 474C4A54
    CRC64: D4BECBEAA01DD873
    SHA256: EA4169BAE8232B516A0F4A4157EFDA7F7267894BB61C52CE6486157F789E58F7
    SHA1: FF7097559C2200E1044E045B12D1E2995BF7EF28
    BLAKE2sp: 72FC9A3029847B6F00A2A61EBDF6093F0C9E32E2F1BFB849D3A0F9BE08EBDF5C

    Are you sure it's a modified client by Rain? Everything about it seems pretty official to me.

    Nonetheless, I'd be interested in the other old stuff. I'm almost ready to start a thread with my own collection of files, maybe you and other people could contribute as well!

    I'm down to make a very very nice collection site neverdying!

    Send me a DM on discord StefanM#1146

  3. 22 hours ago, Exynox said:

    Original Rain client? I remember everyone using custom clients back in the day (modified Gameforge ones, metin35, abesgaara etc.). I didn't know Rain also released a client. Would you mind sharing?

    https://metin2.download/picture/0JwApy27Wf8sRkCcAJSM3wJocfG9DcRJ/.png

    I have a bunch of LEGACY OLD files on one of my XP old computers which i don't have access right now. But i believe that's the one, either way i'm not 100% sure as i can't even make the installer work anymore (has to be opened on vm under win xp)

     

    Give it a try and let me know your thoughts! 

    I'm happy to give back to this beautiful community that kept the flame alive for over a decade about Metin2 

    Spoiler

    Download
    Metin2 Download

     

     

     

     

  4. Hi!

    I'm using TMP4 serverfiles,

     

    I've done only few adjustments on client side such as belt slot on inventory and dragon soul.

    I have changed the ports both client side and server side (DB,AUTH,GAME99,CH) - since then the client does not show the channel on (it shows ...) BUT the channel works.

    Which port i may have made a mistake? The port number were randomly generated

    Few days ago i tested the game and looks like every time i close a quest or a npc talk or even if i open a shop, apparently my click activates ALL the tabs of the game such as (inventory,guild,friends,stats even group arrow show up!)

    Any idea where i should start looking? 

    I checked into interfacemodule.py but everything seems to be perfectly fine there. 

    Where the command of clicking/opening comes?

     

    Below i'm attaching a short video

    https://metin2.download/picture/W8S4tt6kE0YgYlxgmR42AujS9Z2S23df/.gif

     

    Even paid support if i can get and solve this matter asap.

    Thank you!

  5. Update - Files compiled successfully, but now whenever i choose to read from DB it gives connection error and getting this in syserr

     

    I tried dropping the mob_proto and Item_proto table, but still the same

    SYSERR: Mar  3 17:44:30 :: pid_init: 
    Start of pid: 978
    
    SYSERR: Mar  3 17:44:30 :: Start: TABLE_POSTFIX not configured use default
    SYSERR: Mar  3 17:44:30 :: socket_bind: bind: Address already in use
    SYSERR: Mar  3 17:44:30 :: pid_deinit: 
    End of pid
    
    SYSERR: Mar  3 17:44:36 :: 
    SYSERR: Mar  3 17:44:36 :: Process: FDWATCH: peer null in event: ident 21
    SYSERR: Mar  3 17:44:36 :: Process: FDWATCH: peer null in event: ident 21
    SYSERR: Mar  3 17:44:38 :: Process: FDWATCH: peer null in event: ident 22
    SYSERR: Mar  3 17:44:38 :: Process: FDWATCH: peer null in event: ident 22
    SYSERR: Mar  3 17:44:38 :: Process: FDWATCH: peer null in event: ident 22
    SYSERR: Mar  3 17:44:40 :: Process: FDWATCH: peer null in event: ident 21
    SYSERR: Mar  3 17:44:40 :: Process: FDWATCH: peer null in event: ident 21
    SYSERR: Mar  3 17:44:40 :: Process: FDWATCH: peer null in event: ident 21
    SYSERR: Mar  3 17:44:42 :: Process: FDWATCH: peer null in event: ident 22

     

  6. Hi guys!

     

    Trying to figure out why i can't compile ClientManagerBoot.cpp on TMP4 SVF.

    I have added a NO TXT Script as couldn't find any libs for it to read from Db and not from txt.

     

    Here are the rrors 

    Quote

     

    ClientManagerBoot.cpp:178:7: compile MoneyLog.cpp
    error: no member named 'auto_ptr' in namespace 'std'
            std::auto_ptr<SQLMsg> pkMsg(CDBManager::instance().DirectQuery(query));
    compile ItemAwardManager.cpp
            ~~~~~^
    ClientManagerBoot.cpp:178:16: error: unexpected type name 'SQLMsg': expected exp                      ressioncompile ClientManagerEventFlag.cpp
    
            std::auto_ptr<SQLMsg> pkMsg(CDBManager::instance().DirectQuery(query));
                          ^
    compile Marriage.cpp
    ClientManagerBoot.cpp:178:24: error: use of undeclared identifier 'pkMsg'
            std::auto_ptr<SQLMsg> pkMsg(CDBManager::instance().DirectQuery(query));
                                  ^
    ClientManagerBoot.cpp:179:21: error: use of undeclared identifier 'pkMsg'
            SQLResult * pRes = pkMsg->Get();
    compile Monarch.cpp
                               ^
    ClientManagerBoot.cpp:445:18: error: no member named 'auto_ptr' in namespace 'st                      d'
                std::auto_ptr<SQLMsg> pkMsg(CDBManager::instance().DirectQuery(query                      ));
                ~~~~~^
    ClientManagerBoot.cpp:445:27: error: unexpected type name 'SQLMsg': expected exp                      ression
                std::auto_ptr<SQLMsg> pkMsg(CDBManager::instance().DirectQuery(query                      ));
                              ^
    compile BlockCountry.cpp
    ClientManagerBoot.cpp:445:35: error: use of undeclared identifier 'pkMsg'
                std::auto_ptr<SQLMsg> pkMsg(CDBManager::instance().DirectQuery(query                      ));
                                      ^
    ClientManagerBoot.cpp:compile ItemIDRangeManager.cpp
    446:32: error: use of undeclared identifier 'pkMsg'
                SQLResult * pRes = pkMsg->Get();
                                   ^
    compile ClientManagerHorseName.cpp
    8 errors generated.
    gmake: *** [Makefile:57: .obj/ClientManagerBoot.o] Error 1
    gmake: *** Waiting for unfinished jobs....

     

     

    Also Here is the WHOLE ClientManagerBoot.cpp

     

    Quote

     

    // vim:ts=4 sw=4
    #include <map>
    #include "stdafx.h"
    #include "ClientManager.h"
    #include "Main.h"
    #include "Monarch.h"
    #include "CsvReader.h"
    #include "ProtoReader.h"
    
    using namespace std;
    
    extern int g_test_server;
    extern std::string g_stLocaleNameColumn;
    
    bool CClientManager::InitializeTables()
    {
    	if (!InitializeMobTable())
    	{
    		sys_err("InitializeMobTable FAILED");
    		return false;
    	}
    
    	if (!InitializeItemTable())
    	{
    		sys_err("InitializeItemTable FAILED");
    		return false; 
    	}
    
    
    	if (!InitializeShopTable())
    	{
    		sys_err("InitializeShopTable FAILED");
    		return false;
    	}
    
    	if (!InitializeSkillTable())
    	{
    		sys_err("InitializeSkillTable FAILED");
    		return false;
    	}
    
    	if (!InitializeRefineTable())
    	{
    		sys_err("InitializeRefineTable FAILED");
    		return false;
    	}
    
    	if (!InitializeItemAttrTable())
    	{
    		sys_err("InitializeItemAttrTable FAILED");
    		return false;
    	}
    
    	if (!InitializeItemRareTable())
    	{
    		sys_err("InitializeItemRareTable FAILED");
    		return false;
    	}
    
    	if (!InitializeBanwordTable())
    	{
    		sys_err("InitializeBanwordTable FAILED");
    		return false;
    	}
    
    	if (!InitializeLandTable())
    	{
    		sys_err("InitializeLandTable FAILED");
    		return false;
    	}
    
    	if (!InitializeObjectProto())
    	{
    		sys_err("InitializeObjectProto FAILED");
    		return false;
    	}
    
    	if (!InitializeObjectTable())
    	{
    		sys_err("InitializeObjectTable FAILED");
    		return false;
    	}
    
    	if (!InitializeMonarch())
    	{
    		sys_err("InitializeMonarch FAILED");
    		return false;
    	}
    
    
    	return true;
    }
    
    bool CClientManager::InitializeRefineTable()
    {
    	char query[2048];
    
    	snprintf(query, sizeof(query),
    			"SELECT id, cost, prob, vnum0, count0, vnum1, count1, vnum2, count2,  vnum3, count3, vnum4, count4 FROM refine_proto%s",
    			GetTablePostfix());
    
    	std::unique_ptr<SQLMsg> pkMsg(CDBManager::instance().DirectQuery(query));
    	SQLResult * pRes = pkMsg->Get();
    
    	if (!pRes->uiNumRows)
    		return true;
    
    	if (m_pRefineTable)
    	{
    		sys_log(0, "RELOAD: refine_proto");
    		delete [] m_pRefineTable;
    		m_pRefineTable = NULL;
    	}
    
    	m_iRefineTableSize = pRes->uiNumRows;
    
    	m_pRefineTable	= new TRefineTable[m_iRefineTableSize];
    	memset(m_pRefineTable, 0, sizeof(TRefineTable) * m_iRefineTableSize);
    
    	TRefineTable* prt = m_pRefineTable;
    	MYSQL_ROW data;
    
    	while ((data = mysql_fetch_row(pRes->pSQLResult)))
    	{
    		//const char* s_szQuery = "SELECT src_vnum, result_vnum, cost, prob, "
    		//"vnum0, count0, vnum1, count1, vnum2, count2,  vnum3, count3, vnum4, count4 "
    
    		int col = 0;
    		//prt->src_vnum = atoi(data[col++]);
    		//prt->result_vnum = atoi(data[col++]);
    		str_to_number(prt->id, data[col++]);
    		str_to_number(prt->cost, data[col++]);
    		str_to_number(prt->prob, data[col++]);
    
    		for (int i = 0; i < REFINE_MATERIAL_MAX_NUM; i++)
    		{
    			str_to_number(prt->materials[i].vnum, data[col++]);
    			str_to_number(prt->materials[i].count, data[col++]);
    			if (prt->materials[i].vnum == 0)
    			{
    				prt->material_count = i;
    				break;
    			}
    		}
    
    		sys_log(0, "REFINE: id %ld cost %d prob %d mat1 %lu cnt1 %d", prt->id, prt->cost, prt->prob, prt->materials[0].vnum, prt->materials[0].count);
    
    		prt++;
    	}
    	return true;
    }
    
    class FCompareVnum
    {
    	public:
    		bool operator () (const TEntityTable & a, const TEntityTable & b) const
    		{
    			return (a.dwVnum < b.dwVnum);
    		}
    };
    
    bool CClientManager::InitializeMobTable()
    {
    	char query[2048];
    	fprintf(stderr,"Loading mob_proto from MySQL ");
    	snprintf(query, sizeof(query),
    			"SELECT vnum,name,%s,rank,type,battle_type,level,size,ai_flag,mount_capacity,setRaceFlag,setImmuneFlag,"
    "empire,folder,on_click,st,dx,ht,iq,damage_min,damage_max,max_hp,regen_cycle,regen_percent,gold_min,"
    "gold_max,exp,def,attack_speed,move_speed,aggressive_hp_pct,aggressive_sight,attack_range,drop_item,"
    "resurrection_vnum,enchant_curse,enchant_slow,enchant_poison,enchant_stun,enchant_critical,enchant_penetrate,"
    "resist_sword,resist_twohand,resist_dagger,resist_bell,resist_fan,resist_bow,resist_fire,resist_elect,"
    "resist_magic,resist_wind,resist_poison,dam_multiply,summon,drain_sp,mob_color,polymorph_item,skill_level0,"
    "skill_vnum0,skill_level1,skill_vnum1,sp_berserk,sp_stoneskin,sp_godspeed,sp_deathblow,sp_revive,skill_level2,"
    "skill_vnum2,skill_level3,skill_vnum3,skill_level4,skill_vnum4 FROM mob_proto%s"
    ,g_stLocaleNameColumn.c_str(),
    			GetTablePostfix());
    
    	std::auto_ptr<SQLMsg> pkMsg(CDBManager::instance().DirectQuery(query));
    	SQLResult * pRes = pkMsg->Get();
    
    	if (!pRes->uiNumRows)
    		return false;
    
    	if (!m_vec_mobTable.empty())
    	{
    		sys_log(0, "RELOAD: mob_proto");
    		m_vec_mobTable.clear();
    	}
    	int size = pRes->uiNumRows;
    	m_vec_mobTable.resize(size);
    	memset(&m_vec_mobTable[0], 0, sizeof(TMobTable) * m_vec_mobTable.size());
    	TMobTable * mob_table = &m_vec_mobTable[0];
    	
    	MYSQL_ROW data;
    	//return true;
    	set<int> vnumSet;
    	while ((data = mysql_fetch_row(pRes->pSQLResult)))
    	{
    		
    		/*
    		"SELECT vnum,name,locale_name,rank,type,battle_type,level,size,ai_flag,mount_capacity,setRaceFlag,setImmuneFlag,"
    "empire,folder,on_click,st,dx,ht,iq,damage_min,damage_max,max_hp,regen_cycle,regen_percent,gold_min,"
    "gold_max,exp,def,attack_speed,move_speed,aggressive_hp_pct,aggressive_sight,attack_range,drop_item,"
    "resurrection_vnum,enchant_curse,enchant_slow,enchant_poison,enchant_stun,enchant_critical,enchant_penetrate,"
    "resist_sword,resist_twohand,resist_dagger,resist_bell,resist_fan,resist_bow,resist_fire,resist_elect,"
    "resist_magic,resist_wind,resist_poison,dam_multiply,summon,drain_sp,mob_color,polymorph_item,skill_level0,"
    "skill_vnum0,skill_level1,skill_vnum1,sp_berserk,sp_stoneskin,sp_godspeed,sp_deathblow,sp_revive,skill_level2,"
    "skill_vnum2,skill_level3,skill_vnum3,skill_level4,skill_vnum4 FROM mob_proto%s */
    		int col = 0;
    		str_to_number(mob_table->dwVnum, data[col++]);
    		if(mob_table->dwVnum ==0) continue;
    		strlcpy(mob_table->szName,data[col++] , sizeof(mob_table->szName));
    		strlcpy(mob_table->szLocaleName, data[col++], sizeof(mob_table->szLocaleName));
    		str_to_number(mob_table->bRank,data[col++]);
    		str_to_number(mob_table->bType,data[col++]);
    		str_to_number(mob_table->bBattleType,data[col++]);
    		str_to_number(mob_table->bLevel,data[col++]);
    		str_to_number(mob_table->bSize,data[col++]);
    		//AI_FLAG
    		mob_table->dwAIFlag = get_Mob_AIFlag_Value(data[col++]);
    		//mount_capacity;
    		col++;
    		//RACE_FLAG
    		mob_table->dwRaceFlag = get_Mob_RaceFlag_Value(data[col++]);
    		//IMMUNE_FLAG
    		mob_table->dwImmuneFlag = get_Mob_ImmuneFlag_Value(data[col++]);
    		mob_table->bEmpire = atoi(data[col++]);
    		strlcpy(mob_table->szFolder, data[col++], sizeof(mob_table->szFolder));
    		mob_table->bOnClickType = atoi(data[col++]);
    		mob_table->bStr = atoi(data[col++]);
    		mob_table->bDex = atoi(data[col++]);
    		mob_table->bCon = atoi(data[col++]);
    		mob_table->bInt = atoi(data[col++]);
    		mob_table->dwDamageRange[0] = atoi(data[col++]);
    		mob_table->dwDamageRange[1] = atoi(data[col++]);
    		mob_table->dwMaxHP = atoi(data[col++]);
    		mob_table->bRegenCycle = atoi(data[col++]);
    		mob_table->bRegenPercent = atoi(data[col++]);
    		mob_table->dwGoldMin = atoi(data[col++]);
    		mob_table->dwGoldMax = atoi(data[col++]);
    		mob_table->dwExp = atoi(data[col++]);
    		mob_table->wDef = atoi(data[col++]);
    		mob_table->sAttackSpeed = atoi(data[col++]);
    		mob_table->sMovingSpeed = atoi(data[col++]);
    		mob_table->bAggresiveHPPct = atoi(data[col++]);
    		mob_table->wAggressiveSight = atoi(data[col++]);
    		mob_table->wAttackRange = atoi(data[col++]);	
    		str_to_number(mob_table->dwDropItemVnum, data[col++]);	//32
    		str_to_number(mob_table->dwResurrectionVnum, data[col++]);
    		for (int i = 0; i < MOB_ENCHANTS_MAX_NUM; ++i)
    			str_to_number(mob_table->cEnchants[i], data[col++]);
    
    		for (int i = 0; i < MOB_RESISTS_MAX_NUM; ++i)
    			str_to_number(mob_table->cResists[i], data[col++]);
    
    		str_to_number(mob_table->fDamMultiply, data[col++]);
    		str_to_number(mob_table->dwSummonVnum, data[col++]);
    		str_to_number(mob_table->dwDrainSP, data[col++]);
    
    		//Mob_Color
    		++col;
    
    		str_to_number(mob_table->dwPolymorphItemVnum, data[col++]);
    
    		str_to_number(mob_table->Skills[0].bLevel, data[col++]);
    		str_to_number(mob_table->Skills[0].dwVnum, data[col++]);
    		str_to_number(mob_table->Skills[1].bLevel, data[col++]);
    		str_to_number(mob_table->Skills[1].dwVnum, data[col++]);
    		str_to_number(mob_table->Skills[2].bLevel, data[col++]);
    		str_to_number(mob_table->Skills[2].dwVnum, data[col++]);
    		str_to_number(mob_table->Skills[3].bLevel, data[col++]);
    		str_to_number(mob_table->Skills[3].dwVnum, data[col++]);
    		str_to_number(mob_table->Skills[4].bLevel, data[col++]);
    		str_to_number(mob_table->Skills[4].dwVnum, data[col++]);
    
    		str_to_number(mob_table->bBerserkPoint, data[col++]);
    		str_to_number(mob_table->bStoneSkinPoint, data[col++]);
    		str_to_number(mob_table->bGodSpeedPoint, data[col++]);
    		str_to_number(mob_table->bDeathBlowPoint, data[col++]);
    		str_to_number(mob_table->bRevivePoint, data[col++]);
    
    		//?A?ˇ vnum ?ß°ˇ
    		vnumSet.insert(mob_table->dwVnum);
    		
    		
    		//fprintf(stderr, "MOB #%d %s %s level: %u rank: %u empire: %d\n", mob_table->dwVnum, mob_table->szName, mob_table->szLocaleName, mob_table->bLevel, mob_table->bRank, mob_table->bEmpire);
    		sys_log(0, "MOB #%-5d %-24s %-24s level: %-3u rank: %u empire: %d", mob_table->dwVnum, mob_table->szName, mob_table->szLocaleName, mob_table->bLevel, mob_table->bRank, mob_table->bEmpire);
    		++mob_table;
    	}
    	fprintf(stderr," Complete! %d/%d Mobs loaded.\r\n",size,vnumSet.size());
    	sort(m_vec_mobTable.begin(), m_vec_mobTable.end(), FCompareVnum());
    	return true;
    
    }
    
    bool CClientManager::InitializeShopTable()
    {
    	MYSQL_ROW	data;
    	int		col;
    
    	static const char * s_szQuery = 
    		"SELECT "
    		"shop.vnum, "
    		"shop.npc_vnum, "
    		"shop_item.item_vnum, "
    		"shop_item.count "
    		"FROM shop LEFT JOIN shop_item "
    		"ON shop.vnum = shop_item.shop_vnum ORDER BY shop.vnum, shop_item.item_vnum";
    
    	std::unique_ptr<SQLMsg> pkMsg2(CDBManager::instance().DirectQuery(s_szQuery));
    
    	// shop의 vnum은 있는데 shop_item 이 없을경우... 실패로 처리되니 주의 요망.
    	// 고처야할부분
    	SQLResult * pRes2 = pkMsg2->Get();
    
    	if (!pRes2->uiNumRows)
    	{
    		sys_err("InitializeShopTable : Table count is zero.");
    		return false;
    	}
    
    	std::map<int, TShopTable *> map_shop;
    
    	if (m_pShopTable)
    	{
    		delete [] (m_pShopTable);
    		m_pShopTable = NULL;
    	}
    
    	TShopTable * shop_table = m_pShopTable;
    
    	while ((data = mysql_fetch_row(pRes2->pSQLResult)))
    	{
    		col = 0;
    
    		int iShopVnum = 0;
    		str_to_number(iShopVnum, data[col++]);
    
    		if (map_shop.end() == map_shop.find(iShopVnum))
    		{
    			shop_table = new TShopTable;
    			memset(shop_table, 0, sizeof(TShopTable));
    			shop_table->dwVnum	= iShopVnum;
    
    			map_shop[iShopVnum] = shop_table;
    		}
    		else
    			shop_table = map_shop[iShopVnum];
    
    		str_to_number(shop_table->dwNPCVnum, data[col++]);
    
    		if (!data[col])	// 아이템이 하나도 없으면 NULL이 리턴 되므로..
    			continue;
    
    		TShopItemTable * pItem = &shop_table->items[shop_table->byItemCount];
    
    		str_to_number(pItem->vnum, data[col++]);
    		str_to_number(pItem->count, data[col++]);
    
    		++shop_table->byItemCount;
    	}
    
    	m_pShopTable = new TShopTable[map_shop.size()];
    	m_iShopTableSize = map_shop.size();
    
    	__typeof(map_shop.begin()) it = map_shop.begin();
    
    	int i = 0;
    
    	while (it != map_shop.end())
    	{
    		thecore_memcpy((m_pShopTable + i), (it++)->second, sizeof(TShopTable));
    		sys_log(0, "SHOP: #%d items: %d", (m_pShopTable + i)->dwVnum, (m_pShopTable + i)->byItemCount);
    		++i;
    	}
    
    	return true;
    }
    
    bool CClientManager::InitializeQuestItemTable()
    {
    	using namespace std;
    
    	static const char * s_szQuery = "SELECT vnum, name, %s FROM quest_item_proto ORDER BY vnum";
    
    	char query[1024];
    	snprintf(query, sizeof(query), s_szQuery, g_stLocaleNameColumn.c_str());
    
    	std::unique_ptr<SQLMsg> pkMsg(CDBManager::instance().DirectQuery(query));
    	SQLResult * pRes = pkMsg->Get();
    
    	if (!pRes->uiNumRows)
    	{
    		sys_err("query error or no rows: %s", query);
    		return false;
    	}
    
    	MYSQL_ROW row;
    
    	while ((row = mysql_fetch_row(pRes->pSQLResult)))
    	{
    		int col = 0;
    
    		TItemTable tbl;
    		memset(&tbl, 0, sizeof(tbl));
    
    		str_to_number(tbl.dwVnum, row[col++]);
    
    		if (row[col])
    			strlcpy(tbl.szName, row[col], sizeof(tbl.szName));
    
    		col++;
    
    		if (row[col])
    			strlcpy(tbl.szLocaleName, row[col], sizeof(tbl.szLocaleName));
    
    		col++;
    
    		if (m_map_itemTableByVnum.find(tbl.dwVnum) != m_map_itemTableByVnum.end())
    		{
    			sys_err("QUEST_ITEM_ERROR! %lu vnum already exist! (name %s)", tbl.dwVnum, tbl.szLocaleName);
    			continue;
    		}
    
    		tbl.bType = ITEM_QUEST; // quest_item_proto 테이블에 있는 것들은 모두 ITEM_QUEST 유형
    		tbl.bSize = 1;
    
    		m_vec_itemTable.push_back(tbl);
    	}
    
    	return true;
    }
    
    bool CClientManager::InitializeItemTable()
        {
                char query[2048];
                fprintf(stderr,"Loading item_proto from MySQL");
                snprintf(query, sizeof(query),
                "SELECT vnum,name,%s,type,subtype,weight,size,antiflag,flag,wearflag,immuneflag+0,gold,shop_buy_price,refined_vnum,"
                "refine_set,magic_pct,limittype0,limitvalue0,limittype1,limitvalue1,applytype0,applyvalue0,"
                "applytype1,applyvalue1,applytype2,applyvalue2,value0,value1,value2,value3,value4,value5,socket_pct,addon_type FROM item_proto%s  ORDER BY vnum",
                g_stLocaleNameColumn.c_str(),
                GetTablePostfix());
         
                std::auto_ptr<SQLMsg> pkMsg(CDBManager::instance().DirectQuery(query));
                SQLResult * pRes = pkMsg->Get();
         
                if (!pRes->uiNumRows)
                        return false;
                int addNumber = pRes->uiNumRows;
                if (!m_vec_itemTable.empty())
                {
                        sys_log(0, "RELOAD: item_proto");
                        m_vec_itemTable.clear();
                        m_map_itemTableByVnum.clear();
                }
         
                m_vec_itemTable.resize(addNumber-1);
                memset(&m_vec_itemTable[0], 0, sizeof(TItemTable) * m_vec_itemTable.size());
                TItemTable * item_table = &m_vec_itemTable[0];
         
                MYSQL_ROW data;
                //return true;
                set<int> vnumSet;
                while ((data = mysql_fetch_row(pRes->pSQLResult)))
                {
                        str_to_number(item_table->dwVnum, data[0]);
                        strlcpy(item_table->szName,data[1] , sizeof(item_table->szName));
                        strlcpy(item_table->szLocaleName, data[2], sizeof(item_table->szLocaleName));
                        str_to_number(item_table->bType, data[3]);
                        str_to_number(item_table->bSubType, data[4]);
                        str_to_number(item_table->bWeight, data[5]);
                        str_to_number(item_table->bSize, data[6]);
                        str_to_number(item_table->dwAntiFlags, data[7]);
                        str_to_number(item_table->dwFlags, data[8]);
                        str_to_number(item_table->dwWearFlags, data[9]);
                        str_to_number(item_table->dwImmuneFlag, data[10]);
                        str_to_number(item_table->dwGold, data[11]);
                        str_to_number(item_table->dwShopBuyPrice, data[12]);
                        str_to_number(item_table->dwRefinedVnum, data[13]);
                        str_to_number(item_table->wRefineSet, data[14]);
                        str_to_number(item_table->bAlterToMagicItemPct, data[15]);
                        item_table->cLimitRealTimeFirstUseIndex = -1;
                        item_table->cLimitTimerBasedOnWearIndex = -1;
                       
                        str_to_number(item_table->aLimits[0].bType, data[16]);
                        str_to_number(item_table->aLimits[0].lValue, data[17]);
                        if (LIMIT_REAL_TIME_START_FIRST_USE == item_table->aLimits[0].bType)
                                item_table->cLimitRealTimeFirstUseIndex = (char)0;
                        if (LIMIT_TIMER_BASED_ON_WEAR == item_table->aLimits[0].bType)
                                item_table->cLimitTimerBasedOnWearIndex = (char)0;
                               
                        str_to_number(item_table->aLimits[1].bType, data[18]);
                        str_to_number(item_table->aLimits[1].lValue, data[19]);
                        if (LIMIT_REAL_TIME_START_FIRST_USE == item_table->aLimits[1].bType)
                                item_table->cLimitRealTimeFirstUseIndex = (char)1;
                        if (LIMIT_TIMER_BASED_ON_WEAR == item_table->aLimits[1].bType)
                                item_table->cLimitTimerBasedOnWearIndex = (char)1;
                       
         
                        str_to_number(item_table->aApplies[0].bType, data[20]);
                        str_to_number(item_table->aApplies[0].lValue, data[21]);
                       
                        str_to_number(item_table->aApplies[1].bType, data[22]);
                        str_to_number(item_table->aApplies[1].lValue, data[23]);
                       
                        str_to_number(item_table->aApplies[2].bType, data[24]);
                        str_to_number(item_table->aApplies[2].lValue, data[25]);
                       
         
                        str_to_number(item_table->alValues[0], data[26]);
                        str_to_number(item_table->alValues[1], data[27]);
                        str_to_number(item_table->alValues[2], data[28]);
                        str_to_number(item_table->alValues[3], data[29]);
                        str_to_number(item_table->alValues[4], data[30]);
    			str_to_number(item_table->alValues[5], data[31]);
                               
                        str_to_number(item_table->bGainSocketPct, data[32]);
                        str_to_number(item_table->sAddonType, data[33]);
    			
         
                        vnumSet.insert(item_table->dwVnum);
                        m_map_itemTableByVnum.insert(std::map<DWORD, TItemTable *>::value_type(item_table->dwVnum, item_table));
                        sys_log(0, "ITEM: #%-5lu %-24s %-24s VAL: %d %ld %d %d %d %d WEAR %d ANTI %d IMMUNE %d REFINE %lu REFINE_SET %u MAGIC_PCT %u",
                                        item_table->dwVnum,
                                        item_table->szName,
                                        item_table->szLocaleName,
                                        item_table->alValues[0],
                                        item_table->alValues[1],
                                        item_table->alValues[2],
                                        item_table->alValues[3],
                                        item_table->alValues[4],
                                        item_table->alValues[5],
                                        item_table->dwWearFlags,
                                        item_table->dwAntiFlags,
                                        item_table->dwImmuneFlag,
                                        item_table->dwRefinedVnum,
                                        item_table->wRefineSet,
                                        item_table->bAlterToMagicItemPct);
         
                        item_table++;
                }
                fprintf(stderr," Complete! %d Items loaded.\r\n",addNumber);
                return true;
         
        }
    
    
    bool CClientManager::InitializeSkillTable()
    {
    	char query[4096];
    	snprintf(query, sizeof(query),
    		"SELECT dwVnum, szName, bType, bMaxLevel, dwSplashRange, "
    		"szPointOn, szPointPoly, szSPCostPoly, szDurationPoly, szDurationSPCostPoly, "
    		"szCooldownPoly, szMasterBonusPoly, setFlag+0, setAffectFlag+0, "
    		"szPointOn2, szPointPoly2, szDurationPoly2, setAffectFlag2+0, "
    		"szPointOn3, szPointPoly3, szDurationPoly3, szGrandMasterAddSPCostPoly, "
    		"bLevelStep, bLevelLimit, prerequisiteSkillVnum, prerequisiteSkillLevel, iMaxHit, szSplashAroundDamageAdjustPoly, eSkillType+0, dwTargetRange "
    		"FROM skill_proto%s ORDER BY dwVnum",
    		GetTablePostfix());
    
    	std::unique_ptr<SQLMsg> pkMsg(CDBManager::instance().DirectQuery(query));
    	SQLResult * pRes = pkMsg->Get();
    
    	if (!pRes->uiNumRows)
    	{
    		sys_err("no result from skill_proto");
    		return false;
    	}
    
    	if (!m_vec_skillTable.empty())
    	{
    		sys_log(0, "RELOAD: skill_proto");
    		m_vec_skillTable.clear();
    	}
    
    	m_vec_skillTable.reserve(pRes->uiNumRows);
    
    	MYSQL_ROW	data;
    	int		col;
    
    	while ((data = mysql_fetch_row(pRes->pSQLResult)))
    	{
    		TSkillTable t;
    		memset(&t, 0, sizeof(t));
    
    		col = 0;
    
    		str_to_number(t.dwVnum, data[col++]);
    		strlcpy(t.szName, data[col++], sizeof(t.szName));
    		str_to_number(t.bType, data[col++]);
    		str_to_number(t.bMaxLevel, data[col++]);
    		str_to_number(t.dwSplashRange, data[col++]);
    
    		strlcpy(t.szPointOn, data[col++], sizeof(t.szPointOn));
    		strlcpy(t.szPointPoly, data[col++], sizeof(t.szPointPoly));
    		strlcpy(t.szSPCostPoly, data[col++], sizeof(t.szSPCostPoly));
    		strlcpy(t.szDurationPoly, data[col++], sizeof(t.szDurationPoly));
    		strlcpy(t.szDurationSPCostPoly, data[col++], sizeof(t.szDurationSPCostPoly));
    		strlcpy(t.szCooldownPoly, data[col++], sizeof(t.szCooldownPoly));
    		strlcpy(t.szMasterBonusPoly, data[col++], sizeof(t.szMasterBonusPoly));
    
    		str_to_number(t.dwFlag, data[col++]);
    		str_to_number(t.dwAffectFlag, data[col++]);
    
    		strlcpy(t.szPointOn2, data[col++], sizeof(t.szPointOn2));
    		strlcpy(t.szPointPoly2, data[col++], sizeof(t.szPointPoly2));
    		strlcpy(t.szDurationPoly2, data[col++], sizeof(t.szDurationPoly2));
    		str_to_number(t.dwAffectFlag2, data[col++]);
    
    		// ADD_GRANDMASTER_SKILL
    		strlcpy(t.szPointOn3, data[col++], sizeof(t.szPointOn3));
    		strlcpy(t.szPointPoly3, data[col++], sizeof(t.szPointPoly3));
    		strlcpy(t.szDurationPoly3, data[col++], sizeof(t.szDurationPoly3));
    
    		strlcpy(t.szGrandMasterAddSPCostPoly, data[col++], sizeof(t.szGrandMasterAddSPCostPoly));
    		// END_OF_ADD_GRANDMASTER_SKILL
    
    		str_to_number(t.bLevelStep, data[col++]);
    		str_to_number(t.bLevelLimit, data[col++]);
    		str_to_number(t.preSkillVnum, data[col++]);
    		str_to_number(t.preSkillLevel, data[col++]);
    
    		str_to_number(t.lMaxHit, data[col++]);
    
    		strlcpy(t.szSplashAroundDamageAdjustPoly, data[col++], sizeof(t.szSplashAroundDamageAdjustPoly));
    
    		str_to_number(t.bSkillAttrType, data[col++]);
    		str_to_number(t.dwTargetRange, data[col++]);
    
    		sys_log(0, "SKILL: #%d %s flag %u point %s affect %u cooldown %s", t.dwVnum, t.szName, t.dwFlag, t.szPointOn, t.dwAffectFlag, t.szCooldownPoly);
    
    		m_vec_skillTable.push_back(t);
    	}
    
    	return true;
    }
    
    bool CClientManager::InitializeBanwordTable()
    {
    	m_vec_banwordTable.clear();
    
    	std::unique_ptr<SQLMsg> pkMsg(CDBManager::instance().DirectQuery("SELECT word FROM banword"));
    
    	SQLResult * pRes = pkMsg->Get();
    
    	if (pRes->uiNumRows == 0)
    		return true;
    
    	MYSQL_ROW data;
    
    	while ((data = mysql_fetch_row(pRes->pSQLResult)))
    	{
    		TBanwordTable t;
    
    		if (data[0])
    		{
    			strlcpy(t.szWord, data[0], sizeof(t.szWord));
    			m_vec_banwordTable.push_back(t);
    		}
    	}
    
    	sys_log(0, "BANWORD: total %d", m_vec_banwordTable.size());
    	return true;
    }
    
    bool CClientManager::InitializeItemAttrTable()
    {
    	char query[4096];
    	snprintf(query, sizeof(query),
    			"SELECT apply, apply+0, prob, lv1, lv2, lv3, lv4, lv5, weapon, body, wrist, foots, neck, head, shield, ear FROM item_attr%s ORDER BY apply",
    			GetTablePostfix());
    
    	std::unique_ptr<SQLMsg> pkMsg(CDBManager::instance().DirectQuery(query));
    	SQLResult * pRes = pkMsg->Get();
    
    	if (!pRes->uiNumRows)
    	{
    		sys_err("no result from item_attr");
    		return false;
    	}
    
    	if (!m_vec_itemAttrTable.empty())
    	{
    		sys_log(0, "RELOAD: item_attr");
    		m_vec_itemAttrTable.clear();
    	}
    
    	m_vec_itemAttrTable.reserve(pRes->uiNumRows);
    
    	MYSQL_ROW	data;
    
    	while ((data = mysql_fetch_row(pRes->pSQLResult)))
    	{
    		TItemAttrTable t;
    
    		memset(&t, 0, sizeof(TItemAttrTable));
    
    		int col = 0;
    
    		strlcpy(t.szApply, data[col++], sizeof(t.szApply));
    		str_to_number(t.dwApplyIndex, data[col++]);
    		str_to_number(t.dwProb, data[col++]);
    		str_to_number(t.lValues[0], data[col++]);
    		str_to_number(t.lValues[1], data[col++]);
    		str_to_number(t.lValues[2], data[col++]);
    		str_to_number(t.lValues[3], data[col++]);
    		str_to_number(t.lValues[4], data[col++]);
    		str_to_number(t.bMaxLevelBySet[ATTRIBUTE_SET_WEAPON], data[col++]);
    		str_to_number(t.bMaxLevelBySet[ATTRIBUTE_SET_BODY], data[col++]);
    		str_to_number(t.bMaxLevelBySet[ATTRIBUTE_SET_WRIST], data[col++]);
    		str_to_number(t.bMaxLevelBySet[ATTRIBUTE_SET_FOOTS], data[col++]);
    		str_to_number(t.bMaxLevelBySet[ATTRIBUTE_SET_NECK], data[col++]);
    		str_to_number(t.bMaxLevelBySet[ATTRIBUTE_SET_HEAD], data[col++]);
    		str_to_number(t.bMaxLevelBySet[ATTRIBUTE_SET_SHIELD], data[col++]);
    		str_to_number(t.bMaxLevelBySet[ATTRIBUTE_SET_EAR], data[col++]);
    
    		sys_log(0, "ITEM_ATTR: %-20s %4lu { %3d %3d %3d %3d %3d } { %d %d %d %d %d %d %d }",
    				t.szApply,
    				t.dwProb,
    				t.lValues[0],
    				t.lValues[1],
    				t.lValues[2],
    				t.lValues[3],
    				t.lValues[4],
    				t.bMaxLevelBySet[ATTRIBUTE_SET_WEAPON],
    				t.bMaxLevelBySet[ATTRIBUTE_SET_BODY],
    				t.bMaxLevelBySet[ATTRIBUTE_SET_WRIST],
    				t.bMaxLevelBySet[ATTRIBUTE_SET_FOOTS],
    				t.bMaxLevelBySet[ATTRIBUTE_SET_NECK],
    				t.bMaxLevelBySet[ATTRIBUTE_SET_HEAD],
    				t.bMaxLevelBySet[ATTRIBUTE_SET_SHIELD],
    				t.bMaxLevelBySet[ATTRIBUTE_SET_EAR]);
    
    		m_vec_itemAttrTable.push_back(t);
    	}
    
    	return true;
    }
    
    bool CClientManager::InitializeItemRareTable()
    {
    	char query[4096];
    	snprintf(query, sizeof(query),
    			"SELECT apply, apply+0, prob, lv1, lv2, lv3, lv4, lv5, weapon, body, wrist, foots, neck, head, shield, ear FROM item_attr_rare%s ORDER BY apply",
    			GetTablePostfix());
    
    	std::unique_ptr<SQLMsg> pkMsg(CDBManager::instance().DirectQuery(query));
    	SQLResult * pRes = pkMsg->Get();
    
    	if (!pRes->uiNumRows)
    	{
    		sys_err("no result from item_attr_rare");
    		return false;
    	}
    
    	if (!m_vec_itemRareTable.empty())
    	{
    		sys_log(0, "RELOAD: item_attr_rare");
    		m_vec_itemRareTable.clear();
    	}
    
    	m_vec_itemRareTable.reserve(pRes->uiNumRows);
    
    	MYSQL_ROW	data;
    
    	while ((data = mysql_fetch_row(pRes->pSQLResult)))
    	{
    		TItemAttrTable t;
    
    		memset(&t, 0, sizeof(TItemAttrTable));
    
    		int col = 0;
    
    		strlcpy(t.szApply, data[col++], sizeof(t.szApply));
    		str_to_number(t.dwApplyIndex, data[col++]);
    		str_to_number(t.dwProb, data[col++]);
    		str_to_number(t.lValues[0], data[col++]);
    		str_to_number(t.lValues[1], data[col++]);
    		str_to_number(t.lValues[2], data[col++]);
    		str_to_number(t.lValues[3], data[col++]);
    		str_to_number(t.lValues[4], data[col++]);
    		str_to_number(t.bMaxLevelBySet[ATTRIBUTE_SET_WEAPON], data[col++]);
    		str_to_number(t.bMaxLevelBySet[ATTRIBUTE_SET_BODY], data[col++]);
    		str_to_number(t.bMaxLevelBySet[ATTRIBUTE_SET_WRIST], data[col++]);
    		str_to_number(t.bMaxLevelBySet[ATTRIBUTE_SET_FOOTS], data[col++]);
    		str_to_number(t.bMaxLevelBySet[ATTRIBUTE_SET_NECK], data[col++]);
    		str_to_number(t.bMaxLevelBySet[ATTRIBUTE_SET_HEAD], data[col++]);
    		str_to_number(t.bMaxLevelBySet[ATTRIBUTE_SET_SHIELD], data[col++]);
    		str_to_number(t.bMaxLevelBySet[ATTRIBUTE_SET_EAR], data[col++]);
    
    		sys_log(0, "ITEM_RARE: %-20s %4lu { %3d %3d %3d %3d %3d } { %d %d %d %d %d %d %d }",
    				t.szApply,
    				t.dwProb,
    				t.lValues[0],
    				t.lValues[1],
    				t.lValues[2],
    				t.lValues[3],
    				t.lValues[4],
    				t.bMaxLevelBySet[ATTRIBUTE_SET_WEAPON],
    				t.bMaxLevelBySet[ATTRIBUTE_SET_BODY],
    				t.bMaxLevelBySet[ATTRIBUTE_SET_WRIST],
    				t.bMaxLevelBySet[ATTRIBUTE_SET_FOOTS],
    				t.bMaxLevelBySet[ATTRIBUTE_SET_NECK],
    				t.bMaxLevelBySet[ATTRIBUTE_SET_HEAD],
    				t.bMaxLevelBySet[ATTRIBUTE_SET_SHIELD],
    				t.bMaxLevelBySet[ATTRIBUTE_SET_EAR]);
    
    		m_vec_itemRareTable.push_back(t);
    	}
    
    	return true;
    }
    
    bool CClientManager::InitializeLandTable()
    {
    	using namespace building;
    
    	char query[4096];
    
    	snprintf(query, sizeof(query),
    		"SELECT id, map_index, x, y, width, height, guild_id, guild_level_limit, price "
    		"FROM land%s WHERE enable='YES' ORDER BY id",
    		GetTablePostfix());
    
    	std::unique_ptr<SQLMsg> pkMsg(CDBManager::instance().DirectQuery(query));
    	SQLResult * pRes = pkMsg->Get();
    
    	if (!m_vec_kLandTable.empty())
    	{
    		sys_log(0, "RELOAD: land");
    		m_vec_kLandTable.clear();
    	}
    
    	m_vec_kLandTable.reserve(pRes->uiNumRows);
    
    	MYSQL_ROW	data;
    
    	if (pRes->uiNumRows > 0)
    		while ((data = mysql_fetch_row(pRes->pSQLResult)))
    		{
    			TLand t;
    
    			memset(&t, 0, sizeof(t));
    
    			int col = 0;
    
    			str_to_number(t.dwID, data[col++]);
    			str_to_number(t.lMapIndex, data[col++]);
    			str_to_number(t.x, data[col++]);
    			str_to_number(t.y, data[col++]);
    			str_to_number(t.width, data[col++]);
    			str_to_number(t.height, data[col++]);
    			str_to_number(t.dwGuildID, data[col++]);
    			str_to_number(t.bGuildLevelLimit, data[col++]);
    			str_to_number(t.dwPrice, data[col++]);
    
    			sys_log(0, "LAND: %lu map %-4ld %7ldx%-7ld w %-4ld h %-4ld", t.dwID, t.lMapIndex, t.x, t.y, t.width, t.height);
    
    			m_vec_kLandTable.push_back(t);
    		}
    
    	return true;
    }
    
    void parse_pair_number_string(const char * c_pszString, std::vector<std::pair<int, int> > & vec)
    {
    	// format: 10,1/20,3/300,50
    	const char * t = c_pszString;
    	const char * p = strchr(t, '/');
    	std::pair<int, int> k;
    
    	char szNum[32 + 1];
    	char * comma;
    
    	while (p)
    	{
    		if (isnhdigit(*t))
    		{
    			strlcpy(szNum, t, MIN(sizeof(szNum), (p-t)+1));
    
    			comma = strchr(szNum, ',');
    
    			if (comma)
    			{
    				*comma = '\0';
    				str_to_number(k.second, comma+1);
    			}
    			else
    				k.second = 0;
    
    			str_to_number(k.first, szNum);
    			vec.push_back(k);
    		}
    
    		t = p + 1;
    		p = strchr(t, '/');
    	}
    
    	if (isnhdigit(*t))
    	{
    		strlcpy(szNum, t, sizeof(szNum));
    
    		comma = strchr(const_cast<char*>(t), ',');
    
    		if (comma)
    		{
    			*comma = '\0';
    			str_to_number(k.second, comma+1);
    		}
    		else
    			k.second = 0;
    
    		str_to_number(k.first, szNum);
    		vec.push_back(k);
    	}
    }
    
    bool CClientManager::InitializeObjectProto()
    {
    	using namespace building;
    
    	char query[4096];
    	snprintf(query, sizeof(query),
    			"SELECT vnum, price, materials, upgrade_vnum, upgrade_limit_time, life, reg_1, reg_2, reg_3, reg_4, npc, group_vnum, dependent_group "
    			"FROM object_proto%s ORDER BY vnum",
    			GetTablePostfix());
    
    	std::unique_ptr<SQLMsg> pkMsg(CDBManager::instance().DirectQuery(query));
    	SQLResult * pRes = pkMsg->Get();
    
    	if (!m_vec_kObjectProto.empty())
    	{
    		sys_log(0, "RELOAD: object_proto");
    		m_vec_kObjectProto.clear();
    	}
    
    	m_vec_kObjectProto.reserve(MAX(0, pRes->uiNumRows));
    
    	MYSQL_ROW	data;
    
    	if (pRes->uiNumRows > 0)
    		while ((data = mysql_fetch_row(pRes->pSQLResult)))
    		{
    			TObjectProto t;
    
    			memset(&t, 0, sizeof(t));
    
    			int col = 0;
    
    			str_to_number(t.dwVnum, data[col++]);
    			str_to_number(t.dwPrice, data[col++]);
    
    			std::vector<std::pair<int, int> > vec;
    			parse_pair_number_string(data[col++], vec);
    
    			for (unsigned int i = 0; i < OBJECT_MATERIAL_MAX_NUM && i < vec.size(); ++i)
    			{
    				std::pair<int, int> & r = vec[i];
    
    				t.kMaterials[i].dwItemVnum = r.first;
    				t.kMaterials[i].dwCount = r.second;
    			}
    
    			str_to_number(t.dwUpgradeVnum, data[col++]);
    			str_to_number(t.dwUpgradeLimitTime, data[col++]);
    			str_to_number(t.lLife, data[col++]);
    			str_to_number(t.lRegion[0], data[col++]);
    			str_to_number(t.lRegion[1], data[col++]);
    			str_to_number(t.lRegion[2], data[col++]);
    			str_to_number(t.lRegion[3], data[col++]);
    
    			// ADD_BUILDING_NPC
    			str_to_number(t.dwNPCVnum, data[col++]);
    			str_to_number(t.dwGroupVnum, data[col++]);
    			str_to_number(t.dwDependOnGroupVnum, data[col++]);
    
    			t.lNPCX = 0;
    			t.lNPCY = MAX(t.lRegion[1], t.lRegion[3])+300;
    			// END_OF_ADD_BUILDING_NPC
    
    			sys_log(0, "OBJ_PROTO: vnum %lu price %lu mat %lu %lu",
    					t.dwVnum, t.dwPrice, t.kMaterials[0].dwItemVnum, t.kMaterials[0].dwCount);
    
    			m_vec_kObjectProto.push_back(t);
    		}
    
    	return true;
    }
    
    bool CClientManager::InitializeObjectTable()
    {
    	using namespace building;
    
    	char query[4096];
    	snprintf(query, sizeof(query), "SELECT id, land_id, vnum, map_index, x, y, x_rot, y_rot, z_rot, life FROM object%s ORDER BY id", GetTablePostfix());
    
    	std::unique_ptr<SQLMsg> pkMsg(CDBManager::instance().DirectQuery(query));
    	SQLResult * pRes = pkMsg->Get();
    
    	if (!m_map_pkObjectTable.empty())
    	{
    		sys_log(0, "RELOAD: object");
    		m_map_pkObjectTable.clear();
    	}
    
    	MYSQL_ROW data;
    
    	if (pRes->uiNumRows > 0)
    		while ((data = mysql_fetch_row(pRes->pSQLResult)))
    		{
    			TObject * k = new TObject;
    
    			memset(k, 0, sizeof(TObject));
    
    			int col = 0;
    
    			str_to_number(k->dwID, data[col++]);
    			str_to_number(k->dwLandID, data[col++]);
    			str_to_number(k->dwVnum, data[col++]);
    			str_to_number(k->lMapIndex, data[col++]);
    			str_to_number(k->x, data[col++]);
    			str_to_number(k->y, data[col++]);
    			str_to_number(k->xRot, data[col++]);
    			str_to_number(k->yRot, data[col++]);
    			str_to_number(k->zRot, data[col++]);
    			str_to_number(k->lLife, data[col++]);
    
    			sys_log(0, "OBJ: %lu vnum %lu map %-4ld %7ldx%-7ld life %ld", 
    					k->dwID, k->dwVnum, k->lMapIndex, k->x, k->y, k->lLife);
    
    			m_map_pkObjectTable.insert(std::make_pair(k->dwID, k));
    		}
    
    	return true;
    }
    
    bool CClientManager::InitializeMonarch()
    {
    	CMonarch::instance().LoadMonarch();
    
    	return true;
    }
    
    bool CClientManager::MirrorMobTableIntoDB()
    {
    	for (itertype(m_vec_mobTable) it = m_vec_mobTable.begin(); it != m_vec_mobTable.end(); it++)
    	{
    		const TMobTable& t = *it;
    		char query[4096];
    		if (g_stLocaleNameColumn == "name")
    		{
    			snprintf(query, sizeof(query),
    				"replace into mob_proto%s "
    				"("
    		
  7. I need some help, i deleted by mistake the Germany folder from the serverfile.

    Thank god that i had a backup, so i replaced it.. i gave 777 permissions everywhere and then.. once i tried to turn on the server was stuck and keep repeating the check of " LocaleService bla bla/germany/locale_string.txt " I thought that should be a problem with the locale_string (always edited by sublime text 3), but the locale was completely fine. 

    I really run out of ideas, in the logfiles i don't see any error from serverside... what can be ? 

  8. Hi Folks!

     

    I've been searching everywhere on the internet, the old and original serverfiles by RAIN. The first release, most classic one.

    I already found a lot of different ones, with plenty backdoors and bugs which wouldn't exist on the original one. 

     

    If anyone have the VDI files, please UPLOAD THEM AND POST THE LINK HERE.

    I bet a lot of people will be thankful for that!

     

    Thanks a lot...

  9. Hello! When i login to game, and play for 2 seconds about the client gets me out to login screen again and again.. this is the syserr

    0909 15:44:16356 :: CPythonPlayer::SetItemData(dwSlotIndex=47, itemIndex=31409) - Failed to item data
    
    0909 15:44:16356 :: CPythonPlayer::SetItemData(dwSlotIndex=37, itemIndex=31509) - Failed to item data
    
    0909 15:44:16356 :: CPythonPlayer::SetItemData(dwSlotIndex=43, itemIndex=31509) - Failed to item data
    
    0909 15:44:16357 :: CPythonPlayer::SetItemData(dwSlotIndex=31, itemIndex=31509) - Failed to item data
    
    0909 15:44:16357 :: CPythonPlayer::SetItemData(dwSlotIndex=32, itemIndex=31509) - Failed to item data
    
    0909 15:44:16357 :: CPythonPlayer::SetItemData(dwSlotIndex=5, itemIndex=4209) - Failed to item data
    
    0909 15:44:16357 :: CPythonPlayer::SetItemData(dwSlotIndex=42, itemIndex=31509) - Failed to item data
    
    0909 15:44:16357 :: CPythonPlayer::SetItemData(dwSlotIndex=3, itemIndex=4209) - Failed to item data
    
    0909 15:44:16896 :: GRANNY: r:/granny/rt/granny_file_info.cpp(145): File has run-time type tag of 0x8000000f, which doesn't match this version of Granny (0x80000010).  Automatic conversion will be attempted.
    0909 15:44:19532 :: CreateFromMemoryFile: Cannot create texture

    Anyone for help please? :D 

  10. Hello after 15-20minutes of playing my server goes off ... 

    Here are syserr and syslog

    syslog DB -> 

    Jul 21 00:04:56 :: [    53000] return 0/0/0 async 0/0/0
    Jul 21 00:05:01 :: [    53050] return 0/0/0 async 0/0/0
    SYSERR: Jul 21 00:05:04 :: pid_init: 
    Start of pid: 1243
    
    SYSERR: Jul 21 00:05:04 :: Start: TABLE_POSTFIX not configured use default
    Jul 21 00:05:04 :: connecting to MySQL server (player)
    Jul 21 00:05:04 :: CREATING DIRECT_SQL
    Jul 21 00:05:04 :: AsyncSQL: locale euckr
    Jul 21 00:05:04 :: CREATING MAIN_SQL
    Jul 21 00:05:04 :: AsyncSQL: locale euckr
    Jul 21 00:05:04 :: CREATING ASYNC_SQL
    Jul 21 00:05:04 :: AsyncSQL: locale euckr
    Jul 21 00:05:04 ::    OK
    Jul 21 00:05:04 :: connecting to MySQL server (account)
    Jul 21 00:05:04 :: CREATING DIRECT_SQL
    Jul 21 00:05:04 :: AsyncSQL: locale euckr
    Jul 21 00:05:04 :: CREATING MAIN_SQL
    Jul 21 00:05:04 :: AsyncSQL: locale euckr
    Jul 21 00:05:04 :: CREATING ASYNC_SQL
    Jul 21 00:05:04 :: AsyncSQL: locale euckr
    Jul 21 00:05:04 ::    OK
    Jul 21 00:05:04 :: connecting to MySQL server (common)
    Jul 21 00:05:04 :: CREATING DIRECT_SQL
    Jul 21 00:05:04 :: AsyncSQL: locale euckr
    Jul 21 00:05:04 :: CREATING MAIN_SQL
    Jul 21 00:05:04 :: AsyncSQL: locale euckr
    Jul 21 00:05:04 :: CREATING ASYNC_SQL
    Jul 21 00:05:04 :: AsyncSQL: locale euckr
    Jul 21 00:05:04 ::    OK
    Jul 21 00:05:04 :: connecting to MySQL server (hotbackup)
    Jul 21 00:05:04 :: CREATING DIRECT_SQL
    Jul 21 00:05:04 :: AsyncSQL: locale euckr
    Jul 21 00:05:04 :: CREATING MAIN_SQL
    Jul 21 00:05:04 :: AsyncSQL: locale euckr
    Jul 21 00:05:04 :: CREATING ASYNC_SQL
    Jul 21 00:05:04 :: AsyncSQL: locale euckr
    Jul 21 00:05:04 ::    OK
    Jul 21 00:05:04 :: ClientManager initialization.. 
    Jul 21 00:05:04 :: InitializeLocalization() - LoadLocaleTable(count:13)
    Jul 21 00:05:04 :: locale[UNKNOWN_KEY(SKILL_POWER_BY_LEVEL_TYPE0)] = 0 5 6 8 10 12 14 16 18 20 22 24
    Jul 21 00:05:04 :: locale[UNKNOWN_KEY(SKILL_POWER_BY_LEVEL_TYPE1)] = 0 5 6 8 10 12 14 16 18 20 22 24
    Jul 21 00:05:04 :: locale[UNKNOWN_KEY(SKILL_POWER_BY_LEVEL_TYPE2)] = 0 5 6 8 10 12 14 16 18 20 22 24
    Jul 21 00:05:04 :: locale[UNKNOWN_KEY(SKILL_POWER_BY_LEVEL_TYPE3)] = 0 5 6 8 10 12 14 16 18 20 22 24
    Jul 21 00:05:04 :: locale[UNKNOWN_KEY(SKILL_POWER_BY_LEVEL_TYPE4)] = 0 5 6 8 10 12 14 16 18 20 22 24
    Jul 21 00:05:04 :: locale[UNKNOWN_KEY(SKILL_POWER_BY_LEVEL_TYPE5)] = 0 5 6 8 10 12 14 16 18 20 22 24
    Jul 21 00:05:04 :: locale[UNKNOWN_KEY(SKILL_POWER_BY_LEVEL_TYPE6)] = 0 5 6 8 10 12 14 16 18 20 22 24
    Jul 21 00:05:04 :: locale[UNKNOWN_KEY(SKILL_POWER_BY_LEVEL_TYPE7)] = 0 5 6 8 10 12 14 16 18 20 22 24
    Jul 21 00:05:04 :: locale[LOCALE] = germany
    Jul 21 00:05:04 :: Changed g_stLocale euckr to euckr
    Jul 21 00:05:04 :: SetLocale start
    Jul 21 00:05:04 :: End setlocale latin1
    Jul 21 00:05:04 :: locale[DB_NAME_COLUMN] = locale_name
    Jul 21 00:05:04 :: locale[UNKNOWN_KEY(SKILL_DAMAGE_BY_LEVEL_UNDER_90)] = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    Jul 21 00:05:04 :: locale[UNKNOWN_KEY(SKILL_DAMAGE_BY_LEVEL_UNDER_45)] = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    Jul 21 00:05:04 :: locale[UNKNOWN_KEY(SKILL_POWER_BY_LEVEL)] = 0 5 6 8 10 12 14 16 18 20 22 24
    Jul 21 00:05:04 :: GetParam 2000000000
    Jul 21 00:05:04 :: GetParam -1794967296
    Jul 21 00:05:04 :: ItemRange From File 2000000000 ~ 2500000000 
    Jul 21 00:05:04 :: ItemIDRange: Build: 2000000000 ~ 2500000000 start:2000000000
    Jul 21 00:05:04 ::  Init Success Start 2000000000 End 2500000000 Now 2000000000
    

    syserr DB -> 

    SYSERR: Jul 21 00:05:04 :: pid_init: 
    Start of pid: 1243
    
    SYSERR: Jul 21 00:05:04 :: Start: TABLE_POSTFIX not configured use default
    SYSERR: Jul 21 00:05:07 :: socket_bind: bind: Address already in use
    SYSERR: Jul 21 00:05:07 :: pid_deinit: 
    End of pid
    
    SYSERR: Jul 21 00:09:02 :: hupsig: SIGHUP, SIGINT, SIGTERM signal has been received. shutting down.
    SYSERR: Jul 21 00:09:02 :: ChildLoop: AsyncSQL: query failed: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) (query: UPDATE player SET job = 0, voice = 0, dir = 0, x = 967043, y = 277374, z = 0, map_index = 41, exit_x = 967043, exit_y = 277374, exit_map_index = 41, hp = 10242, mp = 2340, stamina = 1270, random_hp = 4472, random_sp = 2080, playtime = 129, level = 105, level_step = 1, st = 6, ht = 4, dx = 3, iq = 3, gold = 1520742597, exp = 1434031, stat_point = 268, skill_point = 0, sub_skill_point = 24, stat_reset_count = 0, ip = '78.31.62.197', part_main = 41121, part_hair = 5024, last_play = NOW(), skill_group = 0, alignment = 139, horse_level = 21, horse_riding = 0, horse_hp = 35, horse_hp_droptime = 1500803243, horse_stamina = 120, horse_skill_point = 0, skill_level = '\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\
    SYSERR: Jul 21 00:09:02 :: ChildLoop: AsyncSQL: retrying
    SYSERR: Jul 21 00:09:02 :: ChildLoop: AsyncSQL: query failed: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) (query: UPDATE player SET job = 0, voice = 0, dir = 0, x = 967043, y = 277374, z = 0, map_index = 41, exit_x = 967043, exit_y = 277374, exit_map_index = 41, hp = 10242, mp = 2340, stamina = 1270, random_hp = 4472, random_sp = 2080, playtime = 129, level = 105, level_step = 1, st = 6, ht = 4, dx = 3, iq = 3, gold = 1520742597, exp = 1434031, stat_point = 268, skill_point = 0, sub_skill_point = 24, stat_reset_count = 0, ip = '78.31.62.197', part_main = 41121, part_hair = 5024, last_play = NOW(), skill_group = 0, alignment = 139, horse_level = 21, horse_riding = 0, horse_hp = 35, horse_hp_droptime = 1500803243, horse_stamina = 120, horse_skill_point = 0, skill_level = '\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\
    SYSERR: Jul 21 00:09:02 :: ChildLoop: AsyncSQL: retrying
    SYSERR: Jul 21 00:09:02 :: pid_deinit: 
    End of pid
    
    SYSERR: Jul 21 00:10:39 :: pid_init: 
    Start of pid: 883
    
    SYSERR: Jul 21 00:10:39 :: Start: TABLE_POSTFIX not configured use default
    SYSERR: Jul 21 00:10:42 :: Load:  DirectQuery failed(SELECT IP_FROM, IP_TO, COUNTRY_NAME FROM iptocountry)
    SYSERR: Jul 21 07:56:03 :: Process: FDWATCH: peer null in event: ident 20
    

    Syslog ch1 -> 

    SYSERR: Jul 20 23:37:42 :: pid_init: 
    Start of pid: 1087
    
    Jul 20 23:37:42 :: SYSTEM: BINDING TCP PORT ON [49227] (fd 9)
    Jul 20 23:37:42 :: SYSTEM: BINDING UDP PORT ON [49227] (fd 10)
    Jul 20 23:37:42 :: SYSTEM: BINDING TCP PORT ON [50000] (fd 11)
    Jul 20 23:37:42 :: SYSTEM: Trying to connect to localhost:15000
    Jul 20 23:37:42 :: SYSTEM: connected to server (fd 12, ptr 0x28d23600)
    Jul 20 23:37:42 :: DB_SETUP current user 0 size 58
    Jul 20 23:37:42 :: PARTY Enable
    Jul 20 23:37:42 :: SPAM_CONFIG: duration 10 score 10 reload cycle 60
    

    syserr ch1 -> 

    SYSERR: Jul 20 23:37:42 :: pid_init: 
    Start of pid: 1087
    
    SYSERR: Jul 20 23:37:42 :: main: Failed to Load ClientPackageCryptInfo File(package/)
    SYSERR: Jul 20 23:37:44 :: regen_load: No mob data by vnum 9999
    SYSERR: Jul 20 23:37:53 :: GetMotionFileName: Motion: phoenix1 have not motlist.txt vnum(34001) folder(phoenix1)
    SYSERR: Jul 20 23:37:53 :: GetMotionFileName: Motion: phoenix1 have not motlist.txt vnum(34001) folder(phoenix1)
    SYSERR: Jul 20 23:37:53 :: GetMotionFileName: Motion: phoenix1 have not motlist.txt vnum(34001) folder(phoenix1)
    SYSERR: Jul 20 23:37:53 :: GetMotionFileName: Motion: reindeer_young have not motlist.txt vnum(34002) folder(reindeer_young)
    SYSERR: Jul 20 23:37:53 :: GetMotionFileName: Motion: reindeer_young have not motlist.txt vnum(34002) folder(reindeer_young)
    SYSERR: Jul 20 23:37:53 :: GetMotionFileName: Motion: reindeer_young have not motlist.txt vnum(34002) folder(reindeer_young)
    SYSERR: Jul 20 23:37:53 :: GetMotionFileName: Motion: phoenix2 have not motlist.txt vnum(34003) folder(phoenix2)
    SYSERR: Jul 20 23:37:53 :: GetMotionFileName: Motion: phoenix2 have not motlist.txt vnum(34003) folder(phoenix2)
    SYSERR: Jul 20 23:37:53 :: GetMotionFileName: Motion: phoenix2 have not motlist.txt vnum(34003) folder(phoenix2)
    SYSERR: Jul 20 23:38:19 :: dungeon_get_flag: no dungeon !!!
    SYSERR: Jul 20 23:38:19 :: dungeon_set_flag: no dungeon !!!
    SYSERR: Jul 20 23:41:17 :: dungeon_get_flag: no dungeon !!!
    SYSERR: Jul 20 23:41:17 :: dungeon_set_flag: no dungeon !!!
    SYSERR: Jul 20 23:41:20 :: Process: SEQUENCE 3a625800 mismatch 0xaf != 0x64 header 254
    SYSERR: Jul 20 23:41:20 :: Process: SEQUENCE_LOG [UNKNOWN]-------------
    	[254 : 0xaf]
    
    SYSERR: Jul 20 23:41:54 :: dungeon_get_flag: no dungeon !!!
    SYSERR: Jul 20 23:41:54 :: dungeon_set_flag: no dungeon !!!
    SYSERR: Jul 20 23:42:23 :: dungeon_get_flag: no dungeon !!!
    SYSERR: Jul 20 23:42:23 :: dungeon_set_flag: no dungeon !!!
    SYSERR: Jul 20 23:45:23 :: Process: SEQUENCE 3b343400 mismatch 0xaf != 0x64 header 254
    SYSERR: Jul 20 23:45:23 :: Process: SEQUENCE_LOG [UNKNOWN]-------------
    	[254 : 0xaf]
    

    syslog auth -> 

    SYSERR: Jul 21 00:05:06 :: pid_init: 
    Start of pid: 1246
    
    SYSERR: Jul 21 00:05:06 :: socket_bind: bind: Address already in use
    Jul 21 00:05:06 :: AsyncSQL: closing mysql connection.
    Jul 21 00:05:06 :: AsyncSQL: closing mysql connection.
    Jul 21 00:05:06 :: AsyncSQL: closing mysql connection.
    Jul 21 00:05:06 :: AsyncSQL: closing mysql connection.
    Jul 21 00:05:06 :: AsyncSQL: closing mysql connection.
    Jul 21 00:06:02 :: SYSTEM: new connection from [86.106.74.39] fd: 16 handshake 4158105429 output input_len 0, ptr 0x28d0cc00
    Jul 21 00:06:02 :: Handshake: client_time 0 server_time 1702885
    Jul 21 00:06:03 :: AUTH_PHASE 0x28d0cc00
    Jul 21 00:06:03 :: InputAuth::Login : geniul120(9) desc 0x28d0cc00
    Jul 21 00:06:03 :: SetLoginKey 471272469
    Jul 21 00:06:03 :: InputAuth::Login : key 471272469:0x36b84f77 login geniul120
    Jul 21 00:06:03 :: QID_AUTH_LOGIN: START 471272469 0x28d0cc00
    Jul 21 00:06:03 :: Create_Time 1500582666 20170720
    Jul 21 00:06:03 :: Block Time -1 
    Jul 21 00:06:03 :: SetRemainSecs geniul120 0 type 2
    Jul 21 00:06:03 :: SendAuthLogin geniul120 key 162937
    Jul 21 00:06:03 :: AuthLogin result 1 key 471272469
    Jul 21 00:06:03 :: SYSTEM: closing socket. DESC #16
    Jul 21 00:06:15 :: SYSTEM: new connection from [86.106.74.39] fd: 16 handshake 1536276654 output input_len 0, ptr 0x28d0cc00
    Jul 21 00:06:15 :: Handshake: client_time 0 server_time 1715265
    Jul 21 00:06:15 :: AUTH_PHASE 0x28d0cc00
    Jul 21 00:06:15 :: InputAuth::Login : geniul120(9) desc 0x28d0cc00
    Jul 21 00:06:15 :: SetLoginKey 1392408494
    Jul 21 00:06:15 :: InputAuth::Login : key 1392408494:0x5e491101 login geniul120
    Jul 21 00:06:15 :: QID_AUTH_LOGIN: START 1392408494 0x28d0cc00
    Jul 21 00:06:15 :: Create_Time 1500582666 20170720
    Jul 21 00:06:15 :: Block Time -1 
    Jul 21 00:06:15 :: SetRemainSecs geniul120 0 type 2
    Jul 21 00:06:15 :: SendAuthLogin geniul120 key 162937
    Jul 21 00:06:15 :: AuthLogin result 1 key 1392408494
    Jul 21 00:06:15 :: SYSTEM: closing socket. DESC #16
    Jul 21 00:07:24 :: SYSTEM: new connection from [86.106.74.39] fd: 16 handshake 2165957435 output input_len 0, ptr 0x28d0cc00
    Jul 21 00:07:24 :: Handshake: client_time 0 server_time 1784605
    Jul 21 00:07:24 :: AUTH_PHASE 0x28d0cc00
    Jul 21 00:07:24 :: InputAuth::Login : geniul120(9) desc 0x28d0cc00
    Jul 21 00:07:24 :: SetLoginKey 366613942
    Jul 21 00:07:24 :: InputAuth::Login : key 366613942:0x2cf119d9 login geniul120
    Jul 21 00:07:24 :: QID_AUTH_LOGIN: START 366613942 0x28d0cc00
    Jul 21 00:07:24 :: Create_Time 1500582666 20170720
    Jul 21 00:07:24 :: Block Time -1 
    Jul 21 00:07:24 :: SetRemainSecs geniul120 0 type 2
    Jul 21 00:07:24 :: SendAuthLogin geniul120 key 162937
    Jul 21 00:07:25 :: AuthLogin result 1 key 366613942
    Jul 21 00:07:25 :: SYSTEM: closing socket. DESC #16
    Jul 21 00:08:41 :: SYSTEM: new connection from [86.106.74.39] fd: 16 handshake 1645637242 output input_len 0, ptr 0x28d0cc00
    Jul 21 00:08:41 :: Handshake: client_time 0 server_time 1861185
    Jul 21 00:08:41 :: AUTH_PHASE 0x28d0cc00
    Jul 21 00:08:41 :: InputAuth::Login : geniul120(9) desc 0x28d0cc00
    Jul 21 00:08:41 :: SetLoginKey 1780092154
    Jul 21 00:08:41 :: InputAuth::Login : key 1780092154:0x62dd021c login geniul120
    Jul 21 00:08:41 :: QID_AUTH_LOGIN: START 1780092154 0x28d0cc00
    Jul 21 00:08:41 :: Create_Time 1500582666 20170720
    Jul 21 00:08:41 :: Block Time -1 
    Jul 21 00:08:41 :: SetRemainSecs geniul120 0 type 2
    Jul 21 00:08:41 :: SendAuthLogin geniul120 key 162937
    Jul 21 00:08:41 :: AuthLogin result 1 key 1780092154
    Jul 21 00:08:41 :: SYSTEM: closing socket. DESC #16
    SYSERR: Jul 21 00:09:02 :: hupsig: SIGHUP, SIGINT, SIGTERM signal has been received. shutting down.
    Jul 21 00:09:02 :: <shutdown> Starting...
    Jul 21 00:09:02 :: SetRemainSecs dragoscristi44 0 type 2
    Jul 21 00:09:02 :: BILLING: PUSH dragoscristi44 1601 type 2
    Jul 21 00:09:02 :: FLUSH_USE_TIME: count 1
    Jul 21 00:09:02 :: Queries 0
    Jul 21 00:09:02 :: <shutdown> Destroying CArenaManager...
    Jul 21 00:09:02 :: <shutdown> Destroying COXEventManager...
    Jul 21 00:09:02 :: <shutdown> Disabling signal timer...
    Jul 21 00:09:02 :: <shutdown> Shutting down CHARACTER_MANAGER...
    Jul 21 00:09:02 :: <shutdown> Shutting down ITEM_MANAGER...
    Jul 21 00:09:02 :: <shutdown> Flushing db_clientdesc...
    Jul 21 00:09:02 :: FLUSH START 46
    Jul 21 00:09:02 :: FLUSH SUCCESS
    Jul 21 00:09:03 :: <shutdown> Flushing p2p_manager...
    Jul 21 00:09:03 :: <shutdown> Destroying CShopManager...
    Jul 21 00:09:03 :: <shutdown> Destroying CHARACTER_MANAGER...
    Jul 21 00:09:03 :: <shutdown> Destroying ITEM_MANAGER...
    Jul 21 00:09:03 :: <shutdown> Destroying DESC_MANAGER...
    Jul 21 00:09:03 :: PARTY Disable
    Jul 21 00:09:03 :: BILLING: OFF geniul120 key 143661000 ptr 0x28d7f320
    Jul 21 00:09:03 :: DeleteLoginData geniul120 0x28d7f320
    Jul 21 00:09:03 :: BILLING: OFF geniul120 key 315852977 ptr 0x28d7f390
    Jul 21 00:09:03 :: DeleteLoginData geniul120 0x28d7f390
    Jul 21 00:09:03 :: BILLING: OFF geniul120 key 366613942 ptr 0x28d7f5c0
    Jul 21 00:09:03 :: DeleteLoginData geniul120 0x28d7f5c0
    Jul 21 00:09:03 :: BILLING: OFF geniul120 key 471272469 ptr 0x28d7f4e0
    Jul 21 00:09:03 :: DeleteLoginData geniul120 0x28d7f4e0
    Jul 21 00:09:03 :: BILLING: OFF geniul120 key 927621280 ptr 0x28d7f400
    Jul 21 00:09:03 :: DeleteLoginData geniul120 0x28d7f400
    Jul 21 00:09:03 :: BILLING: OFF geniul120 key 1000687025 ptr 0x28d7f470
    Jul 21 00:09:03 :: DeleteLoginData geniul120 0x28d7f470
    Jul 21 00:09:03 :: BILLING: OFF geniul120 key 1143423877 ptr 0x28d7f2b0
    Jul 21 00:09:03 :: DeleteLoginData geniul120 0x28d7f2b0
    Jul 21 00:09:03 :: BILLING: OFF geniul120 key 1392408494 ptr 0x28d7f550
    Jul 21 00:09:03 :: DeleteLoginData geniul120 0x28d7f550
    Jul 21 00:09:03 :: BILLING: OFF geniul120 key 1406382534 ptr 0x28d7f240
    Jul 21 00:09:03 :: DeleteLoginData geniul120 0x28d7f240
    Jul 21 00:09:03 :: BILLING: OFF geniul120 key 1780092154 ptr 0x28d7f630
    Jul 21 00:09:03 :: BILLING: OFF dragoscristi44 key 1887901150 ptr 0x28d7f1d0
    Jul 21 00:09:03 :: BILLING: OFF edededdy key 2118320098 ptr 0x28d7f160
    Jul 21 00:09:03 :: SYSTEM: closing client socket. DESC #15
    Jul 21 00:09:03 :: <shutdown> Destroying quest::CQuestManager...
    Jul 21 00:09:03 :: <shutdown> Destroying building::CManager...
    Jul 21 00:09:03 :: <shutdown> Flushing TrafficProfiler...
    Jul 21 00:09:03 :: <shutdown> Canceling ReloadSpamEvent...
    Jul 21 00:09:03 :: <shutdown> regen_free()...
    Jul 21 00:09:03 :: <shutdown> Closing sockets...
    Jul 21 00:09:03 :: <shutdown> fdwatch_delete()...
    Jul 21 00:09:03 :: <shutdown> event_destroy()...
    Jul 21 00:09:03 :: <shutdown> CTextFileLoader::DestroySystem()...
    Jul 21 00:09:03 :: <shutdown> thecore_destroy()...
    SYSERR: Jul 21 00:09:03 :: pid_deinit: 
    End of pid
    

    syserr auth -> 

    SYSERR: Jul 21 00:05:06 :: pid_init: 
    Start of pid: 1246
    
    SYSERR: Jul 21 00:05:06 :: socket_bind: bind: Address already in use
    SYSERR: Jul 21 00:09:02 :: hupsig: SIGHUP, SIGINT, SIGTERM signal has been received. shutting down.
    SYSERR: Jul 21 00:09:03 :: pid_deinit: 
    End of pid
    
    SYSERR: Jul 21 00:10:41 :: pid_init: 
    Start of pid: 886
    
    SYSERR: Jul 21 00:10:41 :: socket_connect: HOST 89.42.135.108:15000, could not connect.

    I BEG YOU HELP ME! 

  11. Hello there,

    I don't think so it is possible to run Metin2 server on Linux. I suggest you to cancel what you have bought if possible and try to order a FreeBSD host at Eterhost cheap and good service. -https://eterhost.net/

    Kind Regards, Sonitex

    I don't recommed eterhost. 

    ON: Yes, sure. you can run metin2 on linux.

    You must to compile game and db on linux and you mustt port libthecore.

    and how i must to do it ? well i can't cancel my bought... Because i am in Greece and the only way i can pay it's with paysafecard. So i cannot pay in another country that's why i bought from here... please help!

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