Jump to content

LethalStrikeR

Member
  • Posts

    23
  • Joined

  • Last visited

  • Feedback

    0%

Posts posted by LethalStrikeR

  1. 3 hours ago, Draveniou1 said:

    [ΤΑΒ] in fuctions

    	def __OnClickSelectServerButton(self):
    		if IsFullBackImage():
    			self.GetChild("bg1").Hide()
    			self.GetChild("bg2").Show()
    
    		regionID = self.__GetRegionID()
    		serverID = self.__GetServerID()
    		channelID = self.__GetChannelID()
    
    		if (not serverInfo.REGION_DICT.has_key(regionID)):
    			self.PopupNotifyMessage(localeInfo.CHANNEL_SELECT_REGION)
    			return
    
    		if (not serverInfo.REGION_DICT[regionID].has_key(serverID)):
    			self.PopupNotifyMessage(localeInfo.CHANNEL_SELECT_SERVER)
    			return
    
    		try:
    			channelDict = serverInfo.REGION_DICT[regionID][serverID]["channel"]
    		except KeyError:
    			return
    
    		try:
    			state = channelDict[channelID]["state"]
    		except KeyError:
    			self.PopupNotifyMessage(localeInfo.CHANNEL_SELECT_CHANNEL)
    			return
    
    		if state == serverInfo.STATE_DICT[3]:
    			self.PopupNotifyMessage(localeInfo.CHANNEL_NOTIFY_FULL)
    			return
    
    		self.__SaveChannelInfo()
    
    		try:
    			serverName = serverInfo.REGION_DICT[regionID][serverID]["name"]
    			channelName = serverInfo.REGION_DICT[regionID][serverID]["channel"][channelID]["name"]
    			addrKey = serverInfo.REGION_DICT[regionID][serverID]["channel"][channelID]["key"]
    
    		except:
    			print " ERROR __OnClickSelectServerButton(%d, %d, %d)" % (regionID, serverID, channelID)
    			serverName = localeInfo.CHANNEL_EMPTY_SERVER
    			channelName = localeInfo.CHANNEL_NORMAL % channelID
    
    		if app.BL_MOVE_CHANNEL:
    			net.ClearServerInfo()
    			channelMax = len(serverInfo.REGION_DICT[regionID][serverID]["channel"])
    			for i in xrange(1, channelMax+1):
    				_channelName = serverInfo.REGION_DICT[regionID][serverID]["channel"][i]["name"]
    				net.SetChannelName(i, _channelName.strip())
    				
    			net.SetChannelName(99, localeInfo.MOVE_CHANNEL_99)
    			
    			net.SetChannelName(channelID)
    			net.SetServerName(serverName)
    
    		self.__SetServerInfo("%s, %s " % (serverName, channelName))
    
    		try:
    			ip = serverInfo.REGION_DICT[regionID][serverID]["channel"][channelID]["ip"]
    			tcp_port = serverInfo.REGION_DICT[regionID][serverID]["channel"][channelID]["tcp_port"]
    		except:
    			import exception
    			exception.Abort("LoginWindow.__OnClickSelectServerButton - 서버 선택 실패")
    
    		try:
    			account_ip = serverInfo.REGION_AUTH_SERVER_DICT[regionID][serverID]["ip"]
    			account_port = serverInfo.REGION_AUTH_SERVER_DICT[regionID][serverID]["port"]
    		except:
    			account_ip = 0
    			account_port = 0
    
    		try:
    			markKey = regionID*1000 + serverID*10
    			markAddrValue=serverInfo.MARKADDR_DICT[markKey]
    			net.SetMarkServer(markAddrValue["ip"], markAddrValue["tcp_port"])
    			app.SetGuildMarkPath(markAddrValue["mark"])
    			# GUILD_SYMBOL
    			app.SetGuildSymbolPath(markAddrValue["symbol_path"])
    			# END_OF_GUILD_SYMBOL
    
    		except:
    			import exception
    			exception.Abort("LoginWindow.__OnClickSelectServerButton - 마크 정보 없음")
    
    
    		if app.USE_OPENID and not app.OPENID_TEST :
    			self.stream.SetConnectInfo(ip, tcp_port, account_ip, account_port)
    			self.Connect(0, 0)
    		else :
    			self.stream.SetConnectInfo(ip, tcp_port, account_ip, account_port)
    			self.__OpenLoginBoard()

    That's all function.

  2. I'm getting this error:
    
    0501 05:51:10824 :: Traceback (most recent call last): 0501 05:51:10824 :: File "ui.py", line 1051, in CallEvent
    
    0501 05:51:10824 :: File "ui.py", line 88, in call
    
    0501 05:51:10824 :: File "ui.py", line 70, in call
    
    0501 05:51:10824 :: File "introLogin.py", line 1541, in __OnClickSelectServerButton
    
    0501 05:51:10824 :: KeyError
    
    0501 05:51:10824 :: :
    
    0501 05:51:10824 :: 4
    
    0501 05:51:10824 ::
    

    Someone has this fix? Please help.

     

    		if app.BL_MOVE_CHANNEL:
    			net.ClearServerInfo()
    			channelMax = len(serverInfo.REGION_DICT[regionID][serverID]["channel"])
    			for i in xrange(1, channelMax+1):
    				_channelName = serverInfo.REGION_DICT[regionID][serverID]["channel"][i]["name"]
    				net.SetChannelName(i, _channelName.strip())
    				
    			net.SetChannelName(99, localeInfo.MOVE_CHANNEL_99)
    			
    			net.SetChannelName(channelID)
    			net.SetServerName(serverName)

     

  3. I'm getting this error:

    0501 05:51:10824 :: Traceback (most recent call last): 0501 05:51:10824 :: File "ui.py", line 1051, in CallEvent

    0501 05:51:10824 :: File "ui.py", line 88, in call

    0501 05:51:10824 :: File "ui.py", line 70, in call

    0501 05:51:10824 :: File "introLogin.py", line 1541, in __OnClickSelectServerButton

    0501 05:51:10824 :: KeyError

    0501 05:51:10824 :: :

    0501 05:51:10824 :: 4

    0501 05:51:10824 ::

     

    Someone has this fix? Please help.

  4. Hello everyone, friends;


    I have set up an Ikarus offline shop, but when I press the market opening button, such a syserr appears on the client.

    0208 01:18:25416 :: Phase Game does not handle this header (header: 214, last: 3, 214)

    Although I have changed the number of packets in the Packet.h file many times, I still get this error. There is no problem with kicking it out of the game. Cores don't have syserr. This is the only syserr.

    • Not Good 1
  5. Hello everybody;

    I have syserr. Please help me.

    0206 01:35:11198 :: UISCRIPT_LOAD_ERROR: 'NoneType' object has no attribute 'OFFLINESHOP_EDIT_SHOPNAME_TOOLTIP' [filename uiscript/offlineshopwindow.py]
    0206 01:35:11198 :: Traceback (most recent call last):
    
    0206 01:35:11198 ::   File "networkModule.py", line 236, in SetGamePhase
    
    0206 01:35:11198 ::   File "game.py", line 95, in __init__
    
    0206 01:35:11198 ::   File "interfaceModule.py", line 355, in MakeInterface
    
    0206 01:35:11198 ::   File "interfaceModule.py", line 206, in __MakeWindows
    
    0206 01:35:11198 ::   File "uiofflineshop.py", line 2789, in __init__
    
    0206 01:35:11198 ::   File "uiofflineshop.py", line 2933, in __loadWindow
    
    0206 01:35:11198 ::   File "ui.py", line 4457, in LoadScriptFile
    
    0206 01:35:11198 :: KeyError
    0206 01:35:11198 :: : 
    0206 01:35:11198 :: 'window'
    0206 01:35:11198 :: 
    
    

     

  6. 4 minutes ago, Draveniou1 said:

    Gaya için notepad ++ aramasını açın ve #ifdef'te olmadığı kaldırılabilir  

    Ayrıca gayanız varsa player.MYD'ye bakın ve silin

    #ifndef __INC_METIN2_COMMON_DEFINES_H__
    #define __INC_METIN2_COMMON_DEFINES_H__
    
    enum eCommonDefines {
    	MAP_ALLOW_LIMIT = 64, // 32 default
    };
    
    #define ENABLE_PLAYER_PER_ACCOUNT5
    #define ENABLE_PORT_SECURITY
    
    #define __WJ_SHOW_MOB_INFO__
    #define __SEND_TARGET_INFO__
    #define __SPECIAL_STORAGE__
    #define __7AND8TH_SKILLS__
    #define __TITLE_SYSTEM__
    #define __TIMER_ELIXIR__
    #define __SASH_SYSTEM__
    #define __MULTI_SHOP__
    #define __CHANGE_SEX_WR__
    #define __REFINE_SYSTEM__
    #define __CHANGELOOK_SYSTEM__
    #define __CHANGELOOK_EXTEND__
    #define __EXTENDED_ITEM_NAME__
    #define __EXPANDED_BOOK_NAME__
    #define __WEAPON_COSTUME_SYSTEM__
    #define __COSTUME_ATTR_SYSTEM__
    #define __COSTUME_RING_SYSTEM__
    #define __SEQUENCE_SYSTEM__
    #define __SHOW_CHEST_DROP__
    #define __ATTENDANCE_EVENT__
    #define __ENABLE_BATTLE_FIELD__
    #define __VIEW_TARGET_PLAYER_HP__
    #define __VIEW_TARGET_DECIMAL_HP__
    
    
    #ifndef ENABLE_ANNOUNCEMENT_REFINE_SUCCES
    	#define ENABLE_ANNOUNCEMENT_REFINE_SUCCES
    	#define ENABLE_ANNOUNCEMENT_REFINE_SUCCES_MIN_LEVEL 9
    #endif
    
    #define ENABLE_NEW_QUICK_SLOT_SYSTEM
    #define WJ_ENABLE_PICKUP_ITEM_EFFECT
    #define WJ_ENABLE_TRADABLE_ICON
    
    #define ENABLE_CHANGE_CHANNEL
    #define ENABLE_ANTIEXP_RENEWAL
    #define ENABLE_SORT_INVENTORY
    #define ENABLE_CUBE_RENEWAL
    #define ENABLE_DICE_SYSTEM
    #define ENABLE_GLOBAL_CHAT
    #define ENABLE_FISH_EVENT
    #define ENABLE_NEWSTUFF
    #define ENABLE_PET_SLOT
    #define NEW_PET_SYSTEM
    #define NEW_PET_SUMMON
    
    #define ENABLE_MOUNT_COSTUME_SYSTEM
    #define ENABLE_SUPPORT_SYSTEM
    #define ENABLE_AGGREGATE_MONSTER_EFFECT
    #define ENABLE_FAST_SKILL_CHOOSE
    
    /* SYSTEME PENTRU ADMINISTRARE*/
    #define __WHISPER_ADMIN__
    #define __ADMIN_MANAGER__
    
    
    /* OFFLINE SHOPS */
    #define OFFLINE_SHOP // Offline shops system
    #define GIFT_SYSTEM // gift system enable
    #define FULL_YANG // Enable support for yang type long long
    #define SHOP_TIME_REFRESH 1*60 // time for cycle checking older shops
    #define SHOP_BLOCK_GAME99 //Blocking create shops on channel 99
    //#define SHOP_DISTANCE // Show shops in pos distance like WoM2
    #define SHOP_AUTO_CLOSE //Enable auto closing shop after sell last item
    //#define SHOP_ONLY_ALLOWED_INDEX //Enable limiting for other map index which is not defined in player.shop_limit
    //#define SHOP_HIDE_NAME // Enable hidding shop npc names like "Player's shop"
    #define SHOP_GM_PRIVILEGES GM_IMPLEMENTOR //Minimum GM privileges to using Shop GM Panel
    #define ENABLE_OFFLINE_SHOP_HIDE
    #define SHOP_SEARCH
    #define SHOP_SEARCH_PRICE_MIN //Price in gui is a minimum eq. price >= item_price if is commented price in gui is a maximum
    /* END OFFLINE SHOPS */
    
    /* SYSTEME TEMNITE */
    #define __VERSION_162__
    #ifdef __VERSION_162__
    	#define HEALING_SKILL_VNUM 265
    #endif
    
    #define __DUNGEON_FOR_GUILD__
    #ifdef __DUNGEON_FOR_GUILD__
    	#define __MELEY_LAIR_DUNGEON__
    	#ifdef __MELEY_LAIR_DUNGEON__
    		#define __DESTROY_INFINITE_STATUES_GM__
    		#define __LASER_EFFECT_ON_75HP__
    		#define __LASER_EFFECT_ON_50HP__
    	#endif
    #endif
    /* END SYSTEME TEMNITE */
    
    // #define ENABLE_GEM_SYSTEM
    // #define __SKILLS_LEVEL_OVER_P__
    // #define WJ_GUILD_LEADER_SYSTEM
    
    #endif

    It's already deactivated. I've enclosed all gems that don't have #if def in #if def. There were 95 gayas in one account, I'll try to delete it and deactivate it again.

  7. 4 minutes ago, Draveniou1 said:
    void CClientManager::__QUERY_PLAYER_CREATE(CPeer *peer, DWORD dwHandle, TPlayerCreatePacket* packet)
    {
    	char	queryStr[QUERY_MAX_LEN];
    	int		queryLen;
    	int		player_id;
    
    	// ? ??? X? ?? ??? ??? ? ? ??.
    	time_by_id_map_t::iterator it = s_createTimeByAccountID.find(packet->account_id);
    
    	if (it != s_createTimeByAccountID.end())
    	{
    		time_t curtime = time(0);
    
    		if (curtime - it->second < 30)
    		{
    			peer->EncodeHeader(HEADER_DG_PLAYER_CREATE_FAILED, dwHandle, 0);
    			return;
    		}
    	}
    
    	queryLen = snprintf(queryStr, sizeof(queryStr),
    			"SELECT pid%u FROM player_index%s WHERE id=%d", packet->account_index + 1, GetTablePostfix(), packet->account_id);
    
    	std::unique_ptr<SQLMsg> pMsg0(CDBManager::instance().DirectQuery(queryStr));
    
    	if (pMsg0->Get()->uiNumRows != 0)
    	{
    		if (!pMsg0->Get()->pSQLResult)
    		{
    			peer->EncodeHeader(HEADER_DG_PLAYER_CREATE_FAILED, dwHandle, 0);
    			return;
    		}
    
    		MYSQL_ROW row = mysql_fetch_row(pMsg0->Get()->pSQLResult);
    
    		DWORD dwPID = 0; str_to_number(dwPID, row[0]);
    		if (row[0] && dwPID > 0)
    		{
    			peer->EncodeHeader(HEADER_DG_PLAYER_CREATE_ALREADY, dwHandle, 0);
    			sys_log(0, "ALREADY EXIST AccountChrIdx %d ID %d", packet->account_index, dwPID);
    			return;
    		}
    	}
    	else
    	{
    		peer->EncodeHeader(HEADER_DG_PLAYER_CREATE_FAILED, dwHandle, 0);
    		return;
    	}
    
    	if (g_stLocale == "sjis")
    		snprintf(queryStr, sizeof(queryStr),
    			"SELECT COUNT(*) as count FROM player%s WHERE name='%s' collate sjis_japanese_ci",
    			GetTablePostfix(), packet->player_table.name);
    	else
    	snprintf(queryStr, sizeof(queryStr),
    			"SELECT COUNT(*) as count FROM player%s WHERE name='%s'", GetTablePostfix(), packet->player_table.name);
    
    	std::unique_ptr<SQLMsg> pMsg1(CDBManager::instance().DirectQuery(queryStr));
    
    	if (pMsg1->Get()->uiNumRows)
    	{
    		if (!pMsg1->Get()->pSQLResult)
    		{
    			peer->EncodeHeader(HEADER_DG_PLAYER_CREATE_FAILED, dwHandle, 0);
    			return;
    		}
    
    		MYSQL_ROW row = mysql_fetch_row(pMsg1->Get()->pSQLResult);
    
    		if (*row[0] != '0')
    		{
    			sys_log(0, "ALREADY EXIST name %s, row[0] %s query %s", packet->player_table.name, row[0], queryStr);
    			peer->EncodeHeader(HEADER_DG_PLAYER_CREATE_ALREADY, dwHandle, 0);
    			return;
    		}
    	}
    	else
    	{
    		peer->EncodeHeader(HEADER_DG_PLAYER_CREATE_FAILED, dwHandle, 0);
    		return;
    	}
    
    	queryLen = snprintf(queryStr, sizeof(queryStr),
    			"INSERT INTO player%s "
    			"(id, account_id, name, level, st, ht, dx, iq, "
    			"job, voice, dir, x, y, z, "
    			"hp, mp, random_hp, random_sp, stat_point, stamina, part_base, "
    			"part_main, part_hair, part_sash, gold, "
    #ifdef __ENABLE_BATTLE_FIELD__
    			"battle_points, "
    #endif
    			"playtime, skill_level, "
    #ifdef ENABLE_FISH_EVENT
    			"fish_slots, "
    #endif
    			"quickslot) "
    			"VALUES(0, %u, '%s', %d, %d, %d, %d, %d, "	// id, account_id, name, level, st, ht, dx, iq,
    			"%d, %d, %d, %d, %d, %d, " 					// job, voice, dir, x, y, z,
    			"%d, %d, %d, %d, %d, %d, %d, "			// hp, mp, random_hp, random_sp, stat_point, stamina, part_base,
    			"0, 0, 0, %lld, "								// part_main, part_hair, part_sash, gold,
    #ifdef __ENABLE_BATTLE_FIELD__
    			"%d, "
    #endif
    			"0, "
    			"%d, "
    #ifdef ENABLE_FISH_EVENT
    			"%d, "
    #endif
    			"0, ",
    			GetTablePostfix(),
    			packet->account_id, packet->player_table.name, packet->player_table.level, packet->player_table.st, packet->player_table.ht, packet->player_table.dx, packet->player_table.iq,
    			packet->player_table.job, packet->player_table.voice, packet->player_table.dir, packet->player_table.x, packet->player_table.y, packet->player_table.z,
    			packet->player_table.hp, packet->player_table.sp, packet->player_table.sRandomHP, packet->player_table.sRandomSP, packet->player_table.stat_point, packet->player_table.stamina, packet->player_table.part_base, packet->player_table.part_base, packet->player_table.gold
    #ifdef __ENABLE_BATTLE_FIELD__
    			,packet->player_table.battlePoint
    #endif
    			);
    
    	sys_log(0, "PlayerCreate accountid %d name %s level %d gold %lld, st %d ht %d job %d",
    			packet->account_id,
    			packet->player_table.name,
    			packet->player_table.level,
    			packet->player_table.gold,
    			packet->player_table.st,
    			packet->player_table.ht,
    			packet->player_table.job);
    
    	static char text[4096 + 1];
    
    	CDBManager::instance().EscapeString(text, packet->player_table.skills, sizeof(packet->player_table.skills));
    	queryLen += snprintf(queryStr + queryLen, sizeof(queryStr) - queryLen, "'%s', ", text);
    	if (g_test_server)
    		sys_log(0, "Create_Player queryLen[%d] TEXT[%s]", queryLen, text);
    	CDBManager::instance().EscapeString(text, packet->player_table.quickslot, sizeof(packet->player_table.quickslot));
    	queryLen += snprintf(queryStr + queryLen, sizeof(queryStr) - queryLen, "'%s')", text);
    
    	std::unique_ptr<SQLMsg> pMsg2(CDBManager::instance().DirectQuery(queryStr));
    	if (g_test_server)
    		sys_log(0, "Create_Player queryLen[%d] TEXT[%s]", queryLen, text);
    
    	if (pMsg2->Get()->uiAffectedRows <= 0)
    	{
    		peer->EncodeHeader(HEADER_DG_PLAYER_CREATE_ALREADY, dwHandle, 0);
    		sys_log(0, "ALREADY EXIST3 query: %s AffectedRows %lu", queryStr, pMsg2->Get()->uiAffectedRows);
    		return;
    	}
    
    	player_id = pMsg2->Get()->uiInsertID;
    
    	snprintf(queryStr, sizeof(queryStr), "UPDATE player_index%s SET pid%d=%d WHERE id=%d",
    			GetTablePostfix(), packet->account_index + 1, player_id, packet->account_id);
    	std::unique_ptr<SQLMsg> pMsg3(CDBManager::instance().DirectQuery(queryStr));
    
    	if (pMsg3->Get()->uiAffectedRows <= 0)
    	{
    		sys_err("QUERY_ERROR: %s", queryStr);
    
    		snprintf(queryStr, sizeof(queryStr), "DELETE FROM player%s WHERE id=%d", GetTablePostfix(), player_id);
    		CDBManager::instance().DirectQuery(queryStr);
    
    		peer->EncodeHeader(HEADER_DG_PLAYER_CREATE_FAILED, dwHandle, 0);
    		return;
    	}
    
    	TPacketDGCreateSuccess pack;
    	memset(&pack, 0, sizeof(pack));
    
    	pack.bAccountCharacterIndex = packet->account_index;
    
    	pack.player.dwID			= player_id;
    	strlcpy(pack.player.szName, packet->player_table.name, sizeof(pack.player.szName));
    	pack.player.byJob			= packet->player_table.job;
    	pack.player.byLevel			= 1;
    	pack.player.dwPlayMinutes	= 0;
    	pack.player.byST			= packet->player_table.st;
    	pack.player.byHT			= packet->player_table.ht;
    	pack.player.byDX 			= packet->player_table.dx;
    	pack.player.byIQ			= packet->player_table.iq;
    	pack.player.wMainPart		= packet->player_table.part_base;
    	pack.player.x			= packet->player_table.x;
    	pack.player.y			= packet->player_table.y;
    
    	peer->EncodeHeader(HEADER_DG_PLAYER_CREATE_SUCCESS, dwHandle, sizeof(TPacketDGCreateSuccess));
    	peer->Encode(&pack, sizeof(TPacketDGCreateSuccess));
    
    	sys_log(0, "7 name %s job %d", pack.player.szName, pack.player.byJob);
    
    	s_createTimeByAccountID[packet->account_id] = time(0);
    }

     

    solver @LethalStrikeR

    Unfortunately it still gave the same error.

     

    SYSERR: Jan 29 21:03:31 :: DirectQuery: AsyncSQL::DirectQuery : mysql_query error: Column count doesn't match value count at row 1
    query: INSERT INTO player  (id, account_id, name, level, st, ht, dx, iq, job, voice, dir, x, y, z, hp, mp, random_hp, random_sp, stat_point, stamina, part_base, part_main, part_hair, part_sash, gold, battle_points, playtime, skill_level, fish_slots, quickslot) VALUES(0, 1, '12312323', 1, 6, 4, 3, 3, 0, 0, 0, 957317, 255360, 0, 760, 260, 0, 0, 0, 800, 0, 0, 0, 0, 0, 0, 0, 0, 681656320, 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\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\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: Jan 29 21:03:31 :: __QUERY_PLAYER_CREATE: QUERY_ERROR: UPDATE player_index  SET pid4=0 WHERE id=1

     

  8. 9 minutes ago, Draveniou1 said:
    void CClientManager::__QUERY_PLAYER_CREATE(CPeer *peer, DWORD dwHandle, TPlayerCreatePacket* packet)
    {
    	char	queryStr[QUERY_MAX_LEN];
    	int		queryLen;
    	int		player_id;
    
    	// ? ??? X? ?? ??? ??? ? ? ??.
    	time_by_id_map_t::iterator it = s_createTimeByAccountID.find(packet->account_id);
    
    	if (it != s_createTimeByAccountID.end())
    	{
    		time_t curtime = time(0);
    
    		if (curtime - it->second < 30)
    		{
    			peer->EncodeHeader(HEADER_DG_PLAYER_CREATE_FAILED, dwHandle, 0);
    			return;
    		}
    	}
    
    	queryLen = snprintf(queryStr, sizeof(queryStr),
    			"SELECT pid%u FROM player_index%s WHERE id=%d", packet->account_index + 1, GetTablePostfix(), packet->account_id);
    
    	std::unique_ptr<SQLMsg> pMsg0(CDBManager::instance().DirectQuery(queryStr));
    
    	if (pMsg0->Get()->uiNumRows != 0)
    	{
    		if (!pMsg0->Get()->pSQLResult)
    		{
    			peer->EncodeHeader(HEADER_DG_PLAYER_CREATE_FAILED, dwHandle, 0);
    			return;
    		}
    
    		MYSQL_ROW row = mysql_fetch_row(pMsg0->Get()->pSQLResult);
    
    		DWORD dwPID = 0; str_to_number(dwPID, row[0]);
    		if (row[0] && dwPID > 0)
    		{
    			peer->EncodeHeader(HEADER_DG_PLAYER_CREATE_ALREADY, dwHandle, 0);
    			sys_log(0, "ALREADY EXIST AccountChrIdx %d ID %d", packet->account_index, dwPID);
    			return;
    		}
    	}
    	else
    	{
    		peer->EncodeHeader(HEADER_DG_PLAYER_CREATE_FAILED, dwHandle, 0);
    		return;
    	}
    
    	if (g_stLocale == "sjis")
    		snprintf(queryStr, sizeof(queryStr),
    			"SELECT COUNT(*) as count FROM player%s WHERE name='%s' collate sjis_japanese_ci",
    			GetTablePostfix(), packet->player_table.name);
    	else
    	snprintf(queryStr, sizeof(queryStr),
    			"SELECT COUNT(*) as count FROM player%s WHERE name='%s'", GetTablePostfix(), packet->player_table.name);
    
    	std::unique_ptr<SQLMsg> pMsg1(CDBManager::instance().DirectQuery(queryStr));
    
    	if (pMsg1->Get()->uiNumRows)
    	{
    		if (!pMsg1->Get()->pSQLResult)
    		{
    			peer->EncodeHeader(HEADER_DG_PLAYER_CREATE_FAILED, dwHandle, 0);
    			return;
    		}
    
    		MYSQL_ROW row = mysql_fetch_row(pMsg1->Get()->pSQLResult);
    
    		if (*row[0] != '0')
    		{
    			sys_log(0, "ALREADY EXIST name %s, row[0] %s query %s", packet->player_table.name, row[0], queryStr);
    			peer->EncodeHeader(HEADER_DG_PLAYER_CREATE_ALREADY, dwHandle, 0);
    			return;
    		}
    	}
    	else
    	{
    		peer->EncodeHeader(HEADER_DG_PLAYER_CREATE_FAILED, dwHandle, 0);
    		return;
    	}
    
    	queryLen = snprintf(queryStr, sizeof(queryStr),
    			"INSERT INTO player%s "
    			"(id, account_id, name, level, st, ht, dx, iq, "
    			"job, voice, dir, x, y, z, "
    			"hp, mp, random_hp, random_sp, stat_point, stamina, part_base, "
    			"part_main, part_hair, part_sash, gold, "
    #ifdef __ENABLE_BATTLE_FIELD__
    			"battle_points, "
    #endif
    			"playtime, skill_level, "
    #ifdef ENABLE_FISH_EVENT
    			"fish_slots, "
    #endif
    			"quickslot) "
    			"VALUES(0, %u, '%s', %d, %d, %d, %d, %d, "	// id, account_id, name, level, st, ht, dx, iq,
    			"%d, %d, %d, %d, %d, %d, " 					// job, voice, dir, x, y, z,
    			"%d, %d, %d, %d, %d, %d, %d, "			// hp, mp, random_hp, random_sp, stat_point, stamina, part_base,
    			"0, 0, 0, %lld, "								// part_main, part_hair, part_sash, gold,
    #ifdef __ENABLE_BATTLE_FIELD__
    			"%d, "
    #endif
    			"0, "
    			"%d, "
    #ifdef ENABLE_FISH_EVENT
    			"%d, "
    #endif
    			"0, "
    			GetTablePostfix(),
    			packet->account_id, packet->player_table.name, packet->player_table.level, packet->player_table.st, packet->player_table.ht, packet->player_table.dx, packet->player_table.iq,
    			packet->player_table.job, packet->player_table.voice, packet->player_table.dir, packet->player_table.x, packet->player_table.y, packet->player_table.z,
    			packet->player_table.hp, packet->player_table.sp, packet->player_table.sRandomHP, packet->player_table.sRandomSP, packet->player_table.stat_point, packet->player_table.stamina, packet->player_table.part_base, packet->player_table.part_base, packet->player_table.gold
    #ifdef __ENABLE_BATTLE_FIELD__
    			,packet->player_table.battlePoint
    #endif
    			);
    
    	sys_log(0, "PlayerCreate accountid %d name %s level %d gold %lld, st %d ht %d job %d",
    			packet->account_id,
    			packet->player_table.name,
    			packet->player_table.level,
    			packet->player_table.gold,
    			packet->player_table.st,
    			packet->player_table.ht,
    			packet->player_table.job);
    
    	static char text[4096 + 1];
    
    	CDBManager::instance().EscapeString(text, packet->player_table.skills, sizeof(packet->player_table.skills));
    	queryLen += snprintf(queryStr + queryLen, sizeof(queryStr) - queryLen, "'%s', ", text);
    	if (g_test_server)
    		sys_log(0, "Create_Player queryLen[%d] TEXT[%s]", queryLen, text);
    	CDBManager::instance().EscapeString(text, packet->player_table.quickslot, sizeof(packet->player_table.quickslot));
    	queryLen += snprintf(queryStr + queryLen, sizeof(queryStr) - queryLen, "'%s')", text);
    
    	std::unique_ptr<SQLMsg> pMsg2(CDBManager::instance().DirectQuery(queryStr));
    	if (g_test_server)
    		sys_log(0, "Create_Player queryLen[%d] TEXT[%s]", queryLen, text);
    
    	if (pMsg2->Get()->uiAffectedRows <= 0)
    	{
    		peer->EncodeHeader(HEADER_DG_PLAYER_CREATE_ALREADY, dwHandle, 0);
    		sys_log(0, "ALREADY EXIST3 query: %s AffectedRows %lu", queryStr, pMsg2->Get()->uiAffectedRows);
    		return;
    	}
    
    	player_id = pMsg2->Get()->uiInsertID;
    
    	snprintf(queryStr, sizeof(queryStr), "UPDATE player_index%s SET pid%d=%d WHERE id=%d",
    			GetTablePostfix(), packet->account_index + 1, player_id, packet->account_id);
    	std::unique_ptr<SQLMsg> pMsg3(CDBManager::instance().DirectQuery(queryStr));
    
    	if (pMsg3->Get()->uiAffectedRows <= 0)
    	{
    		sys_err("QUERY_ERROR: %s", queryStr);
    
    		snprintf(queryStr, sizeof(queryStr), "DELETE FROM player%s WHERE id=%d", GetTablePostfix(), player_id);
    		CDBManager::instance().DirectQuery(queryStr);
    
    		peer->EncodeHeader(HEADER_DG_PLAYER_CREATE_FAILED, dwHandle, 0);
    		return;
    	}
    
    	TPacketDGCreateSuccess pack;
    	memset(&pack, 0, sizeof(pack));
    
    	pack.bAccountCharacterIndex = packet->account_index;
    
    	pack.player.dwID			= player_id;
    	strlcpy(pack.player.szName, packet->player_table.name, sizeof(pack.player.szName));
    	pack.player.byJob			= packet->player_table.job;
    	pack.player.byLevel			= 1;
    	pack.player.dwPlayMinutes	= 0;
    	pack.player.byST			= packet->player_table.st;
    	pack.player.byHT			= packet->player_table.ht;
    	pack.player.byDX 			= packet->player_table.dx;
    	pack.player.byIQ			= packet->player_table.iq;
    	pack.player.wMainPart		= packet->player_table.part_base;
    	pack.player.x			= packet->player_table.x;
    	pack.player.y			= packet->player_table.y;
    
    	peer->EncodeHeader(HEADER_DG_PLAYER_CREATE_SUCCESS, dwHandle, sizeof(TPacketDGCreateSuccess));
    	peer->Encode(&pack, sizeof(TPacketDGCreateSuccess));
    
    	sys_log(0, "7 name %s job %d", pack.player.szName, pack.player.byJob);
    
    	s_createTimeByAccountID[packet->account_id] = time(0);
    }

    All ready

     

     

    ClientManagerPlayer.cpp: In member function 'void CClientManager::__QUERY_PLAYER_CREATE(CPeer*, DWORD, TPlayerCreatePacket*)':
    ClientManagerPlayer.cpp:1025:4: error: expected ')' before 'GetTablePostfix'
        GetTablePostfix(),
        ^
    compiling ItemIDRangeManager.cpp
    compiling ClientManagerHorseName.cpp
    gmake: *** [Makefile:69: .obj/ClientManagerPlayer.o] Error 1
    gmake: *** Waiting for unfinished jobs....
    root@ogstudio:/usr/vlad/Files/db/src #
    

     

  9. 7 minutes ago, Draveniou1 said:

    ClientManangerPlayer.cpp

     

    			"INSERT INTO player "
    			"(id, account_id, name, level, st, ht, dx, iq, "
    			"job, voice, dir, x, y, z, "
    			"hp, mp, random_hp, random_sp, stat_point, stamina, part_base, part_main, part_hair, part_sash, gold, playtime, "
    			"skill_level, quickslot) "
    			"VALUES(0, %u, '%s', %d, %d, %d, %d, %d, "
    			"%d, %d, %d, %d, %d, %d, %d, "
    			"%d, %d, %d, %d, %d, %d, %d, 0, 0, %d, 0, ",
    			packet->account_id, packet->player_table.name, packet->player_table.level, packet->player_table.st, packet->player_table.ht, packet->player_table.dx, packet->player_table.iq,
    			packet->player_table.job, packet->player_table.voice, packet->player_table.dir, packet->player_table.x, packet->player_table.y, packet->player_table.z,
    			packet->player_table.hp, packet->player_table.sp, packet->player_table.sRandomHP, packet->player_table.sRandomSP, packet->player_table.stat_point, packet->player_table.stamina, packet->player_table.part_base, packet->player_table.part_base, packet->player_table.gold

     

     

     

     

    Check         

      "VALUES(0, %u, '%s', %d, %d, %d, %d, %d, "
                "%d, %d, %d, %d, %d, %d, %d, "
                "%d, %d, %d, %d, %d, %d, %d, 0, 0, %d, 0, ",

     

    and remove  %d, or  , 0 

     

    See from buck up where gaya was

     

     

    void CClientManager::__QUERY_PLAYER_CREATE(CPeer *peer, DWORD dwHandle, TPlayerCreatePacket* packet)
    {
    	char	queryStr[QUERY_MAX_LEN];
    	int		queryLen;
    	int		player_id;
    
    	// 한 계정에 X초 내로 캐릭터 생성을 할 수 없다.
    	time_by_id_map_t::iterator it = s_createTimeByAccountID.find(packet->account_id);
    
    	if (it != s_createTimeByAccountID.end())
    	{
    		time_t curtime = time(0);
    
    		if (curtime - it->second < 30)
    		{
    			peer->EncodeHeader(HEADER_DG_PLAYER_CREATE_FAILED, dwHandle, 0);
    			return;
    		}
    	}
    
    	queryLen = snprintf(queryStr, sizeof(queryStr),
    			"SELECT pid%u FROM player_index%s WHERE id=%d", packet->account_index + 1, GetTablePostfix(), packet->account_id);
    
    	std::unique_ptr<SQLMsg> pMsg0(CDBManager::instance().DirectQuery(queryStr));
    
    	if (pMsg0->Get()->uiNumRows != 0)
    	{
    		if (!pMsg0->Get()->pSQLResult)
    		{
    			peer->EncodeHeader(HEADER_DG_PLAYER_CREATE_FAILED, dwHandle, 0);
    			return;
    		}
    
    		MYSQL_ROW row = mysql_fetch_row(pMsg0->Get()->pSQLResult);
    
    		DWORD dwPID = 0; str_to_number(dwPID, row[0]);
    		if (row[0] && dwPID > 0)
    		{
    			peer->EncodeHeader(HEADER_DG_PLAYER_CREATE_ALREADY, dwHandle, 0);
    			sys_log(0, "ALREADY EXIST AccountChrIdx %d ID %d", packet->account_index, dwPID);
    			return;
    		}
    	}
    	else
    	{
    		peer->EncodeHeader(HEADER_DG_PLAYER_CREATE_FAILED, dwHandle, 0);
    		return;
    	}
    
    	if (g_stLocale == "sjis")
    		snprintf(queryStr, sizeof(queryStr),
    			"SELECT COUNT(*) as count FROM player%s WHERE name='%s' collate sjis_japanese_ci",
    			GetTablePostfix(), packet->player_table.name);
    	else
    	snprintf(queryStr, sizeof(queryStr),
    			"SELECT COUNT(*) as count FROM player%s WHERE name='%s'", GetTablePostfix(), packet->player_table.name);
    
    	std::unique_ptr<SQLMsg> pMsg1(CDBManager::instance().DirectQuery(queryStr));
    
    	if (pMsg1->Get()->uiNumRows)
    	{
    		if (!pMsg1->Get()->pSQLResult)
    		{
    			peer->EncodeHeader(HEADER_DG_PLAYER_CREATE_FAILED, dwHandle, 0);
    			return;
    		}
    
    		MYSQL_ROW row = mysql_fetch_row(pMsg1->Get()->pSQLResult);
    
    		if (*row[0] != '0')
    		{
    			sys_log(0, "ALREADY EXIST name %s, row[0] %s query %s", packet->player_table.name, row[0], queryStr);
    			peer->EncodeHeader(HEADER_DG_PLAYER_CREATE_ALREADY, dwHandle, 0);
    			return;
    		}
    	}
    	else
    	{
    		peer->EncodeHeader(HEADER_DG_PLAYER_CREATE_FAILED, dwHandle, 0);
    		return;
    	}
    
    	queryLen = snprintf(queryStr, sizeof(queryStr),
    			"INSERT INTO player%s "
    			"(id, account_id, name, level, st, ht, dx, iq, "
    			"job, voice, dir, x, y, z, "
    			"hp, mp, random_hp, random_sp, stat_point, stamina, part_base, "
    			"part_main, part_hair, part_sash, gold, "
    #ifdef ENABLE_GEM_SYSTEM
    			"gem, "
    #endif
    #ifdef __ENABLE_BATTLE_FIELD__
    			"battle_points, "
    #endif
    			"playtime, skill_level, "
    #ifdef ENABLE_FISH_EVENT
    			"fish_slots, "
    #endif
    #ifdef ENABLE_GEM_SYSTEM
    			"gem_items, "
    #endif
    			"quickslot) "
    			"VALUES(0, %u, '%s', %d, %d, %d, %d, %d, "	// id, account_id, name, level, st, ht, dx, iq,
    			"%d, %d, %d, %d, %d, %d, " 					// job, voice, dir, x, y, z,
    			"%d, %d, %d, %d, %d, %d, %d, "			// hp, mp, random_hp, random_sp, stat_point, stamina, part_base,
    			"0, 0, 0, %lld, "								// part_main, part_hair, part_sash, gold,
    #ifdef ENABLE_GEM_SYSTEM
    			"%d, "
    #endif
    #ifdef __ENABLE_BATTLE_FIELD__
    			"%d, "
    #endif
    			"0, ",										// playtime
    			GetTablePostfix(),
    			packet->account_id, packet->player_table.name, packet->player_table.level, packet->player_table.st, packet->player_table.ht, packet->player_table.dx, packet->player_table.iq,
    			packet->player_table.job, packet->player_table.voice, packet->player_table.dir, packet->player_table.x, packet->player_table.y, packet->player_table.z,
    			packet->player_table.hp, packet->player_table.sp, packet->player_table.sRandomHP, packet->player_table.sRandomSP, packet->player_table.stat_point, packet->player_table.stamina, packet->player_table.part_base, packet->player_table.part_base, packet->player_table.gold
    #ifdef ENABLE_GEM_SYSTEM
    			,packet->player_table.gem
    #endif
    #ifdef __ENABLE_BATTLE_FIELD__
    			,packet->player_table.battlePoint
    #endif
    			);
    
    	sys_log(0, "PlayerCreate accountid %d name %s level %d gold %lld, st %d ht %d job %d",
    			packet->account_id,
    			packet->player_table.name,
    			packet->player_table.level,
    			packet->player_table.gold,
    			packet->player_table.st,
    			packet->player_table.ht,
    			packet->player_table.job);
    
    	static char text[4096 + 1];
    
    	CDBManager::instance().EscapeString(text, packet->player_table.skills, sizeof(packet->player_table.skills));
    	queryLen += snprintf(queryStr + queryLen, sizeof(queryStr) - queryLen, "'%s', ", text);
    	if (g_test_server)
    		sys_log(0, "Create_Player queryLen[%d] TEXT[%s]", queryLen, text);
    #ifdef ENABLE_GEM_SYSTEM
    	CDBManager::instance().EscapeString(text, packet->player_table.quickslot, sizeof(packet->player_table.quickslot));
    	queryLen += snprintf(queryStr + queryLen, sizeof(queryStr) - queryLen, "'%s', ", text);
    	
    	CDBManager::instance().EscapeString(text, packet->player_table.fishSlots, sizeof(packet->player_table.fishSlots));
    	queryLen += snprintf(queryStr + queryLen, sizeof(queryStr) - queryLen, "'%s', ", text);
    	
    	CDBManager::instance().EscapeString(text, packet->player_table.gemItems, sizeof(packet->player_table.gemItems));
    	queryLen += snprintf(queryStr + queryLen, sizeof(queryStr) - queryLen, "'%s')", text);
    #else
    	CDBManager::instance().EscapeString(text, packet->player_table.quickslot, sizeof(packet->player_table.quickslot));
    	queryLen += snprintf(queryStr + queryLen, sizeof(queryStr) - queryLen, "'%s')", text);
    #endif
    
    	std::unique_ptr<SQLMsg> pMsg2(CDBManager::instance().DirectQuery(queryStr));
    	if (g_test_server)
    		sys_log(0, "Create_Player queryLen[%d] TEXT[%s]", queryLen, text);
    
    	if (pMsg2->Get()->uiAffectedRows <= 0)
    	{
    		peer->EncodeHeader(HEADER_DG_PLAYER_CREATE_ALREADY, dwHandle, 0);
    		sys_log(0, "ALREADY EXIST3 query: %s AffectedRows %lu", queryStr, pMsg2->Get()->uiAffectedRows);
    		return;
    	}
    
    	player_id = pMsg2->Get()->uiInsertID;
    
    	snprintf(queryStr, sizeof(queryStr), "UPDATE player_index%s SET pid%d=%d WHERE id=%d",
    			GetTablePostfix(), packet->account_index + 1, player_id, packet->account_id);
    	std::unique_ptr<SQLMsg> pMsg3(CDBManager::instance().DirectQuery(queryStr));
    
    	if (pMsg3->Get()->uiAffectedRows <= 0)
    	{
    		sys_err("QUERY_ERROR: %s", queryStr);
    
    		snprintf(queryStr, sizeof(queryStr), "DELETE FROM player%s WHERE id=%d", GetTablePostfix(), player_id);
    		CDBManager::instance().DirectQuery(queryStr);
    
    		peer->EncodeHeader(HEADER_DG_PLAYER_CREATE_FAILED, dwHandle, 0);
    		return;
    	}
    
    	TPacketDGCreateSuccess pack;
    	memset(&pack, 0, sizeof(pack));
    
    	pack.bAccountCharacterIndex = packet->account_index;
    
    	pack.player.dwID			= player_id;
    	strlcpy(pack.player.szName, packet->player_table.name, sizeof(pack.player.szName));
    	pack.player.byJob			= packet->player_table.job;
    	pack.player.byLevel			= 1;
    	pack.player.dwPlayMinutes	= 0;
    	pack.player.byST			= packet->player_table.st;
    	pack.player.byHT			= packet->player_table.ht;
    	pack.player.byDX 			= packet->player_table.dx;
    	pack.player.byIQ			= packet->player_table.iq;
    	pack.player.wMainPart		= packet->player_table.part_base;
    	pack.player.x			= packet->player_table.x;
    	pack.player.y			= packet->player_table.y;
    
    	peer->EncodeHeader(HEADER_DG_PLAYER_CREATE_SUCCESS, dwHandle, sizeof(TPacketDGCreateSuccess));
    	peer->Encode(&pack, sizeof(TPacketDGCreateSuccess));
    
    	sys_log(0, "7 name %s job %d", pack.player.szName, pack.player.byJob);
    
    	s_createTimeByAccountID[packet->account_id] = time(0);
    }

    It's already set like this

  10. I removed the Gaya system, but it gives this error when creating and deleting characters.

    The database is giving syserr like this.

    SYSERR: Jan 29 19:43:20 :: DirectQuery: AsyncSQL::DirectQuery : mysql_query error: Column count doesn't match value count at row 1
    query: INSERT INTO player  (id, account_id, name, level, st, ht, dx, iq, job, voice, dir, x, y, z, hp, mp, random_hp, random_sp, stat_point, stamina, part_base, part_main, part_hair, part_sash, gold, battle_points, playtime, skill_level, fish_slots, quickslot) VALUES(0, 1, '213123', 1, 4, 3, 6, 3, 5, 0, 0, 957586, 255386, 0, 770, 260, 0, 0, 0, 800, 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\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\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: Jan 29 19:43:20 :: __QUERY_PLAYER_CREATE: QUERY_ERROR: UPDATE player_index  SET pid4=0 WHERE id=1

    This İs my player.sql

    /*
     Navicat Premium Data Transfer
    
     Source Server         : Yeni Proje
     Source Server Type    : MySQL
     Source Server Version : 50562
     Source Host           : 192.168.1.62:3306
     Source Schema         : player
    
     Target Server Type    : MySQL
     Target Server Version : 50562
     File Encoding         : 65001
    
     Date: 29/01/2023 19:31:47
    */
    
    SET NAMES utf8mb4;
    SET FOREIGN_KEY_CHECKS = 0;
    
    -- ----------------------------
    -- Table structure for player
    -- ----------------------------
    DROP TABLE IF EXISTS `player`;
    CREATE TABLE `player`  (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `account_id` int(11) NOT NULL DEFAULT 0,
      `name` varchar(24) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL DEFAULT 'NONAME',
      `job` tinyint(2) UNSIGNED NOT NULL DEFAULT 0,
      `voice` tinyint(1) UNSIGNED NOT NULL DEFAULT 0,
      `dir` tinyint(2) NOT NULL DEFAULT 0,
      `x` int(11) NOT NULL DEFAULT 0,
      `y` int(11) NOT NULL DEFAULT 0,
      `z` int(11) NOT NULL DEFAULT 0,
      `map_index` int(11) NOT NULL DEFAULT 0,
      `exit_x` int(11) NOT NULL DEFAULT 0,
      `exit_y` int(11) NOT NULL DEFAULT 0,
      `exit_map_index` int(11) NOT NULL DEFAULT 0,
      `hp` int(11) NOT NULL DEFAULT 0,
      `mp` int(11) NOT NULL DEFAULT 0,
      `stamina` smallint(6) NOT NULL DEFAULT 0,
      `random_hp` smallint(5) UNSIGNED NOT NULL DEFAULT 0,
      `random_sp` smallint(5) UNSIGNED NOT NULL DEFAULT 0,
      `playtime` int(11) NOT NULL DEFAULT 0,
      `level` tinyint(2) UNSIGNED NOT NULL DEFAULT 1,
      `level_step` tinyint(1) NOT NULL DEFAULT 0,
      `st` smallint(3) NOT NULL DEFAULT 0,
      `ht` smallint(3) NOT NULL DEFAULT 0,
      `dx` smallint(3) NOT NULL DEFAULT 0,
      `iq` smallint(3) NOT NULL DEFAULT 0,
      `gold` bigint(255) NOT NULL DEFAULT 0,
      `battle_points` int(11) NOT NULL DEFAULT 0,
      `exp` int(11) NOT NULL DEFAULT 0,
      `stat_point` smallint(3) NOT NULL DEFAULT 0,
      `skill_point` smallint(3) NOT NULL DEFAULT 0,
      `sub_skill_point` smallint(3) NOT NULL DEFAULT 0,
      `stat_reset_count` tinyint(4) NOT NULL DEFAULT 0,
      `ip` varchar(15) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT '0.0.0.0',
      `quickslot` tinyblob NULL,
      `part_main` smallint(6) UNSIGNED NOT NULL DEFAULT 0,
      `part_hair` smallint(4) NOT NULL DEFAULT 0,
      `part_sash` smallint(4) UNSIGNED NOT NULL DEFAULT 0,
      `part_base` tinyint(4) NOT NULL DEFAULT 0,
      `skill_group` tinyint(4) NOT NULL DEFAULT 0,
      `skill_level` blob NULL,
      `alignment` int(11) NOT NULL DEFAULT 0,
      `last_play` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
      `change_name` tinyint(1) NOT NULL DEFAULT 0,
      `mobile` varchar(24) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL,
      `horse_hp` smallint(4) NOT NULL DEFAULT 0,
      `horse_stamina` smallint(4) NULL DEFAULT 0,
      `horse_level` tinyint(2) UNSIGNED NOT NULL DEFAULT 0,
      `horse_hp_droptime` int(10) UNSIGNED NOT NULL DEFAULT 0,
      `horse_riding` tinyint(1) NOT NULL DEFAULT 0,
      `horse_skill_point` smallint(3) NOT NULL DEFAULT 0,
      `fish_use_count` int(11) NULL DEFAULT NULL,
      `fish_slots` blob NULL,
      `money` bigint(20) NOT NULL,
      `t_choosed` int(11) NOT NULL DEFAULT 0,
      `t_available` varbinary(201) NOT NULL DEFAULT '1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,',
      PRIMARY KEY (`id`) USING BTREE,
      INDEX `account_id_idx`(`account_id`) USING BTREE,
      INDEX `name_idx`(`name`) USING BTREE
    ) ENGINE = MyISAM AUTO_INCREMENT = 19 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;
    
    -- ----------------------------
    -- Records of player
    -- ----------------------------
    INSERT INTO `player` VALUES (1, 1, 'T69', 0, 0, 0, 960567, 270109, 0, 41, 960567, 270109, 41, 13320, 2558, 1695, 3920, 2058, 3629, 99, 3, 6, 4, 3, 3, 448143605, 999999355478500, 50, 273, 13, 0x020502020201020302040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000, '192.168.1.103', 11299, 0, 0, 0, 0, 2, 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011400000000011400000000011400000000011400000000011400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011400000000011400000000011400000000000000000000021E00000000000A00000000000000000000000000000000000000000000000000000000000000000000011400000000011400000000011400000000011400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000, 200000, 0, '2023-01-29 18:15:28', 0, NULL, 90, 0, 50, 200, 30, 1675275020, 0, 0, 8, 0x010201040004010700070007000000000004000700070007010500050107000700070000000500050007000700070102, 0, 0, '', '', '0000-00-00 00:00:00', 0, 0x302C302C302C302C302C302C302C302C302C302C302C302C302C302C302C302C302C302C302C302C);
    INSERT INTO `player` VALUES (2, 2, 'T89', 2, 0, 0, 959585, 272412, 0, 41, 959585, 272412, 41, 7030, 2326, 1315, 3760, 1786, 250, 95, 0, 5, 3, 3, 5, 0, 0, 0, 270, 94, 0x020102020206020502040203000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000, '192.168.1.103', 11609, 0, 0, 0, 0, 1, 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000032800000000032800000000032800000000032800000000032800000000032800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000032800000000000200000000000000000000032800000000000000000000011400000000011400000000011400000000032800000000021E00000000000A00000000000000000000000000000000000000000000000000000000000000000000011400000000011400000000011400000000011400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000032800000000032800000000032800000000032800000000032800000000032800000000032800000000032800000000032800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000, 200000, 0, '2022-11-19 13:33:39', 0, NULL, 36, 0, 50, 200, 30, 1669119073, 0, 0, 0, 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000, 0, 0, '', '', '0000-00-00 00:00:00', 0, 0x302C302C302C302C302C302C302C302C302C302C302C302C302C302C302C302C302C302C302C302C);
    INSERT INTO `player` VALUES (9, 9, 'DEV', 2, 0, 0, 955891, 249186, 0, 41, 955891, 249186, 41, 3353, 583, 1315, 83, 43, 46, 3, 0, 5, 3, 3, 5, 150, 9876, 0, 6, 0, 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000, '192.168.1.103', 11609, 0, 0, 0, 0, 0, 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000, 5272, 0, '2022-12-04 02:03:45', 0, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000, 0, 0, '', '', '0000-00-00 00:00:00', 0, 0x302C302C302C302C302C302C302C302C302C302C302C302C302C302C302C302C302C302C302C302C);
    INSERT INTO `player` VALUES (5, 2, 'iCanSeeYou', 0, 0, 0, 960060, 273034, 0, 41, 960060, 273034, 41, 3260, 260, 1259, 0, 0, 4, 1, 0, 6, 4, 3, 3, 0, 0, 0, 0, 0, 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000, '192.168.56.1', 11209, 0, 0, 0, 0, 0, 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000, 5020, 0, '2019-06-30 19:12:21', 0, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000, 0, 0, '', '', '0000-00-00 00:00:00', 0, 0x302C302C302C302C302C302C302C302C302C302C302C302C302C302C302C302C302C302C302C302C);
    INSERT INTO `player` VALUES (7, 9, 'Olokfli', 0, 0, 0, 969600, 278400, 0, 41, 969600, 278400, 41, 8611, 1191, 1750, 1911, 931, 95, 50, 2, 72, 90, 3, 3, 50171, 398842, 0, 0, 2, 0x010302040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000, '192.168.1.103', 11209, 0, 0, 0, 0, 1, 0x000000000000000000000000000000000000000000000000000B00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000032800000000000200000000000000000000032800000000000000000000032800000000032800000000032800000000032800000000011500000000032800000000000000000000000000000000000000000000000000000000000000000000011400000000011400000000011400000000011400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000, 5924, 0, '2022-11-19 14:05:11', 0, NULL, -45, 0, 35, 120, 21, 1669122003, 0, 0, 0, 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000, 0, 0, '', '', '0000-00-00 00:00:00', 0, 0x302C302C302C302C302C302C302C302C302C302C302C302C302C302C302C302C302C302C302C302C);
    
    
    SET FOREIGN_KEY_CHECKS = 1;

     

  11. Severity Code Description Project File Line Hide Status Error C1047 '.. \ .. \ extern \ lib \ libjpeg-MT.lib' object or library file was created by a different version of the compiler than other objects such as '.. \ .. \ extern \ lib \ discord_rpc_r.lib'; Recompile all objects and libraries with the same compiler UserInterface

    @Mali61

  12. On 1/29/2021 at 9:37 PM, Dex said:

    Just post your uitaskbar.py

    import uvvY2sBNvVcbJz4jvDr6fSWYdmqv9NPQ as pythonApi
    net = __import__(pythonApi.GetModuleName("net"))
    app = __import__(pythonApi.GetModuleName("app"))
    player = __import__(pythonApi.GetModuleName("player"))
    chrmgr = __import__(pythonApi.GetModuleName("chrmgr"))
    skill = __import__(pythonApi.GetModuleName("skill"))
    item = __import__(pythonApi.GetModuleName("item"))
    guild = __import__(pythonApi.GetModuleName("guild"))
    import ui
    import localeInfo
    import wndMgr
    import constInfo
    import mouseModule
    import uiScriptLocale
    import uiToolTip
    import interfaceModule
    
    MOUSE_SETTINGS = [0, 0]
    
    lista_mapas = {
    "mapa_guerra" : "",
    "mapa_duelos_pvp" : "",
    }
    
    def InitMouseButtonSettings(left, right):
    	global MOUSE_SETTINGS
    	MOUSE_SETTINGS = [left, right]
    
    def SetMouseButtonSetting(dir, event):
    	global MOUSE_SETTINGS
    	MOUSE_SETTINGS[dir] = event
    	
    def GetMouseButtonSettings():
    	global MOUSE_SETTINGS
    	return MOUSE_SETTINGS
    
    def SaveMouseButtonSettings():
    	global MOUSE_SETTINGS
    	open("mouse.cfg", "w").write("%s\t%s" % tuple(MOUSE_SETTINGS))
    
    def LoadMouseButtonSettings():
    	global MOUSE_SETTINGS
    	tokens = open("mouse.cfg", "r").read().split()
    
    	if len(tokens) != 2:
    		raise RuntimeError, "MOUSE_SETTINGS_FILE_ERROR"
    
    	MOUSE_SETTINGS[0] = int(tokens[0])
    	MOUSE_SETTINGS[1] = int(tokens[1])
    
    def unsigned32(n):
    	return n & 0xFFFFFFFFL
    
    #-------------------Giftbox Begin------------------------------
    
    class GiftBox(ui.ScriptWindow):
    	class TextToolTip(ui.Window):
    		def __init__(self):
    			ui.Window.__init__(self, "TOP_MOST")
    			self.SetWindowName("GiftBox")
    			textLine = ui.TextLine()
    			textLine.SetParent(self)
    			textLine.SetHorizontalAlignCenter()
    			textLine.SetOutline()
    			textLine.Show()
    			self.textLine = textLine
    
    		def __del__(self):
    			ui.Window.__del__(self)
    
    		def SetText(self, text):
    			self.textLine.SetText(text)
    
    		def OnRender(self):
    			(mouseX, mouseY) = wndMgr.GetMousePosition()
    			self.textLine.SetPosition(mouseX, mouseY - 15)
    
    	def __init__(self):
    		#print "NEW TASKBAR  ----------------------------------------------------------------------------"
    		ui.ScriptWindow.__init__(self)
    		self.tooltipGift = self.TextToolTip()
    		self.tooltipGift.Show()
    		
    	def __del__(self):
    		#print "---------------------------------------------------------------------------- DELETE TASKBAR"
    		ui.ScriptWindow.__del__(self)
    
    	def LoadWindow(self):
    		try:
    			pyScrLoader = ui.PythonScriptLoader()
    			pyScrLoader.LoadScriptFile(self, uiScriptLocale.LOCALE_UISCRIPT_PATH + "giftbox.py")
    		except:
    			import exception
    			exception.Abort("GiftBox.LoadWindow.LoadObject")		
    
    		self.giftBoxIcon = self.GetChild("GiftBox_Icon")
    		self.giftBoxToolTip = self.GetChild("GiftBox_ToolTip")
    	
    	def Destroy(self):		
    		self.giftBoxIcon = 0
    		self.giftBoxToolTip = 0		
    			
    #-------------------Giftbox End------------------------------
    
    class EnergyBar(ui.ScriptWindow):
    	class TextToolTip(ui.Window):
    		def __init__(self):
    			ui.Window.__init__(self, "TOP_MOST")
    			self.SetWindowName("EnergyBar")
    			textLine = ui.TextLine()
    			textLine.SetParent(self)
    			textLine.SetHorizontalAlignCenter()
    			textLine.SetOutline()
    			textLine.Show()
    			self.textLine = textLine
    
    		def __del__(self):
    			ui.Window.__del__(self)
    
    		def SetText(self, text):
    			self.textLine.SetText(text)
    
    		def OnRender(self):
    			(mouseX, mouseY) = wndMgr.GetMousePosition()
    			self.textLine.SetPosition(mouseX, mouseY - 15)
    
    	def __init__(self):
    		#print "NEW TASKBAR  ----------------------------------------------------------------------------"
    		ui.ScriptWindow.__init__(self)
    		self.tooltipEnergy = self.TextToolTip()
    		self.tooltipEnergy.Show()
    		
    	def __del__(self):
    		#print "---------------------------------------------------------------------------- DELETE TASKBAR"
    		ui.ScriptWindow.__del__(self)
    
    	def LoadWindow(self):
    		try:
    			pyScrLoader = ui.PythonScriptLoader()
    			pyScrLoader.LoadScriptFile(self, uiScriptLocale.LOCALE_UISCRIPT_PATH + "EnergyBar.py")
    		except:
    			import exception
    			exception.Abort("EnergyBar.LoadWindow.LoadObject")
    
    		self.energyEmpty = self.GetChild("EnergyGauge_Empty")
    		self.energyHungry = self.GetChild("EnergyGauge_Hungry")
    		self.energyFull = self.GetChild("EnergyGauge_Full")
    
    		self.energyGaugeBoard = self.GetChild("EnergyGauge_Board")
    		self.energyGaugeToolTip = self.GetChild("EnergyGauge_ToolTip")
    
    		
    	def Destroy(self):		
    		self.energyEmpty = None
    		self.energyHungry = None
    		self.energyFull = None
    		self.energyGaugeBoard = 0
    		self.energyGaugeToolTip = 0
    		self.tooltipEnergy = 0
    
    	## Gauge
    	def RefreshStatus(self):
     		pointEnergy = player.GetStatus (player.ENERGY)
    		leftTimeEnergy = player.GetStatus (player.ENERGY_END_TIME) - app.GetGlobalTimeStamp()
    		# 충기환 지속 시간 = 2시간.
    		self.SetEnergy (pointEnergy, leftTimeEnergy, 7200)
    			
    	def SetEnergy (self, point, leftTime, maxTime):
    		leftTime = max (leftTime, 0)
    		maxTime = max (maxTime, 0)
    			
    		self.energyEmpty.Hide()
    		self.energyHungry.Hide()
    		self.energyFull.Hide()
    	
    		if leftTime == 0:
    			self.energyEmpty.Show()
    		elif ((leftTime * 100) / maxTime) < 15:
    			self.energyHungry.Show()
    		else:
    			self.energyFull.Show()
    
    		self.tooltipEnergy.SetText("                                  " + localeInfo.SecondToHM(leftTime) + " - Energie +" + str(point) + "%")
    
    	def OnUpdate(self):
    		if TRUE == self.energyGaugeToolTip.IsIn():
    			self.RefreshStatus()
    			self.tooltipEnergy.Show()
    		else:
    			self.tooltipEnergy.Hide()
    
    class ExpandedTaskBar(ui.ScriptWindow):
    	BUTTON_DRAGON_SOUL = 0
    	BUTTON_PET_GUI = 1
    	BUTTON_OTOMATIK_AV = 2
    
    	def __init__(self):
    		ui.Window.__init__(self)
    		self.SetWindowName("ExpandedTaskBar")
    	
    	def LoadWindow(self):
    		try:
    			pyScrLoader = ui.PythonScriptLoader()
    			pyScrLoader.LoadScriptFile(self, uiScriptLocale.LOCALE_UISCRIPT_PATH + "ExpandedTaskBar.py")
    		except:
    			import exception
    			exception.Abort("ExpandedTaskBar.LoadWindow.LoadObject")
    
    		self.expandedTaskBarBoard = self.GetChild("ExpanedTaskBar_Board")
    
    		self.toggleButtonDict = {}
    		self.toggleButtonDict[ExpandedTaskBar.BUTTON_DRAGON_SOUL] = self.GetChild("DragonSoulButton")
    		self.toggleButtonDict[ExpandedTaskBar.BUTTON_DRAGON_SOUL].SetParent(self)
    		self.toggleButtonDict[ExpandedTaskBar.BUTTON_PET_GUI] = self.GetChild("PetGuiButton")
    		self.toggleButtonDict[ExpandedTaskBar.BUTTON_PET_GUI].SetParent(self)
    		self.toggleButtonDict[ExpandedTaskBar.BUTTON_OTOMATIK_AV] = self.GetChild("AutoButton")
    		self.toggleButtonDict[ExpandedTaskBar.BUTTON_OTOMATIK_AV].SetParent(self)
    		
    	def SetTop(self):
    		super(ExpandedTaskBar, self).SetTop()	
    		for button in self.toggleButtonDict.values():
    			button.SetTop()
     	
    	def Show(self):
    		ui.ScriptWindow.Show(self)
    	
    	def Close(self):
    		self.Hide()
    	
    	def SetToolTipText(self, eButton, text):
    		self.toggleButtonDict[eButton].SetToolTipText(text)
    		
    	def SetToggleButtonEvent(self, eButton, kEventFunc):
    		self.toggleButtonDict[eButton].SetEvent(kEventFunc)
    
    	def OnPressEscapeKey(self):
    		self.Close()
    		return TRUE
    		
    class ExpandedMoneyTaskBar(ui.ScriptWindow):
    	def __init__(self):
    		ui.Window.__init__(self)
    		self.SetWindowName("ExpandedMoneyTaskBar")
    		toolTipMoneyTitle = None
    		toolTipChequeTitle = None
    		self.interface = None
    
    	def LoadWindow(self):
    		try:
    			pyScrLoader = ui.PythonScriptLoader()
    			# pyScrLoader.LoadScriptFile(self, uiScriptLocale.LOCALE_UISCRIPT_PATH + "ExpandedTaskBar.py")
    			pyScrLoader.LoadScriptFile(self, "UIScript/ExpandedMoneyTaskBar.py")		           
    		except:
    			import exception
    			exception.Abort("ExpandedTaskBar.LoadWindow.LoadObject")
    
    		self.btnExchangeButton = self.GetChild("ExchangeButton")
    		self.btnExchangeButton.SetEvent(ui.__mem_func__(self.OpenWonExchangeWindow)) 
    		self.expandedTaskBarBoard = self.GetChild("ExpanedMoneyTaskBar_Board")
    		# self.moneySlot = self.GetChild("Money_Slot")
    		self.money = self.GetChild("Money")
    		self.wndMoneySlotIcon = self.GetChild("Money_Icon")
    		self.wndMoneySlotIcon.SAFE_SetStringEvent("MOUSE_OVER_IN", self.__ShowMoneyTitleToolTip)
    		self.wndMoneySlotIcon.SAFE_SetStringEvent("MOUSE_OVER_OUT", self.__HideMoneyTitleToolTip)
    		# self.chequeSlot = self.GetChild("Cheque_Slot")
    		self.cheque = self.GetChild("Cheque")
    		self.wndChequeSlotIcon = self.GetChild("Cheque_Icon")
    		self.wndChequeSlotIcon.SAFE_SetStringEvent("MOUSE_OVER_IN", self.__ShowChequeTitleToolTip)
    		self.wndChequeSlotIcon.SAFE_SetStringEvent("MOUSE_OVER_OUT", self.__HideChequeTitleToolTip)
    		self.__SetChequeSystemToolTip()
    
    #		self.Gem = self.GetChild("Gem")
    #		self.wndGemSlotIcon = self.GetChild("Gem_Icon")
    #		self.wndGemSlotIcon.SAFE_SetStringEvent("MOUSE_OVER_IN", self.__ShowGemTitleToolTip)
    #		self.wndGemSlotIcon.SAFE_SetStringEvent("MOUSE_OVER_OUT", self.__HideGemTitleToolTip)
    #		self.RedGem = self.GetChild("RedGem")
    #		self.RedGem_Icon = self.GetChild("RedGem_Icon")
    #		self.RedGem_Icon.SAFE_SetStringEvent("MOUSE_OVER_IN", self.__ShowRedGemTitleToolTip)
    #		self.RedGem_Icon.SAFE_SetStringEvent("MOUSE_OVER_OUT", self.__HideRedGemTitleToolTip)
    
    	def Show(self):
    		ui.ScriptWindow.Show(self)
    	
    	def Close(self):
    		self.Hide()	
    
    	def BindInterface(self, interface):
    		from _weakref import proxy
    		self.interface = proxy(interface)
    		
    	def RefreshStatus(self):
    		self.money.SetText(localeInfo.NumberToString(player.GetMoney()))
    		self.cheque.SetText(localeInfo.NumberToString(player.GetCheque()))
    
    #		if app.ENABLE_BOSS_GEM_SYSTEM:
    #			self.Gem.SetText(localeInfo.NumberToString(player.GetItemCountByVnum(50926)))
    #			self.RedGem.SetText(localeInfo.NumberToString(player.GetItemCountByVnum(50927)))
    #		else:
    #			self.Gem.SetText(localeInfo.NumberToString(player.GetGem()))
    
    #	if app.ENABLE_BOSS_GEM_SYSTEM:
    #		def OnUpdate(self):
    #			if self.Gem:
    #				self.Gem.SetText(localeInfo.NumberToString(player.GetItemCountByVnum(50926)))
    #				self.RedGem.SetText(localeInfo.NumberToString(player.GetItemCountByVnum(50927)))
    
    	def SetTop(self):
    		super(ExpandedMoneyTaskBar, self).SetTop()	
    		
    	def SetToggleButtonEvent(self, eButton, kEventFunc):
    		self.toggleButtonDict[eButton].SetEvent(kEventFunc)
    
    	def OpenWonExchangeWindow(self):
    		self.interface.ToggleWonExchangeWindow()
    		
    	def __SetChequeSystemToolTip(self):
    		self.toolTipChequeTitle = uiToolTip.ToolTip(20)
    		self.toolTipChequeTitle.AutoAppendTextLine(localeInfo.CHEQUE_SYSTEM_UNIT_WON, uiToolTip.ToolTip.WON_PRICE_COLOR)
    		self.toolTipChequeTitle.AlignHorizonalCenter()
    		self.toolTipMoneyTitle = uiToolTip.ToolTip(20)
    		self.toolTipMoneyTitle.AutoAppendTextLine(localeInfo.CHEQUE_SYSTEM_UNIT_YANG, uiToolTip.ToolTip.PRICE_INFO_COLOR)
    		self.toolTipMoneyTitle.AlignHorizonalCenter()
    
    #		self.toolTipGemTitle = uiToolTip.ToolTip(20)
    #		self.toolTipGemTitle.AutoAppendTextLine(localeInfo.CHEQUE_SYSTEM_UNIT_GEM, uiToolTip.ToolTip.PRICE_INFO_COLOR)
    #		self.toolTipGemTitle.AlignHorizonalCenter()
    #		self.toolTipRedGemTitle = uiToolTip.ToolTip(20)
    #		self.toolTipRedGemTitle.AutoAppendTextLine(localeInfo.CHEQUE_SYSTEM_UNIT_RED_GEM, uiToolTip.ToolTip.PRICE_INFO_COLOR)
    #		self.toolTipRedGemTitle.AlignHorizonalCenter()
    
    	def __ShowMoneyTitleToolTip(self):
    		self.toolTipMoneyTitle.ShowToolTip()
    
    	def __HideMoneyTitleToolTip(self):
    		self.toolTipMoneyTitle.HideToolTip()
    
    	def __ShowChequeTitleToolTip(self):
    		self.toolTipChequeTitle.ShowToolTip()
    
    	def __HideChequeTitleToolTip(self):
    		self.toolTipChequeTitle.HideToolTip()
    		
    #	def __ShowGemTitleToolTip(self):
    #		self.toolTipGemTitle.ShowToolTip()
    	
    #	def __HideGemTitleToolTip(self):
    #		self.toolTipGemTitle.HideToolTip()
    		
    #	def __ShowRedGemTitleToolTip(self):
    #		self.toolTipRedGemTitle.ShowToolTip()
    		
    #	def __HideRedGemTitleToolTip(self):
    #		self.toolTipRedGemTitle.HideToolTip()
    
    	def OnPressEscapeKey(self):
    		self.Close()
    		return True
    	
    class TaskBar(ui.ScriptWindow):
    
    	BUTTON_CHARACTER = 0
    	BUTTON_INVENTORY = 1
    	BUTTON_MESSENGER = 2
    	BUTTON_SYSTEM = 3
    	BUTTON_CHAT = 4
    	BUTTON_EXPAND = 4
    	BUTTON_EXPAND_MONEY = 5
    	BUTTON_VECTORS = 6
    	IS_EXPANDED = FALSE
    
    	MOUSE_BUTTON_LEFT = 0
    	MOUSE_BUTTON_RIGHT = 1
    	NONE = 255
    
    	EVENT_MOVE = 0
    	EVENT_ATTACK = 1
    	EVENT_MOVE_AND_ATTACK = 2
    	EVENT_CAMERA = 3
    	EVENT_SKILL = 4
    	EVENT_AUTO = 5
    
    	GAUGE_WIDTH = 95
    	GAUGE_HEIGHT = 13
    
    	QUICKPAGE_NUMBER_FILENAME = [
    		"d:/ymir work/ui/game/taskbar/1.sub",
    		"d:/ymir work/ui/game/taskbar/2.sub",
    		"d:/ymir work/ui/game/taskbar/3.sub",
    		"d:/ymir work/ui/game/taskbar/4.sub",
    	]
    
    	def ShowGift(self):
    	    self.wndGiftBox.Show()
    	
    	def HideGift(self):
    	    self.wndGiftBox.Hide()
    
    	class TextToolTip(ui.Window):
    		def __init__(self):
    			ui.Window.__init__(self, "TOP_MOST")
    
    			textLine = ui.TextLine()
    			textLine.SetParent(self)
    			textLine.SetHorizontalAlignCenter()
    			textLine.SetOutline()
    			textLine.Show()
    			self.textLine = textLine
    
    		def __del__(self):
    			ui.Window.__del__(self)
    
    		def SetText(self, text):
    			self.textLine.SetText(text)
    
    		def OnRender(self):
    			(mouseX, mouseY) = wndMgr.GetMousePosition()
    			self.textLine.SetPosition(mouseX, mouseY - 15)
    
    	class SkillButton(ui.SlotWindow):
    
    		def __init__(self):
    			ui.SlotWindow.__init__(self)
    
    			self.event = 0
    			self.arg = 0
    
    			self.slotIndex = 0
    			self.skillIndex = 0
    
    			slotIndex = 0
    			wndMgr.SetSlotBaseImage(self.hWnd, "d:/ymir work/ui/public/slot_base.sub", 1.0, 1.0, 1.0, 1.0)
    			wndMgr.AppendSlot(self.hWnd, slotIndex, 0, 0, 32, 32)
    			self.SetCoverButton(slotIndex,	"d:/ymir work/ui/public/slot_cover_button_01.sub",\
    											"d:/ymir work/ui/public/slot_cover_button_02.sub",\
    											"d:/ymir work/ui/public/slot_cover_button_03.sub",\
    											"d:/ymir work/ui/public/slot_cover_button_04.sub", TRUE, FALSE)
    			self.SetSize(32, 32)
    
    		def __del__(self):
    			ui.SlotWindow.__del__(self)
    
    		def Destroy(self):
    			if 0 != self.tooltipSkill:
    				self.tooltipSkill.HideToolTip()
    
    		def RefreshSkill(self):
    			if 0 != self.slotIndex:
    				self.SetSkill(self.slotIndex)
    
    		def SetSkillToolTip(self, tooltip):
    			self.tooltipSkill = tooltip
    
    		def SetSkill(self, skillSlotNumber):
    			slotNumber = 0
    			skillIndex = player.GetSkillIndex(skillSlotNumber)
    			skillGrade = player.GetSkillGrade(skillSlotNumber)
    			skillLevel = player.GetSkillLevel(skillSlotNumber)
    			skillType = skill.GetSkillType(skillIndex)
    
    			self.skillIndex = skillIndex
    			if 0 == self.skillIndex:
    				self.ClearSlot(slotNumber)
    				return
    
    			self.slotIndex = skillSlotNumber
    
    			self.SetSkillSlotNew(slotNumber, skillIndex, skillGrade, skillLevel)
    			self.SetSlotCountNew(slotNumber, skillGrade, skillLevel)
    
    			## NOTE : CoolTime 체크
    			if player.IsSkillCoolTime(skillSlotNumber):
    				(coolTime, elapsedTime) = player.GetSkillCoolTime(skillSlotNumber)
    				self.SetSlotCoolTime(slotNumber, coolTime, elapsedTime)
    
    			## NOTE : Activate 되어 있다면 아이콘도 업데이트
    			if player.IsSkillActive(skillSlotNumber):
    				self.ActivateSlot(slotNumber)
    
    		def SetSkillEvent(self, event, arg=0):
    			self.event = event
    			self.arg = arg
    
    		def GetSkillIndex(self):
    			return self.skillIndex
    
    		def GetSlotIndex(self):
    			return self.slotIndex
    
    		def Activate(self, coolTime):
    			self.SetSlotCoolTime(0, coolTime)
    
    			if skill.IsToggleSkill(self.skillIndex):
    				self.ActivateSlot(0)
    
    		def Deactivate(self):
    			if skill.IsToggleSkill(self.skillIndex):
    				self.DeactivateSlot(0)
    
    		def OnOverInItem(self, dummy):
    			self.tooltipSkill.SetSkill(self.skillIndex)
    
    		def OnOverOutItem(self):
    			self.tooltipSkill.HideToolTip()
    
    		def OnSelectItemSlot(self, dummy):
    			if 0 != self.event:
    				if 0 != self.arg:
    					self.event(self.arg)
    				else:
    					self.event()
    
    	def __init__(self):
    		#print "NEW TASKBAR  ----------------------------------------------------------------------------"
    
    		ui.ScriptWindow.__init__(self, "TOP_MOST")
    
    		self.quickPageNumImageBox = None
    		self.tooltipItem = 0
    		self.tooltipSkill = 0
    		self.mouseModeButtonList = [ ui.ScriptWindow("TOP_MOST"), ui.ScriptWindow("TOP_MOST") ]
    
    		self.tooltipHP = self.TextToolTip()
    		self.tooltipHP.Show()
    		self.tooltipSP = self.TextToolTip()
    		self.tooltipSP.Show()
    		self.tooltipST = self.TextToolTip()
    		self.tooltipST.Show()
    		self.tooltipEXP = self.TextToolTip()
    		self.tooltipEXP.Show()
    		
    		self.skillCategoryNameList = [ "ACTIVE_1", "ACTIVE_2", "ACTIVE_3" ]
    		self.skillPageStartSlotIndexDict = {
    			"ACTIVE_1" : 1, 
    			"ACTIVE_2" : 21, 
    			"ACTIVE_3" : 41, 
    		}
    
    		self.selectSkillButtonList = []
    		
    		self.lastUpdateQuickSlot = 0
    		self.SetWindowName("TaskBar")
    
    	def __del__(self):
    		#print "---------------------------------------------------------------------------- DELETE TASKBAR"
    		ui.ScriptWindow.__del__(self)
    		
    		
    	def LoadWindow(self):
    		try:
    			pyScrLoader = ui.PythonScriptLoader()
    
    			if constInfo.IN_GAME_SHOP_ENABLE:
    				pyScrLoader.LoadScriptFile(self, uiScriptLocale.LOCALE_UISCRIPT_PATH + "TaskBar.py")
    			else:
    				pyScrLoader.LoadScriptFile(self, "UIScript/TaskBar.py")
    			pyScrLoader.LoadScriptFile(self.mouseModeButtonList[self.MOUSE_BUTTON_LEFT], "UIScript/MouseButtonWindow.py")
    			pyScrLoader.LoadScriptFile(self.mouseModeButtonList[self.MOUSE_BUTTON_RIGHT], "UIScript/RightMouseButtonWindow.py")
    		except:
    			import exception
    			exception.Abort("TaskBar.LoadWindow.LoadObject")
    
    		self.quickslot = []
    		self.quickslot.append(self.GetChild("quick_slot_1"))
    		self.quickslot.append(self.GetChild("quick_slot_2"))
    		for slot in self.quickslot:
    			slot.SetSlotStyle(wndMgr.SLOT_STYLE_NONE)
    			slot.SetSelectEmptySlotEvent(ui.__mem_func__(self.SelectEmptyQuickSlot))
    			slot.SetSelectItemSlotEvent(ui.__mem_func__(self.SelectItemQuickSlot))
    			slot.SetUnselectItemSlotEvent(ui.__mem_func__(self.UnselectItemQuickSlot))
    			slot.SetOverInItemEvent(ui.__mem_func__(self.OverInItem))
    			slot.SetOverOutItemEvent(ui.__mem_func__(self.OverOutItem))
    
    		toggleButtonDict = {}
    		toggleButtonDict[TaskBar.BUTTON_CHARACTER]=self.GetChild("CharacterButton")
    		toggleButtonDict[TaskBar.BUTTON_INVENTORY]=self.GetChild("InventoryButton")
    		toggleButtonDict[TaskBar.BUTTON_MESSENGER]=self.GetChild("MessengerButton")
    		toggleButtonDict[TaskBar.BUTTON_SYSTEM]=self.GetChild("SystemButton")
    	
    		# ChatButton, ExpandButton 둘 중 하나는 반드시 존재한다.
    		try:
    			toggleButtonDict[TaskBar.BUTTON_CHAT]=self.GetChild("ChatButton")
    		except:
    			toggleButtonDict[TaskBar.BUTTON_EXPAND]=self.GetChild("ExpandButton")
    			TaskBar.IS_EXPANDED = TRUE
    		toggleButtonDict[TaskBar.BUTTON_EXPAND_MONEY]=self.GetChild("ExpandMoneyButton")
    		toggleButtonDict[TaskBar.BUTTON_VECTORS]=self.GetChild("VectorsTeleportButton")
    
    		if localeInfo.IsARABIC():
    			systemButton = toggleButtonDict[TaskBar.BUTTON_SYSTEM]
    			if systemButton.ToolTipText:
    				tx, ty = systemButton.ToolTipText.GetLocalPosition()
    				tw = systemButton.ToolTipText.GetWidth() 
    				systemButton.ToolTipText.SetPosition(-tw/2, ty)
    
    
    		expGauge = []
    		expGauge.append(self.GetChild("EXPGauge_01"))
    		expGauge.append(self.GetChild("EXPGauge_02"))
    		expGauge.append(self.GetChild("EXPGauge_03"))
    		expGauge.append(self.GetChild("EXPGauge_04"))
    
    		for exp in expGauge:
    			exp.SetSize(0, 0)
    
    	  
    		self.quickPageNumImageBox=self.GetChild("QuickPageNumber")
    
    		self.GetChild("QuickPageUpButton").SetEvent(ui.__mem_func__(self.__OnClickQuickPageUpButton))
    		self.GetChild("QuickPageDownButton").SetEvent(ui.__mem_func__(self.__OnClickQuickPageDownButton))
    
    
    
    		########Anti Exp Button by Sanii##########
    		
    		#self.antiexp		= self.GetChild("AntiButton")
    		#self.antiexp.SetEvent(ui.__mem_func__(self.AntiExp))
    		
    		#if constInfo.ANTI_EXP_STATE == 1:
    			#self.antiexp.SetText("-")
    			#self.antiexp.SetToolTipText("Anti-Erfahrung deaktivieren")
    		#else:
    			#self.antiexp.SetText("+")
    			#self.antiexp.SetToolTipText("Anti-Erfahrung aktivieren")
    		
    		mouseLeftButtonModeButton = self.GetChild("LeftMouseButton")
    		mouseRightButtonModeButton = self.GetChild("RightMouseButton")
    		mouseLeftButtonModeButton.SetEvent(ui.__mem_func__(self.ToggleLeftMouseButtonModeWindow))		
    		mouseRightButtonModeButton.SetEvent(ui.__mem_func__(self.ToggleRightMouseButtonModeWindow))
    		self.curMouseModeButton = [ mouseLeftButtonModeButton, mouseRightButtonModeButton ]
    
    		(xLocalRight, yLocalRight) = mouseRightButtonModeButton.GetLocalPosition()
    		self.curSkillButton = self.SkillButton()
    		self.curSkillButton.SetParent(self)
    		self.curSkillButton.SetPosition(xLocalRight, 3)
    		self.curSkillButton.SetSkillEvent(ui.__mem_func__(self.ToggleRightMouseButtonModeWindow))
    		self.curSkillButton.Hide()
    
    		(xLeft, yLeft) = mouseLeftButtonModeButton.GetGlobalPosition()
    		(xRight, yRight) = mouseRightButtonModeButton.GetGlobalPosition()
    		leftModeButtonList = self.mouseModeButtonList[self.MOUSE_BUTTON_LEFT]
    		leftModeButtonList.SetPosition(xLeft, yLeft - leftModeButtonList.GetHeight()-5)
    		rightModeButtonList = self.mouseModeButtonList[self.MOUSE_BUTTON_RIGHT]
    		rightModeButtonList.SetPosition(xRight - rightModeButtonList.GetWidth() + 32, yRight - rightModeButtonList.GetHeight()-5)
    		rightModeButtonList.GetChild("button_skill").SetEvent(lambda adir=self.MOUSE_BUTTON_RIGHT, aevent=self.EVENT_SKILL: self.SelectMouseButtonEvent(adir, aevent))
    		rightModeButtonList.GetChild("button_skill").Hide()
    
    		mouseImage = ui.ImageBox("TOP_MOST")
    		mouseImage.AddFlag("float")
    		mouseImage.LoadImage("d:/ymir work/ui/game/taskbar/mouse_button_camera_01.sub")
    		mouseImage.SetPosition(xRight, wndMgr.GetScreenHeight() - 34)
    		mouseImage.Hide()
    		self.mouseImage = mouseImage
    
    		dir = self.MOUSE_BUTTON_LEFT
    		wnd = self.mouseModeButtonList[dir]
    		wnd.GetChild("button_move_and_attack").SetEvent(lambda adir=dir, aevent=self.EVENT_MOVE_AND_ATTACK: self.SelectMouseButtonEvent(adir, aevent))
    		wnd.GetChild("button_auto_attack").SetEvent(lambda adir=dir, aevent=self.EVENT_AUTO: self.SelectMouseButtonEvent(adir, aevent))
    		wnd.GetChild("button_camera").SetEvent(lambda adir=dir, aevent=self.EVENT_CAMERA: self.SelectMouseButtonEvent(adir, aevent))
    
    		dir = self.MOUSE_BUTTON_RIGHT
    		wnd = self.mouseModeButtonList[dir]
    		wnd.GetChild("button_move_and_attack").SetEvent(lambda adir=dir, aevent=self.EVENT_MOVE_AND_ATTACK: self.SelectMouseButtonEvent(adir, aevent))
    		wnd.GetChild("button_camera").SetEvent(lambda adir=dir, aevent=self.EVENT_CAMERA: self.SelectMouseButtonEvent(adir, aevent))
    
    		self.toggleButtonDict = toggleButtonDict
    		self.expGauge = expGauge
    
    		if constInfo.IN_GAME_SHOP_ENABLE:
    			self.rampageGauge1  = self.GetChild("RampageGauge")
    			self.rampageGauge1.OnMouseOverIn = ui.__mem_func__(self.__RampageGauge_OverIn)
    			self.rampageGauge2 = self.GetChild("RampageGauge2")
    			self.rampageGauge2.OnMouseOverOut = ui.__mem_func__(self.__RampageGauge_OverOut)
    			self.rampageGauge2.OnMouseLeftButtonUp = ui.__mem_func__(self.__RampageGauge_Click)
    			self.__RampageGauge_OverOut()
    
    		self.hpGauge = self.GetChild("HPGauge")
    		self.mpGauge = self.GetChild("SPGauge")
    		self.stGauge = self.GetChild("STGauge")
    		self.hpRecoveryGaugeBar = self.GetChild("HPRecoveryGaugeBar")
    		self.spRecoveryGaugeBar = self.GetChild("SPRecoveryGaugeBar")
    
    		self.hpGaugeBoard=self.GetChild("HPGauge_Board")
    		self.mpGaugeBoard=self.GetChild("SPGauge_Board")
    		self.stGaugeBoard=self.GetChild("STGauge_Board")
    		self.expGaugeBoard=self.GetChild("EXP_Gauge_Board")
    		
    		wndGiftBox = GiftBox()
    		wndGiftBox.LoadWindow()
    		self.wndGiftBox = wndGiftBox
    	
    		self.__LoadMouseSettings()
    		self.RefreshStatus()
    		self.RefreshQuickSlot()
    
    	def __RampageGauge_OverIn(self):
    		print "rampage_over_in"
    		self.rampageGauge2.Show()
    		self.rampageGauge1.Hide()
    
    	def __RampageGauge_OverOut(self):
    		print "rampage_over_out"
    		self.rampageGauge2.Hide()
    		self.rampageGauge1.Show()
    
    
    
    	def __RampageGauge_Click(self):
    		print "rampage_up"
    		net.SendChatPacket("/in_game_mall")
    		self.wndGiftBox.Hide()		
    
    	def __LoadMouseSettings(self):
    		try:
    			LoadMouseButtonSettings()
    			(mouseLeftButtonEvent, mouseRightButtonEvent) = GetMouseButtonSettings()
    			if not self.__IsInSafeMouseButtonSettingRange(mouseLeftButtonEvent) or not self.__IsInSafeMouseButtonSettingRange(mouseRightButtonEvent):
    					raise RuntimeError, "INVALID_MOUSE_BUTTON_SETTINGS"
    		except:
    			InitMouseButtonSettings(self.EVENT_MOVE_AND_ATTACK, self.EVENT_CAMERA)
    			(mouseLeftButtonEvent, mouseRightButtonEvent) = GetMouseButtonSettings()
    
    		try:
    			self.SelectMouseButtonEvent(self.MOUSE_BUTTON_LEFT,	mouseLeftButtonEvent)
    			self.SelectMouseButtonEvent(self.MOUSE_BUTTON_RIGHT,	mouseRightButtonEvent)
    		except:
    			InitMouseButtonSettings(self.EVENT_MOVE_AND_ATTACK, self.EVENT_CAMERA)
    			(mouseLeftButtonEvent, mouseRightButtonEvent) = GetMouseButtonSettings()
    
    			self.SelectMouseButtonEvent(self.MOUSE_BUTTON_LEFT,	mouseLeftButtonEvent)
    			self.SelectMouseButtonEvent(self.MOUSE_BUTTON_RIGHT,	mouseRightButtonEvent)
    
    
    
    	def __IsInSafeMouseButtonSettingRange(self, arg):
    		return arg >= self.EVENT_MOVE and arg <= self.EVENT_AUTO
    
    	def Destroy(self):		
    		SaveMouseButtonSettings()
    		self.ClearDictionary()
    		self.mouseModeButtonList[0].ClearDictionary()
    		self.mouseModeButtonList[1].ClearDictionary()
    		self.mouseModeButtonList = 0
    		self.curMouseModeButton = 0
    		self.curSkillButton = 0
    		self.selectSkillButtonList = 0
    		self.Jeaktivni = 0
    
    		self.expGauge = None
    		self.hpGauge = None
    		self.mpGauge = None
    		self.stGauge = None
    		self.hpRecoveryGaugeBar = None
    		self.spRecoveryGaugeBar = None
    	
    		self.tooltipItem = 0
    		self.tooltipSkill = 0
    		self.quickslot = 0
    		
    		self.toggleButtonDict = 0
    
    		self.hpGaugeBoard = 0
    		self.mpGaugeBoard = 0
    		self.stGaugeBoard = 0
    		
    		self.expGaugeBoard = 0
    
    		self.tooltipHP = 0
    		self.tooltipSP = 0
    		self.tooltipST = 0
    		self.tooltipEXP = 0
    
    		self.mouseImage = None
    
    	def __OnClickQuickPageUpButton(self):
    		player.SetQuickPage(player.GetQuickPage()-1)
    
    	def __OnClickQuickPageDownButton(self):
    		player.SetQuickPage(player.GetQuickPage()+1)
    
    	def SetToggleButtonEvent(self, eButton, kEventFunc):
    		self.toggleButtonDict[eButton].SetEvent(kEventFunc)
    
    	def SetItemToolTip(self, tooltipItem):
    		self.tooltipItem = tooltipItem
    
    	def SetSkillToolTip(self, tooltipSkill):
    		self.tooltipSkill = tooltipSkill
    		self.curSkillButton.SetSkillToolTip(self.tooltipSkill)
    
    	## Mouse Image
    	def ShowMouseImage(self):
    		self.mouseImage.SetTop()
    		self.mouseImage.Show()
    
    	def HideMouseImage(self):
    		player.SetQuickCameraMode(FALSE)
    		self.mouseImage.Hide()
    
    	## Gauge
    	def RefreshStatus(self):
    		curHP = player.GetStatus(player.HP)
    		maxHP = player.GetStatus(player.MAX_HP)
    		curSP = player.GetStatus(player.SP)
    		maxSP = player.GetStatus(player.MAX_SP)
    		curEXP = unsigned32(player.GetStatus(player.EXP))
    		nextEXP = unsigned32(player.GetStatus(player.NEXT_EXP))
    		recoveryHP = player.GetStatus(player.HP_RECOVERY)
    		recoverySP = player.GetStatus(player.SP_RECOVERY)
    		
    		self.RefreshStamina()
    
    		self.SetHP(curHP, recoveryHP, maxHP)
    		self.SetSP(curSP, recoverySP, maxSP)
    		self.SetExperience(curEXP, nextEXP)
    		
    	def RefreshStamina(self):
    		curST = player.GetStatus(player.STAMINA)
    		maxST = player.GetStatus(player.MAX_STAMINA)
    		self.SetST(curST, maxST)
    
    	def RefreshSkill(self):
    		self.curSkillButton.RefreshSkill()
    		for button in self.selectSkillButtonList:
    			button.RefreshSkill()
    
    	def SetHP(self, curPoint, recoveryPoint, maxPoint):
    		curPoint = min(curPoint, maxPoint)
    		if maxPoint > 0:
    			self.hpGauge.SetPercentage(curPoint, maxPoint)
    			self.tooltipHP.SetText("%s : %d / %d" % (localeInfo.TASKBAR_HP, curPoint, maxPoint))
    
    			if 0 == recoveryPoint:
    				self.hpRecoveryGaugeBar.Hide()
    			else:
    				destPoint = min(maxPoint, curPoint + recoveryPoint)
    				newWidth = int(self.GAUGE_WIDTH * (float(destPoint) / float(maxPoint)))
    				self.hpRecoveryGaugeBar.SetSize(newWidth, self.GAUGE_HEIGHT)
    				self.hpRecoveryGaugeBar.Show()
    
    	def SetSP(self, curPoint, recoveryPoint, maxPoint):
    		curPoint = min(curPoint, maxPoint)
    		if maxPoint > 0:
    			self.mpGauge.SetPercentage(curPoint, maxPoint)
    			self.tooltipSP.SetText("%s : %d / %d" % (localeInfo.TASKBAR_SP, curPoint, maxPoint))
    
    			if 0 == recoveryPoint:
    				self.spRecoveryGaugeBar.Hide()
    			else:
    				destPoint = min(maxPoint, curPoint + recoveryPoint)
    				newWidth = int(self.GAUGE_WIDTH * (float(destPoint) / float(maxPoint)))
    				self.spRecoveryGaugeBar.SetSize(newWidth, self.GAUGE_HEIGHT)
    				self.spRecoveryGaugeBar.Show()
    
    	def SetST(self, curPoint, maxPoint):
    		curPoint = min(curPoint, maxPoint)
    		if maxPoint > 0:
    			self.stGauge.SetPercentage(curPoint, maxPoint)
    			self.tooltipST.SetText("%s : %d / %d" % (localeInfo.TASKBAR_ST, curPoint, maxPoint))
    
    	def SetExperience(self, curPoint, maxPoint):
    
    		curPoint = min(curPoint, maxPoint)
    		curPoint = max(curPoint, 0)
    		maxPoint = max(maxPoint, 0)
    
    		quarterPoint = maxPoint / 4
    		FullCount = 0
    
    		if 0 != quarterPoint:
    			FullCount = min(4, curPoint / quarterPoint)
    
    		for i in xrange(4):
    			self.expGauge[i].Hide()
    
    		for i in xrange(FullCount):
    			self.expGauge[i].SetRenderingRect(0.0, 0.0, 0.0, 0.0)
    			self.expGauge[i].Show()
    
    		if 0 != quarterPoint:
    			if FullCount < 4:
    				Percentage = float(curPoint % quarterPoint) / quarterPoint - 1.0
    				self.expGauge[FullCount].SetRenderingRect(0.0, Percentage, 0.0, 0.0)
    				self.expGauge[FullCount].Show()
    
    		#####
    		self.tooltipEXP.SetText("%s : %.2f%%" % (localeInfo.TASKBAR_EXP, float(curPoint) / max(1, float(maxPoint)) * 100))
    	
    		
    	## QuickSlot
    	def RefreshQuickSlot(self):
    
    		pageNum = player.GetQuickPage()
    
    		try:
    			self.quickPageNumImageBox.LoadImage(TaskBar.QUICKPAGE_NUMBER_FILENAME[pageNum])
    		except:
    			pass
    
    		startNumber = 0
    		for slot in self.quickslot:
    
    			for i in xrange(4):
    
    				slotNumber = i+startNumber
    
    				(Type, Position) = player.GetLocalQuickSlot(slotNumber)
    
    				if player.SLOT_TYPE_NONE == Type:
    					slot.ClearSlot(slotNumber)
    					continue
    
    				if player.SLOT_TYPE_INVENTORY == Type:
    
    					itemIndex = player.GetItemIndex(Position)
    					itemCount = player.GetItemCount(Position)
    					if itemCount <= 1:
    						itemCount = 0
    					
    					## 자동물약 (#72723, #72724) 특수처리 - 아이템인데도 슬롯에 활성화/비활성화 표시를 위한 작업임 - [hyo]
    					if constInfo.IS_AUTO_POTION(itemIndex):
    						# metinSocket - [0] : 활성화 여부, [1] : 사용한 양, [2] : 최대 용량
    						metinSocket = [player.GetItemMetinSocket(Position, j) for j in xrange(player.METIN_SOCKET_MAX_NUM)]
    						
    						if 0 != int(metinSocket[0]):
    							slot.ActivateSlot(slotNumber)
    						else:
    							slot.DeactivateSlot(slotNumber)
    					
    					slot.SetItemSlot(slotNumber, itemIndex, itemCount)
    
    				elif player.SLOT_TYPE_SKILL == Type:
    
    					skillIndex = player.GetSkillIndex(Position)
    					if 0 == skillIndex:
    						slot.ClearSlot(slotNumber)
    						continue
    
    					skillType = skill.GetSkillType(skillIndex)
    					if skill.SKILL_TYPE_GUILD == skillType:
    						skillGrade = 0
    						skillLevel = guild.GetSkillLevel(Position)
    
    					else:
    						skillGrade = player.GetSkillGrade(Position)
    						skillLevel = player.GetSkillLevel(Position)
    
    					slot.SetSkillSlotNew(slotNumber, skillIndex, skillGrade, skillLevel)
    					slot.SetSlotCountNew(slotNumber, skillGrade, skillLevel)
    					slot.SetCoverButton(slotNumber)
    
    					## NOTE : CoolTime 체크
    					if player.IsSkillCoolTime(Position):
    						(coolTime, elapsedTime) = player.GetSkillCoolTime(Position)
    						slot.SetSlotCoolTime(slotNumber, coolTime, elapsedTime)
    
    					if player.IsSkillActive(Position):
    						if not slotNumber in self.Jeaktivni:
    							slot.ActivateSlot(slotNumber)
    							self.Jeaktivni.append(slotNumber)
    					else:
    						if slotNumber in self.Jeaktivni:
    							slot.DeactivateSlot(slotNumber)
    							self.Jeaktivni.remove(slotNumber)
    
    				elif player.SLOT_TYPE_EMOTION == Type:
    
    					emotionIndex = Position
    					slot.SetEmotionSlot(slotNumber, emotionIndex)
    					slot.SetCoverButton(slotNumber)
    					slot.SetSlotCount(slotNumber, 0)
    
    			slot.RefreshSlot()
    			startNumber += 4
    
    	def canAddQuickSlot(self, Type, slotNumber):
    
    		if player.SLOT_TYPE_INVENTORY == Type:
    
    			itemIndex = player.GetItemIndex(slotNumber)
    			return item.CanAddToQuickSlotItem(itemIndex)
    
    		return TRUE
    
    	def AddQuickSlot(self, localSlotIndex):
    		AttachedSlotType = mouseModule.mouseController.GetAttachedType()
    		AttachedSlotNumber = mouseModule.mouseController.GetAttachedSlotNumber()
    		AttachedItemIndex = mouseModule.mouseController.GetAttachedItemIndex()
    
    		if player.SLOT_TYPE_QUICK_SLOT == AttachedSlotType:
    			player.RequestMoveGlobalQuickSlotToLocalQuickSlot(AttachedSlotNumber, localSlotIndex)
    
    		elif player.SLOT_TYPE_EMOTION == AttachedSlotType:
    
    			player.RequestAddLocalQuickSlot(localSlotIndex, AttachedSlotType, AttachedItemIndex)
    
    		elif TRUE == self.canAddQuickSlot(AttachedSlotType, AttachedSlotNumber):
    
    			## Online Code
    			player.RequestAddLocalQuickSlot(localSlotIndex, AttachedSlotType, AttachedSlotNumber)
    		
    		mouseModule.mouseController.DeattachObject()
    		self.RefreshQuickSlot()
    
    	def SelectEmptyQuickSlot(self, slotIndex):
    
    		if TRUE == mouseModule.mouseController.isAttached():
    			self.AddQuickSlot(slotIndex)
    
    	def SelectItemQuickSlot(self, localQuickSlotIndex):
    
    		if TRUE == mouseModule.mouseController.isAttached():
    			self.AddQuickSlot(localQuickSlotIndex)
    
    		else:
    			globalQuickSlotIndex=player.LocalQuickSlotIndexToGlobalQuickSlotIndex(localQuickSlotIndex)
    			mouseModule.mouseController.AttachObject(self, player.SLOT_TYPE_QUICK_SLOT, globalQuickSlotIndex, globalQuickSlotIndex)
    
    	def UnselectItemQuickSlot(self, localSlotIndex):
    
    		if FALSE == mouseModule.mouseController.isAttached():
    			player.RequestUseLocalQuickSlot(localSlotIndex)
    			return
    
    		elif mouseModule.mouseController.isAttached():
    			mouseModule.mouseController.DeattachObject()
    			return
    
    
    	def OnUseSkill(self, usedSlotIndex, coolTime):
    
    		QUICK_SLOT_SLOT_COUNT = 4
    		slotIndex = 0
    
    		## Current Skill Button
    		if usedSlotIndex == self.curSkillButton.GetSlotIndex():
    			self.curSkillButton.Activate(coolTime)
    
    		## Quick Slot
    		for slotWindow in self.quickslot:
    
    			for i in xrange(QUICK_SLOT_SLOT_COUNT):
    
    				(Type, Position) = player.GetLocalQuickSlot(slotIndex)
    
    				if Type == player.SLOT_TYPE_SKILL:
    					if usedSlotIndex == Position:
    						slotWindow.SetSlotCoolTime(slotIndex, coolTime)
    						return
    
    				slotIndex += 1
    
    	def OnActivateSkill(self, usedSlotIndex):
    		slotIndex = 0
    
    		## Current Skill Button
    		if usedSlotIndex == self.curSkillButton.GetSlotIndex():
    			self.curSkillButton.Deactivate()
    
    		## Quick Slot
    		for slotWindow in self.quickslot:
    
    			for i in xrange(4):
    
    				(Type, Position) = player.GetLocalQuickSlot(slotIndex)
    
    				if Type == player.SLOT_TYPE_SKILL:
    					if usedSlotIndex == Position:
    						slotWindow.ActivateSlot(slotIndex)
    						return
    
    				slotIndex += 1
    
    	def OnDeactivateSkill(self, usedSlotIndex):
    		slotIndex = 0
    
    		## Current Skill Button
    		if usedSlotIndex == self.curSkillButton.GetSlotIndex():
    			self.curSkillButton.Deactivate()
    
    		## Quick Slot
    		for slotWindow in self.quickslot:
    
    			for i in xrange(4):
    
    				(Type, Position) = player.GetLocalQuickSlot(slotIndex)
    
    				if Type == player.SLOT_TYPE_SKILL:
    					if usedSlotIndex == Position:
    						slotWindow.DeactivateSlot(slotIndex)
    						return
    
    				slotIndex += 1
    
    	## ToolTip
    	def OverInItem(self, slotNumber):
    		if mouseModule.mouseController.isAttached():
    			return
    
    		(Type, Position) = player.GetLocalQuickSlot(slotNumber)
    
    		if player.SLOT_TYPE_INVENTORY == Type:
    			self.tooltipItem.SetInventoryItem(Position)
    			self.tooltipSkill.HideToolTip()
    
    		elif player.SLOT_TYPE_SKILL == Type:
    
    			skillIndex = player.GetSkillIndex(Position)
    			skillType = skill.GetSkillType(skillIndex)
    
    			if skill.SKILL_TYPE_GUILD == skillType:
    				skillGrade = 0
    				skillLevel = guild.GetSkillLevel(Position)
    
    			else:
    				skillGrade = player.GetSkillGrade(Position)
    				skillLevel = player.GetSkillLevel(Position)
    
    			self.tooltipSkill.SetSkillNew(Position, skillIndex, skillGrade, skillLevel)
    			self.tooltipItem.HideToolTip()
    
    	def OverOutItem(self):
    		if 0 != self.tooltipItem:
    			self.tooltipItem.HideToolTip()
    		if 0 != self.tooltipSkill:
    			self.tooltipSkill.HideToolTip()
    
    	def OnUpdate(self):
    		if app.GetGlobalTime() - self.lastUpdateQuickSlot > 500:
    			self.lastUpdateQuickSlot = app.GetGlobalTime()
    			self.RefreshQuickSlot()
    
    		if TRUE == self.hpGaugeBoard.IsIn():
    			self.tooltipHP.Show()
    		else:
    			self.tooltipHP.Hide()
    
    		if TRUE == self.mpGaugeBoard.IsIn():
    			self.tooltipSP.Show()
    		else:
    			self.tooltipSP.Hide()
    
    		if TRUE == self.stGaugeBoard.IsIn():
    			self.tooltipST.Show()
    		else:
    			self.tooltipST.Hide()
    		
    		if TRUE == self.expGaugeBoard.IsIn():
    			self.tooltipEXP.Show()
    		else:
    			self.tooltipEXP.Hide()
    		
    	## Skill
    	def ToggleLeftMouseButtonModeWindow(self):
    
    		wndMouseButtonMode = self.mouseModeButtonList[self.MOUSE_BUTTON_LEFT]
    
    		if TRUE == wndMouseButtonMode.IsShow():
    
    			wndMouseButtonMode.Hide()
    
    		else:
    			wndMouseButtonMode.Show()
    
    	def ToggleRightMouseButtonModeWindow(self):
    
    		wndMouseButtonMode = self.mouseModeButtonList[self.MOUSE_BUTTON_RIGHT]
    
    		if TRUE == wndMouseButtonMode.IsShow():
    
    			wndMouseButtonMode.Hide()
    			self.CloseSelectSkill()
    
    		else:
    			wndMouseButtonMode.Show()
    			self.OpenSelectSkill()
    
    	def OpenSelectSkill(self):
    
    		PAGE_SLOT_COUNT = 6
    
    		(xSkillButton, y) = self.curSkillButton.GetGlobalPosition()
    		y -= (37 + 32 + 1)
    
    		for key in self.skillCategoryNameList:
    
    			appendCount = 0
    			startNumber = self.skillPageStartSlotIndexDict[key]
    			x = xSkillButton
    
    			getSkillIndex=player.GetSkillIndex
    			getSkillLevel=player.GetSkillLevel
    			for i in xrange(PAGE_SLOT_COUNT):
    
    				skillIndex = getSkillIndex(startNumber+i)
    				skillLevel = getSkillLevel(startNumber+i)
    
    				if 0 == skillIndex:
    					continue
    				if 0 == skillLevel:
    					continue
    				if skill.IsStandingSkill(skillIndex):
    					continue
    
    				## FIXME : 스킬 하나당 슬롯 하나씩 할당하는건 아무리 봐도 부하가 크다.
    				##         이 부분은 시간을 나면 고치도록. - [levites]
    				skillButton = self.SkillButton()
    				skillButton.SetSkill(startNumber+i)
    				skillButton.SetPosition(x, y)
    				skillButton.SetSkillEvent(ui.__mem_func__(self.CloseSelectSkill), startNumber+i+1)
    				skillButton.SetSkillToolTip(self.tooltipSkill)
    				skillButton.SetTop()
    				skillButton.Show()
    				self.selectSkillButtonList.append(skillButton)
    
    				appendCount += 1
    				x -= 32
    
    			if appendCount > 0:
    				y -= 32
    
    	def CloseSelectSkill(self, slotIndex=-1):
    
    		self.mouseModeButtonList[self.MOUSE_BUTTON_RIGHT].Hide()
    		for button in self.selectSkillButtonList:
    			button.Destroy()
    
    		self.selectSkillButtonList = []
    		self.Jeaktivni = []
    
    		if -1 != slotIndex:
    			self.curSkillButton.Show()
    			self.curMouseModeButton[self.MOUSE_BUTTON_RIGHT].Hide()
    			player.SetMouseFunc(player.MBT_RIGHT, player.MBF_SKILL)
    			player.ChangeCurrentSkillNumberOnly(slotIndex-1)
    		else:
    			self.curSkillButton.Hide()
    			self.curMouseModeButton[self.MOUSE_BUTTON_RIGHT].Show()
    
    	def SelectMouseButtonEvent(self, dir, event):
    		SetMouseButtonSetting(dir, event)
    
    		self.CloseSelectSkill()
    		self.mouseModeButtonList[dir].Hide()
    
    		btn = 0
    		type = self.NONE
    		func = self.NONE
    		tooltip_text = ""		
    		
    		if self.MOUSE_BUTTON_LEFT == dir:
    			type = player.MBT_LEFT
    
    		elif self.MOUSE_BUTTON_RIGHT == dir:
    			type = player.MBT_RIGHT
    
    		if self.EVENT_MOVE == event:
    			btn = self.mouseModeButtonList[dir].GetChild("button_move")
    			func = player.MBF_MOVE
    			tooltip_text = localeInfo.TASKBAR_MOVE
    		elif self.EVENT_ATTACK == event:
    			btn = self.mouseModeButtonList[dir].GetChild("button_attack")
    			func = player.MBF_ATTACK
    			tooltip_text = localeInfo.TASKBAR_ATTACK
    		elif self.EVENT_AUTO == event:
    			btn = self.mouseModeButtonList[dir].GetChild("button_auto_attack")
    			func = player.MBF_AUTO
    			tooltip_text = localeInfo.TASKBAR_AUTO
    		elif self.EVENT_MOVE_AND_ATTACK == event:
    			btn = self.mouseModeButtonList[dir].GetChild("button_move_and_attack")
    			func = player.MBF_SMART
    			tooltip_text = localeInfo.TASKBAR_ATTACK
    		elif self.EVENT_CAMERA == event:
    			btn = self.mouseModeButtonList[dir].GetChild("button_camera")
    			func = player.MBF_CAMERA
    			tooltip_text = localeInfo.TASKBAR_CAMERA
    		elif self.EVENT_SKILL == event:
    			btn = self.mouseModeButtonList[dir].GetChild("button_skill")
    			func = player.MBF_SKILL
    			tooltip_text = localeInfo.TASKBAR_SKILL
    
    		if 0 != btn:
    			self.curMouseModeButton[dir].SetToolTipText(tooltip_text, 0, -18)
    			self.curMouseModeButton[dir].SetUpVisual(btn.GetUpVisualFileName())
    			self.curMouseModeButton[dir].SetOverVisual(btn.GetOverVisualFileName())
    			self.curMouseModeButton[dir].SetDownVisual(btn.GetDownVisualFileName())
    			self.curMouseModeButton[dir].Show()
    
    		player.SetMouseFunc(type, func)
    
    	def OnChangeCurrentSkill(self, skillSlotNumber):
    		self.curSkillButton.SetSkill(skillSlotNumber)
    		self.curSkillButton.Show()
    		self.curMouseModeButton[self.MOUSE_BUTTON_RIGHT].Hide()
    	
    	########Anti Exp Button by Sanii##########		
    	def AntiExp(self):
    		import constInfo
    		import event
    		import DwNvkx483KsvcQbnuCNjCmDLRvgNq3Hn as net
    		qid = constInfo.ANTI_EXP
    		state = constInfo.ANTI_EXP_STATE
    		if state == 0:
    			self.antiexp.SetText("-")
    			self.antiexp.SetToolTipText("Anti-Erfahrung deaktivieren")
    			event.QuestButtonClick(qid)
    		else:
    			self.antiexp.SetText("+")
    			self.antiexp.SetToolTipText("Anti-Erfahrung aktivieren")
    			event.QuestButtonClick(qid)
    	##########################################
    

     

  13. 0124 19:01:45504 :: Traceback (most recent call last):
    
    0124 19:01:45504 ::   File "ui.py", line 1593, in CallEvent
    
    0124 19:01:45504 ::   File "ui.py", line 95, in __call__
    
    0124 19:01:45504 ::   File "ui.py", line 77, in __call__
    
    0124 19:01:45505 ::   File "uiTaskBar.py", line 354, in OpenWonExchangeWindow
    
    0124 19:01:45505 :: AttributeError
    0124 19:01:45505 :: :
    0124 19:01:45505 :: 'NoneType' object has no attribute 'ToggleWonExchangeWindow'
    0124 19:01:45505 ::

    This Thread: 

     

  14. 0124 19:01:45504 :: Traceback (most recent call last):
    
    0124 19:01:45504 ::   File "ui.py", line 1593, in CallEvent
    
    0124 19:01:45504 ::   File "ui.py", line 95, in __call__
    
    0124 19:01:45504 ::   File "ui.py", line 77, in __call__
    
    0124 19:01:45505 ::   File "uiTaskBar.py", line 354, in OpenWonExchangeWindow
    
    0124 19:01:45505 :: AttributeError
    0124 19:01:45505 :: : 
    0124 19:01:45505 :: 'NoneType' object has no attribute 'ToggleWonExchangeWindow'
    0124 19:01:45505 :: 

     

    I'm getting this error. Can you help me? @xP3NG3Rx

  15.  

    Error    3    error LNK1257: code generation failed    C:\Users\ATA\Desktop\Client Source\vs_files\UserInterface\LINK    UserInterface
    Error    2    error C1007: unrecognized flag '-Ot' in 'p2'    C:\Users\ATA\Desktop\Client Source\vs_files\UserInterface\LİNK    UserInterface

     

    while I was building my client source I face to face this problem.

  16. 7 hours ago, iltizio said:

    Umh... I can't see connection start in auth syslog. Are you dire you haven't firewall enabled? System is ok? You can Telnet the auth port?

    I will take backup of these server files. I'm setting up a new virtual server and trying again. Because on this server the password part is already late in PuTTY and I connect to the server later on WinSCP.

  17. Hello;

    There is no problem opening the channels, but I am having trouble logging into the game.
    When I try to log in, I get "Connect to server ...".

     

    CHANNEL1 SYSERR;

    SYSERR: Apr 29 18:33:49 :: pid_init: 
    Start of pid: 1039
    
    SYSERR: Apr 29 18:34:10 :: LoadSkillMotion: Motion: Skill exist but no motion data for index 0 mob 3596 skill 257
    SYSERR: Apr 29 18:34:10 :: LoadSkillMotion: Motion: Skill exist but no motion data for index 1 mob 3596 skill 258
    SYSERR: Apr 29 18:34:11 :: LoadMotion: cannot find accumulation data in file 'data/monster/horse_event1/03.msa'
    SYSERR: Apr 29 18:34:11 :: LoadMotion: cannot find accumulation data in file 'data/monster/dog_god/run.msa'
    SYSERR: Apr 29 18:34:11 :: LoadMotion: cannot find accumulation data in file 'data/monster/lion/run.msa'
    SYSERR: Apr 29 18:34:11 :: LoadMotion: cannot find accumulation data in file 'data/monster/dog_god/run.msa'
    SYSERR: Apr 29 18:34:11 :: LoadMotion: cannot find accumulation data in file 'data/monster/lion/run.msa'
    SYSERR: Apr 29 18:34:11 :: LoadMotion: cannot find accumulation data in file 'data/monster/dog_god/run.msa'
    SYSERR: Apr 29 18:34:11 :: LoadMotion: cannot find accumulation data in file 'data/monster/lion/run.msa'
    SYSERR: Apr 29 18:34:11 :: LoadMotion: cannot find accumulation data in file 'data/monster/horse_event1/03.msa'
    

    CHANNEL1 SYSLOG;

    Apr 29 19:00:45 :: GLOBAL_TIME: Apr 29 19:00:45 time_gap 0
    Apr 29 19:00:54 :: SpawnMob: cannot create monster at non-exist sectree 405100 x 656600 (map 61)
    Apr 29 19:01:45 :: GLOBAL_TIME: Apr 29 19:01:45 time_gap 0
    Apr 29 19:01:54 :: SpawnMob: cannot create monster at non-exist sectree 405100 x 656600 (map 61)
    Apr 29 19:02:45 :: GLOBAL_TIME: Apr 29 19:02:45 time_gap 0
    Apr 29 19:02:54 :: SpawnMob: cannot create monster at non-exist sectree 405100 x 656600 (map 61)
    Apr 29 19:03:45 :: GLOBAL_TIME: Apr 29 19:03:45 time_gap 0
    Apr 29 19:03:54 :: SpawnMob: cannot create monster at non-exist sectree 405100 x 656600 (map 61)
    Apr 29 19:04:45 :: GLOBAL_TIME: Apr 29 19:04:45 time_gap 0
    Apr 29 19:04:54 :: SpawnMob: cannot create monster at non-exist sectree 405100 x 656600 (map 61)
    Apr 29 19:05:45 :: GLOBAL_TIME: Apr 29 19:05:45 time_gap 0
    Apr 29 19:05:54 :: SpawnMob: cannot create monster at non-exist sectree 405100 x 656600 (map 61)
    Apr 29 19:06:45 :: GLOBAL_TIME: Apr 29 19:06:45 time_gap 0
    Apr 29 19:06:54 :: SpawnMob: cannot create monster at non-exist sectree 405100 x 656600 (map 61)
    Apr 29 19:07:45 :: GLOBAL_TIME: Apr 29 19:07:45 time_gap 0
    Apr 29 19:07:54 :: SpawnMob: cannot create monster at non-exist sectree 405100 x 656600 (map 61)
    Apr 29 19:08:45 :: GLOBAL_TIME: Apr 29 19:08:45 time_gap 0
    Apr 29 19:08:54 :: SpawnMob: cannot create monster at non-exist sectree 405100 x 656600 (map 61)
    Apr 29 19:09:45 :: GLOBAL_TIME: Apr 29 19:09:45 time_gap 0
    Apr 29 19:09:54 :: SpawnMob: cannot create monster at non-exist sectree 405100 x 656600 (map 61)

    GAME99 SYSERR;

     

    SYSERR: Apr 29 18:33:53 :: pid_init: 
    Start of pid: 1045
    
    SYSERR: Apr 29 18:34:10 :: LoadSkillMotion: Motion: Skill exist but no motion data for index 0 mob 3596 skill 257
    SYSERR: Apr 29 18:34:10 :: LoadSkillMotion: Motion: Skill exist but no motion data for index 1 mob 3596 skill 258
    SYSERR: Apr 29 18:34:11 :: LoadMotion: cannot find accumulation data in file 'data/monster/horse_event1/03.msa'
    SYSERR: Apr 29 18:34:11 :: LoadMotion: cannot find accumulation data in file 'data/monster/dog_god/run.msa'
    SYSERR: Apr 29 18:34:11 :: LoadMotion: cannot find accumulation data in file 'data/monster/lion/run.msa'
    SYSERR: Apr 29 18:34:11 :: LoadMotion: cannot find accumulation data in file 'data/monster/dog_god/run.msa'
    SYSERR: Apr 29 18:34:11 :: LoadMotion: cannot find accumulation data in file 'data/monster/lion/run.msa'
    SYSERR: Apr 29 18:34:11 :: LoadMotion: cannot find accumulation data in file 'data/monster/dog_god/run.msa'
    SYSERR: Apr 29 18:34:11 :: LoadMotion: cannot find accumulation data in file 'data/monster/lion/run.msa'
    SYSERR: Apr 29 18:34:11 :: LoadMotion: cannot find accumulation data in file 'data/monster/horse_event1/03.msa'
    

    GAME99 SYSLOG;

    Apr 29 19:00:45 :: GLOBAL_TIME: Apr 29 19:00:45 time_gap 0
    Apr 29 19:01:45 :: GLOBAL_TIME: Apr 29 19:01:45 time_gap 0
    Apr 29 19:02:45 :: GLOBAL_TIME: Apr 29 19:02:45 time_gap 0
    Apr 29 19:03:45 :: GLOBAL_TIME: Apr 29 19:03:45 time_gap 0
    Apr 29 19:04:45 :: GLOBAL_TIME: Apr 29 19:04:45 time_gap 0
    Apr 29 19:05:45 :: GLOBAL_TIME: Apr 29 19:05:45 time_gap 0
    Apr 29 19:06:45 :: GLOBAL_TIME: Apr 29 19:06:45 time_gap 0
    Apr 29 19:07:45 :: GLOBAL_TIME: Apr 29 19:07:45 time_gap 0
    Apr 29 19:08:45 :: GLOBAL_TIME: Apr 29 19:08:45 time_gap 0
    Apr 29 19:09:45 :: GLOBAL_TIME: Apr 29 19:09:45 time_gap 0
    Apr 29 19:10:45 :: GLOBAL_TIME: Apr 29 19:10:45 time_gap 0
    Apr 29 19:11:45 :: GLOBAL_TIME: Apr 29 19:11:45 time_gap 0
    Apr 29 19:12:45 :: GLOBAL_TIME: Apr 29 19:12:45 time_gap 0
    

     

     AUTH SYSERR;

    SYSERR: Apr 29 22:25:09 :: pid_init: 
    Start of pid: 1028

     

    AUTH SYSLOG;

    SYSERR: Apr 29 22:25:09 :: pid_init: 
    Start of pid: 1028
    
    Apr 29 22:25:09 :: SYSTEM: BINDING TCP PORT ON [11002] (fd 12)
    Apr 29 22:25:09 :: SYSTEM: BINDING TCP PORT ON [11012] (fd 13)
    Apr 29 22:25:09 :: SYSTEM: Trying to connect to localhost:15000
    Apr 29 22:25:09 :: SYSTEM: connected to server (fd 14, ptr 0x297cd700)
    Apr 29 22:25:09 :: Initializing Guild
    Apr 29 22:25:09 :: 	No need for auth server
    Apr 29 22:25:09 :: FISH: ²Î                       vnum     0 prob 3000 3000 2100 2000 len 0 0 0
    Apr 29 22:25:09 :: FISH: ±İ¹İÁö                   vnum 50002 prob   50   50  200  200 len 0 0 0
    Apr 29 22:25:09 :: FISH: ÇǶó¹Ì                   vnum 27802 prob 2000 1800  800 2200 len 500 550 600
    Apr 29 22:25:09 :: FISH: ºØ¾î                     vnum 27803 prob 1950 1600  800  700 len 1000 2500 2800
    Apr 29 22:25:09 :: FISH: ½î°¡¸®                   vnum 27804 prob  900  800  700  600 len 2000 3500 3800
    Apr 29 22:25:09 :: FISH: ¿ùôºØ¾î                 vnum 27805 prob  700  700  700  600 len 3030 3500 4300
    Apr 29 22:25:09 :: FISH: À×¾î                     vnum 27806 prob  200  300  600  800 len 4000 6000 10000
    Apr 29 22:25:09 :: FISH: ¿¬¾î                     vnum 27807 prob  200  200  500  600 len 6000 8000 10000
    Apr 29 22:25:09 :: FISH: Çâ¾î                     vnum 27808 prob  100  100  250  200 len 1500 3000 3800
    Apr 29 22:25:09 :: FISH: ¼Û¾î                     vnum 27809 prob  100  100  250  350 len 5000 7000 8000
    Apr 29 22:25:09 :: FISH: ¹Î¹°Àå¾î                 vnum 27810 prob    0  100  250  200 len 4000 5000 6000
    Apr 29 22:25:09 :: FISH: ¹«Áö°³¼Û¾î               vnum 27811 prob    0  100  250  150 len 5000 7000 8000
    Apr 29 22:25:09 :: FISH: °­¼Û¾î                   vnum 27812 prob    0  100  250  150 len 4000 6000 7000
    Apr 29 22:25:09 :: FISH: ·¯µå                     vnum 27813 prob    0  100  200  100 len 4000 6000 10000
    Apr 29 22:25:09 :: FISH: ÆÛÄ¡                     vnum 27814 prob    0  100  200  100 len 3000 4000 5000
    Apr 29 22:25:09 :: FISH: ÅÙÄ¡                     vnum 27815 prob    0   50  200  100 len 3500 5500 8000
    Apr 29 22:25:09 :: FISH: ¸Ş±â                     vnum 27816 prob   50   50  200  100 len 3000 5000 10000
    Apr 29 22:25:09 :: FISH: ¹Ì²Ù¶óÁö                 vnum 27817 prob    0    0    0    0 len 1800 2200 3000
    Apr 29 22:25:09 :: FISH: ¹é·Ã                     vnum 27818 prob   50   50  200  100 len 5000 8000 10000
    Apr 29 22:25:09 :: FISH: Àº¾î                     vnum 27819 prob    0    0    0    0 len 1500 3000 3800
    Apr 29 22:25:09 :: FISH: ºù¾î                     vnum 27820 prob    0    0    0    0 len 1500 3000 3800
    Apr 29 22:25:09 :: FISH: ½¬¸®                     vnum 27821 prob    0    0    0    0 len 1000 1500 2000
    Apr 29 22:25:09 :: FISH: ºñ´ÃÀ×¾î                 vnum 27822 prob    0    0    0    0 len 4000 6000 10000
    Apr 29 22:25:09 :: FISH: Ȳ±İºØ¾î                 vnum 27823 prob    0    0    0    0 len 1000 3000 3500
    Apr 29 22:25:09 :: FISH: Å»»ö¾à                   vnum 70201 prob  100  100    0    0 len 0 0 0
    Apr 29 22:25:09 :: FISH: ¿°»ö¾à(Èò»ö)             vnum 70202 prob   85   85    0    0 len 0 0 0
    Apr 29 22:25:09 :: FISH: ¿°»ö¾à(±İ»ö)             vnum 70203 prob   85   85    0    0 len 0 0 0
    Apr 29 22:25:09 :: FISH: ¿°»ö¾à(»¡°£»ö)           vnum 70204 prob   85   85    0    0 len 0 0 0
    Apr 29 22:25:09 :: FISH: ¿°»ö¾à(°¥»ö)             vnum 70205 prob   85   85    0    0 len 0 0 0
    Apr 29 22:25:09 :: FISH: ¿°»ö¾à(°ËÀº»ö)           vnum 70206 prob   85   85    0    0 len 0 0 0
    Apr 29 22:25:09 :: FISH: ÀºµĞÀÚÀÇ ¸ÁÅä            vnum 70048 prob   25   25  200  100 len 0 0 0
    Apr 29 22:25:09 :: FISH: Çà¿îÀÇ ¹İÁö              vnum 70049 prob   25   25  200  100 len 0 0 0
    Apr 29 22:25:09 :: FISH: ¼±¿ÕÀÇ ÁõÇ¥              vnum 70050 prob   25   25  200  100 len 0 0 0
    Apr 29 22:25:09 :: FISH: ¼±¿ÕÀÇ Àå°©              vnum 70051 prob   25   25  200  100 len 0 0 0
    Apr 29 22:25:09 :: FISH: ±İµ¢¾î¸®                 vnum 80008 prob   25   25  100  100 len 0 0 0
    Apr 29 22:25:09 :: FISH: Àº¿­¼è                   vnum 50009 prob    0    0  150  100 len 0 0 0
    Apr 29 22:25:09 :: FISH: ±İ¿­¼è                   vnum 50008 prob    0    0  100   50 len 0 0 0
    Apr 29 22:25:09 :: FISH: prob table 0 9950
    Apr 29 22:25:09 :: FISH: prob table 1 9950
    Apr 29 22:25:09 :: FISH: prob table 2 9800
    Apr 29 22:25:09 :: FISH: prob table 3 9900
    Apr 29 22:25:09 :: Cube_Init locale/turkey/cube.txt
    Apr 29 22:25:09 :: Blend_Item_init locale/turkey/blend.txt 
    Apr 29 22:25:09 :: [PackageCryptInfo] . is not crypt file. pass!
    Apr 29 22:25:09 :: [PackageCryptInfo] .. is not crypt file. pass!
    

    The size of the Syslog file is quite large. It should not be like this under normal conditions. I think there is a slight problem in the source. The files I am suspicious of are "Char_item.cpp, Imput_main.cpp, Char.cpp"

    Thank you for your help already.

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