Register for your free account! | Forgot your password?

Go Back   elitepvpers › MMORPGs › Flyff › Flyff Private Server
You last visited: Today at 11:56

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



end of file found before left brace line : 1664

Discussion on end of file found before left brace line : 1664 within the Flyff Private Server forum part of the Flyff category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Aug 2014
Posts: 113
Received Thanks: 36
end of file found before left brace line : 1664

Hey guys im using VS2012 im trying to make a clean v16 source based on the v15 one , im adding item link but when i compile i get this error :

Code:
1>..\_Interface\WndCommunication.cpp(1830): fatal error C1075: end of file found before the left brace '{' at '..\_Interface\WndCommunication.cpp(1644)' was matched
i searched on google didn't find solution , and here's my WndCommunication :

Code:
#include "stdafx.h"
#include "defineText.h"
#include "AppDefine.h"
#include "WndCommand.h"
#include "party.h"

#include "WndManager.h"

#include "WndChatFilter.h"

#include "DPClient.h"
extern	CDPClient	g_DPlay;


#define		MAX_HISTORY_STRING		20

CWndEditChat::CWndEditChat()
{
}
CWndEditChat::~CWndEditChat()
{
}
void CWndEditChat::OnLButtonDown(UINT nFlags, CPoint point)
{
	CWndChat* pWndChat = (CWndChat*) m_pParentWnd;
	if( pWndChat->m_pWndCommand )
		pWndChat->m_pWndCommand->Destroy();
	CWndEdit::OnLButtonDown( nFlags, point );
}
void CWndEditChat::OnSetFocus(CWndBase* pOldWnd)
{
	if( m_string.IsEmpty() )
	{
		CWndChat* pWndChat = (CWndChat*) m_pParentWnd;	

		if( pWndChat->m_pWndCommand == NULL )
		{
			if( pWndChat->m_nChatChannel == CHATSTY_GENERAL )
			{
			}
			else
			if( pWndChat->m_nChatChannel == CHATSTY_WHISPER )
			{
				CString string;
				if(  pWndChat->m_strCharName.IsEmpty() )
					string.Format( "/w " );
				else
					string.Format( "/w %s ", pWndChat->m_strCharName );
				SetString( string );
			}
			else
			if( pWndChat->m_nChatChannel == CHATSTY_SHOUT )
			{
				SetString( "/s " );
			}
			else
			if( pWndChat->m_nChatChannel == CHATSTY_PARTY )
			{
				SetString( "/p " );
			}
			else
			if( pWndChat->m_nChatChannel == CHATSTY_GUILD )
			{
				SetString( "/g " );
			}
		}
	}


	CWndEdit::OnSetFocus( pOldWnd );
}
void CWndEditChat::OnKillFocus(CWndBase* pNewWnd)
{
	CWndChat* pWndChat = (CWndChat*) m_pParentWnd;
	if( pWndChat->m_pWndCommand && this!= pNewWnd )
		pWndChat->m_pWndCommand->Destroy();
	CWndEdit::OnKillFocus( pNewWnd );
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// 채팅 윈도 
//
/////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////

CWndMacroChat::CWndMacroChat()
{
}
CWndMacroChat::~CWndMacroChat()
{
}
void CWndMacroChat::OnDraw( C2DRender* p2DRender )
{
	CWndChat* pWndChat = (CWndChat*)g_WndMng.GetApplet( APP_COMMUNICATION_CHAT );
	CWndEditChat* pWndEdit = &pWndChat->m_wndEdit;//GetDlgItem( WIDC_EDIT );
	if( pWndEdit->m_string.IsEmpty() == FALSE )
		p2DRender->RenderTexture( CPoint( 0, 0 ), &m_texMacroChat );
}
void CWndMacroChat::OnLButtonDown(UINT nFlags, CPoint point)
{
	CWndChat* pWndChat = (CWndChat*)g_WndMng.GetApplet( APP_COMMUNICATION_CHAT );
	CWndEditChat* pWndEdit = &pWndChat->m_wndEdit;//GetDlgItem( WIDC_EDIT );
	if( pWndEdit->m_string.IsEmpty() == FALSE )
	{
		CWndChat* pWndChat = (CWndChat*)g_WndMng.GetApplet( APP_COMMUNICATION_CHAT );
		m_GlobalShortcut.m_dwShortcut = SHORTCUT_CHAT;
		m_GlobalShortcut.m_pFromWnd = this;
		m_GlobalShortcut.m_pTexture = m_pTexMacro; //.m_pFromWnd   = this;
		m_GlobalShortcut.m_dwData = 0;
		//CWndEdit* pWndEdit = (CWndEdit*)pWndChat->GetDlgItem( WIDC_EDIT );
		//strcpy( m_GlobalShortcut.m_szString, pWndEdit->m_string );

		CString strFormat;
		strFormat = pWndEdit->m_string;

		pWndEdit->m_string.GetTextFormat(strFormat);
		
		if( pWndEdit->m_string.GetLength() >= MAX_SHORTCUT_STRING-1 )
		{
			memcpy( m_GlobalShortcut.m_szString, strFormat, MAX_SHORTCUT_STRING-1 );
		}
		else
		{
			strcpy( m_GlobalShortcut.m_szString, strFormat );
		}
	}
}

void CWndMacroChat::OnMouseMove(UINT nFlags, CPoint point)
{
}
void CWndMacroChat::OnInitialUpdate()
{
	//m_ptexMacroe.LoadTexture( m_pApp->m_pd3dDevice, MakePath( DIR_ICON, "icon_MacroChat.dds" ), 0xffff00ff );
	m_pTexMacro = m_textureMng.AddTexture( m_pApp->m_pd3dDevice, MakePath( DIR_ICON, "icon_MacroChat.dds" ), 0xffff00ff );//, bMyLoader );
	m_texMacroChat.LoadTexture( m_pApp->m_pd3dDevice, MakePath( DIR_THEME, "wndButtMacroChat.bmp" ), 0xffff00ff );
}
CWndTextChat::CWndTextChat()
{
}
CWndTextChat::~CWndTextChat()
{
}
BOOL CWndTextChat::IsPickupSpace( CPoint point )
{
	return FALSE;
}
int CWndChat::m_nChatChannel = CHATSTY_GENERAL;

CWndChat::CWndChat()
{
	m_pWndCommand = NULL;
//	m_timerInsMsg.Set( MIN( 1 ) );
	m_timerInsMsg.Set( MIN( 2 ) );  // 도움말 표시 간격 증가
#ifdef __CSC_GAME_GRADE
	m_timerAlertGGrade.Set( MIN(60) );
#endif //__CSC_GAME_GRADE
	m_nInsMsgCnt = 0;
	m_bChatLock = FALSE;
	m_bMoveLock = FALSE;
	m_pWndChatFilter = NULL;
	m_nHistoryIndex = 0;
#if __VER >= 8 //__CSC_VER8_1
	m_bChatLog = FALSE;
#endif //__CSC_VER8_1
#ifdef __ITEM_LINK
	m_pWndLinkedItem = NULL;
#endif
}
CWndChat::~CWndChat()
{
	SAFE_DELETE( m_pWndCommand );
	SAFE_DELETE( m_pWndChatFilter );
	#ifdef __ITEM_LINK
	SAFE_DELETE(m_pWndLinkedItem);
#endif
}
void CWndChat::OnDraw(C2DRender* p2DRender)
{
	if( g_pPlayer == NULL )
		return;
	//if( timer.IsTimeOut() )
	//{
	//	timer.Set( SEC( 10 ) );
	//	if( szMessage[ nMsgCnt ][0] )
	//		PutString( szMessage[ nMsgCnt ++ ] );
	//}
	if( g_Option.m_nInstantHelp )
	{
		CString string;
		if( m_strArray.GetSize() && m_timerInsMsg.TimeOut() )
		{
			m_timerInsMsg.Reset();
			//string = "[도움말] ";
			string  = prj.GetText(TID_SYS_HELP);
			string += " ";
			string += m_strArray.GetAt( m_nInsMsgCnt );
			g_WndMng.PutString( string, NULL, 0xffffff00, CHATSTY_HELP );
			m_nInsMsgCnt++;
			if( m_nInsMsgCnt == m_strArray.GetSize() )
				m_nInsMsgCnt = 0;
		}
	}

#ifdef __CSC_GAME_GRADE
	if(m_timerAlertGGrade.TimeOut())
	{
		m_timerAlertGGrade.Reset();
		//PK�*버 구분  12세 or 15세
		if(g_eLocal.GetState( EVE_PK ))
			g_WndMng.PutString( prj.GetText(TID_SYS_ALERTGGRADE_PK), NULL, 0xffffff00, CHATSTY_HELP );
		else
			g_WndMng.PutString( prj.GetText(TID_SYS_ALERTGGRADE_NONPK), NULL, 0xffffff00, CHATSTY_HELP );		
	}
#endif //__CSC_GAME_GRADE

	CWndButton* pWndRadio4 = (CWndButton*)GetDlgItem( WIDC_RADIO4 ); // party
	CWndButton* pWndRadio5 = (CWndButton*)GetDlgItem( WIDC_RADIO5 ); // guild

	pWndRadio4->EnableWindow( g_Party.IsMember( g_pPlayer->m_idPlayer ) );
	pWndRadio5->EnableWindow( g_pPlayer->GetGuild() == NULL ? FALSE : TRUE );

	if( ::GetLanguage() == LANG_KOR || ::GetLanguage() == LANG_TWN || ::GetLanguage() == LANG_HK )
	{
		static TCHAR text[12] = { 0 };
		static wchar_t* wText = g_imeMgr.GetStringIndicator();

		if( wText )
		{
			CWndStatic* pWndStatic = (CWndStatic*)GetDlgItem( WIDC_STATIC1 ); 

			if( pWndStatic )
			{
				WideCharToMultiByteEx(g_imeMgr.m_codePage, 0, wText, wcslen(wText), text, 12, NULL, NULL);		
				
				pWndStatic->m_dwColor = D3DCOLOR_ARGB( 255, 50, 50, 220 );

				if( PRIMARYLANGID(g_imeMgr.m_hkl)==LANG_KOREAN )
				{
					if( g_imeMgr.GetImeState() == 0 )
					{
						_tcscpy( text, "En" );
					}
				}
				else
				if( PRIMARYLANGID(g_imeMgr.m_hkl)==LANG_CHINESE )
				{
					static wchar_t wTextCh[3][3] = 
					{ 
						L"\x6CE8", 
						L"\x65B0", 
						L"\x5176", 
					};
					
					if( g_imeMgr.IsNewPhonetic() )
					{
						if( g_imeMgr.GetImeState() == 2 )
							_tcscpy( text, "En" );
						else
							WideCharToMultiByteEx(g_imeMgr.m_codePage, 0, wTextCh[1], wcslen(wTextCh[1]), text, 12, NULL, NULL);		
					}
					else
					if( g_imeMgr.IsPhonetic() )
					{
						if( g_imeMgr.GetImeState() == 0 )
							_tcscpy( text, "En" );
						else	
							WideCharToMultiByteEx(g_imeMgr.m_codePage, 0, wTextCh[0], wcslen(wTextCh[0]), text, 12, NULL, NULL);		
					}
					else
					{
						if( g_imeMgr.GetImeState() == 0 )
							_tcscpy( text, "En" );
						else	
							WideCharToMultiByteEx(g_imeMgr.m_codePage, 0, wTextCh[2], wcslen(wTextCh[2]), text, 12, NULL, NULL);		
					}
				}
				pWndStatic->SetTitle( text );
			}
		}
	}
}
void CWndChat::OnInitialUpdate()
{
	CWndNeuz::OnInitialUpdate();

	//AddWndStyle( WBS_THICKFRAME );

	m_timerDobe.Set( SEC( 5 ) );

	LPWNDCTRL lpWndCtrl = GetWndCtrl( WIDC_MACRO_CHAT );
	LPWNDCTRL lpWndText = GetWndCtrl( WIDC_CUSTOM1 );
	m_wndMacroChat.Create( "g", WBS_NODRAWFRAME, lpWndCtrl->rect, this, WIDC_MACRO_CHAT );
	m_wndMacroChat.AddWndStyle( WBS_NODRAWFRAME );

	lpWndCtrl = GetWndCtrl( WIDC_EDIT );
	m_wndEdit.Create( g_Neuz.GetSafeHwnd(), WBS_NODRAWFRAME, lpWndCtrl->rect, this, WIDC_EDIT );
	m_wndText.Create( WBS_NOFRAME | WBS_NODRAWFRAME | WBS_VSCROLL, lpWndText->rect, this, WIDC_TEXT );
	CWndText* pWndText = (CWndText*)GetDlgItem( WIDC_TEXT );
	CWndEdit* pWndHead = (CWndEdit*)GetDlgItem( WIDC_HEAD );
	CWndEdit* pWndEdit = (CWndEdit*)GetDlgItem( WIDC_EDIT );

	if( g_pPlayer->IsAuthHigher( AUTH_GAMEMASTER ) )
	{
		pWndText->m_bEnableClipboard = TRUE;
		pWndHead->m_bEnableClipboard = TRUE;
		pWndEdit->m_bEnableClipboard = TRUE;
	}
	pWndEdit->SetNativeMode();

#if __VER >= 11 // __CSC_VER11_1
	CRect rectEdit = m_wndEdit.GetWndRect();
	rectEdit.left = rectEdit.left - 90;
	m_wndEdit.SetWndRect( rectEdit );

	CRect customRect = lpWndCtrl->rect;
	CWndCustom* pCustom = (CWndCustom*)GetDlgItem(WIDC_MACRO_CHAT);
	if(pCustom)
		pCustom->Move(customRect.TopLeft().x - 119, customRect.TopLeft().y);
	if(pWndHead)
	{
		pWndHead->EnableWindow(FALSE);
		pWndHead->SetVisible(FALSE);
	}
#endif //__CSC_VER11_1
	if( g_Option.m_nInstantHelp )
	{
		CScript	s;
		s.Load( MakePath( DIR_CLIENT, "InstantHelp.inc" ) );
		s.GetToken();
		while( s.tok != FINISHED )
		{
			m_strArray.Add( s.Token );
			s.GetToken();
		}
	}
	//m_strArray.

/*
	CRect rect = GetClientRect();
	rect.top = rect.bottom - 20;
	rect.right = 70;
	rect.left += 5;
	rect.DeflateRect( 1, 1 );
	m_wndBeginning.Create( g_Neuz.GetSafeHwnd(), WBS_NODRAWFRAME, rect, this, 1000);

	rect = GetClientRect();
	rect.top = rect.bottom - 20;
	rect.left = 75;
	rect.right -= 134;
	rect.DeflateRect( 1, 1 );
	//rect.left = rect.Width() * 20 / 100;
	//m_wndEdit.AddWndStyle( WBS_NODRAWFRAME );
	m_wndEdit.Create( g_Neuz.GetSafeHwnd(), WBS_NODRAWFRAME, rect, this, 1001 );
*/
//	m_texEdit.LoadTexture( m_pApp->m_pd3dDevice, MakePath( DIR_THEME, "WndChat2.bmp" ), 0xffff00ff, TRUE );
/*
	rect = GetClientRect();
	rect.top = rect.bottom - 20;
	rect.left = rect.right - 134;
	rect.right = r mnnnnft + 15;
	rect.DeflateRect( 1, 1 );
	m_wndShout.Create( " ", 0, rect, this, 1010 );

	rect = GetClientRect();
	rect.top = rect.bottom - 20;
	rect.left = rect.right - 117;
	rect.right = rect.left + 15;
	rect.DeflateRect( 1, 1 );
	m_wndParty.Create( " ", 0, rect, this, 1011 );
*/

/*
	m_wndText.AddWndStyle( WBS_VSCROLL );
	m_wndText.AddWndStyle( WBS_NOFRAME );
	m_wndText.AddWndStyle( WBS_NODRAWFRAME );
	m_wndText.Create( 0, rect, this, 1003 ); 
	m_wndText.SetFont( g_Neuz.m_Theme.m_pFontChat );
	m_wndText.m_string.Reset( m_pFont, &rect);
*/
/*
	rect = GetClientRect();
	rect.left = rect.right - 100;
	//rect.bottom -= 80;
	rect.DeflateRect( 1, 1 );
	m_wndReceiver.AddWndStyle( WBS_VSCROLL );
	m_wndReceiver.AddWndStyle( WBS_NOFRAME );
	m_wndReceiver.Create( EBS_AUTOVSCROLL, rect, this, 1002 );
	m_wndReceiver.AddString( "Vampyre\n" );
	m_wndReceiver.AddString( "Xuzhu\n" );
	m_wndReceiver.AddString( "Zodiacus\n" );
	m_wndReceiver.AddString( "Jeff\n" );
	m_wndReceiver.m_string.Reset( m_pFont, &rect);
*/

	//CWndText* pWndText = (CWndText*)GetDlgItem( WIDC_TEXT );
	SetChannel();
	CWndButton* pWndRadio1 = (CWndButton*)GetDlgItem( WIDC_RADIO1 );
	CWndButton* pWndRadio2 = (CWndButton*)GetDlgItem( WIDC_RADIO2 );
	CWndButton* pWndRadio3 = (CWndButton*)GetDlgItem( WIDC_RADIO3 );
	CWndButton* pWndRadio4 = (CWndButton*)GetDlgItem( WIDC_RADIO4 );
	CWndButton* pWndRadio5 = (CWndButton*)GetDlgItem( WIDC_RADIO5 );
	if( m_nChatChannel == CHATSTY_GENERAL ) pWndRadio1->SetCheck( TRUE );	else
	if( m_nChatChannel == CHATSTY_WHISPER ) pWndRadio2->SetCheck( TRUE );	else
	if( m_nChatChannel == CHATSTY_SHOUT   ) pWndRadio3->SetCheck( TRUE );	else
	if( m_nChatChannel == CHATSTY_PARTY   ) pWndRadio4->SetCheck( TRUE );	else
	if( m_nChatChannel == CHATSTY_GUILD   ) pWndRadio5->SetCheck( TRUE );
	//pWndText->m_string.Init(
	//pWndText->m_string = g_WndMng.m_ChatString;
	pWndText->m_nLineSpace = 2;
	//pWndText->m_string.Reset( m_pFont, &pWndText->GetClientRect() );
	
	//pWndText->
	/*
	CRect rect = GetClientRect();
	rect.bottom -= 20;
	rect.right -= 0;//100;
	rect.DeflateRect( 1, 1);
	m_wndText.SetWndRect( rect );
*/
	//LPBYTE m_wndChatEdit[3];
	//CSize sizeWndChatEdit[3];
#if __VER >= 11 // __CSC_VER11_1
	LoadTGA( MakePath( DIR_THEME, "WndChatEdit00_1.tga" ), &m_wndChatEdit[0] );
#else //__CSC_VER11_1
	LoadTGA( MakePath( DIR_THEME, "WndChatEdit00.tga" ), &m_wndChatEdit[0] );
#endif //__CSC_VER11_1
	LoadTGA( MakePath( DIR_THEME, "WndChatEdit01.tga" ), &m_wndChatEdit[1] );
#ifdef __LANG_IME_0327
	LoadTGA( MakePath( "Theme\\", ::GetLanguage(), "WndChatEdit02.tga" ), &m_wndChatEdit[2] );
#else	// __LANG_IME_0327
	LoadTGA( MakePath( DIR_THEME, "WndChatEdit02.tga" ), &m_wndChatEdit[2] );
#endif	// __LANG_IME_0327

	if( m_wndChatEdit[2].lpData == NULL )
	{
		Error( "CWndChat::OnInitialUpdate() m_wndChatEdit[2].lpData = NULL" );
		return;
	}
/*
	CRect rectRoot = m_pWndRoot->GetLayoutRect();
	CRect rectWindow = GetWindowRect();
	CPoint point( 154, rectRoot.bottom - rectWindow.Height() );
	Move( point );
*/
	CWndButton* pWndLock = (CWndButton*)GetDlgItem( WIDC_CHECK1 );
	pWndLock->SetCheck( m_bChatLock );
	CWndButton* pWndMoveLock = (CWndButton*)GetDlgItem( WIDC_MOVELOCK );
	pWndMoveLock->SetCheck( m_bMoveLock );
	CRect rectRoot = m_pWndRoot->GetLayoutRect();
	CRect rect = GetWindowRect();
	int nWidth  = rect.Width(); 
	int nHeight = rect.Height(); 
	int x = 0;//rectRoot.left + (rectRoot.Width()  / 2) - (nWidth  / 2);
	int y = rectRoot.bottom - nHeight;	
	CPoint point( x, y );
	Move( point );

	m_timerInputTimeOut.Set( SEC( 300 ) );

#if __VER >= 8 //__Y_CHAT_SYSTEM_8
	if( g_WndMng.m_pWndChatLog == NULL )
	{
		g_WndMng.m_pWndChatLog = new CWndChatLog;
		
		if( g_WndMng.m_pWndChatLog )
		{
			g_WndMng.m_pWndChatLog->Initialize( NULL, APP_CHAT_LOG );
			
			CRect rectRoot = m_pWndRoot->GetLayoutRect();
			CRect rect = GetWindowRect(TRUE);
			CRect rect2 = g_WndMng.m_pWndChatLog->GetClientRect(TRUE);
			
			int x = 0;
			int y = rect.top;
			
			if( (rect.right+rect2.Width()) < rectRoot.right )
				x = rect.right;
			else
				x = (rect.left - rect2.Width() );
			
			CPoint point( x, y );
			g_WndMng.m_pWndChatLog->Move( point );

			g_WndMng.m_pWndChatLog->SetVisible(FALSE);
		}
	}

	if( g_WndMng.m_pWndChatLog )
	{
		CWndButton* pWndCheck3  = (CWndButton*)GetDlgItem( WIDC_CHECK3 );
		if( pWndCheck3 )
			pWndCheck3->SetCheck(g_WndMng.m_pWndChatLog->m_bVisible);
	}
#endif //__Y_CHAT_SYSTEM_8
}

BOOL CWndChat::Process ()
{
	if( m_timerInputTimeOut.IsTimeOut() )
	{
		CWndText* pWndText = (CWndText*)GetDlgItem( WIDC_TEXT );

		pWndText->m_string.SetAlpha( 0 );
	}
	
	if( 0 < strlen( g_Neuz.m_szWhisperName ) )
	{
		LPCTSTR lpstr = m_wndEdit.GetString();
		BOOL bCommand = FALSE;
		if( strcmp( lpstr, "/r " ) == 0 || strcmp( lpstr, "/R " ) == 0 || ( GetLanguage() == LANG_KOR && strcmp( lpstr, "/ㄱ " ) == 0 ) )
		{
			CString strWhisper;
			strWhisper.Format( "/whisper %s ", g_Neuz.m_szWhisperName );
			m_wndEdit.SetString( strWhisper );
			m_wndEdit.SetFocus();
		}		
	}
	
	return TRUE;
}

void CWndChat::SetChannel()
{
	m_wndText.SetString( "" );

	int nChannel = 0;
	switch( CWndChat::m_nChatChannel )
	{
		case CHATSTY_GENERAL: nChannel = 0; break;
		case CHATSTY_WHISPER: nChannel = 1; break;
		case CHATSTY_SHOUT  : nChannel = 2; break;
		case CHATSTY_PARTY  : nChannel = 3; break;
		case CHATSTY_GUILD  : nChannel = 4; break;
	}
	DWORD dwChatFilter = g_Option.m_dwChatFilterEtc | g_Option.m_dwChatFilter[ nChannel ];

	for( int i = 0; i < g_WndMng.m_aChatString.GetSize(); i++ )
	{
		if( g_WndMng.m_aChatStyle.GetAt( i ) & dwChatFilter ) 
		{
			CString string = g_WndMng.m_aChatString.GetAt( i );
			m_wndText.m_string.AddParsingString( string, g_WndMng.m_aChatColor.GetAt( i ), 0x00000000, 0, PS_NOT_MACRO );
			m_wndText.m_string.AddString( "\n" );
		}
	}
	m_wndText.ResetString();
	m_wndText.m_wndScrollBar.SetMaxScrollPos();
}
void CWndChat::OnSetFocus(CWndBase* pOldWnd)
{
}
void CWndChat::OnKillFocus(CWndBase* pNewWnd)
{
	//if( m_pWndCommand && pNewWnd != m_pWndCommand )
	//	m_pWndCommand->Destroy();
}
BOOL CWndChat::Initialize(CWndBase* pWndParent,DWORD dwWndId)
{
	CRect rectWindow = m_pWndRoot->GetWindowRect();
	CRect rect( 154, rectWindow.Height() - 100, 154 + rectWindow.Width() - 300, rectWindow.Height() );
	SetTitle( GETTEXT( TID_APP_COMMUNICATION_CHAT ) );
	return CWndNeuz::InitDialog( g_Neuz.GetSafeHwnd(), dwWndId, WBS_KEY| WBS_THICKFRAME, CPoint( 792, 130 ), pWndParent );
	//return CWndNeuz::Create( 0|WBS_MOVE|/*WBS_DOCKABLE|*/WBS_SOUND|WBS_CAPTION|WBS_THICKFRAME|WBS_MAXIMIZEBOX, rect, &g_WndMng, dwWndId);
}

/*
	"applet" TY_CLIENT 0
	"to"     TY_SERVER 0 
	"to"     TY_SERVER 0
	"to"     TY_SERVER 0
*/

extern	CDPClient	g_DPlay;

void CWndChat::OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags)
{
}
void CWndChat::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
}
void CWndChat::OnDestroyChildWnd( CWndBase* pWndChild )
{
	if( m_pWndCommand == pWndChild )
	{
		SAFE_DELETE( m_pWndCommand );
	}
	if( m_pWndChatFilter == pWndChild )
	{
		SAFE_DELETE( m_pWndChatFilter );
		//ChatFilter Wnd Destroy후 Focus가 World로 되어있지 않아 이동키가 먹지 않기 때문에 SetFocus해줌.
		CWndWorld* pWndWorld = (CWndWorld*)g_WndMng.GetApplet( APP_WORLD );
		if( pWndWorld ) 
			pWndWorld->SetFocus();
	}
}
void CWndChat::SerializeRegInfo( CAr& ar, DWORD& dwVersion )
{
	CWndNeuz::SerializeRegInfo( ar, dwVersion );
	if( ar.IsLoading() )
	{
		if( dwVersion == 0 )
		{
		}
		else
		{
			ar >> m_bChatLock;
		}
		CWndButton* pWndLock = (CWndButton*)GetDlgItem( WIDC_CHECK1 );
		pWndLock->SetCheck( m_bChatLock );
	}
	else
	{
		dwVersion = 1;
		ar << m_bChatLock;
	}
}

BOOL CWndChat::OnChildNotify( UINT message, UINT nID, LRESULT* pLResult ) 
{ 
	m_timerInputTimeOut.Reset();

	CWndText* pWndText = (CWndText*)GetDlgItem( WIDC_TEXT );	
	if( pWndText )
		pWndText->m_string.SetAlpha( 255 );	
	
	switch(nID)
	{
		case WIDC_CLOSE:
			nID = WTBID_CLOSE;
			break;
		case WIDC_HELP:
			nID = WTBID_HELP;
			break;
		case WIDC_BUTTON1:
			{
				if( m_pWndChatFilter == NULL )
				{
					m_pWndChatFilter = new CWndChatFilter;
					m_pWndChatFilter->Initialize( this );
				}
			}
			break;
		case WIDC_CHECK1: // 채팅 입력창 잠구기 
			{
				CWndButton* pWndCheck = (CWndButton*)GetDlgItem( WIDC_CHECK1 );
				m_bChatLock = pWndCheck->GetCheck();
			}
			break;
#if __VER >= 8 //__Y_CHAT_SYSTEM_8
		case WIDC_CHECK3: // 시스탐창
			{
				CWndButton* pWndCheck = (CWndButton*)GetDlgItem( WIDC_CHECK3 );
				BOOL bChatLog = pWndCheck->GetCheck();
#if __VER >= 8 //__CSC_VER8_1 모든 윈도우를 지울때 ChatLog의 유무 구별을 위해 추가.
				m_bChatLog = bChatLog;
#endif //_CSC_VER8_1
				if( g_WndMng.m_pWndChatLog )
				{
					if( bChatLog )
					{
						CRect rectRoot = m_pWndRoot->GetLayoutRect();
						CRect rect = GetWindowRect(TRUE);
						CRect rect2 = g_WndMng.m_pWndChatLog->GetClientRect(TRUE);
						
						int x = 0;
						int y = rect.top;
						
						if( (rect.right+rect2.Width()) < rectRoot.right )
							x = rect.right;
						else
							x = (rect.left - rect2.Width() );
						
						CPoint point( x, y );
						g_WndMng.m_pWndChatLog->Move( point );
					}

					g_WndMng.m_pWndChatLog->SetVisible( bChatLog );
				}
			}
			break;
#endif //__Y_CHAT_SYSTEM_8
		case WIDC_MOVELOCK: // 이동 잠그기
			{
				CWndButton* pWndCheck = (CWndButton*)GetDlgItem( WIDC_MOVELOCK );
				m_bMoveLock = pWndCheck->GetCheck();
				DWORD dwStyle = GetWndStyle();
				if( m_bMoveLock )
					dwStyle &= (~WBS_MOVE);
				else
					dwStyle |= WBS_MOVE;
				SetWndStyle( dwStyle );
			}
			break;
		case WIDC_RADIO1:
			m_nChatChannel = CHATSTY_GENERAL;
			m_wndEdit.SetString( "" );
			m_wndEdit.SetFocus();
			SetChannel();
			break;
		case WIDC_RADIO2:
			m_nChatChannel = CHATSTY_WHISPER;
			m_wndEdit.SetString( "/w " );
			m_wndEdit.SetFocus();
			SetChannel();
			break;
		case WIDC_RADIO3:
			m_nChatChannel = CHATSTY_SHOUT;
			m_wndEdit.SetString( "/s " );
			m_wndEdit.SetFocus();
			SetChannel();
			break;
		case WIDC_RADIO4:
			m_nChatChannel = CHATSTY_PARTY;
			m_wndEdit.SetString( "/p " );
			m_wndEdit.SetFocus();
			SetChannel();
			break;
		case WIDC_RADIO5:
			m_nChatChannel = CHATSTY_GUILD;
			m_wndEdit.SetString( "/g " );
			m_wndEdit.SetFocus();
			SetChannel();
			break;
		case APP_COMMAND:
			{
				if( message == WNM_DBLCLK )
				{
					CString string;
					m_pWndCommand->GetText( m_pWndCommand->GetCurSel(), string );
					string += " ";
					m_wndEdit.SetString( "/" );
					m_wndEdit.AddString( string );
					m_wndEdit.ResetString();
					m_pWndCommand->Destroy();
				}
				SetFocus();
			}
		case WIDC_HEAD: // 말머리
			if( message == EN_RETURN )
			{
				g_WndMng.SetFocus();
			}
			break;
		case WIDC_EDIT: // 본문
			if( message == EN_UP )		
			{
				if( m_strHistory.size() == 0 )
					return FALSE;

				if( m_nHistoryIndex >= (int)( m_strHistory.size() ) )
				{
					m_strHistory.front();
					m_nHistoryIndex = 0;
				}

				m_nHistoryIndex++;
		#ifdef __ITEM_LINK
				m_wndEdit.SetString(m_strHistory[m_strHistory.size()-m_nHistoryIndex]);
#else
				m_wndEdit.m_string = m_strHistory[m_strHistory.size()-m_nHistoryIndex];
#endif

				return TRUE;
			}
			
			if( message == EN_RETURN )
			{
				BOOL bFinished = TRUE;
				if( m_pWndCommand )
				{
					CString str1, str2;
					str1 = m_wndEdit.m_string.Right( m_wndEdit.m_string.GetLength() - 1 );
					if( m_pWndCommand->GetCurSel() != -1 )
					{
						m_pWndCommand->GetText( m_pWndCommand->GetCurSel(), str2 );
						if( str1 != str2 )
						{
							str2 += " ";
							m_wndEdit.SetString( "/" );
							m_wndEdit.AddString( str2 );
							m_wndEdit.ResetString();
							bFinished = FALSE;
						}
					}
					m_pWndCommand->Destroy();
				}
				if( bFinished == TRUE )
				{
					CWndText* pWndText = (CWndText*)GetDlgItem( WIDC_TEXT );
					CWndEdit* pWndHead = (CWndEdit*)GetDlgItem( WIDC_HEAD );
					CString string; 
					if( pWndHead->m_string.IsEmpty() == FALSE && 
						( pWndHead->m_string[ 0 ] == '/' || 
						( m_wndEdit.m_string.IsEmpty() == FALSE && pWndHead->m_string[ 0 ] != '/' && m_wndEdit.m_string[ 0 ] != '/' ) ) 
					)
						string = pWndHead->m_string + " ";

					WORD wCodePage = g_codePage;
					const char* begin = m_wndEdit.m_string;
					const char* end = begin + m_wndEdit.m_string.GetLength();
					const char* iter = begin;
					while(*iter && iter < end)
					{
						if(*((BYTE*)iter) >= 0x80) 
						{
							if(wCodePage != m_wndEdit.m_string.m_awCodePage[iter-begin])
							{
								wCodePage = m_wndEdit.m_string.m_awCodePage[iter-begin];
								
								char temp[16];
								
								if(wCodePage == g_codePage)
								{
									wsprintf(temp, "#nl");
								}
								else
								{
									wsprintf(temp, "#l%04d", wCodePage);
								}
								string += temp;
							}
						}
						const char* next = CharNextEx(iter, wCodePage);
						char temp[16];
						memcpy(temp, iter, next-iter);
						temp[next-iter] = 0;
						string += temp;
						iter = next;
					}
					if( m_strHistory.size() >= MAX_HISTORY_STRING )
					{
						m_nHistoryIndex = 0;
						m_strHistory.erase( m_strHistory.begin() );
					}

					m_strHistory.push_back(string);
					int a = string.GetLength();
					if( !m_wndEdit.m_string.IsEmpty() )
						m_wndEdit.m_string.GetTextFormat(string);
						
						#ifdef __ITEM_LINK
					m_strHistory.push_back(string);
#endif
					
					g_WndMng.ParsingChat( string );
					CScanner scanner;
					scanner.SetProg( m_wndEdit.m_string.LockBuffer() );
					scanner.GetToken(); // 
					if( scanner.Token == "/" )
					{
						scanner.GetToken();
						if( scanner.Token == "w" || scanner.Token == "whisper" )
						{
							scanner.GetToken();
							m_strCharName = scanner.Token;
						}
					}
					m_wndEdit.m_string.UnlockBuffer();
					m_wndEdit.Empty();
					if( m_bChatLock == FALSE ) 
					{
						if( IsWndStyle( WBS_MODAL ) == TRUE )
						{
							DelWndStyle( WBS_MODAL );
							if( g_Neuz.pOldModalWindow )
							{
								g_Neuz.pOldModalWindow->SetFocus();
							}
						}
						else
						{
							CWndWorld* pWndWorld = ( CWndWorld* )g_WndMng.GetApplet( APP_WORLD );
							if( pWndWorld )
							{
								pWndWorld->SetFocus();
							}
							else
							{
								g_WndMng.SetFocus();
							}
						}
					}
					else
						m_wndEdit.SetFocus();
				}
			}
			else
			if( message == EN_CHANGE )
			{
				if( m_wndEdit.m_string.IsEmpty() == FALSE )
				{
					if( m_wndEdit.m_string[ 0 ] == '/' && m_wndEdit.GetOffset() == 1 && m_pWndCommand == NULL )
					{
						m_pWndCommand = new CWndCommand;
						m_pWndCommand->m_pWndEdit = this;
						m_pWndCommand->Initialize( this );
						CRect rect = m_wndEdit.GetScreenRect();
						CPoint point = rect.TopLeft();
						point.y -= m_pWndCommand->GetWndRect().Height();
						m_pWndCommand->Move( point );
					}
					else
					if( m_pWndCommand )
					{
						CString string; 
						string = m_wndEdit.m_string.Right( m_wndEdit.m_string.GetLength() - 1 );
						// 중간에 스페이스가 껴 있으면 닫아버린다.
						if( string.Find( ' ' ) == -1 )
							m_pWndCommand->SelectString( 0, string );
						else
							m_pWndCommand->Destroy();
						
						if( ::GetLanguage() == LANG_KOR )
						{
							if( m_wndEdit.m_string == "/ㅎ " )
							{
								m_wndEdit.SetString( "/g " );
							}
							else if( m_wndEdit.m_string == "/ㅔ " )
							{
								m_wndEdit.SetString( "/p " );
							}
							else if( m_wndEdit.m_string == "/ㄴ " )
							{
								m_wndEdit.SetString( "/s " );
							}
#if __VER >= 11 // __CSC_VER11_1
							else if( m_wndEdit.m_string == "/ㅈ " )
							{
								m_wndEdit.SetString( "/w " );
							}
#endif //__CSC_VER11_1
						}
					}
				}
				else
				if( m_pWndCommand )
					m_pWndCommand->Destroy();
			}
			break;
		case 10000: // 최소�* 
			break;
		case 10001: // 최대�* 
			break;
		case 10002: // 종료
			Destroy();
			break;
	}
	
	//아래 특정 버튼 누를 경우 Focus가 World로 되어있지 않아 이동키가 먹지 않기 때문에 SetFocus해줌.
	if(nID == WIDC_CHECK1 || nID == WIDC_CHECK3 || nID == WIDC_MOVELOCK)
	{
		CWndWorld* pWndWorld = (CWndWorld*)g_WndMng.GetApplet( APP_WORLD );
		if( pWndWorld ) 
			pWndWorld->SetFocus();
	}
	return CWndNeuz::OnChildNotify( message, nID, pLResult ); 
} 

BOOL CWndChat::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
{
	return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
}
void CWndChat::Parsing( CString string )
{
	/*
	MotionProp* pProp;
	for( int i = 0; i < prj.m_aMotionProp.GetSize(); i++ )
	{
		pProp = prj.GetMotionProp( i );
		if( pProp && pProp->dwRequireLv )
		{
			if( string.Find( pProp->szLink ) != -1 )
			{
			//	g_pPlayer->SendActMsg( OBJMSG_MOTION, pProp->dwID );
			}
		}
	}
	*/
}
void CWndChat::PutString( LPCTSTR lpszString, DWORD dwColor, DWORD dwPStyle )
{
	CWndText* pWndText = (CWndText*)GetDlgItem( WIDC_TEXT );
	
	if( dwColor != 0xffffff00 )
	{
		m_timerInputTimeOut.Reset();
		
		CWndText* pWndText = (CWndText*)GetDlgItem( WIDC_TEXT );	
		pWndText->m_string.SetAlpha( 255 );	
	}

	BOOL bLineEnd = FALSE;
	if( pWndText->m_wndScrollBar.GetScrollPos() == ( pWndText->m_wndScrollBar.GetMaxScrollPos() - pWndText->m_wndScrollBar.GetScrollPage() ) )
		bLineEnd = TRUE;

	pWndText->AddString( lpszString, dwColor, dwPStyle );
	pWndText->AddString( "\n", dwColor );// += '\n';
	// 글 내용이 1000줄을 넘어가면 500라인을 잘라낸다.
	if( pWndText->m_string.GetLineCount() >= 1000 )
	{
		pWndText->m_string.DeleteLine( 0, 500 );
		pWndText->UpdateScrollBar();
	}
	if( bLineEnd )
		pWndText->m_wndScrollBar.SetMaxScrollPos();
}
void CWndChat::OnDestroy()
{
	CWndText* pWndText = (CWndText*)GetDlgItem( WIDC_TEXT );
	g_WndMng.m_ChatString = pWndText->m_string;
}
void CWndChat::SetWndRect( CRect rectWnd, BOOL bOnSize )
{
#if __VER >= 8 //__Y_CHAT_SYSTEM_8
	AdjustMinRect( &rectWnd, 16 * 29, 16 * 3 );
#else // __Y_CHAT_SYSTEM_8
	AdjustMinRect( &rectWnd, 16 * 26, 16 * 3 );
#endif //__Y_CHAT_SYSTEM_8
	CRect rectOld = m_rectClient;
	m_rectWindow = rectWnd;
	m_rectClient = m_rectWindow;
	m_rectClient.DeflateRect( 4, 4, 6, 6 );
	m_rectLayout = m_rectClient;
	if( bOnSize && ( rectOld.Width() != m_rectClient.Width() || rectOld.Height() != m_rectClient.Height() ) )
		OnSize( 0, m_rectClient.Width(), m_rectClient.Height() );
	MakeVertexBuffer();
}
void CWndChat::OnSize(UINT nType, int cx, int cy)
{
//#ifdef __NEWINTERFACE
	CWndText* pWndText = (CWndText*)GetDlgItem( WIDC_TEXT );
	CWndEdit* pWndHead = (CWndEdit*)GetDlgItem( WIDC_HEAD );
	CWndEdit* pWndEdit = (CWndEdit*)GetDlgItem( WIDC_EDIT );

	CRect rectEdit;
	CRect rect = GetClientRect();
	//rect.left = 60;
	rect.top = 0;
	rect.left = 0;
	rect.right -= 0;
	rect.bottom -= 39;
	pWndText->SetWndRect( rect );
	pWndText->m_wndScrollBar.SetMaxScrollPos();
	
	rect = GetClientRect();
	rectEdit = pWndHead->GetWndRect();
	rectEdit.top = rect.bottom - 18;
	rectEdit.bottom = rect.bottom;
	rect.DeflateRect( 1, 1 );
	pWndHead->SetWndRect( rectEdit );

	rect = GetClientRect();
	rectEdit = m_wndEdit.GetWndRect();
	rectEdit.top = rect.bottom - 18;
	rectEdit.bottom = rect.bottom;
	rectEdit.right = rect.right - 20;
	rect.DeflateRect( 1, 1 );
	m_wndEdit.SetWndRect( rectEdit );

	rect = GetClientRect();
	rectEdit = m_wndMacroChat.GetWndRect();
	rectEdit.top = rect.bottom - 19;
	rectEdit.bottom = rect.bottom;
	m_wndMacroChat.SetWndRect( rectEdit );
	CWndButton* pWndRadio1 = (CWndButton*)GetDlgItem( WIDC_RADIO1 );
	CWndButton* pWndRadio2 = (CWndButton*)GetDlgItem( WIDC_RADIO2 );
	CWndButton* pWndRadio3 = (CWndButton*)GetDlgItem( WIDC_RADIO3 );
	CWndButton* pWndRadio4 = (CWndButton*)GetDlgItem( WIDC_RADIO4 );
	CWndButton* pWndRadio5 = (CWndButton*)GetDlgItem( WIDC_RADIO5 );
	CWndButton* pWndCheck  = (CWndButton*)GetDlgItem( WIDC_CHECK1 );
	CWndButton* pWndCheck2  = (CWndButton*)GetDlgItem( WIDC_MOVELOCK );
	CWndButton* pWndButton1 = (CWndButton*)GetDlgItem( WIDC_BUTTON1 );
	CWndButton* pWndButton2 = (CWndButton*)GetDlgItem( WIDC_HELP   );
	CWndButton* pWndButton3 = (CWndButton*)GetDlgItem( WIDC_CLOSE  );

#if __VER >= 8 //__Y_CHAT_SYSTEM_8
	CWndButton* pWndCheck3  = (CWndButton*)GetDlgItem( WIDC_CHECK3 );
#else //__Y_CHAT_SYSTEM_8
	CWndButton* pWndCheck3  = (CWndButton*)GetDlgItem( WIDC_CHECK3 );
	pWndCheck3->SetVisible(FALSE);
#endif //__Y_CHAT_SYSTEM_8

	rect = GetClientRect();
	rectEdit = pWndRadio1->GetWndRect();
	rectEdit.top = rect.bottom - 38;
	rectEdit.left = 0;
	pWndRadio1->Move( rectEdit.TopLeft() ); 
	rectEdit.left = 50;
	pWndRadio2->Move( rectEdit.TopLeft()  ); 
	rectEdit.left = 100;
	pWndRadio3->Move( rectEdit.TopLeft()  ); 
	rectEdit.left = 150;
	pWndRadio4->Move( rectEdit.TopLeft()  ); 
	rectEdit.left = 200;
	pWndRadio5->Move( rectEdit.TopLeft()  ); 
#if __VER >= 8 //__Y_CHAT_SYSTEM_8
	rectEdit.left = rect.right - 200;
	pWndCheck->Move( rectEdit.TopLeft()  ); 
	rectEdit.left = rect.right - 150;
	pWndButton1->Move( rectEdit.TopLeft()  ); 

	rectEdit.left = rect.right - 100;
	pWndCheck3->Move( rectEdit.TopLeft()  ); 	
#else //__Y_CHAT_SYSTEM_8
	rectEdit.left = rect.right - 150;
	pWndCheck->Move( rectEdit.TopLeft()  ); 
	rectEdit.left = rect.right - 100;
	pWndButton1->Move( rectEdit.TopLeft()  ); 
#endif //__Y_CHAT_SYSTEM_8
	rectEdit.left = rect.right - 49;

	CRect rectEdit2 = rectEdit;

	rectEdit2.top  += 1;
	pWndCheck2->Move( rectEdit2.TopLeft()  ); 
	rectEdit.left = rect.right - 32;
	rectEdit.top += 1;
	pWndButton2->Move( rectEdit.TopLeft()  ); 
	rectEdit.left = rect.right - 15;
	pWndButton3->Move( rectEdit.TopLeft()  ); 

	CWndStatic* pWndStatic = (CWndStatic*)GetDlgItem( WIDC_STATIC1 ); 
	
	if( pWndStatic )
	{
		rectEdit.top  += 20;
		rectEdit.left -= 5;
		pWndStatic->Move( rectEdit.TopLeft()  ); 
	}

	CWndNeuz::OnSize(nType,cx,cy);
}
void CWndChat::OnLButtonUp(UINT nFlags, CPoint point)
{
	if(IsWndRoot())
		return;

	//if(IsWndStyle(WBS_CAPTION) && m_bPickup)
	{//
	//	m_wndTitleBar.m_wndMinimize.SetVisible(TRUE);
		//m_wndTitleBar.m_wndMaximize.SetVisible(TRUE);
	}
	if( g_WndMng.m_pWndWorld )
	{
		CRect rect = GetWindowRect( TRUE );
		CPoint p;
		p.x = point.x + rect.left;
		p.y = point.y + rect.top;
//		g_WndMng.m_pWndWorld->m_bLButtonDown = TRUE;
		g_WndMng.m_pWndWorld->OnLButtonUp( nFlags, p );
	}
}

void CWndChat::OnLButtonDown(UINT nFlags, CPoint point)
{
	if( m_pWndCommand )
		m_pWndCommand->Destroy();

	if( g_WndMng.m_pWndWorld )
	{
		CRect rect = GetWindowRect( TRUE );
		CPoint p;
		p.x = point.x + rect.left;
		p.y = point.y + rect.top;
		g_WndMng.m_pWndWorld->m_bLButtonDown = TRUE;
		g_WndMng.m_pWndWorld->OnLButtonDown( nFlags, p );
	}
}

void CWndChat::OnRButtonDown(UINT nFlags, CPoint point)
{
	if( g_WndMng.m_pWndWorld )
	{
		CRect rect = GetWindowRect( TRUE );
		CPoint p;
		p.x = point.x + rect.left;
		p.y = point.y + rect.top;
		g_WndMng.m_pWndWorld->m_bRButtonDown = TRUE;
		g_WndMng.m_pWndWorld->OnRButtonDown( nFlags, p );
	}

	int nLineCount = m_wndText.m_string.GetLineCount();
	int nPos = m_wndText.IsWndStyle( WBS_VSCROLL ) ? m_wndText.m_wndScrollBar.GetScrollPos() : 0;
	DWORD dwMaxHeight = m_wndText.GetFontHeight();
	for( int i = nPos ; i < nLineCount ; ++i )
	{
		if( (int)( ((i-nPos) * dwMaxHeight) ) <= point.y && point.y < (int)( (dwMaxHeight * (i-nPos + 1)) ) )
		{
			CString str = m_wndText.m_string.GetLine( i );
			#ifdef __ITEM_LINK
			CString strTmp = str;
#endif
			char szFind[MAX_NAME] = {0,};
			
			BOOL bChat = FALSE;
			
			// 일반 채팅 검색
			int nFindName = str.Find( " :" );
			if( 0 < nFindName && nFindName < MAX_NAME )
			{
				int nFindSpace = str.Find( ' ' );
				if(  nFindSpace == -1 || nFindName <= nFindSpace )
				{
				#ifdef __ITEM_LINK
					int nExtent = m_wndText.m_pFont->GetTextExtent(str.Mid(0,nFindName)).cx;
					if(point.x < nExtent)
					{
#endif
					strncpy( szFind, str, nFindName );
					if( strcmp( szFind, g_pPlayer->GetName() ) != 0 )
						bChat = TRUE;
						#ifdef __ITEM_LINK
					}
#endif
				}
			}
			
			// 귓속말 검색
			if( bChat == FALSE )
			{
				int nFindName1 = str.Find( "<- [" );
				int nFindName2 = str.Find( "]" );
				if( 0 == nFindName1 )
				{
					str.Replace( "<- [", "" );
				}					
				else
				{
					nFindName1 = str.Find( "-> [" );
					str.Replace( "-> [", "" );
				}
				
				if( 0 == nFindName1 && 0 < nFindName2 && nFindName2 - nFindName1 < MAX_NAME + 4 )
				{
					nFindName2 = str.Find( "]" );
					strncpy( szFind, str, nFindName2 );
					int nFindSpace = strspn( " ", szFind );
					#ifdef __ITEM_LINK
					int nFindName3 = strTmp.Find("]");
					int nExtent = m_wndText.m_pFont->GetTextExtent(strTmp.Mid(0,nFindName3)).cx;
					if(point.x < nExtent)
					{
#endif
					if(  nFindSpace < 1 && strcmp( szFind, g_pPlayer->GetName() ) != 0 )
						bChat = TRUE;
						#ifdef __ITEM_LINK
					}
#endif
				}
			}
			
			// 외치기 검색( 알림은 빠짐 )
			if( bChat == FALSE )
			{
				int nFindName1 = str.Find( "[" );
				int nFindName2 = str.Find( "]" );
				if( 0 == nFindName1 && 0 < nFindName2 && nFindName2 - nFindName1 < MAX_NAME + 1 )
				{
					str.Replace( "[", "" );
					nFindName2 = str.Find( "]" );
					strncpy( szFind, str, nFindName2 );
					int nFindSpace = strspn( " ", szFind );
					#ifdef __ITEM_LINK
					int nFindName3 = strTmp.Find("]");
					int nExtent = m_wndText.m_pFont->GetTextExtent(strTmp.Mid(0,nFindName3)).cx;
					if(point.x < nExtent)
					{
#endif
					if(  nFindSpace < 1 && strcmp( szFind, g_pPlayer->GetName() ) != 0 )
						bChat = TRUE;
						#ifdef __ITEM_LINK
					}
#endif
					
					CString strSystem = prj.GetText(TID_ADMIN_ANNOUNCE);
					strSystem.Replace( "[", "" );
					int nFindSystem = strSystem.Find("]");
					if( 0 < nFindSystem )
					{
						char szFindSystem[MAX_NAME] = {0,};
						strncpy( szFindSystem, strSystem, nFindSystem );
						if( strcmp( szFind, szFindSystem ) == 0 )
							bChat = FALSE;
					}
				}
			}
			#ifdef __ITEM_LINK
			{
				if(!bChat)
				{
					int nFindBeg = strTmp.Find("<");
					int nFindEnd = strTmp.Find(">");
					while(nFindBeg != -1 || nFindEnd != -1)
					{
						int nExtentEnd;
						int nExtentBeg;
						if(nFindBeg != -1)// check line changed
							nExtentBeg = m_wndText.m_pFont->GetTextExtent(strTmp.Mid(0,nFindBeg)).cx;
						else
							nExtentBeg = 0;

						if(nFindEnd != -1) // check line changed
							nExtentEnd = m_wndText.m_pFont->GetTextExtent(strTmp.Mid(nFindBeg,nFindEnd-nFindBeg)).cx+nExtentBeg;
						else{
							nExtentEnd = m_wndText.m_pFont->GetTextExtent(strTmp.Mid(nFindBeg,str.GetLength()-nFindBeg)).cx+nExtentBeg;
						}
						if(point.x > nExtentBeg && point.x < nExtentEnd) // clicked on link
						{
							DWORD dwLinkID = m_wndText.m_string.m_adwLinkedID.GetAt(nFindBeg+m_wndText.m_string.GetLineOffset(i));
							if(dwLinkID) //check if is linked item or normal string
								g_DPlay.SendGetLinkedItem(dwLinkID);
							Error("%d",dwLinkID);
						}
						nFindBeg = strTmp.Find("<",nFindEnd);
						nFindEnd = strTmp.Find(">",nFindEnd+1);
					}
				}
			}
#endif
			
			if( bChat )
			{
				CString strWhisper;
				strWhisper.Format( "/whisper %s ", szFind );
				m_wndEdit.SetString( strWhisper );
				m_wndEdit.SetFocus();
			}
			break;
		}
	}
}	
void CWndChat::OnRButtonUp(UINT nFlags, CPoint point)
{
	if( g_WndMng.m_pWndWorld )
	{
		CRect rect = GetWindowRect( TRUE );
		CPoint p;
		p.x = point.x + rect.left;
		p.y = point.y + rect.top;
//		g_WndMng.m_pWndWorld->m_bRButtonDown = TRUE;
		g_WndMng.m_pWndWorld->OnRButtonUp( nFlags, p );
	}
}

void CWndChat::OnMouseMove(UINT nFlags, CPoint point)
{
	if( g_WndMng.m_pWndWorld )
	{
		CRect rect = GetWindowRect( TRUE );
		CPoint p;
		p.x = point.x + rect.left;
		p.y = point.y + rect.top;
//		g_WndMng.m_pWndWorld->m_bRButtonDown = TRUE;
		g_WndMng.m_pWndWorld->OnMouseMove( nFlags, p );
	}
}



BOOL CWndChat::OnEraseBkgnd(C2DRender* p2DRender)
{
	return TRUE;
}
//void CWndNeuz::PaintTexture( LPBYTE pDest, LPBYTE pSrc, CPoint pt,
// CSize sizeTexture, CSize sizeSurface )

void CWndChat::AdditionalSkinTexture( LPWORD pDest, CSize size, D3DFORMAT d3dFormat )
{
	CWndNeuz::AdditionalSkinTexture( pDest, size, d3dFormat );

	CRect rect = GetWindowRect();
	CPoint point =  CPoint( 0, rect.Height() - m_wndChatEdit[0].size.cy );
	PaintTexture( pDest, &m_wndChatEdit[0], point, size );
	int nWidth = ( rect.Width() - m_wndChatEdit[0].size.cx ) / m_wndChatEdit[1].size.cx;
	point.x += m_wndChatEdit[0].size.cx;
	for( int i = 0; i < nWidth; i++ )
	{
		if( i == nWidth - 2 )
			PaintTexture( pDest, &m_wndChatEdit[2], point, size );
		else
		if( i < nWidth - 2 )
			PaintTexture( pDest, &m_wndChatEdit[1], point, size );
		point.x += m_wndChatEdit[1].size.cx;
	}
}


#if __VER >= 8 //__Y_CHAT_SYSTEM_8

CWndChatLog::CWndChatLog()
{
}
CWndChatLog::~CWndChatLog()
{
}
/*
void CWndChatLog::OnDraw(C2DRender* p2DRender)
{
}
*/
void CWndChatLog::OnInitialUpdate()
{
	CWndNeuz::OnInitialUpdate();

	LPWNDCTRL lpWndText = GetWndCtrl( WIDC_CUSTOM1 );
	m_wndText.Create( WBS_NOFRAME | WBS_NODRAWFRAME | WBS_VSCROLL, lpWndText->rect, this, WIDC_TEXT );
	CWndText* pWndText = (CWndText*)GetDlgItem( WIDC_TEXT );

	if( g_pPlayer->IsAuthHigher( AUTH_GAMEMASTER ) )
	{
		pWndText->m_bEnableClipboard = TRUE;
	}

	pWndText->m_nLineSpace = 2;

	CRect rectRoot = m_pWndRoot->GetLayoutRect();
	CRect rect = GetWindowRect();
	int nWidth  = rect.Width(); 
	int nHeight = rect.Height(); 
	int x = 0;//rectRoot.left + (rectRoot.Width()  / 2) - (nWidth  / 2);
	int y = rectRoot.bottom - nHeight;	
	CPoint point( x, y );
	Move( point );
	
	m_wndMenuPlace.CreateMenu( this );	
	m_wndMenuPlace.AppendMenu( 0, 0 , prj.GetText(TID_GAME_GUIDE_HIDE) );
}

BOOL CWndChatLog::Process ()
{	
	return TRUE;
}
void CWndChatLog::OnSetFocus(CWndBase* pOldWnd)
{
}
void CWndChatLog::OnKillFocus(CWndBase* pNewWnd)
{
}
BOOL CWndChatLog::Initialize(CWndBase* pWndParent,DWORD dwWndId)
{
	CRect rectWindow = m_pWndRoot->GetWindowRect();
	CRect rect( 154, rectWindow.Height() - 100, 154 + rectWindow.Width() - 300, rectWindow.Height() );
	SetTitle( GETTEXT( TID_APP_COMMUNICATION_CHAT ) );
	return CWndNeuz::InitDialog( g_Neuz.GetSafeHwnd(), dwWndId, WBS_THICKFRAME, CPoint( 792, 130 ), pWndParent );
//	return CWndNeuz::InitDialog( g_Neuz.GetSafeHwnd(), dwWndId, 0, CPoint( 792, 130 ), pWndParent );
}

void CWndChatLog::OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags)
{
}
void CWndChatLog::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
}
void CWndChatLog::OnDestroyChildWnd( CWndBase* pWndChild )
{
}
BOOL CWndChatLog::OnChildNotify( UINT message, UINT nID, LRESULT* pLResult ) 
{ 
	CWndBase* pWndBase = (CWndBase*) pLResult;
	
	if( pWndBase->m_pParentWnd == &m_wndMenuPlace )
	{
		SetFocus();
		switch( nID )
		{
		case 0:
			{
				CWndChat* pWndChat = (CWndChat*)g_WndMng.GetWndBase( APP_COMMUNICATION_CHAT );

				if( pWndChat )
				{
					CWndButton* pWndCheck = (CWndButton*)pWndChat->GetDlgItem( WIDC_CHECK3 );

					if( pWndCheck )
						pWndCheck->SetCheck(FALSE);
				}

				SetVisible(FALSE);
			}
			break;
		}
	}

	return CWndNeuz::OnChildNotify( message, nID, pLResult ); 
} 

BOOL CWndChatLog::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
{
	return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
}
void CWndChatLog::PutString( LPCTSTR lpszString, DWORD dwColor, DWORD dwPStyle )
{
	CWndText* pWndText = (CWndText*)GetDlgItem( WIDC_TEXT );
	
	BOOL bLineEnd = FALSE;
	if( pWndText->m_wndScrollBar.GetScrollPos() == ( pWndText->m_wndScrollBar.GetMaxScrollPos() - pWndText->m_wndScrollBar.GetScrollPage() ) )
		bLineEnd = TRUE;

	pWndText->AddString( lpszString, dwColor, dwPStyle );
	pWndText->AddString( "\n", dwColor );// += '\n';
	// 글 내용이 1000줄을 넘어가면 500라인을 잘라낸다.
	if( pWndText->m_string.GetLineCount() >= 1000 )
	{
		pWndText->m_string.DeleteLine( 0, 500 );
		pWndText->UpdateScrollBar();
	}
	if( bLineEnd )
		pWndText->m_wndScrollBar.SetMaxScrollPos();
}
void CWndChatLog::OnDestroy()
{
}
void CWndChatLog::OnSize(UINT nType, int cx, int cy)
{
	CRect rectEdit;
	CRect rect = GetClientRect();
	//rect.left = 60;
	rect.top = 0;
	rect.left = 0;
	rect.right -= 0;
	rect.bottom -= 0;

	m_wndText.SetWndRect( rect );
	m_wndText.m_wndScrollBar.SetMaxScrollPos();
	
	CWndNeuz::OnSize(nType,cx,cy);
}
void CWndChatLog::OnLButtonUp(UINT nFlags, CPoint point)
{
}
void CWndChatLog::OnLButtonDown(UINT nFlags, CPoint point)
{
	if( g_WndMng.m_pWndWorld )
	{
		CRect rect = GetWindowRect( TRUE );
		CPoint p;
		p.x = point.x + rect.left;
		p.y = point.y + rect.top;
		g_WndMng.m_pWndWorld->m_bLButtonDown = TRUE;
		g_WndMng.m_pWndWorld->OnLButtonDown( nFlags, p );
	}
}

void CWndChatLog::OnRButtonDown(UINT nFlags, CPoint point)
{
	CRect rect = GetWindowRect( TRUE );
	CRect menurect = m_wndMenuPlace.GetWindowRect();

	rect.top  += point.y;
	rect.left += point.x;
	
	m_wndMenuPlace.Move( CPoint( rect.left, rect.top ) );
	
	m_wndMenuPlace.SetVisible( !m_wndMenuPlace.IsVisible() );
	m_wndMenuPlace.SetFocus();	
}	
void CWndChatLog::OnRButtonUp(UINT nFlags, CPoint point)
{
}
void CWndChatLog::OnMouseMove(UINT nFlags, CPoint point)
{
}
/*
BOOL CWndChatLog::OnEraseBkgnd(C2DRender* p2DRender)
{
	return TRUE;
}
*/

void CWndChatLog::AdditionalSkinTexture( LPWORD pDest, CSize size, D3DFORMAT d3dFormat )
{
	CWndNeuz::AdditionalSkinTexture( pDest, size, d3dFormat );
}

void CWndChatLog::SetWndRect( CRect rectWnd, BOOL bOnSize )
{
	AdjustMinRect( &rectWnd, 16 * 17, 16 * 3 );
	CRect rectOld = m_rectClient;
	m_rectWindow = rectWnd;
	m_rectClient = m_rectWindow;
	m_rectClient.DeflateRect( 4, 4, 6, 6 );
	m_rectLayout = m_rectClient;
	if( bOnSize && ( rectOld.Width() != m_rectClient.Width() || rectOld.Height() != m_rectClient.Height() ) )
		OnSize( 0, m_rectClient.Width(), m_rectClient.Height() );
	MakeVertexBuffer();
}

#endif //__Y_CHAT_SYSTEM_8

#ifdef __ITEM_LINK
CWndLinkedItem::CWndLinkedItem()
{
	m_pItem = NULL;

	CString strPath;
	if(::GetLanguage() == LANG_FRE)
		strPath = MakePath( "Theme\\", ::GetLanguage(), "Icon_Ultimate.dds");
	else
		strPath = MakePath( DIR_ICON, "Icon_Ultimate.dds");

	m_pUltimateTexture = CWndBase::m_textureMng.AddTexture( g_Neuz.m_pd3dDevice, strPath, 0xffff00ff );

	strPath = MakePath( DIR_ICON, "icon_Baruna01.dds" );
	m_pBarunaTexture = CWndBase::m_textureMng.AddTexture( g_Neuz.m_pd3dDevice, strPath, 0xffff00ff );

	m_pJewelBgTexture = CWndBase::m_textureMng.AddTexture( g_Neuz.m_pd3dDevice, MakePath( DIR_THEME, "WndChgElemItem.bmp"), 0xffff00ff );
}
CWndLinkedItem::~CWndLinkedItem()
{
	SAFE_DELETE(m_pItem);
}

BOOL CWndLinkedItem::Initialize(CWndBase *pWndParent,DWORD dwStyle)
{
	return CWndNeuz::InitDialog(g_Neuz.GetSafeHwnd(),APP_TOOLTIP_LINKEDITEM,dwStyle,CPoint(0,0),pWndParent);
}

void CWndLinkedItem::OnInitialUpdate()
{
	CWndNeuz::OnInitialUpdate();
	MoveParentCenter();
	rectItem = GetWndCtrl(WIDC_CUSTOM1)->rect;
}

void CWndLinkedItem::OnMouseWndSurface(CPoint point)
{
	/*
	if(m_pItem && rectItem.PtInRect(point))
	{
		CRect hitrect = rectItem;
		CPoint point2 = point;
		ClientToScreen(&point2);
		ClientToScreen(&hitrect);
		g_WndMng.PutToolTip_Item(m_pItem,point2,&hitrect);
	}
*/
}
void CWndLinkedItem::OnDraw(C2DRender *p2DRender)
{
	if(m_pItem)
	{
		CMover* pMover = g_pPlayer;
		m_pItem->GetTexture()->Render(p2DRender,rectItem.TopLeft(),255);
		CEditString strEdit;
		ItemProp* pItemProp = m_pItem->GetProp();
		strEdit.SetParsingString("");
		strEdit.Init( CWndBase::m_Theme.m_pFontText, &CRect( 0, 0, 240, 0 ) );
		DWORD dwColorBuf = g_WndMng.PutItemName(m_pItem, &strEdit);
		g_WndMng.PutItemAbilityPiercing( m_pItem, &strEdit, dwColorBuf );
		
		
		if( m_pItem->GetProp() && m_pItem->GetProp()->dwFlag & IP_FLAG_EQUIP_BIND )
		{
			strEdit.AddString("\r\n");
			if( m_pItem->IsFlag( CItemElem::binds ) )
				strEdit.AddString( GETTEXT( TID_TOOLTIP_EQUIPBIND_AFTER ), GETTEXTCOLOR( TID_TOOLTIP_EQUIPBIND_AFTER ) );
			else
				strEdit.AddString( GETTEXT( TID_TOOLTIP_EQUIPBIND_BEFORE ), GETTEXTCOLOR( TID_TOOLTIP_EQUIPBIND_BEFORE ) );
		}
		g_WndMng.PutWeapon( m_pItem, &strEdit );
	

     
		CString strExp;
#ifdef __MODEL_CHANGE
		g_WndMng.PutSex( pMover, m_pItem, &strEdit );

		
		

		switch( pItemProp->dwItemKind2 )
		{
			case IK2_WEAPON_DIRECT:
			case IK2_WEAPON_MAGIC:
			case IK2_ARMORETC:
			case IK2_CLOTHETC:
			case IK2_ARMOR:
			case IK2_CLOTH:
			case IK2_BLINKWING:
			{
				g_WndMng.PutItemMinMax( pMover, m_pItem, &strEdit );
				g_WndMng.PutItemSpeed( m_pItem, &strEdit );
				if( pItemProp->dwItemKind3 == IK3_ELECARD )
					g_WndMng.PutItemResist( m_pItem, &strEdit );
				else if( m_pItem->m_nResistAbilityOption && ( pItemProp->dwItemKind1 == IK1_WEAPON  || pItemProp->dwItemKind1 == IK1_ARMOR ) )
					g_WndMng.PutItemResist( m_pItem, &strEdit );
	
				g_WndMng.PutBaseResist( m_pItem, &strEdit );	// 속성 저항력
				
				g_WndMng.PutBaseItemOpt( m_pItem, &strEdit );

				g_WndMng.PutJob( pMover, m_pItem, &strEdit );
				g_WndMng.PutLevel( pMover, m_pItem, &strEdit );
				g_WndMng.PutCommand( m_pItem, &strEdit );
				g_WndMng.PutItemGold( pMover, m_pItem, &strEdit, 0 );	// 가격
				g_WndMng.PutSetItemOpt( pMover, m_pItem, &strEdit );
				g_WndMng.PutPiercingOpt( m_pItem, &strEdit );
				g_WndMng.PutRandomOpt( m_pItem, &strEdit );			
				g_WndMng.PutEnchantOpt( pMover, m_pItem, &strEdit, 0 );
				break;
			}
		case IK2_REFRESHER:
		case IK2_FOOD:
		case IK2_POTION:
			{
				g_WndMng.PutMedicine( m_pItem, m_pItem->GetProp()->dwDestParam1,  pItemProp->nAdjParamVal1, &strEdit );
				g_WndMng.PutMedicine( m_pItem, m_pItem->GetProp()->dwDestParam2,  pItemProp->nAdjParamVal2, &strEdit );
				break;
			}
		case IK2_JEWELRY:
			{
				g_WndMng.PutBaseItemOpt( m_pItem, &strEdit );
				break;
			}
		case IK2_SYSTEM:
			{
				if( pItemProp->dwItemKind3 == IK3_VIS )
				{
					g_WndMng.PutNeededVis( m_pItem, &strEdit );
					g_WndMng.PutBaseItemOpt( m_pItem, &strEdit );
				}
	
				if( m_pItem->m_dwItemId == II_SYS_SYS_SCR_SEALCHARACTER )
				{
					g_WndMng.PutSealChar( m_pItem, &strEdit );
				}
				break;
			}

			case IK2_GMTEXT:
			{
				if( pItemProp->dwItemKind3 == IK3_TEXT_DISGUISE )
				{
					g_WndMng.PutDestParam( pItemProp->dwDestParam[0], pItemProp->dwDestParam[1],
					pItemProp->nAdjParamVal[0], pItemProp->nAdjParamVal[1], strEdit );

					if( pItemProp->dwActiveSkill != NULL_ID )
					{
						ItemProp *pSkillProp;
						AddSkillProp* pAddSkillProp;
						pMover->GetSkillProp( &pSkillProp, &pAddSkillProp, pItemProp->dwActiveSkill, 1, "CWndMgr::PutToolTip_Item" );
					
					if( pAddSkillProp )
					{
						g_WndMng.PutDestParam( pAddSkillProp->dwDestParam[0], pAddSkillProp->dwDestParam[1],
							pAddSkillProp->nAdjParamVal[0], pAddSkillProp->nAdjParamVal[1], strEdit );
					}
				}			
			}
			break;
		}
		default:
		{
			break;
		}
	}

	if( m_pItem->IsEatPet() )
	{
		if( pItemProp->dwActiveSkill != NULL_ID )
		{
			ItemProp *pSkillProp;
			AddSkillProp* pAddSkillProp;
			pMover->GetSkillProp( &pSkillProp, &pAddSkillProp, pItemProp->dwActiveSkill, 1, "CWndMgr::PutToolTip_Item" );
			
			if( pAddSkillProp )
			{
				g_WndMng.PutDestParam( pAddSkillProp->dwDestParam[0], pAddSkillProp->dwDestParam[1],
					pAddSkillProp->nAdjParamVal[0], pAddSkillProp->nAdjParamVal[1], strEdit );
			}
		}
	}
       
	if( m_pItem->IsVisPet( ) )
		g_WndMng.PutVisPetInfo( m_pItem, &strEdit );

	g_WndMng.PutCoolTime( pMover, m_pItem, &strEdit );			// 쿨타임
	g_WndMng.PutEndurance( m_pItem, &strEdit, 0 );			// 내구력
	g_WndMng.PutKeepTime( m_pItem, &strEdit );					// 사용할수 있는 시간

	if( pItemProp->dwItemKind3 == IK3_EGG && m_pItem->m_pPet )//&& pItemElem->m_pPet->GetLevel() != PL_EGG )
		g_WndMng.PutPetInfo( m_pItem, &strEdit );
	if( pItemProp->dwID == II_SYS_SYS_SCR_PET_FEED_POCKET ) //먹이 주머니 툴팁
		g_WndMng.PutPetFeedPocket( m_pItem, &strEdit );

	//g_WndMng.PutPiercingOpt( m_pItem, &strEdit );

	g_WndMng.PutAwakeningBlessing( m_pItem, &strEdit );

	if( (pItemProp->dwItemKind2 == IK2_WEAPON_DIRECT || pItemProp->dwItemKind2 == IK2_WEAPON_MAGIC) && m_pItem->GetProp()->dwReferStat1 == WEAPON_ULTIMATE )
		g_WndMng.PutAddedOpt( m_pItem, &strEdit );

	if( (pItemProp->dwItemKind2 == IK2_WEAPON_DIRECT || pItemProp->dwItemKind2 == IK2_WEAPON_MAGIC) && pItemProp->IsUltimate() )
		m_pUltimateTexture->Render( p2DRender, CPoint( 10, 55) );
//	else if( (pItemProp->dwItemKind2 == IK2_WEAPON_DIRECT || pItemProp->dwItemKind2 == IK2_WEAPON_MAGIC) && pItemProp->IsBaruna() )
//		m_pBarunaTexture->Render( p2DRender, CPoint( 10, 55) );
	m_p2DRender->TextOut_EditString(rectItem.left - 80, rectItem.bottom + 15, strEdit);
	this->SetWndSize(90 + p2DRender->m_pFont->GetTextExtent(strEdit).cx, 100 + p2DRender->m_pFont->GetTextExtent(strEdit).cy);
	}
}

void CWndLinkedItem::SetItem(CItemElem *pItem)
{
	if( pItem && pItem->GetProp() )
	this->m_pItem = pItem;
}
#endif //__MODEL_CHANGE
#endif
maybe it's a misssing brace.
xMeher is offline  
Old   #2
 
elite*gold: 0
Join Date: May 2014
Posts: 4,409
Received Thanks: 936
Im not a Dev but i think that you have an error on line 1644.
-->{<--- maybe this is wrong ...
Michi is offline  
Old   #3
 
elite*gold: 0
Join Date: Jun 2013
Posts: 166
Received Thanks: 259
Quote:
Originally Posted by xMeher View Post
maybe it's a misssing brace.
Your parents must be really proud...

Code:
#include "stdafx.h"
#include "defineText.h"
#include "AppDefine.h"
#include "WndCommand.h"
#include "party.h"

#include "WndManager.h"

#include "WndChatFilter.h"

#include "DPClient.h"
extern	CDPClient	g_DPlay;


#define		MAX_HISTORY_STRING		20

CWndEditChat::CWndEditChat()
{
}
CWndEditChat::~CWndEditChat()
{
}
void CWndEditChat::OnLButtonDown(UINT nFlags, CPoint point)
{
	CWndChat* pWndChat = (CWndChat*) m_pParentWnd;
	if( pWndChat->m_pWndCommand )
		pWndChat->m_pWndCommand->Destroy();
	CWndEdit::OnLButtonDown( nFlags, point );
}
void CWndEditChat::OnSetFocus(CWndBase* pOldWnd)
{
	if( m_string.IsEmpty() )
	{
		CWndChat* pWndChat = (CWndChat*) m_pParentWnd;	

		if( pWndChat->m_pWndCommand == NULL )
		{
			if( pWndChat->m_nChatChannel == CHATSTY_GENERAL )
			{
			}
			else
			if( pWndChat->m_nChatChannel == CHATSTY_WHISPER )
			{
				CString string;
				if(  pWndChat->m_strCharName.IsEmpty() )
					string.Format( "/w " );
				else
					string.Format( "/w %s ", pWndChat->m_strCharName );
				SetString( string );
			}
			else
			if( pWndChat->m_nChatChannel == CHATSTY_SHOUT )
			{
				SetString( "/s " );
			}
			else
			if( pWndChat->m_nChatChannel == CHATSTY_PARTY )
			{
				SetString( "/p " );
			}
			else
			if( pWndChat->m_nChatChannel == CHATSTY_GUILD )
			{
				SetString( "/g " );
			}
		}
	}


	CWndEdit::OnSetFocus( pOldWnd );
}
void CWndEditChat::OnKillFocus(CWndBase* pNewWnd)
{
	CWndChat* pWndChat = (CWndChat*) m_pParentWnd;
	if( pWndChat->m_pWndCommand && this!= pNewWnd )
		pWndChat->m_pWndCommand->Destroy();
	CWndEdit::OnKillFocus( pNewWnd );
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// 채팅 윈도 
//
/////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////

CWndMacroChat::CWndMacroChat()
{
}
CWndMacroChat::~CWndMacroChat()
{
}
void CWndMacroChat::OnDraw( C2DRender* p2DRender )
{
	CWndChat* pWndChat = (CWndChat*)g_WndMng.GetApplet( APP_COMMUNICATION_CHAT );
	CWndEditChat* pWndEdit = &pWndChat->m_wndEdit;//GetDlgItem( WIDC_EDIT );
	if( pWndEdit->m_string.IsEmpty() == FALSE )
		p2DRender->RenderTexture( CPoint( 0, 0 ), &m_texMacroChat );
}
void CWndMacroChat::OnLButtonDown(UINT nFlags, CPoint point)
{
	CWndChat* pWndChat = (CWndChat*)g_WndMng.GetApplet( APP_COMMUNICATION_CHAT );
	CWndEditChat* pWndEdit = &pWndChat->m_wndEdit;//GetDlgItem( WIDC_EDIT );
	if( pWndEdit->m_string.IsEmpty() == FALSE )
	{
		CWndChat* pWndChat = (CWndChat*)g_WndMng.GetApplet( APP_COMMUNICATION_CHAT );
		m_GlobalShortcut.m_dwShortcut = SHORTCUT_CHAT;
		m_GlobalShortcut.m_pFromWnd = this;
		m_GlobalShortcut.m_pTexture = m_pTexMacro; //.m_pFromWnd   = this;
		m_GlobalShortcut.m_dwData = 0;
		//CWndEdit* pWndEdit = (CWndEdit*)pWndChat->GetDlgItem( WIDC_EDIT );
		//strcpy( m_GlobalShortcut.m_szString, pWndEdit->m_string );

		CString strFormat;
		strFormat = pWndEdit->m_string;

		pWndEdit->m_string.GetTextFormat(strFormat);
		
		if( pWndEdit->m_string.GetLength() >= MAX_SHORTCUT_STRING-1 )
		{
			memcpy( m_GlobalShortcut.m_szString, strFormat, MAX_SHORTCUT_STRING-1 );
		}
		else
		{
			strcpy( m_GlobalShortcut.m_szString, strFormat );
		}
	}
}

void CWndMacroChat::OnMouseMove(UINT nFlags, CPoint point)
{
}
void CWndMacroChat::OnInitialUpdate()
{
	//m_ptexMacroe.LoadTexture( m_pApp->m_pd3dDevice, MakePath( DIR_ICON, "icon_MacroChat.dds" ), 0xffff00ff );
	m_pTexMacro = m_textureMng.AddTexture( m_pApp->m_pd3dDevice, MakePath( DIR_ICON, "icon_MacroChat.dds" ), 0xffff00ff );//, bMyLoader );
	m_texMacroChat.LoadTexture( m_pApp->m_pd3dDevice, MakePath( DIR_THEME, "wndButtMacroChat.bmp" ), 0xffff00ff );
}
CWndTextChat::CWndTextChat()
{
}
CWndTextChat::~CWndTextChat()
{
}
BOOL CWndTextChat::IsPickupSpace( CPoint point )
{
	return FALSE;
}
int CWndChat::m_nChatChannel = CHATSTY_GENERAL;

CWndChat::CWndChat()
{
	m_pWndCommand = NULL;
//	m_timerInsMsg.Set( MIN( 1 ) );
	m_timerInsMsg.Set( MIN( 2 ) );  // 도움말 표시 간격 증가
#ifdef __CSC_GAME_GRADE
	m_timerAlertGGrade.Set( MIN(60) );
#endif //__CSC_GAME_GRADE
	m_nInsMsgCnt = 0;
	m_bChatLock = FALSE;
	m_bMoveLock = FALSE;
	m_pWndChatFilter = NULL;
	m_nHistoryIndex = 0;
#if __VER >= 8 //__CSC_VER8_1
	m_bChatLog = FALSE;
#endif //__CSC_VER8_1
#ifdef __ITEM_LINK
	m_pWndLinkedItem = NULL;
#endif
}
CWndChat::~CWndChat()
{
	SAFE_DELETE( m_pWndCommand );
	SAFE_DELETE( m_pWndChatFilter );
	#ifdef __ITEM_LINK
	SAFE_DELETE(m_pWndLinkedItem);
#endif
}
void CWndChat::OnDraw(C2DRender* p2DRender)
{
	if( g_pPlayer == NULL )
		return;
	//if( timer.IsTimeOut() )
	//{
	//	timer.Set( SEC( 10 ) );
	//	if( szMessage[ nMsgCnt ][0] )
	//		PutString( szMessage[ nMsgCnt ++ ] );
	//}
	if( g_Option.m_nInstantHelp )
	{
		CString string;
		if( m_strArray.GetSize() && m_timerInsMsg.TimeOut() )
		{
			m_timerInsMsg.Reset();
			//string = "[도움말] ";
			string  = prj.GetText(TID_SYS_HELP);
			string += " ";
			string += m_strArray.GetAt( m_nInsMsgCnt );
			g_WndMng.PutString( string, NULL, 0xffffff00, CHATSTY_HELP );
			m_nInsMsgCnt++;
			if( m_nInsMsgCnt == m_strArray.GetSize() )
				m_nInsMsgCnt = 0;
		}
	}

#ifdef __CSC_GAME_GRADE
	if(m_timerAlertGGrade.TimeOut())
	{
		m_timerAlertGGrade.Reset();
		//PK�*버 구분  12세 or 15세
		if(g_eLocal.GetState( EVE_PK ))
			g_WndMng.PutString( prj.GetText(TID_SYS_ALERTGGRADE_PK), NULL, 0xffffff00, CHATSTY_HELP );
		else
			g_WndMng.PutString( prj.GetText(TID_SYS_ALERTGGRADE_NONPK), NULL, 0xffffff00, CHATSTY_HELP );		
	}
#endif //__CSC_GAME_GRADE

	CWndButton* pWndRadio4 = (CWndButton*)GetDlgItem( WIDC_RADIO4 ); // party
	CWndButton* pWndRadio5 = (CWndButton*)GetDlgItem( WIDC_RADIO5 ); // guild

	pWndRadio4->EnableWindow( g_Party.IsMember( g_pPlayer->m_idPlayer ) );
	pWndRadio5->EnableWindow( g_pPlayer->GetGuild() == NULL ? FALSE : TRUE );

	if( ::GetLanguage() == LANG_KOR || ::GetLanguage() == LANG_TWN || ::GetLanguage() == LANG_HK )
	{
		static TCHAR text[12] = { 0 };
		static wchar_t* wText = g_imeMgr.GetStringIndicator();

		if( wText )
		{
			CWndStatic* pWndStatic = (CWndStatic*)GetDlgItem( WIDC_STATIC1 ); 

			if( pWndStatic )
			{
				WideCharToMultiByteEx(g_imeMgr.m_codePage, 0, wText, wcslen(wText), text, 12, NULL, NULL);		
				
				pWndStatic->m_dwColor = D3DCOLOR_ARGB( 255, 50, 50, 220 );

				if( PRIMARYLANGID(g_imeMgr.m_hkl)==LANG_KOREAN )
				{
					if( g_imeMgr.GetImeState() == 0 )
					{
						_tcscpy( text, "En" );
					}
				}
				else
				if( PRIMARYLANGID(g_imeMgr.m_hkl)==LANG_CHINESE )
				{
					static wchar_t wTextCh[3][3] = 
					{ 
						L"\x6CE8", 
						L"\x65B0", 
						L"\x5176", 
					};
					
					if( g_imeMgr.IsNewPhonetic() )
					{
						if( g_imeMgr.GetImeState() == 2 )
							_tcscpy( text, "En" );
						else
							WideCharToMultiByteEx(g_imeMgr.m_codePage, 0, wTextCh[1], wcslen(wTextCh[1]), text, 12, NULL, NULL);		
					}
					else
					if( g_imeMgr.IsPhonetic() )
					{
						if( g_imeMgr.GetImeState() == 0 )
							_tcscpy( text, "En" );
						else	
							WideCharToMultiByteEx(g_imeMgr.m_codePage, 0, wTextCh[0], wcslen(wTextCh[0]), text, 12, NULL, NULL);		
					}
					else
					{
						if( g_imeMgr.GetImeState() == 0 )
							_tcscpy( text, "En" );
						else	
							WideCharToMultiByteEx(g_imeMgr.m_codePage, 0, wTextCh[2], wcslen(wTextCh[2]), text, 12, NULL, NULL);		
					}
				}
				pWndStatic->SetTitle( text );
			}
		}
	}
}
void CWndChat::OnInitialUpdate()
{
	CWndNeuz::OnInitialUpdate();

	//AddWndStyle( WBS_THICKFRAME );

	m_timerDobe.Set( SEC( 5 ) );

	LPWNDCTRL lpWndCtrl = GetWndCtrl( WIDC_MACRO_CHAT );
	LPWNDCTRL lpWndText = GetWndCtrl( WIDC_CUSTOM1 );
	m_wndMacroChat.Create( "g", WBS_NODRAWFRAME, lpWndCtrl->rect, this, WIDC_MACRO_CHAT );
	m_wndMacroChat.AddWndStyle( WBS_NODRAWFRAME );

	lpWndCtrl = GetWndCtrl( WIDC_EDIT );
	m_wndEdit.Create( g_Neuz.GetSafeHwnd(), WBS_NODRAWFRAME, lpWndCtrl->rect, this, WIDC_EDIT );
	m_wndText.Create( WBS_NOFRAME | WBS_NODRAWFRAME | WBS_VSCROLL, lpWndText->rect, this, WIDC_TEXT );
	CWndText* pWndText = (CWndText*)GetDlgItem( WIDC_TEXT );
	CWndEdit* pWndHead = (CWndEdit*)GetDlgItem( WIDC_HEAD );
	CWndEdit* pWndEdit = (CWndEdit*)GetDlgItem( WIDC_EDIT );

	if( g_pPlayer->IsAuthHigher( AUTH_GAMEMASTER ) )
	{
		pWndText->m_bEnableClipboard = TRUE;
		pWndHead->m_bEnableClipboard = TRUE;
		pWndEdit->m_bEnableClipboard = TRUE;
	}
	pWndEdit->SetNativeMode();

#if __VER >= 11 // __CSC_VER11_1
	CRect rectEdit = m_wndEdit.GetWndRect();
	rectEdit.left = rectEdit.left - 90;
	m_wndEdit.SetWndRect( rectEdit );

	CRect customRect = lpWndCtrl->rect;
	CWndCustom* pCustom = (CWndCustom*)GetDlgItem(WIDC_MACRO_CHAT);
	if(pCustom)
		pCustom->Move(customRect.TopLeft().x - 119, customRect.TopLeft().y);
	if(pWndHead)
	{
		pWndHead->EnableWindow(FALSE);
		pWndHead->SetVisible(FALSE);
	}
#endif //__CSC_VER11_1
	if( g_Option.m_nInstantHelp )
	{
		CScript	s;
		s.Load( MakePath( DIR_CLIENT, "InstantHelp.inc" ) );
		s.GetToken();
		while( s.tok != FINISHED )
		{
			m_strArray.Add( s.Token );
			s.GetToken();
		}
	}
	//m_strArray.

/*
	CRect rect = GetClientRect();
	rect.top = rect.bottom - 20;
	rect.right = 70;
	rect.left += 5;
	rect.DeflateRect( 1, 1 );
	m_wndBeginning.Create( g_Neuz.GetSafeHwnd(), WBS_NODRAWFRAME, rect, this, 1000);

	rect = GetClientRect();
	rect.top = rect.bottom - 20;
	rect.left = 75;
	rect.right -= 134;
	rect.DeflateRect( 1, 1 );
	//rect.left = rect.Width() * 20 / 100;
	//m_wndEdit.AddWndStyle( WBS_NODRAWFRAME );
	m_wndEdit.Create( g_Neuz.GetSafeHwnd(), WBS_NODRAWFRAME, rect, this, 1001 );
*/
//	m_texEdit.LoadTexture( m_pApp->m_pd3dDevice, MakePath( DIR_THEME, "WndChat2.bmp" ), 0xffff00ff, TRUE );
/*
	rect = GetClientRect();
	rect.top = rect.bottom - 20;
	rect.left = rect.right - 134;
	rect.right = r mnnnnft + 15;
	rect.DeflateRect( 1, 1 );
	m_wndShout.Create( " ", 0, rect, this, 1010 );

	rect = GetClientRect();
	rect.top = rect.bottom - 20;
	rect.left = rect.right - 117;
	rect.right = rect.left + 15;
	rect.DeflateRect( 1, 1 );
	m_wndParty.Create( " ", 0, rect, this, 1011 );
*/

/*
	m_wndText.AddWndStyle( WBS_VSCROLL );
	m_wndText.AddWndStyle( WBS_NOFRAME );
	m_wndText.AddWndStyle( WBS_NODRAWFRAME );
	m_wndText.Create( 0, rect, this, 1003 ); 
	m_wndText.SetFont( g_Neuz.m_Theme.m_pFontChat );
	m_wndText.m_string.Reset( m_pFont, &rect);
*/
/*
	rect = GetClientRect();
	rect.left = rect.right - 100;
	//rect.bottom -= 80;
	rect.DeflateRect( 1, 1 );
	m_wndReceiver.AddWndStyle( WBS_VSCROLL );
	m_wndReceiver.AddWndStyle( WBS_NOFRAME );
	m_wndReceiver.Create( EBS_AUTOVSCROLL, rect, this, 1002 );
	m_wndReceiver.AddString( "Vampyre\n" );
	m_wndReceiver.AddString( "Xuzhu\n" );
	m_wndReceiver.AddString( "Zodiacus\n" );
	m_wndReceiver.AddString( "Jeff\n" );
	m_wndReceiver.m_string.Reset( m_pFont, &rect);
*/

	//CWndText* pWndText = (CWndText*)GetDlgItem( WIDC_TEXT );
	SetChannel();
	CWndButton* pWndRadio1 = (CWndButton*)GetDlgItem( WIDC_RADIO1 );
	CWndButton* pWndRadio2 = (CWndButton*)GetDlgItem( WIDC_RADIO2 );
	CWndButton* pWndRadio3 = (CWndButton*)GetDlgItem( WIDC_RADIO3 );
	CWndButton* pWndRadio4 = (CWndButton*)GetDlgItem( WIDC_RADIO4 );
	CWndButton* pWndRadio5 = (CWndButton*)GetDlgItem( WIDC_RADIO5 );
	if( m_nChatChannel == CHATSTY_GENERAL ) pWndRadio1->SetCheck( TRUE );	else
	if( m_nChatChannel == CHATSTY_WHISPER ) pWndRadio2->SetCheck( TRUE );	else
	if( m_nChatChannel == CHATSTY_SHOUT   ) pWndRadio3->SetCheck( TRUE );	else
	if( m_nChatChannel == CHATSTY_PARTY   ) pWndRadio4->SetCheck( TRUE );	else
	if( m_nChatChannel == CHATSTY_GUILD   ) pWndRadio5->SetCheck( TRUE );
	//pWndText->m_string.Init(
	//pWndText->m_string = g_WndMng.m_ChatString;
	pWndText->m_nLineSpace = 2;
	//pWndText->m_string.Reset( m_pFont, &pWndText->GetClientRect() );
	
	//pWndText->
	/*
	CRect rect = GetClientRect();
	rect.bottom -= 20;
	rect.right -= 0;//100;
	rect.DeflateRect( 1, 1);
	m_wndText.SetWndRect( rect );
*/
	//LPBYTE m_wndChatEdit[3];
	//CSize sizeWndChatEdit[3];
#if __VER >= 11 // __CSC_VER11_1
	LoadTGA( MakePath( DIR_THEME, "WndChatEdit00_1.tga" ), &m_wndChatEdit[0] );
#else //__CSC_VER11_1
	LoadTGA( MakePath( DIR_THEME, "WndChatEdit00.tga" ), &m_wndChatEdit[0] );
#endif //__CSC_VER11_1
	LoadTGA( MakePath( DIR_THEME, "WndChatEdit01.tga" ), &m_wndChatEdit[1] );
#ifdef __LANG_IME_0327
	LoadTGA( MakePath( "Theme\\", ::GetLanguage(), "WndChatEdit02.tga" ), &m_wndChatEdit[2] );
#else	// __LANG_IME_0327
	LoadTGA( MakePath( DIR_THEME, "WndChatEdit02.tga" ), &m_wndChatEdit[2] );
#endif	// __LANG_IME_0327

	if( m_wndChatEdit[2].lpData == NULL )
	{
		Error( "CWndChat::OnInitialUpdate() m_wndChatEdit[2].lpData = NULL" );
		return;
	}
/*
	CRect rectRoot = m_pWndRoot->GetLayoutRect();
	CRect rectWindow = GetWindowRect();
	CPoint point( 154, rectRoot.bottom - rectWindow.Height() );
	Move( point );
*/
	CWndButton* pWndLock = (CWndButton*)GetDlgItem( WIDC_CHECK1 );
	pWndLock->SetCheck( m_bChatLock );
	CWndButton* pWndMoveLock = (CWndButton*)GetDlgItem( WIDC_MOVELOCK );
	pWndMoveLock->SetCheck( m_bMoveLock );
	CRect rectRoot = m_pWndRoot->GetLayoutRect();
	CRect rect = GetWindowRect();
	int nWidth  = rect.Width(); 
	int nHeight = rect.Height(); 
	int x = 0;//rectRoot.left + (rectRoot.Width()  / 2) - (nWidth  / 2);
	int y = rectRoot.bottom - nHeight;	
	CPoint point( x, y );
	Move( point );

	m_timerInputTimeOut.Set( SEC( 300 ) );

#if __VER >= 8 //__Y_CHAT_SYSTEM_8
	if( g_WndMng.m_pWndChatLog == NULL )
	{
		g_WndMng.m_pWndChatLog = new CWndChatLog;
		
		if( g_WndMng.m_pWndChatLog )
		{
			g_WndMng.m_pWndChatLog->Initialize( NULL, APP_CHAT_LOG );
			
			CRect rectRoot = m_pWndRoot->GetLayoutRect();
			CRect rect = GetWindowRect(TRUE);
			CRect rect2 = g_WndMng.m_pWndChatLog->GetClientRect(TRUE);
			
			int x = 0;
			int y = rect.top;
			
			if( (rect.right+rect2.Width()) < rectRoot.right )
				x = rect.right;
			else
				x = (rect.left - rect2.Width() );
			
			CPoint point( x, y );
			g_WndMng.m_pWndChatLog->Move( point );

			g_WndMng.m_pWndChatLog->SetVisible(FALSE);
		}
	}

	if( g_WndMng.m_pWndChatLog )
	{
		CWndButton* pWndCheck3  = (CWndButton*)GetDlgItem( WIDC_CHECK3 );
		if( pWndCheck3 )
			pWndCheck3->SetCheck(g_WndMng.m_pWndChatLog->m_bVisible);
	}
#endif //__Y_CHAT_SYSTEM_8
}

BOOL CWndChat::Process ()
{
	if( m_timerInputTimeOut.IsTimeOut() )
	{
		CWndText* pWndText = (CWndText*)GetDlgItem( WIDC_TEXT );

		pWndText->m_string.SetAlpha( 0 );
	}
	
	if( 0 < strlen( g_Neuz.m_szWhisperName ) )
	{
		LPCTSTR lpstr = m_wndEdit.GetString();
		BOOL bCommand = FALSE;
		if( strcmp( lpstr, "/r " ) == 0 || strcmp( lpstr, "/R " ) == 0 || ( GetLanguage() == LANG_KOR && strcmp( lpstr, "/ㄱ " ) == 0 ) )
		{
			CString strWhisper;
			strWhisper.Format( "/whisper %s ", g_Neuz.m_szWhisperName );
			m_wndEdit.SetString( strWhisper );
			m_wndEdit.SetFocus();
		}		
	}
	
	return TRUE;
}

void CWndChat::SetChannel()
{
	m_wndText.SetString( "" );

	int nChannel = 0;
	switch( CWndChat::m_nChatChannel )
	{
		case CHATSTY_GENERAL: nChannel = 0; break;
		case CHATSTY_WHISPER: nChannel = 1; break;
		case CHATSTY_SHOUT  : nChannel = 2; break;
		case CHATSTY_PARTY  : nChannel = 3; break;
		case CHATSTY_GUILD  : nChannel = 4; break;
	}
	DWORD dwChatFilter = g_Option.m_dwChatFilterEtc | g_Option.m_dwChatFilter[ nChannel ];

	for( int i = 0; i < g_WndMng.m_aChatString.GetSize(); i++ )
	{
		if( g_WndMng.m_aChatStyle.GetAt( i ) & dwChatFilter ) 
		{
			CString string = g_WndMng.m_aChatString.GetAt( i );
			m_wndText.m_string.AddParsingString( string, g_WndMng.m_aChatColor.GetAt( i ), 0x00000000, 0, PS_NOT_MACRO );
			m_wndText.m_string.AddString( "\n" );
		}
	}
	m_wndText.ResetString();
	m_wndText.m_wndScrollBar.SetMaxScrollPos();
}
void CWndChat::OnSetFocus(CWndBase* pOldWnd)
{
}
void CWndChat::OnKillFocus(CWndBase* pNewWnd)
{
	//if( m_pWndCommand && pNewWnd != m_pWndCommand )
	//	m_pWndCommand->Destroy();
}
BOOL CWndChat::Initialize(CWndBase* pWndParent,DWORD dwWndId)
{
	CRect rectWindow = m_pWndRoot->GetWindowRect();
	CRect rect( 154, rectWindow.Height() - 100, 154 + rectWindow.Width() - 300, rectWindow.Height() );
	SetTitle( GETTEXT( TID_APP_COMMUNICATION_CHAT ) );
	return CWndNeuz::InitDialog( g_Neuz.GetSafeHwnd(), dwWndId, WBS_KEY| WBS_THICKFRAME, CPoint( 792, 130 ), pWndParent );
	//return CWndNeuz::Create( 0|WBS_MOVE|/*WBS_DOCKABLE|*/WBS_SOUND|WBS_CAPTION|WBS_THICKFRAME|WBS_MAXIMIZEBOX, rect, &g_WndMng, dwWndId);
}

/*
	"applet" TY_CLIENT 0
	"to"     TY_SERVER 0 
	"to"     TY_SERVER 0
	"to"     TY_SERVER 0
*/

extern	CDPClient	g_DPlay;

void CWndChat::OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags)
{
}
void CWndChat::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
}
void CWndChat::OnDestroyChildWnd( CWndBase* pWndChild )
{
	if( m_pWndCommand == pWndChild )
	{
		SAFE_DELETE( m_pWndCommand );
	}
	if( m_pWndChatFilter == pWndChild )
	{
		SAFE_DELETE( m_pWndChatFilter );
		//ChatFilter Wnd Destroy후 Focus가 World로 되어있지 않아 이동키가 먹지 않기 때문에 SetFocus해줌.
		CWndWorld* pWndWorld = (CWndWorld*)g_WndMng.GetApplet( APP_WORLD );
		if( pWndWorld ) 
			pWndWorld->SetFocus();
	}
}
void CWndChat::SerializeRegInfo( CAr& ar, DWORD& dwVersion )
{
	CWndNeuz::SerializeRegInfo( ar, dwVersion );
	if( ar.IsLoading() )
	{
		if( dwVersion == 0 )
		{
		}
		else
		{
			ar >> m_bChatLock;
		}
		CWndButton* pWndLock = (CWndButton*)GetDlgItem( WIDC_CHECK1 );
		pWndLock->SetCheck( m_bChatLock );
	}
	else
	{
		dwVersion = 1;
		ar << m_bChatLock;
	}
}

BOOL CWndChat::OnChildNotify( UINT message, UINT nID, LRESULT* pLResult ) 
{ 
	m_timerInputTimeOut.Reset();

	CWndText* pWndText = (CWndText*)GetDlgItem( WIDC_TEXT );	
	if( pWndText )
		pWndText->m_string.SetAlpha( 255 );	
	
	switch(nID)
	{
		case WIDC_CLOSE:
			nID = WTBID_CLOSE;
			break;
		case WIDC_HELP:
			nID = WTBID_HELP;
			break;
		case WIDC_BUTTON1:
			{
				if( m_pWndChatFilter == NULL )
				{
					m_pWndChatFilter = new CWndChatFilter;
					m_pWndChatFilter->Initialize( this );
				}
			}
			break;
		case WIDC_CHECK1: // 채팅 입력창 잠구기 
			{
				CWndButton* pWndCheck = (CWndButton*)GetDlgItem( WIDC_CHECK1 );
				m_bChatLock = pWndCheck->GetCheck();
			}
			break;
#if __VER >= 8 //__Y_CHAT_SYSTEM_8
		case WIDC_CHECK3: // 시스탐창
			{
				CWndButton* pWndCheck = (CWndButton*)GetDlgItem( WIDC_CHECK3 );
				BOOL bChatLog = pWndCheck->GetCheck();
#if __VER >= 8 //__CSC_VER8_1 모든 윈도우를 지울때 ChatLog의 유무 구별을 위해 추가.
				m_bChatLog = bChatLog;
#endif //_CSC_VER8_1
				if( g_WndMng.m_pWndChatLog )
				{
					if( bChatLog )
					{
						CRect rectRoot = m_pWndRoot->GetLayoutRect();
						CRect rect = GetWindowRect(TRUE);
						CRect rect2 = g_WndMng.m_pWndChatLog->GetClientRect(TRUE);
						
						int x = 0;
						int y = rect.top;
						
						if( (rect.right+rect2.Width()) < rectRoot.right )
							x = rect.right;
						else
							x = (rect.left - rect2.Width() );
						
						CPoint point( x, y );
						g_WndMng.m_pWndChatLog->Move( point );
					}

					g_WndMng.m_pWndChatLog->SetVisible( bChatLog );
				}
			}
			break;
#endif //__Y_CHAT_SYSTEM_8
		case WIDC_MOVELOCK: // 이동 잠그기
			{
				CWndButton* pWndCheck = (CWndButton*)GetDlgItem( WIDC_MOVELOCK );
				m_bMoveLock = pWndCheck->GetCheck();
				DWORD dwStyle = GetWndStyle();
				if( m_bMoveLock )
					dwStyle &= (~WBS_MOVE);
				else
					dwStyle |= WBS_MOVE;
				SetWndStyle( dwStyle );
			}
			break;
		case WIDC_RADIO1:
			m_nChatChannel = CHATSTY_GENERAL;
			m_wndEdit.SetString( "" );
			m_wndEdit.SetFocus();
			SetChannel();
			break;
		case WIDC_RADIO2:
			m_nChatChannel = CHATSTY_WHISPER;
			m_wndEdit.SetString( "/w " );
			m_wndEdit.SetFocus();
			SetChannel();
			break;
		case WIDC_RADIO3:
			m_nChatChannel = CHATSTY_SHOUT;
			m_wndEdit.SetString( "/s " );
			m_wndEdit.SetFocus();
			SetChannel();
			break;
		case WIDC_RADIO4:
			m_nChatChannel = CHATSTY_PARTY;
			m_wndEdit.SetString( "/p " );
			m_wndEdit.SetFocus();
			SetChannel();
			break;
		case WIDC_RADIO5:
			m_nChatChannel = CHATSTY_GUILD;
			m_wndEdit.SetString( "/g " );
			m_wndEdit.SetFocus();
			SetChannel();
			break;
		case APP_COMMAND:
			{
				if( message == WNM_DBLCLK )
				{
					CString string;
					m_pWndCommand->GetText( m_pWndCommand->GetCurSel(), string );
					string += " ";
					m_wndEdit.SetString( "/" );
					m_wndEdit.AddString( string );
					m_wndEdit.ResetString();
					m_pWndCommand->Destroy();
				}
				SetFocus();
			}
		case WIDC_HEAD: // 말머리
			if( message == EN_RETURN )
			{
				g_WndMng.SetFocus();
			}
			break;
		case WIDC_EDIT: // 본문
			if( message == EN_UP )		
			{
				if( m_strHistory.size() == 0 )
					return FALSE;

				if( m_nHistoryIndex >= (int)( m_strHistory.size() ) )
				{
					m_strHistory.front();
					m_nHistoryIndex = 0;
				}

				m_nHistoryIndex++;
		#ifdef __ITEM_LINK
				m_wndEdit.SetString(m_strHistory[m_strHistory.size()-m_nHistoryIndex]);
#else
				m_wndEdit.m_string = m_strHistory[m_strHistory.size()-m_nHistoryIndex];
#endif

				return TRUE;
			}
			
			if( message == EN_RETURN )
			{
				BOOL bFinished = TRUE;
				if( m_pWndCommand )
				{
					CString str1, str2;
					str1 = m_wndEdit.m_string.Right( m_wndEdit.m_string.GetLength() - 1 );
					if( m_pWndCommand->GetCurSel() != -1 )
					{
						m_pWndCommand->GetText( m_pWndCommand->GetCurSel(), str2 );
						if( str1 != str2 )
						{
							str2 += " ";
							m_wndEdit.SetString( "/" );
							m_wndEdit.AddString( str2 );
							m_wndEdit.ResetString();
							bFinished = FALSE;
						}
					}
					m_pWndCommand->Destroy();
				}
				if( bFinished == TRUE )
				{
					CWndText* pWndText = (CWndText*)GetDlgItem( WIDC_TEXT );
					CWndEdit* pWndHead = (CWndEdit*)GetDlgItem( WIDC_HEAD );
					CString string; 
					if( pWndHead->m_string.IsEmpty() == FALSE && 
						( pWndHead->m_string[ 0 ] == '/' || 
						( m_wndEdit.m_string.IsEmpty() == FALSE && pWndHead->m_string[ 0 ] != '/' && m_wndEdit.m_string[ 0 ] != '/' ) ) 
					)
						string = pWndHead->m_string + " ";

					WORD wCodePage = g_codePage;
					const char* begin = m_wndEdit.m_string;
					const char* end = begin + m_wndEdit.m_string.GetLength();
					const char* iter = begin;
					while(*iter && iter < end)
					{
						if(*((BYTE*)iter) >= 0x80) 
						{
							if(wCodePage != m_wndEdit.m_string.m_awCodePage[iter-begin])
							{
								wCodePage = m_wndEdit.m_string.m_awCodePage[iter-begin];
								
								char temp[16];
								
								if(wCodePage == g_codePage)
								{
									wsprintf(temp, "#nl");
								}
								else
								{
									wsprintf(temp, "#l%04d", wCodePage);
								}
								string += temp;
							}
						}
						const char* next = CharNextEx(iter, wCodePage);
						char temp[16];
						memcpy(temp, iter, next-iter);
						temp[next-iter] = 0;
						string += temp;
						iter = next;
					}
					if( m_strHistory.size() >= MAX_HISTORY_STRING )
					{
						m_nHistoryIndex = 0;
						m_strHistory.erase( m_strHistory.begin() );
					}

					m_strHistory.push_back(string);
					int a = string.GetLength();
					if( !m_wndEdit.m_string.IsEmpty() )
						m_wndEdit.m_string.GetTextFormat(string);
						
						#ifdef __ITEM_LINK
					m_strHistory.push_back(string);
#endif
					
					g_WndMng.ParsingChat( string );
					CScanner scanner;
					scanner.SetProg( m_wndEdit.m_string.LockBuffer() );
					scanner.GetToken(); // 
					if( scanner.Token == "/" )
					{
						scanner.GetToken();
						if( scanner.Token == "w" || scanner.Token == "whisper" )
						{
							scanner.GetToken();
							m_strCharName = scanner.Token;
						}
					}
					m_wndEdit.m_string.UnlockBuffer();
					m_wndEdit.Empty();
					if( m_bChatLock == FALSE ) 
					{
						if( IsWndStyle( WBS_MODAL ) == TRUE )
						{
							DelWndStyle( WBS_MODAL );
							if( g_Neuz.pOldModalWindow )
							{
								g_Neuz.pOldModalWindow->SetFocus();
							}
						}
						else
						{
							CWndWorld* pWndWorld = ( CWndWorld* )g_WndMng.GetApplet( APP_WORLD );
							if( pWndWorld )
							{
								pWndWorld->SetFocus();
							}
							else
							{
								g_WndMng.SetFocus();
							}
						}
					}
					else
						m_wndEdit.SetFocus();
				}
			}
			else
			if( message == EN_CHANGE )
			{
				if( m_wndEdit.m_string.IsEmpty() == FALSE )
				{
					if( m_wndEdit.m_string[ 0 ] == '/' && m_wndEdit.GetOffset() == 1 && m_pWndCommand == NULL )
					{
						m_pWndCommand = new CWndCommand;
						m_pWndCommand->m_pWndEdit = this;
						m_pWndCommand->Initialize( this );
						CRect rect = m_wndEdit.GetScreenRect();
						CPoint point = rect.TopLeft();
						point.y -= m_pWndCommand->GetWndRect().Height();
						m_pWndCommand->Move( point );
					}
					else
					if( m_pWndCommand )
					{
						CString string; 
						string = m_wndEdit.m_string.Right( m_wndEdit.m_string.GetLength() - 1 );
						// 중간에 스페이스가 껴 있으면 닫아버린다.
						if( string.Find( ' ' ) == -1 )
							m_pWndCommand->SelectString( 0, string );
						else
							m_pWndCommand->Destroy();
						
						if( ::GetLanguage() == LANG_KOR )
						{
							if( m_wndEdit.m_string == "/ㅎ " )
							{
								m_wndEdit.SetString( "/g " );
							}
							else if( m_wndEdit.m_string == "/ㅔ " )
							{
								m_wndEdit.SetString( "/p " );
							}
							else if( m_wndEdit.m_string == "/ㄴ " )
							{
								m_wndEdit.SetString( "/s " );
							}
#if __VER >= 11 // __CSC_VER11_1
							else if( m_wndEdit.m_string == "/ㅈ " )
							{
								m_wndEdit.SetString( "/w " );
							}
#endif //__CSC_VER11_1
						}
					}
				}
				else
				if( m_pWndCommand )
					m_pWndCommand->Destroy();
			}
			break;
		case 10000: // 최소�* 
			break;
		case 10001: // 최대�* 
			break;
		case 10002: // 종료
			Destroy();
			break;
	}
	
	//아래 특정 버튼 누를 경우 Focus가 World로 되어있지 않아 이동키가 먹지 않기 때문에 SetFocus해줌.
	if(nID == WIDC_CHECK1 || nID == WIDC_CHECK3 || nID == WIDC_MOVELOCK)
	{
		CWndWorld* pWndWorld = (CWndWorld*)g_WndMng.GetApplet( APP_WORLD );
		if( pWndWorld ) 
			pWndWorld->SetFocus();
	}
	return CWndNeuz::OnChildNotify( message, nID, pLResult ); 
} 

BOOL CWndChat::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
{
	return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
}
void CWndChat::Parsing( CString string )
{
	/*
	MotionProp* pProp;
	for( int i = 0; i < prj.m_aMotionProp.GetSize(); i++ )
	{
		pProp = prj.GetMotionProp( i );
		if( pProp && pProp->dwRequireLv )
		{
			if( string.Find( pProp->szLink ) != -1 )
			{
			//	g_pPlayer->SendActMsg( OBJMSG_MOTION, pProp->dwID );
			}
		}
	}
	*/
}
void CWndChat::PutString( LPCTSTR lpszString, DWORD dwColor, DWORD dwPStyle )
{
	CWndText* pWndText = (CWndText*)GetDlgItem( WIDC_TEXT );
	
	if( dwColor != 0xffffff00 )
	{
		m_timerInputTimeOut.Reset();
		
		CWndText* pWndText = (CWndText*)GetDlgItem( WIDC_TEXT );	
		pWndText->m_string.SetAlpha( 255 );	
	}

	BOOL bLineEnd = FALSE;
	if( pWndText->m_wndScrollBar.GetScrollPos() == ( pWndText->m_wndScrollBar.GetMaxScrollPos() - pWndText->m_wndScrollBar.GetScrollPage() ) )
		bLineEnd = TRUE;

	pWndText->AddString( lpszString, dwColor, dwPStyle );
	pWndText->AddString( "\n", dwColor );// += '\n';
	// 글 내용이 1000줄을 넘어가면 500라인을 잘라낸다.
	if( pWndText->m_string.GetLineCount() >= 1000 )
	{
		pWndText->m_string.DeleteLine( 0, 500 );
		pWndText->UpdateScrollBar();
	}
	if( bLineEnd )
		pWndText->m_wndScrollBar.SetMaxScrollPos();
}
void CWndChat::OnDestroy()
{
	CWndText* pWndText = (CWndText*)GetDlgItem( WIDC_TEXT );
	g_WndMng.m_ChatString = pWndText->m_string;
}
void CWndChat::SetWndRect( CRect rectWnd, BOOL bOnSize )
{
#if __VER >= 8 //__Y_CHAT_SYSTEM_8
	AdjustMinRect( &rectWnd, 16 * 29, 16 * 3 );
#else // __Y_CHAT_SYSTEM_8
	AdjustMinRect( &rectWnd, 16 * 26, 16 * 3 );
#endif //__Y_CHAT_SYSTEM_8
	CRect rectOld = m_rectClient;
	m_rectWindow = rectWnd;
	m_rectClient = m_rectWindow;
	m_rectClient.DeflateRect( 4, 4, 6, 6 );
	m_rectLayout = m_rectClient;
	if( bOnSize && ( rectOld.Width() != m_rectClient.Width() || rectOld.Height() != m_rectClient.Height() ) )
		OnSize( 0, m_rectClient.Width(), m_rectClient.Height() );
	MakeVertexBuffer();
}
void CWndChat::OnSize(UINT nType, int cx, int cy)
{
//#ifdef __NEWINTERFACE
	CWndText* pWndText = (CWndText*)GetDlgItem( WIDC_TEXT );
	CWndEdit* pWndHead = (CWndEdit*)GetDlgItem( WIDC_HEAD );
	CWndEdit* pWndEdit = (CWndEdit*)GetDlgItem( WIDC_EDIT );

	CRect rectEdit;
	CRect rect = GetClientRect();
	//rect.left = 60;
	rect.top = 0;
	rect.left = 0;
	rect.right -= 0;
	rect.bottom -= 39;
	pWndText->SetWndRect( rect );
	pWndText->m_wndScrollBar.SetMaxScrollPos();
	
	rect = GetClientRect();
	rectEdit = pWndHead->GetWndRect();
	rectEdit.top = rect.bottom - 18;
	rectEdit.bottom = rect.bottom;
	rect.DeflateRect( 1, 1 );
	pWndHead->SetWndRect( rectEdit );

	rect = GetClientRect();
	rectEdit = m_wndEdit.GetWndRect();
	rectEdit.top = rect.bottom - 18;
	rectEdit.bottom = rect.bottom;
	rectEdit.right = rect.right - 20;
	rect.DeflateRect( 1, 1 );
	m_wndEdit.SetWndRect( rectEdit );

	rect = GetClientRect();
	rectEdit = m_wndMacroChat.GetWndRect();
	rectEdit.top = rect.bottom - 19;
	rectEdit.bottom = rect.bottom;
	m_wndMacroChat.SetWndRect( rectEdit );
	CWndButton* pWndRadio1 = (CWndButton*)GetDlgItem( WIDC_RADIO1 );
	CWndButton* pWndRadio2 = (CWndButton*)GetDlgItem( WIDC_RADIO2 );
	CWndButton* pWndRadio3 = (CWndButton*)GetDlgItem( WIDC_RADIO3 );
	CWndButton* pWndRadio4 = (CWndButton*)GetDlgItem( WIDC_RADIO4 );
	CWndButton* pWndRadio5 = (CWndButton*)GetDlgItem( WIDC_RADIO5 );
	CWndButton* pWndCheck  = (CWndButton*)GetDlgItem( WIDC_CHECK1 );
	CWndButton* pWndCheck2  = (CWndButton*)GetDlgItem( WIDC_MOVELOCK );
	CWndButton* pWndButton1 = (CWndButton*)GetDlgItem( WIDC_BUTTON1 );
	CWndButton* pWndButton2 = (CWndButton*)GetDlgItem( WIDC_HELP   );
	CWndButton* pWndButton3 = (CWndButton*)GetDlgItem( WIDC_CLOSE  );

#if __VER >= 8 //__Y_CHAT_SYSTEM_8
	CWndButton* pWndCheck3  = (CWndButton*)GetDlgItem( WIDC_CHECK3 );
#else //__Y_CHAT_SYSTEM_8
	CWndButton* pWndCheck3  = (CWndButton*)GetDlgItem( WIDC_CHECK3 );
	pWndCheck3->SetVisible(FALSE);
#endif //__Y_CHAT_SYSTEM_8

	rect = GetClientRect();
	rectEdit = pWndRadio1->GetWndRect();
	rectEdit.top = rect.bottom - 38;
	rectEdit.left = 0;
	pWndRadio1->Move( rectEdit.TopLeft() ); 
	rectEdit.left = 50;
	pWndRadio2->Move( rectEdit.TopLeft()  ); 
	rectEdit.left = 100;
	pWndRadio3->Move( rectEdit.TopLeft()  ); 
	rectEdit.left = 150;
	pWndRadio4->Move( rectEdit.TopLeft()  ); 
	rectEdit.left = 200;
	pWndRadio5->Move( rectEdit.TopLeft()  ); 
#if __VER >= 8 //__Y_CHAT_SYSTEM_8
	rectEdit.left = rect.right - 200;
	pWndCheck->Move( rectEdit.TopLeft()  ); 
	rectEdit.left = rect.right - 150;
	pWndButton1->Move( rectEdit.TopLeft()  ); 

	rectEdit.left = rect.right - 100;
	pWndCheck3->Move( rectEdit.TopLeft()  ); 	
#else //__Y_CHAT_SYSTEM_8
	rectEdit.left = rect.right - 150;
	pWndCheck->Move( rectEdit.TopLeft()  ); 
	rectEdit.left = rect.right - 100;
	pWndButton1->Move( rectEdit.TopLeft()  ); 
#endif //__Y_CHAT_SYSTEM_8
	rectEdit.left = rect.right - 49;

	CRect rectEdit2 = rectEdit;

	rectEdit2.top  += 1;
	pWndCheck2->Move( rectEdit2.TopLeft()  ); 
	rectEdit.left = rect.right - 32;
	rectEdit.top += 1;
	pWndButton2->Move( rectEdit.TopLeft()  ); 
	rectEdit.left = rect.right - 15;
	pWndButton3->Move( rectEdit.TopLeft()  ); 

	CWndStatic* pWndStatic = (CWndStatic*)GetDlgItem( WIDC_STATIC1 ); 
	
	if( pWndStatic )
	{
		rectEdit.top  += 20;
		rectEdit.left -= 5;
		pWndStatic->Move( rectEdit.TopLeft()  ); 
	}

	CWndNeuz::OnSize(nType,cx,cy);
}
void CWndChat::OnLButtonUp(UINT nFlags, CPoint point)
{
	if(IsWndRoot())
		return;

	//if(IsWndStyle(WBS_CAPTION) && m_bPickup)
	{//
	//	m_wndTitleBar.m_wndMinimize.SetVisible(TRUE);
		//m_wndTitleBar.m_wndMaximize.SetVisible(TRUE);
	}
	if( g_WndMng.m_pWndWorld )
	{
		CRect rect = GetWindowRect( TRUE );
		CPoint p;
		p.x = point.x + rect.left;
		p.y = point.y + rect.top;
//		g_WndMng.m_pWndWorld->m_bLButtonDown = TRUE;
		g_WndMng.m_pWndWorld->OnLButtonUp( nFlags, p );
	}
}

void CWndChat::OnLButtonDown(UINT nFlags, CPoint point)
{
	if( m_pWndCommand )
		m_pWndCommand->Destroy();

	if( g_WndMng.m_pWndWorld )
	{
		CRect rect = GetWindowRect( TRUE );
		CPoint p;
		p.x = point.x + rect.left;
		p.y = point.y + rect.top;
		g_WndMng.m_pWndWorld->m_bLButtonDown = TRUE;
		g_WndMng.m_pWndWorld->OnLButtonDown( nFlags, p );
	}
}

void CWndChat::OnRButtonDown(UINT nFlags, CPoint point)
{
	if( g_WndMng.m_pWndWorld )
	{
		CRect rect = GetWindowRect( TRUE );
		CPoint p;
		p.x = point.x + rect.left;
		p.y = point.y + rect.top;
		g_WndMng.m_pWndWorld->m_bRButtonDown = TRUE;
		g_WndMng.m_pWndWorld->OnRButtonDown( nFlags, p );
	}

	int nLineCount = m_wndText.m_string.GetLineCount();
	int nPos = m_wndText.IsWndStyle( WBS_VSCROLL ) ? m_wndText.m_wndScrollBar.GetScrollPos() : 0;
	DWORD dwMaxHeight = m_wndText.GetFontHeight();
	for( int i = nPos ; i < nLineCount ; ++i )
	{
		if( (int)( ((i-nPos) * dwMaxHeight) ) <= point.y && point.y < (int)( (dwMaxHeight * (i-nPos + 1)) ) )
		{
			CString str = m_wndText.m_string.GetLine( i );
			#ifdef __ITEM_LINK
			CString strTmp = str;
#endif
			char szFind[MAX_NAME] = {0,};
			
			BOOL bChat = FALSE;
			
			// 일반 채팅 검색
			int nFindName = str.Find( " :" );
			if( 0 < nFindName && nFindName < MAX_NAME )
			{
				int nFindSpace = str.Find( ' ' );
				if(  nFindSpace == -1 || nFindName <= nFindSpace )
				{
				#ifdef __ITEM_LINK
					int nExtent = m_wndText.m_pFont->GetTextExtent(str.Mid(0,nFindName)).cx;
					if(point.x < nExtent)
					{
#endif
					strncpy( szFind, str, nFindName );
					if( strcmp( szFind, g_pPlayer->GetName() ) != 0 )
						bChat = TRUE;
						#ifdef __ITEM_LINK
					}
#endif
				}
			}
			
			// 귓속말 검색
			if( bChat == FALSE )
			{
				int nFindName1 = str.Find( "<- [" );
				int nFindName2 = str.Find( "]" );
				if( 0 == nFindName1 )
				{
					str.Replace( "<- [", "" );
				}					
				else
				{
					nFindName1 = str.Find( "-> [" );
					str.Replace( "-> [", "" );
				}
				
				if( 0 == nFindName1 && 0 < nFindName2 && nFindName2 - nFindName1 < MAX_NAME + 4 )
				{
					nFindName2 = str.Find( "]" );
					strncpy( szFind, str, nFindName2 );
					int nFindSpace = strspn( " ", szFind );
					#ifdef __ITEM_LINK
					int nFindName3 = strTmp.Find("]");
					int nExtent = m_wndText.m_pFont->GetTextExtent(strTmp.Mid(0,nFindName3)).cx;
					if(point.x < nExtent)
					{
#endif
					if(  nFindSpace < 1 && strcmp( szFind, g_pPlayer->GetName() ) != 0 )
						bChat = TRUE;
						#ifdef __ITEM_LINK
					}
#endif
				}
			}
			
			// 외치기 검색( 알림은 빠짐 )
			if( bChat == FALSE )
			{
				int nFindName1 = str.Find( "[" );
				int nFindName2 = str.Find( "]" );
				if( 0 == nFindName1 && 0 < nFindName2 && nFindName2 - nFindName1 < MAX_NAME + 1 )
				{
					str.Replace( "[", "" );
					nFindName2 = str.Find( "]" );
					strncpy( szFind, str, nFindName2 );
					int nFindSpace = strspn( " ", szFind );
					#ifdef __ITEM_LINK
					int nFindName3 = strTmp.Find("]");
					int nExtent = m_wndText.m_pFont->GetTextExtent(strTmp.Mid(0,nFindName3)).cx;
					if(point.x < nExtent)
					{
#endif
					if(  nFindSpace < 1 && strcmp( szFind, g_pPlayer->GetName() ) != 0 )
						bChat = TRUE;
						#ifdef __ITEM_LINK
					}
#endif
					
					CString strSystem = prj.GetText(TID_ADMIN_ANNOUNCE);
					strSystem.Replace( "[", "" );
					int nFindSystem = strSystem.Find("]");
					if( 0 < nFindSystem )
					{
						char szFindSystem[MAX_NAME] = {0,};
						strncpy( szFindSystem, strSystem, nFindSystem );
						if( strcmp( szFind, szFindSystem ) == 0 )
							bChat = FALSE;
					}
				}
			}
			#ifdef __ITEM_LINK
			{
				if(!bChat)
				{
					int nFindBeg = strTmp.Find("<");
					int nFindEnd = strTmp.Find(">");
					while(nFindBeg != -1 || nFindEnd != -1)
					{
						int nExtentEnd;
						int nExtentBeg;
						if(nFindBeg != -1)// check line changed
							nExtentBeg = m_wndText.m_pFont->GetTextExtent(strTmp.Mid(0,nFindBeg)).cx;
						else
							nExtentBeg = 0;

						if(nFindEnd != -1) // check line changed
							nExtentEnd = m_wndText.m_pFont->GetTextExtent(strTmp.Mid(nFindBeg,nFindEnd-nFindBeg)).cx+nExtentBeg;
						else{
							nExtentEnd = m_wndText.m_pFont->GetTextExtent(strTmp.Mid(nFindBeg,str.GetLength()-nFindBeg)).cx+nExtentBeg;
						}
						if(point.x > nExtentBeg && point.x < nExtentEnd) // clicked on link
						{
							DWORD dwLinkID = m_wndText.m_string.m_adwLinkedID.GetAt(nFindBeg+m_wndText.m_string.GetLineOffset(i));
							if(dwLinkID) //check if is linked item or normal string
								g_DPlay.SendGetLinkedItem(dwLinkID);
							Error("%d",dwLinkID);
						}
						nFindBeg = strTmp.Find("<",nFindEnd);
						nFindEnd = strTmp.Find(">",nFindEnd+1);
					}
				}
			}
#endif
			
			if( bChat )
			{
				CString strWhisper;
				strWhisper.Format( "/whisper %s ", szFind );
				m_wndEdit.SetString( strWhisper );
				m_wndEdit.SetFocus();
			}
			break;
		}
	}
}	
void CWndChat::OnRButtonUp(UINT nFlags, CPoint point)
{
	if( g_WndMng.m_pWndWorld )
	{
		CRect rect = GetWindowRect( TRUE );
		CPoint p;
		p.x = point.x + rect.left;
		p.y = point.y + rect.top;
//		g_WndMng.m_pWndWorld->m_bRButtonDown = TRUE;
		g_WndMng.m_pWndWorld->OnRButtonUp( nFlags, p );
	}
}

void CWndChat::OnMouseMove(UINT nFlags, CPoint point)
{
	if( g_WndMng.m_pWndWorld )
	{
		CRect rect = GetWindowRect( TRUE );
		CPoint p;
		p.x = point.x + rect.left;
		p.y = point.y + rect.top;
//		g_WndMng.m_pWndWorld->m_bRButtonDown = TRUE;
		g_WndMng.m_pWndWorld->OnMouseMove( nFlags, p );
	}
}



BOOL CWndChat::OnEraseBkgnd(C2DRender* p2DRender)
{
	return TRUE;
}
//void CWndNeuz::PaintTexture( LPBYTE pDest, LPBYTE pSrc, CPoint pt,
// CSize sizeTexture, CSize sizeSurface )

void CWndChat::AdditionalSkinTexture( LPWORD pDest, CSize size, D3DFORMAT d3dFormat )
{
	CWndNeuz::AdditionalSkinTexture( pDest, size, d3dFormat );

	CRect rect = GetWindowRect();
	CPoint point =  CPoint( 0, rect.Height() - m_wndChatEdit[0].size.cy );
	PaintTexture( pDest, &m_wndChatEdit[0], point, size );
	int nWidth = ( rect.Width() - m_wndChatEdit[0].size.cx ) / m_wndChatEdit[1].size.cx;
	point.x += m_wndChatEdit[0].size.cx;
	for( int i = 0; i < nWidth; i++ )
	{
		if( i == nWidth - 2 )
			PaintTexture( pDest, &m_wndChatEdit[2], point, size );
		else
		if( i < nWidth - 2 )
			PaintTexture( pDest, &m_wndChatEdit[1], point, size );
		point.x += m_wndChatEdit[1].size.cx;
	}
}


#if __VER >= 8 //__Y_CHAT_SYSTEM_8

CWndChatLog::CWndChatLog()
{
}
CWndChatLog::~CWndChatLog()
{
}
/*
void CWndChatLog::OnDraw(C2DRender* p2DRender)
{
}
*/
void CWndChatLog::OnInitialUpdate()
{
	CWndNeuz::OnInitialUpdate();

	LPWNDCTRL lpWndText = GetWndCtrl( WIDC_CUSTOM1 );
	m_wndText.Create( WBS_NOFRAME | WBS_NODRAWFRAME | WBS_VSCROLL, lpWndText->rect, this, WIDC_TEXT );
	CWndText* pWndText = (CWndText*)GetDlgItem( WIDC_TEXT );

	if( g_pPlayer->IsAuthHigher( AUTH_GAMEMASTER ) )
	{
		pWndText->m_bEnableClipboard = TRUE;
	}

	pWndText->m_nLineSpace = 2;

	CRect rectRoot = m_pWndRoot->GetLayoutRect();
	CRect rect = GetWindowRect();
	int nWidth  = rect.Width(); 
	int nHeight = rect.Height(); 
	int x = 0;//rectRoot.left + (rectRoot.Width()  / 2) - (nWidth  / 2);
	int y = rectRoot.bottom - nHeight;	
	CPoint point( x, y );
	Move( point );
	
	m_wndMenuPlace.CreateMenu( this );	
	m_wndMenuPlace.AppendMenu( 0, 0 , prj.GetText(TID_GAME_GUIDE_HIDE) );
}

BOOL CWndChatLog::Process ()
{	
	return TRUE;
}
void CWndChatLog::OnSetFocus(CWndBase* pOldWnd)
{
}
void CWndChatLog::OnKillFocus(CWndBase* pNewWnd)
{
}
BOOL CWndChatLog::Initialize(CWndBase* pWndParent,DWORD dwWndId)
{
	CRect rectWindow = m_pWndRoot->GetWindowRect();
	CRect rect( 154, rectWindow.Height() - 100, 154 + rectWindow.Width() - 300, rectWindow.Height() );
	SetTitle( GETTEXT( TID_APP_COMMUNICATION_CHAT ) );
	return CWndNeuz::InitDialog( g_Neuz.GetSafeHwnd(), dwWndId, WBS_THICKFRAME, CPoint( 792, 130 ), pWndParent );
//	return CWndNeuz::InitDialog( g_Neuz.GetSafeHwnd(), dwWndId, 0, CPoint( 792, 130 ), pWndParent );
}

void CWndChatLog::OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags)
{
}
void CWndChatLog::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
}
void CWndChatLog::OnDestroyChildWnd( CWndBase* pWndChild )
{
}
BOOL CWndChatLog::OnChildNotify( UINT message, UINT nID, LRESULT* pLResult ) 
{ 
	CWndBase* pWndBase = (CWndBase*) pLResult;
	
	if( pWndBase->m_pParentWnd == &m_wndMenuPlace )
	{
		SetFocus();
		switch( nID )
		{
		case 0:
			{
				CWndChat* pWndChat = (CWndChat*)g_WndMng.GetWndBase( APP_COMMUNICATION_CHAT );

				if( pWndChat )
				{
					CWndButton* pWndCheck = (CWndButton*)pWndChat->GetDlgItem( WIDC_CHECK3 );

					if( pWndCheck )
						pWndCheck->SetCheck(FALSE);
				}

				SetVisible(FALSE);
			}
			break;
		}
	}

	return CWndNeuz::OnChildNotify( message, nID, pLResult ); 
} 

BOOL CWndChatLog::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
{
	return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
}
void CWndChatLog::PutString( LPCTSTR lpszString, DWORD dwColor, DWORD dwPStyle )
{
	CWndText* pWndText = (CWndText*)GetDlgItem( WIDC_TEXT );
	
	BOOL bLineEnd = FALSE;
	if( pWndText->m_wndScrollBar.GetScrollPos() == ( pWndText->m_wndScrollBar.GetMaxScrollPos() - pWndText->m_wndScrollBar.GetScrollPage() ) )
		bLineEnd = TRUE;

	pWndText->AddString( lpszString, dwColor, dwPStyle );
	pWndText->AddString( "\n", dwColor );// += '\n';
	// 글 내용이 1000줄을 넘어가면 500라인을 잘라낸다.
	if( pWndText->m_string.GetLineCount() >= 1000 )
	{
		pWndText->m_string.DeleteLine( 0, 500 );
		pWndText->UpdateScrollBar();
	}
	if( bLineEnd )
		pWndText->m_wndScrollBar.SetMaxScrollPos();
}
void CWndChatLog::OnDestroy()
{
}
void CWndChatLog::OnSize(UINT nType, int cx, int cy)
{
	CRect rectEdit;
	CRect rect = GetClientRect();
	//rect.left = 60;
	rect.top = 0;
	rect.left = 0;
	rect.right -= 0;
	rect.bottom -= 0;

	m_wndText.SetWndRect( rect );
	m_wndText.m_wndScrollBar.SetMaxScrollPos();
	
	CWndNeuz::OnSize(nType,cx,cy);
}
void CWndChatLog::OnLButtonUp(UINT nFlags, CPoint point)
{
}
void CWndChatLog::OnLButtonDown(UINT nFlags, CPoint point)
{
	if( g_WndMng.m_pWndWorld )
	{
		CRect rect = GetWindowRect( TRUE );
		CPoint p;
		p.x = point.x + rect.left;
		p.y = point.y + rect.top;
		g_WndMng.m_pWndWorld->m_bLButtonDown = TRUE;
		g_WndMng.m_pWndWorld->OnLButtonDown( nFlags, p );
	}
}

void CWndChatLog::OnRButtonDown(UINT nFlags, CPoint point)
{
	CRect rect = GetWindowRect( TRUE );
	CRect menurect = m_wndMenuPlace.GetWindowRect();

	rect.top  += point.y;
	rect.left += point.x;
	
	m_wndMenuPlace.Move( CPoint( rect.left, rect.top ) );
	
	m_wndMenuPlace.SetVisible( !m_wndMenuPlace.IsVisible() );
	m_wndMenuPlace.SetFocus();	
}	
void CWndChatLog::OnRButtonUp(UINT nFlags, CPoint point)
{
}
void CWndChatLog::OnMouseMove(UINT nFlags, CPoint point)
{
}
/*
BOOL CWndChatLog::OnEraseBkgnd(C2DRender* p2DRender)
{
	return TRUE;
}
*/

void CWndChatLog::AdditionalSkinTexture( LPWORD pDest, CSize size, D3DFORMAT d3dFormat )
{
	CWndNeuz::AdditionalSkinTexture( pDest, size, d3dFormat );
}

void CWndChatLog::SetWndRect( CRect rectWnd, BOOL bOnSize )
{
	AdjustMinRect( &rectWnd, 16 * 17, 16 * 3 );
	CRect rectOld = m_rectClient;
	m_rectWindow = rectWnd;
	m_rectClient = m_rectWindow;
	m_rectClient.DeflateRect( 4, 4, 6, 6 );
	m_rectLayout = m_rectClient;
	if( bOnSize && ( rectOld.Width() != m_rectClient.Width() || rectOld.Height() != m_rectClient.Height() ) )
		OnSize( 0, m_rectClient.Width(), m_rectClient.Height() );
	MakeVertexBuffer();
}

#endif //__Y_CHAT_SYSTEM_8

#ifdef __ITEM_LINK
CWndLinkedItem::CWndLinkedItem()
{
	m_pItem = NULL;

	CString strPath;
	if(::GetLanguage() == LANG_FRE)
		strPath = MakePath( "Theme\\", ::GetLanguage(), "Icon_Ultimate.dds");
	else
		strPath = MakePath( DIR_ICON, "Icon_Ultimate.dds");

	m_pUltimateTexture = CWndBase::m_textureMng.AddTexture( g_Neuz.m_pd3dDevice, strPath, 0xffff00ff );

	strPath = MakePath( DIR_ICON, "icon_Baruna01.dds" );
	m_pBarunaTexture = CWndBase::m_textureMng.AddTexture( g_Neuz.m_pd3dDevice, strPath, 0xffff00ff );

	m_pJewelBgTexture = CWndBase::m_textureMng.AddTexture( g_Neuz.m_pd3dDevice, MakePath( DIR_THEME, "WndChgElemItem.bmp"), 0xffff00ff );
}
CWndLinkedItem::~CWndLinkedItem()
{
	SAFE_DELETE(m_pItem);
}

BOOL CWndLinkedItem::Initialize(CWndBase *pWndParent,DWORD dwStyle)
{
	return CWndNeuz::InitDialog(g_Neuz.GetSafeHwnd(),APP_TOOLTIP_LINKEDITEM,dwStyle,CPoint(0,0),pWndParent);
}

void CWndLinkedItem::OnInitialUpdate()
{
	CWndNeuz::OnInitialUpdate();
	MoveParentCenter();
	rectItem = GetWndCtrl(WIDC_CUSTOM1)->rect;
}

void CWndLinkedItem::OnMouseWndSurface(CPoint point)
{
	/*
	if(m_pItem && rectItem.PtInRect(point))
	{
		CRect hitrect = rectItem;
		CPoint point2 = point;
		ClientToScreen(&point2);
		ClientToScreen(&hitrect);
		g_WndMng.PutToolTip_Item(m_pItem,point2,&hitrect);
	}
*/
}
void CWndLinkedItem::OnDraw(C2DRender *p2DRender)
{
	if(m_pItem)
	{
		CMover* pMover = g_pPlayer;
		m_pItem->GetTexture()->Render(p2DRender,rectItem.TopLeft(),255);
		CEditString strEdit;
		ItemProp* pItemProp = m_pItem->GetProp();
		strEdit.SetParsingString("");
		strEdit.Init( CWndBase::m_Theme.m_pFontText, &CRect( 0, 0, 240, 0 ) );
		DWORD dwColorBuf = g_WndMng.PutItemName(m_pItem, &strEdit);
		g_WndMng.PutItemAbilityPiercing( m_pItem, &strEdit, dwColorBuf );
		
		
		if( m_pItem->GetProp() && m_pItem->GetProp()->dwFlag & IP_FLAG_EQUIP_BIND )
		{
			strEdit.AddString("\r\n");
			if( m_pItem->IsFlag( CItemElem::binds ) )
				strEdit.AddString( GETTEXT( TID_TOOLTIP_EQUIPBIND_AFTER ), GETTEXTCOLOR( TID_TOOLTIP_EQUIPBIND_AFTER ) );
			else
				strEdit.AddString( GETTEXT( TID_TOOLTIP_EQUIPBIND_BEFORE ), GETTEXTCOLOR( TID_TOOLTIP_EQUIPBIND_BEFORE ) );
		}
		g_WndMng.PutWeapon( m_pItem, &strEdit );
	

     
		CString strExp;
#ifdef __MODEL_CHANGE
		g_WndMng.PutSex( pMover, m_pItem, &strEdit );

		
		

		switch( pItemProp->dwItemKind2 )
		{
			case IK2_WEAPON_DIRECT:
			case IK2_WEAPON_MAGIC:
			case IK2_ARMORETC:
			case IK2_CLOTHETC:
			case IK2_ARMOR:
			case IK2_CLOTH:
			case IK2_BLINKWING:
			{
				g_WndMng.PutItemMinMax( pMover, m_pItem, &strEdit );
				g_WndMng.PutItemSpeed( m_pItem, &strEdit );
				if( pItemProp->dwItemKind3 == IK3_ELECARD )
					g_WndMng.PutItemResist( m_pItem, &strEdit );
				else if( m_pItem->m_nResistAbilityOption && ( pItemProp->dwItemKind1 == IK1_WEAPON  || pItemProp->dwItemKind1 == IK1_ARMOR ) )
					g_WndMng.PutItemResist( m_pItem, &strEdit );
	
				g_WndMng.PutBaseResist( m_pItem, &strEdit );	// 속성 저항력
				
				g_WndMng.PutBaseItemOpt( m_pItem, &strEdit );

				g_WndMng.PutJob( pMover, m_pItem, &strEdit );
				g_WndMng.PutLevel( pMover, m_pItem, &strEdit );
				g_WndMng.PutCommand( m_pItem, &strEdit );
				g_WndMng.PutItemGold( pMover, m_pItem, &strEdit, 0 );	// 가격
				g_WndMng.PutSetItemOpt( pMover, m_pItem, &strEdit );
				g_WndMng.PutPiercingOpt( m_pItem, &strEdit );
				g_WndMng.PutRandomOpt( m_pItem, &strEdit );			
				g_WndMng.PutEnchantOpt( pMover, m_pItem, &strEdit, 0 );
				break;
			}
		case IK2_REFRESHER:
		case IK2_FOOD:
		case IK2_POTION:
			{
				g_WndMng.PutMedicine( m_pItem, m_pItem->GetProp()->dwDestParam1,  pItemProp->nAdjParamVal1, &strEdit );
				g_WndMng.PutMedicine( m_pItem, m_pItem->GetProp()->dwDestParam2,  pItemProp->nAdjParamVal2, &strEdit );
				break;
			}
		case IK2_JEWELRY:
			{
				g_WndMng.PutBaseItemOpt( m_pItem, &strEdit );
				break;
			}
		case IK2_SYSTEM:
			{
				if( pItemProp->dwItemKind3 == IK3_VIS )
				{
					g_WndMng.PutNeededVis( m_pItem, &strEdit );
					g_WndMng.PutBaseItemOpt( m_pItem, &strEdit );
				}
	
				if( m_pItem->m_dwItemId == II_SYS_SYS_SCR_SEALCHARACTER )
				{
					g_WndMng.PutSealChar( m_pItem, &strEdit );
				}
				break;
			}

			case IK2_GMTEXT:
			{
				if( pItemProp->dwItemKind3 == IK3_TEXT_DISGUISE )
				{
					g_WndMng.PutDestParam( pItemProp->dwDestParam[0], pItemProp->dwDestParam[1],
					pItemProp->nAdjParamVal[0], pItemProp->nAdjParamVal[1], strEdit );

					if( pItemProp->dwActiveSkill != NULL_ID )
					{
						ItemProp *pSkillProp;
						AddSkillProp* pAddSkillProp;
						pMover->GetSkillProp( &pSkillProp, &pAddSkillProp, pItemProp->dwActiveSkill, 1, "CWndMgr::PutToolTip_Item" );
					
						if( pAddSkillProp )
						{
							g_WndMng.PutDestParam( pAddSkillProp->dwDestParam[0], pAddSkillProp->dwDestParam[1],
								pAddSkillProp->nAdjParamVal[0], pAddSkillProp->nAdjParamVal[1], strEdit );
						}
					}
				}			
			}
			break;
		}
		default:
		{
			break;
		}
	}

	if( m_pItem->IsEatPet() )
	{
		if( pItemProp->dwActiveSkill != NULL_ID )
		{
			ItemProp *pSkillProp;
			AddSkillProp* pAddSkillProp;
			pMover->GetSkillProp( &pSkillProp, &pAddSkillProp, pItemProp->dwActiveSkill, 1, "CWndMgr::PutToolTip_Item" );
			
			if( pAddSkillProp )
			{
				g_WndMng.PutDestParam( pAddSkillProp->dwDestParam[0], pAddSkillProp->dwDestParam[1],
					pAddSkillProp->nAdjParamVal[0], pAddSkillProp->nAdjParamVal[1], strEdit );
			}
		}
	}
       
	if( m_pItem->IsVisPet( ) )
		g_WndMng.PutVisPetInfo( m_pItem, &strEdit );

	g_WndMng.PutCoolTime( pMover, m_pItem, &strEdit );			// 쿨타임
	g_WndMng.PutEndurance( m_pItem, &strEdit, 0 );			// 내구력
	g_WndMng.PutKeepTime( m_pItem, &strEdit );					// 사용할수 있는 시간

	if( pItemProp->dwItemKind3 == IK3_EGG && m_pItem->m_pPet )//&& pItemElem->m_pPet->GetLevel() != PL_EGG )
		g_WndMng.PutPetInfo( m_pItem, &strEdit );
	if( pItemProp->dwID == II_SYS_SYS_SCR_PET_FEED_POCKET ) //먹이 주머니 툴팁
		g_WndMng.PutPetFeedPocket( m_pItem, &strEdit );

	//g_WndMng.PutPiercingOpt( m_pItem, &strEdit );

	g_WndMng.PutAwakeningBlessing( m_pItem, &strEdit );

	if( (pItemProp->dwItemKind2 == IK2_WEAPON_DIRECT || pItemProp->dwItemKind2 == IK2_WEAPON_MAGIC) && m_pItem->GetProp()->dwReferStat1 == WEAPON_ULTIMATE )
		g_WndMng.PutAddedOpt( m_pItem, &strEdit );

	if( (pItemProp->dwItemKind2 == IK2_WEAPON_DIRECT || pItemProp->dwItemKind2 == IK2_WEAPON_MAGIC) && pItemProp->IsUltimate() )
		m_pUltimateTexture->Render( p2DRender, CPoint( 10, 55) );
//	else if( (pItemProp->dwItemKind2 == IK2_WEAPON_DIRECT || pItemProp->dwItemKind2 == IK2_WEAPON_MAGIC) && pItemProp->IsBaruna() )
//		m_pBarunaTexture->Render( p2DRender, CPoint( 10, 55) );
	m_p2DRender->TextOut_EditString(rectItem.left - 80, rectItem.bottom + 15, strEdit);
	this->SetWndSize(90 + p2DRender->m_pFont->GetTextExtent(strEdit).cx, 100 + p2DRender->m_pFont->GetTextExtent(strEdit).cy);
	}
}

void CWndLinkedItem::SetItem(CItemElem *pItem)
{
	if( pItem && pItem->GetProp() )
	this->m_pItem = pItem;
}
#endif //__MODEL_CHANGE
WurstbrotQT is offline  
Old   #4
 
elite*gold: 0
Join Date: Aug 2014
Posts: 113
Received Thanks: 36
Quote:
Originally Posted by WurstbrotQT View Post
Your parents must be really proud...

Code:
#include "stdafx.h"
#include "defineText.h"
#include "AppDefine.h"
#include "WndCommand.h"
#include "party.h"

#include "WndManager.h"

#include "WndChatFilter.h"

#include "DPClient.h"
extern	CDPClient	g_DPlay;


#define		MAX_HISTORY_STRING		20

CWndEditChat::CWndEditChat()
{
}
CWndEditChat::~CWndEditChat()
{
}
void CWndEditChat::OnLButtonDown(UINT nFlags, CPoint point)
{
	CWndChat* pWndChat = (CWndChat*) m_pParentWnd;
	if( pWndChat->m_pWndCommand )
		pWndChat->m_pWndCommand->Destroy();
	CWndEdit::OnLButtonDown( nFlags, point );
}
void CWndEditChat::OnSetFocus(CWndBase* pOldWnd)
{
	if( m_string.IsEmpty() )
	{
		CWndChat* pWndChat = (CWndChat*) m_pParentWnd;	

		if( pWndChat->m_pWndCommand == NULL )
		{
			if( pWndChat->m_nChatChannel == CHATSTY_GENERAL )
			{
			}
			else
			if( pWndChat->m_nChatChannel == CHATSTY_WHISPER )
			{
				CString string;
				if(  pWndChat->m_strCharName.IsEmpty() )
					string.Format( "/w " );
				else
					string.Format( "/w %s ", pWndChat->m_strCharName );
				SetString( string );
			}
			else
			if( pWndChat->m_nChatChannel == CHATSTY_SHOUT )
			{
				SetString( "/s " );
			}
			else
			if( pWndChat->m_nChatChannel == CHATSTY_PARTY )
			{
				SetString( "/p " );
			}
			else
			if( pWndChat->m_nChatChannel == CHATSTY_GUILD )
			{
				SetString( "/g " );
			}
		}
	}


	CWndEdit::OnSetFocus( pOldWnd );
}
void CWndEditChat::OnKillFocus(CWndBase* pNewWnd)
{
	CWndChat* pWndChat = (CWndChat*) m_pParentWnd;
	if( pWndChat->m_pWndCommand && this!= pNewWnd )
		pWndChat->m_pWndCommand->Destroy();
	CWndEdit::OnKillFocus( pNewWnd );
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// 채팅 윈도 
//
/////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////

CWndMacroChat::CWndMacroChat()
{
}
CWndMacroChat::~CWndMacroChat()
{
}
void CWndMacroChat::OnDraw( C2DRender* p2DRender )
{
	CWndChat* pWndChat = (CWndChat*)g_WndMng.GetApplet( APP_COMMUNICATION_CHAT );
	CWndEditChat* pWndEdit = &pWndChat->m_wndEdit;//GetDlgItem( WIDC_EDIT );
	if( pWndEdit->m_string.IsEmpty() == FALSE )
		p2DRender->RenderTexture( CPoint( 0, 0 ), &m_texMacroChat );
}
void CWndMacroChat::OnLButtonDown(UINT nFlags, CPoint point)
{
	CWndChat* pWndChat = (CWndChat*)g_WndMng.GetApplet( APP_COMMUNICATION_CHAT );
	CWndEditChat* pWndEdit = &pWndChat->m_wndEdit;//GetDlgItem( WIDC_EDIT );
	if( pWndEdit->m_string.IsEmpty() == FALSE )
	{
		CWndChat* pWndChat = (CWndChat*)g_WndMng.GetApplet( APP_COMMUNICATION_CHAT );
		m_GlobalShortcut.m_dwShortcut = SHORTCUT_CHAT;
		m_GlobalShortcut.m_pFromWnd = this;
		m_GlobalShortcut.m_pTexture = m_pTexMacro; //.m_pFromWnd   = this;
		m_GlobalShortcut.m_dwData = 0;
		//CWndEdit* pWndEdit = (CWndEdit*)pWndChat->GetDlgItem( WIDC_EDIT );
		//strcpy( m_GlobalShortcut.m_szString, pWndEdit->m_string );

		CString strFormat;
		strFormat = pWndEdit->m_string;

		pWndEdit->m_string.GetTextFormat(strFormat);
		
		if( pWndEdit->m_string.GetLength() >= MAX_SHORTCUT_STRING-1 )
		{
			memcpy( m_GlobalShortcut.m_szString, strFormat, MAX_SHORTCUT_STRING-1 );
		}
		else
		{
			strcpy( m_GlobalShortcut.m_szString, strFormat );
		}
	}
}

void CWndMacroChat::OnMouseMove(UINT nFlags, CPoint point)
{
}
void CWndMacroChat::OnInitialUpdate()
{
	//m_ptexMacroe.LoadTexture( m_pApp->m_pd3dDevice, MakePath( DIR_ICON, "icon_MacroChat.dds" ), 0xffff00ff );
	m_pTexMacro = m_textureMng.AddTexture( m_pApp->m_pd3dDevice, MakePath( DIR_ICON, "icon_MacroChat.dds" ), 0xffff00ff );//, bMyLoader );
	m_texMacroChat.LoadTexture( m_pApp->m_pd3dDevice, MakePath( DIR_THEME, "wndButtMacroChat.bmp" ), 0xffff00ff );
}
CWndTextChat::CWndTextChat()
{
}
CWndTextChat::~CWndTextChat()
{
}
BOOL CWndTextChat::IsPickupSpace( CPoint point )
{
	return FALSE;
}
int CWndChat::m_nChatChannel = CHATSTY_GENERAL;

CWndChat::CWndChat()
{
	m_pWndCommand = NULL;
//	m_timerInsMsg.Set( MIN( 1 ) );
	m_timerInsMsg.Set( MIN( 2 ) );  // 도움말 표시 간격 증가
#ifdef __CSC_GAME_GRADE
	m_timerAlertGGrade.Set( MIN(60) );
#endif //__CSC_GAME_GRADE
	m_nInsMsgCnt = 0;
	m_bChatLock = FALSE;
	m_bMoveLock = FALSE;
	m_pWndChatFilter = NULL;
	m_nHistoryIndex = 0;
#if __VER >= 8 //__CSC_VER8_1
	m_bChatLog = FALSE;
#endif //__CSC_VER8_1
#ifdef __ITEM_LINK
	m_pWndLinkedItem = NULL;
#endif
}
CWndChat::~CWndChat()
{
	SAFE_DELETE( m_pWndCommand );
	SAFE_DELETE( m_pWndChatFilter );
	#ifdef __ITEM_LINK
	SAFE_DELETE(m_pWndLinkedItem);
#endif
}
void CWndChat::OnDraw(C2DRender* p2DRender)
{
	if( g_pPlayer == NULL )
		return;
	//if( timer.IsTimeOut() )
	//{
	//	timer.Set( SEC( 10 ) );
	//	if( szMessage[ nMsgCnt ][0] )
	//		PutString( szMessage[ nMsgCnt ++ ] );
	//}
	if( g_Option.m_nInstantHelp )
	{
		CString string;
		if( m_strArray.GetSize() && m_timerInsMsg.TimeOut() )
		{
			m_timerInsMsg.Reset();
			//string = "[도움말] ";
			string  = prj.GetText(TID_SYS_HELP);
			string += " ";
			string += m_strArray.GetAt( m_nInsMsgCnt );
			g_WndMng.PutString( string, NULL, 0xffffff00, CHATSTY_HELP );
			m_nInsMsgCnt++;
			if( m_nInsMsgCnt == m_strArray.GetSize() )
				m_nInsMsgCnt = 0;
		}
	}

#ifdef __CSC_GAME_GRADE
	if(m_timerAlertGGrade.TimeOut())
	{
		m_timerAlertGGrade.Reset();
		//PK�*버 구분  12세 or 15세
		if(g_eLocal.GetState( EVE_PK ))
			g_WndMng.PutString( prj.GetText(TID_SYS_ALERTGGRADE_PK), NULL, 0xffffff00, CHATSTY_HELP );
		else
			g_WndMng.PutString( prj.GetText(TID_SYS_ALERTGGRADE_NONPK), NULL, 0xffffff00, CHATSTY_HELP );		
	}
#endif //__CSC_GAME_GRADE

	CWndButton* pWndRadio4 = (CWndButton*)GetDlgItem( WIDC_RADIO4 ); // party
	CWndButton* pWndRadio5 = (CWndButton*)GetDlgItem( WIDC_RADIO5 ); // guild

	pWndRadio4->EnableWindow( g_Party.IsMember( g_pPlayer->m_idPlayer ) );
	pWndRadio5->EnableWindow( g_pPlayer->GetGuild() == NULL ? FALSE : TRUE );

	if( ::GetLanguage() == LANG_KOR || ::GetLanguage() == LANG_TWN || ::GetLanguage() == LANG_HK )
	{
		static TCHAR text[12] = { 0 };
		static wchar_t* wText = g_imeMgr.GetStringIndicator();

		if( wText )
		{
			CWndStatic* pWndStatic = (CWndStatic*)GetDlgItem( WIDC_STATIC1 ); 

			if( pWndStatic )
			{
				WideCharToMultiByteEx(g_imeMgr.m_codePage, 0, wText, wcslen(wText), text, 12, NULL, NULL);		
				
				pWndStatic->m_dwColor = D3DCOLOR_ARGB( 255, 50, 50, 220 );

				if( PRIMARYLANGID(g_imeMgr.m_hkl)==LANG_KOREAN )
				{
					if( g_imeMgr.GetImeState() == 0 )
					{
						_tcscpy( text, "En" );
					}
				}
				else
				if( PRIMARYLANGID(g_imeMgr.m_hkl)==LANG_CHINESE )
				{
					static wchar_t wTextCh[3][3] = 
					{ 
						L"\x6CE8", 
						L"\x65B0", 
						L"\x5176", 
					};
					
					if( g_imeMgr.IsNewPhonetic() )
					{
						if( g_imeMgr.GetImeState() == 2 )
							_tcscpy( text, "En" );
						else
							WideCharToMultiByteEx(g_imeMgr.m_codePage, 0, wTextCh[1], wcslen(wTextCh[1]), text, 12, NULL, NULL);		
					}
					else
					if( g_imeMgr.IsPhonetic() )
					{
						if( g_imeMgr.GetImeState() == 0 )
							_tcscpy( text, "En" );
						else	
							WideCharToMultiByteEx(g_imeMgr.m_codePage, 0, wTextCh[0], wcslen(wTextCh[0]), text, 12, NULL, NULL);		
					}
					else
					{
						if( g_imeMgr.GetImeState() == 0 )
							_tcscpy( text, "En" );
						else	
							WideCharToMultiByteEx(g_imeMgr.m_codePage, 0, wTextCh[2], wcslen(wTextCh[2]), text, 12, NULL, NULL);		
					}
				}
				pWndStatic->SetTitle( text );
			}
		}
	}
}
void CWndChat::OnInitialUpdate()
{
	CWndNeuz::OnInitialUpdate();

	//AddWndStyle( WBS_THICKFRAME );

	m_timerDobe.Set( SEC( 5 ) );

	LPWNDCTRL lpWndCtrl = GetWndCtrl( WIDC_MACRO_CHAT );
	LPWNDCTRL lpWndText = GetWndCtrl( WIDC_CUSTOM1 );
	m_wndMacroChat.Create( "g", WBS_NODRAWFRAME, lpWndCtrl->rect, this, WIDC_MACRO_CHAT );
	m_wndMacroChat.AddWndStyle( WBS_NODRAWFRAME );

	lpWndCtrl = GetWndCtrl( WIDC_EDIT );
	m_wndEdit.Create( g_Neuz.GetSafeHwnd(), WBS_NODRAWFRAME, lpWndCtrl->rect, this, WIDC_EDIT );
	m_wndText.Create( WBS_NOFRAME | WBS_NODRAWFRAME | WBS_VSCROLL, lpWndText->rect, this, WIDC_TEXT );
	CWndText* pWndText = (CWndText*)GetDlgItem( WIDC_TEXT );
	CWndEdit* pWndHead = (CWndEdit*)GetDlgItem( WIDC_HEAD );
	CWndEdit* pWndEdit = (CWndEdit*)GetDlgItem( WIDC_EDIT );

	if( g_pPlayer->IsAuthHigher( AUTH_GAMEMASTER ) )
	{
		pWndText->m_bEnableClipboard = TRUE;
		pWndHead->m_bEnableClipboard = TRUE;
		pWndEdit->m_bEnableClipboard = TRUE;
	}
	pWndEdit->SetNativeMode();

#if __VER >= 11 // __CSC_VER11_1
	CRect rectEdit = m_wndEdit.GetWndRect();
	rectEdit.left = rectEdit.left - 90;
	m_wndEdit.SetWndRect( rectEdit );

	CRect customRect = lpWndCtrl->rect;
	CWndCustom* pCustom = (CWndCustom*)GetDlgItem(WIDC_MACRO_CHAT);
	if(pCustom)
		pCustom->Move(customRect.TopLeft().x - 119, customRect.TopLeft().y);
	if(pWndHead)
	{
		pWndHead->EnableWindow(FALSE);
		pWndHead->SetVisible(FALSE);
	}
#endif //__CSC_VER11_1
	if( g_Option.m_nInstantHelp )
	{
		CScript	s;
		s.Load( MakePath( DIR_CLIENT, "InstantHelp.inc" ) );
		s.GetToken();
		while( s.tok != FINISHED )
		{
			m_strArray.Add( s.Token );
			s.GetToken();
		}
	}
	//m_strArray.

/*
	CRect rect = GetClientRect();
	rect.top = rect.bottom - 20;
	rect.right = 70;
	rect.left += 5;
	rect.DeflateRect( 1, 1 );
	m_wndBeginning.Create( g_Neuz.GetSafeHwnd(), WBS_NODRAWFRAME, rect, this, 1000);

	rect = GetClientRect();
	rect.top = rect.bottom - 20;
	rect.left = 75;
	rect.right -= 134;
	rect.DeflateRect( 1, 1 );
	//rect.left = rect.Width() * 20 / 100;
	//m_wndEdit.AddWndStyle( WBS_NODRAWFRAME );
	m_wndEdit.Create( g_Neuz.GetSafeHwnd(), WBS_NODRAWFRAME, rect, this, 1001 );
*/
//	m_texEdit.LoadTexture( m_pApp->m_pd3dDevice, MakePath( DIR_THEME, "WndChat2.bmp" ), 0xffff00ff, TRUE );
/*
	rect = GetClientRect();
	rect.top = rect.bottom - 20;
	rect.left = rect.right - 134;
	rect.right = r mnnnnft + 15;
	rect.DeflateRect( 1, 1 );
	m_wndShout.Create( " ", 0, rect, this, 1010 );

	rect = GetClientRect();
	rect.top = rect.bottom - 20;
	rect.left = rect.right - 117;
	rect.right = rect.left + 15;
	rect.DeflateRect( 1, 1 );
	m_wndParty.Create( " ", 0, rect, this, 1011 );
*/

/*
	m_wndText.AddWndStyle( WBS_VSCROLL );
	m_wndText.AddWndStyle( WBS_NOFRAME );
	m_wndText.AddWndStyle( WBS_NODRAWFRAME );
	m_wndText.Create( 0, rect, this, 1003 ); 
	m_wndText.SetFont( g_Neuz.m_Theme.m_pFontChat );
	m_wndText.m_string.Reset( m_pFont, &rect);
*/
/*
	rect = GetClientRect();
	rect.left = rect.right - 100;
	//rect.bottom -= 80;
	rect.DeflateRect( 1, 1 );
	m_wndReceiver.AddWndStyle( WBS_VSCROLL );
	m_wndReceiver.AddWndStyle( WBS_NOFRAME );
	m_wndReceiver.Create( EBS_AUTOVSCROLL, rect, this, 1002 );
	m_wndReceiver.AddString( "Vampyre\n" );
	m_wndReceiver.AddString( "Xuzhu\n" );
	m_wndReceiver.AddString( "Zodiacus\n" );
	m_wndReceiver.AddString( "Jeff\n" );
	m_wndReceiver.m_string.Reset( m_pFont, &rect);
*/

	//CWndText* pWndText = (CWndText*)GetDlgItem( WIDC_TEXT );
	SetChannel();
	CWndButton* pWndRadio1 = (CWndButton*)GetDlgItem( WIDC_RADIO1 );
	CWndButton* pWndRadio2 = (CWndButton*)GetDlgItem( WIDC_RADIO2 );
	CWndButton* pWndRadio3 = (CWndButton*)GetDlgItem( WIDC_RADIO3 );
	CWndButton* pWndRadio4 = (CWndButton*)GetDlgItem( WIDC_RADIO4 );
	CWndButton* pWndRadio5 = (CWndButton*)GetDlgItem( WIDC_RADIO5 );
	if( m_nChatChannel == CHATSTY_GENERAL ) pWndRadio1->SetCheck( TRUE );	else
	if( m_nChatChannel == CHATSTY_WHISPER ) pWndRadio2->SetCheck( TRUE );	else
	if( m_nChatChannel == CHATSTY_SHOUT   ) pWndRadio3->SetCheck( TRUE );	else
	if( m_nChatChannel == CHATSTY_PARTY   ) pWndRadio4->SetCheck( TRUE );	else
	if( m_nChatChannel == CHATSTY_GUILD   ) pWndRadio5->SetCheck( TRUE );
	//pWndText->m_string.Init(
	//pWndText->m_string = g_WndMng.m_ChatString;
	pWndText->m_nLineSpace = 2;
	//pWndText->m_string.Reset( m_pFont, &pWndText->GetClientRect() );
	
	//pWndText->
	/*
	CRect rect = GetClientRect();
	rect.bottom -= 20;
	rect.right -= 0;//100;
	rect.DeflateRect( 1, 1);
	m_wndText.SetWndRect( rect );
*/
	//LPBYTE m_wndChatEdit[3];
	//CSize sizeWndChatEdit[3];
#if __VER >= 11 // __CSC_VER11_1
	LoadTGA( MakePath( DIR_THEME, "WndChatEdit00_1.tga" ), &m_wndChatEdit[0] );
#else //__CSC_VER11_1
	LoadTGA( MakePath( DIR_THEME, "WndChatEdit00.tga" ), &m_wndChatEdit[0] );
#endif //__CSC_VER11_1
	LoadTGA( MakePath( DIR_THEME, "WndChatEdit01.tga" ), &m_wndChatEdit[1] );
#ifdef __LANG_IME_0327
	LoadTGA( MakePath( "Theme\\", ::GetLanguage(), "WndChatEdit02.tga" ), &m_wndChatEdit[2] );
#else	// __LANG_IME_0327
	LoadTGA( MakePath( DIR_THEME, "WndChatEdit02.tga" ), &m_wndChatEdit[2] );
#endif	// __LANG_IME_0327

	if( m_wndChatEdit[2].lpData == NULL )
	{
		Error( "CWndChat::OnInitialUpdate() m_wndChatEdit[2].lpData = NULL" );
		return;
	}
/*
	CRect rectRoot = m_pWndRoot->GetLayoutRect();
	CRect rectWindow = GetWindowRect();
	CPoint point( 154, rectRoot.bottom - rectWindow.Height() );
	Move( point );
*/
	CWndButton* pWndLock = (CWndButton*)GetDlgItem( WIDC_CHECK1 );
	pWndLock->SetCheck( m_bChatLock );
	CWndButton* pWndMoveLock = (CWndButton*)GetDlgItem( WIDC_MOVELOCK );
	pWndMoveLock->SetCheck( m_bMoveLock );
	CRect rectRoot = m_pWndRoot->GetLayoutRect();
	CRect rect = GetWindowRect();
	int nWidth  = rect.Width(); 
	int nHeight = rect.Height(); 
	int x = 0;//rectRoot.left + (rectRoot.Width()  / 2) - (nWidth  / 2);
	int y = rectRoot.bottom - nHeight;	
	CPoint point( x, y );
	Move( point );

	m_timerInputTimeOut.Set( SEC( 300 ) );

#if __VER >= 8 //__Y_CHAT_SYSTEM_8
	if( g_WndMng.m_pWndChatLog == NULL )
	{
		g_WndMng.m_pWndChatLog = new CWndChatLog;
		
		if( g_WndMng.m_pWndChatLog )
		{
			g_WndMng.m_pWndChatLog->Initialize( NULL, APP_CHAT_LOG );
			
			CRect rectRoot = m_pWndRoot->GetLayoutRect();
			CRect rect = GetWindowRect(TRUE);
			CRect rect2 = g_WndMng.m_pWndChatLog->GetClientRect(TRUE);
			
			int x = 0;
			int y = rect.top;
			
			if( (rect.right+rect2.Width()) < rectRoot.right )
				x = rect.right;
			else
				x = (rect.left - rect2.Width() );
			
			CPoint point( x, y );
			g_WndMng.m_pWndChatLog->Move( point );

			g_WndMng.m_pWndChatLog->SetVisible(FALSE);
		}
	}

	if( g_WndMng.m_pWndChatLog )
	{
		CWndButton* pWndCheck3  = (CWndButton*)GetDlgItem( WIDC_CHECK3 );
		if( pWndCheck3 )
			pWndCheck3->SetCheck(g_WndMng.m_pWndChatLog->m_bVisible);
	}
#endif //__Y_CHAT_SYSTEM_8
}

BOOL CWndChat::Process ()
{
	if( m_timerInputTimeOut.IsTimeOut() )
	{
		CWndText* pWndText = (CWndText*)GetDlgItem( WIDC_TEXT );

		pWndText->m_string.SetAlpha( 0 );
	}
	
	if( 0 < strlen( g_Neuz.m_szWhisperName ) )
	{
		LPCTSTR lpstr = m_wndEdit.GetString();
		BOOL bCommand = FALSE;
		if( strcmp( lpstr, "/r " ) == 0 || strcmp( lpstr, "/R " ) == 0 || ( GetLanguage() == LANG_KOR && strcmp( lpstr, "/ㄱ " ) == 0 ) )
		{
			CString strWhisper;
			strWhisper.Format( "/whisper %s ", g_Neuz.m_szWhisperName );
			m_wndEdit.SetString( strWhisper );
			m_wndEdit.SetFocus();
		}		
	}
	
	return TRUE;
}

void CWndChat::SetChannel()
{
	m_wndText.SetString( "" );

	int nChannel = 0;
	switch( CWndChat::m_nChatChannel )
	{
		case CHATSTY_GENERAL: nChannel = 0; break;
		case CHATSTY_WHISPER: nChannel = 1; break;
		case CHATSTY_SHOUT  : nChannel = 2; break;
		case CHATSTY_PARTY  : nChannel = 3; break;
		case CHATSTY_GUILD  : nChannel = 4; break;
	}
	DWORD dwChatFilter = g_Option.m_dwChatFilterEtc | g_Option.m_dwChatFilter[ nChannel ];

	for( int i = 0; i < g_WndMng.m_aChatString.GetSize(); i++ )
	{
		if( g_WndMng.m_aChatStyle.GetAt( i ) & dwChatFilter ) 
		{
			CString string = g_WndMng.m_aChatString.GetAt( i );
			m_wndText.m_string.AddParsingString( string, g_WndMng.m_aChatColor.GetAt( i ), 0x00000000, 0, PS_NOT_MACRO );
			m_wndText.m_string.AddString( "\n" );
		}
	}
	m_wndText.ResetString();
	m_wndText.m_wndScrollBar.SetMaxScrollPos();
}
void CWndChat::OnSetFocus(CWndBase* pOldWnd)
{
}
void CWndChat::OnKillFocus(CWndBase* pNewWnd)
{
	//if( m_pWndCommand && pNewWnd != m_pWndCommand )
	//	m_pWndCommand->Destroy();
}
BOOL CWndChat::Initialize(CWndBase* pWndParent,DWORD dwWndId)
{
	CRect rectWindow = m_pWndRoot->GetWindowRect();
	CRect rect( 154, rectWindow.Height() - 100, 154 + rectWindow.Width() - 300, rectWindow.Height() );
	SetTitle( GETTEXT( TID_APP_COMMUNICATION_CHAT ) );
	return CWndNeuz::InitDialog( g_Neuz.GetSafeHwnd(), dwWndId, WBS_KEY| WBS_THICKFRAME, CPoint( 792, 130 ), pWndParent );
	//return CWndNeuz::Create( 0|WBS_MOVE|/*WBS_DOCKABLE|*/WBS_SOUND|WBS_CAPTION|WBS_THICKFRAME|WBS_MAXIMIZEBOX, rect, &g_WndMng, dwWndId);
}

/*
	"applet" TY_CLIENT 0
	"to"     TY_SERVER 0 
	"to"     TY_SERVER 0
	"to"     TY_SERVER 0
*/

extern	CDPClient	g_DPlay;

void CWndChat::OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags)
{
}
void CWndChat::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
}
void CWndChat::OnDestroyChildWnd( CWndBase* pWndChild )
{
	if( m_pWndCommand == pWndChild )
	{
		SAFE_DELETE( m_pWndCommand );
	}
	if( m_pWndChatFilter == pWndChild )
	{
		SAFE_DELETE( m_pWndChatFilter );
		//ChatFilter Wnd Destroy후 Focus가 World로 되어있지 않아 이동키가 먹지 않기 때문에 SetFocus해줌.
		CWndWorld* pWndWorld = (CWndWorld*)g_WndMng.GetApplet( APP_WORLD );
		if( pWndWorld ) 
			pWndWorld->SetFocus();
	}
}
void CWndChat::SerializeRegInfo( CAr& ar, DWORD& dwVersion )
{
	CWndNeuz::SerializeRegInfo( ar, dwVersion );
	if( ar.IsLoading() )
	{
		if( dwVersion == 0 )
		{
		}
		else
		{
			ar >> m_bChatLock;
		}
		CWndButton* pWndLock = (CWndButton*)GetDlgItem( WIDC_CHECK1 );
		pWndLock->SetCheck( m_bChatLock );
	}
	else
	{
		dwVersion = 1;
		ar << m_bChatLock;
	}
}

BOOL CWndChat::OnChildNotify( UINT message, UINT nID, LRESULT* pLResult ) 
{ 
	m_timerInputTimeOut.Reset();

	CWndText* pWndText = (CWndText*)GetDlgItem( WIDC_TEXT );	
	if( pWndText )
		pWndText->m_string.SetAlpha( 255 );	
	
	switch(nID)
	{
		case WIDC_CLOSE:
			nID = WTBID_CLOSE;
			break;
		case WIDC_HELP:
			nID = WTBID_HELP;
			break;
		case WIDC_BUTTON1:
			{
				if( m_pWndChatFilter == NULL )
				{
					m_pWndChatFilter = new CWndChatFilter;
					m_pWndChatFilter->Initialize( this );
				}
			}
			break;
		case WIDC_CHECK1: // 채팅 입력창 잠구기 
			{
				CWndButton* pWndCheck = (CWndButton*)GetDlgItem( WIDC_CHECK1 );
				m_bChatLock = pWndCheck->GetCheck();
			}
			break;
#if __VER >= 8 //__Y_CHAT_SYSTEM_8
		case WIDC_CHECK3: // 시스탐창
			{
				CWndButton* pWndCheck = (CWndButton*)GetDlgItem( WIDC_CHECK3 );
				BOOL bChatLog = pWndCheck->GetCheck();
#if __VER >= 8 //__CSC_VER8_1 모든 윈도우를 지울때 ChatLog의 유무 구별을 위해 추가.
				m_bChatLog = bChatLog;
#endif //_CSC_VER8_1
				if( g_WndMng.m_pWndChatLog )
				{
					if( bChatLog )
					{
						CRect rectRoot = m_pWndRoot->GetLayoutRect();
						CRect rect = GetWindowRect(TRUE);
						CRect rect2 = g_WndMng.m_pWndChatLog->GetClientRect(TRUE);
						
						int x = 0;
						int y = rect.top;
						
						if( (rect.right+rect2.Width()) < rectRoot.right )
							x = rect.right;
						else
							x = (rect.left - rect2.Width() );
						
						CPoint point( x, y );
						g_WndMng.m_pWndChatLog->Move( point );
					}

					g_WndMng.m_pWndChatLog->SetVisible( bChatLog );
				}
			}
			break;
#endif //__Y_CHAT_SYSTEM_8
		case WIDC_MOVELOCK: // 이동 잠그기
			{
				CWndButton* pWndCheck = (CWndButton*)GetDlgItem( WIDC_MOVELOCK );
				m_bMoveLock = pWndCheck->GetCheck();
				DWORD dwStyle = GetWndStyle();
				if( m_bMoveLock )
					dwStyle &= (~WBS_MOVE);
				else
					dwStyle |= WBS_MOVE;
				SetWndStyle( dwStyle );
			}
			break;
		case WIDC_RADIO1:
			m_nChatChannel = CHATSTY_GENERAL;
			m_wndEdit.SetString( "" );
			m_wndEdit.SetFocus();
			SetChannel();
			break;
		case WIDC_RADIO2:
			m_nChatChannel = CHATSTY_WHISPER;
			m_wndEdit.SetString( "/w " );
			m_wndEdit.SetFocus();
			SetChannel();
			break;
		case WIDC_RADIO3:
			m_nChatChannel = CHATSTY_SHOUT;
			m_wndEdit.SetString( "/s " );
			m_wndEdit.SetFocus();
			SetChannel();
			break;
		case WIDC_RADIO4:
			m_nChatChannel = CHATSTY_PARTY;
			m_wndEdit.SetString( "/p " );
			m_wndEdit.SetFocus();
			SetChannel();
			break;
		case WIDC_RADIO5:
			m_nChatChannel = CHATSTY_GUILD;
			m_wndEdit.SetString( "/g " );
			m_wndEdit.SetFocus();
			SetChannel();
			break;
		case APP_COMMAND:
			{
				if( message == WNM_DBLCLK )
				{
					CString string;
					m_pWndCommand->GetText( m_pWndCommand->GetCurSel(), string );
					string += " ";
					m_wndEdit.SetString( "/" );
					m_wndEdit.AddString( string );
					m_wndEdit.ResetString();
					m_pWndCommand->Destroy();
				}
				SetFocus();
			}
		case WIDC_HEAD: // 말머리
			if( message == EN_RETURN )
			{
				g_WndMng.SetFocus();
			}
			break;
		case WIDC_EDIT: // 본문
			if( message == EN_UP )		
			{
				if( m_strHistory.size() == 0 )
					return FALSE;

				if( m_nHistoryIndex >= (int)( m_strHistory.size() ) )
				{
					m_strHistory.front();
					m_nHistoryIndex = 0;
				}

				m_nHistoryIndex++;
		#ifdef __ITEM_LINK
				m_wndEdit.SetString(m_strHistory[m_strHistory.size()-m_nHistoryIndex]);
#else
				m_wndEdit.m_string = m_strHistory[m_strHistory.size()-m_nHistoryIndex];
#endif

				return TRUE;
			}
			
			if( message == EN_RETURN )
			{
				BOOL bFinished = TRUE;
				if( m_pWndCommand )
				{
					CString str1, str2;
					str1 = m_wndEdit.m_string.Right( m_wndEdit.m_string.GetLength() - 1 );
					if( m_pWndCommand->GetCurSel() != -1 )
					{
						m_pWndCommand->GetText( m_pWndCommand->GetCurSel(), str2 );
						if( str1 != str2 )
						{
							str2 += " ";
							m_wndEdit.SetString( "/" );
							m_wndEdit.AddString( str2 );
							m_wndEdit.ResetString();
							bFinished = FALSE;
						}
					}
					m_pWndCommand->Destroy();
				}
				if( bFinished == TRUE )
				{
					CWndText* pWndText = (CWndText*)GetDlgItem( WIDC_TEXT );
					CWndEdit* pWndHead = (CWndEdit*)GetDlgItem( WIDC_HEAD );
					CString string; 
					if( pWndHead->m_string.IsEmpty() == FALSE && 
						( pWndHead->m_string[ 0 ] == '/' || 
						( m_wndEdit.m_string.IsEmpty() == FALSE && pWndHead->m_string[ 0 ] != '/' && m_wndEdit.m_string[ 0 ] != '/' ) ) 
					)
						string = pWndHead->m_string + " ";

					WORD wCodePage = g_codePage;
					const char* begin = m_wndEdit.m_string;
					const char* end = begin + m_wndEdit.m_string.GetLength();
					const char* iter = begin;
					while(*iter && iter < end)
					{
						if(*((BYTE*)iter) >= 0x80) 
						{
							if(wCodePage != m_wndEdit.m_string.m_awCodePage[iter-begin])
							{
								wCodePage = m_wndEdit.m_string.m_awCodePage[iter-begin];
								
								char temp[16];
								
								if(wCodePage == g_codePage)
								{
									wsprintf(temp, "#nl");
								}
								else
								{
									wsprintf(temp, "#l%04d", wCodePage);
								}
								string += temp;
							}
						}
						const char* next = CharNextEx(iter, wCodePage);
						char temp[16];
						memcpy(temp, iter, next-iter);
						temp[next-iter] = 0;
						string += temp;
						iter = next;
					}
					if( m_strHistory.size() >= MAX_HISTORY_STRING )
					{
						m_nHistoryIndex = 0;
						m_strHistory.erase( m_strHistory.begin() );
					}

					m_strHistory.push_back(string);
					int a = string.GetLength();
					if( !m_wndEdit.m_string.IsEmpty() )
						m_wndEdit.m_string.GetTextFormat(string);
						
						#ifdef __ITEM_LINK
					m_strHistory.push_back(string);
#endif
					
					g_WndMng.ParsingChat( string );
					CScanner scanner;
					scanner.SetProg( m_wndEdit.m_string.LockBuffer() );
					scanner.GetToken(); // 
					if( scanner.Token == "/" )
					{
						scanner.GetToken();
						if( scanner.Token == "w" || scanner.Token == "whisper" )
						{
							scanner.GetToken();
							m_strCharName = scanner.Token;
						}
					}
					m_wndEdit.m_string.UnlockBuffer();
					m_wndEdit.Empty();
					if( m_bChatLock == FALSE ) 
					{
						if( IsWndStyle( WBS_MODAL ) == TRUE )
						{
							DelWndStyle( WBS_MODAL );
							if( g_Neuz.pOldModalWindow )
							{
								g_Neuz.pOldModalWindow->SetFocus();
							}
						}
						else
						{
							CWndWorld* pWndWorld = ( CWndWorld* )g_WndMng.GetApplet( APP_WORLD );
							if( pWndWorld )
							{
								pWndWorld->SetFocus();
							}
							else
							{
								g_WndMng.SetFocus();
							}
						}
					}
					else
						m_wndEdit.SetFocus();
				}
			}
			else
			if( message == EN_CHANGE )
			{
				if( m_wndEdit.m_string.IsEmpty() == FALSE )
				{
					if( m_wndEdit.m_string[ 0 ] == '/' && m_wndEdit.GetOffset() == 1 && m_pWndCommand == NULL )
					{
						m_pWndCommand = new CWndCommand;
						m_pWndCommand->m_pWndEdit = this;
						m_pWndCommand->Initialize( this );
						CRect rect = m_wndEdit.GetScreenRect();
						CPoint point = rect.TopLeft();
						point.y -= m_pWndCommand->GetWndRect().Height();
						m_pWndCommand->Move( point );
					}
					else
					if( m_pWndCommand )
					{
						CString string; 
						string = m_wndEdit.m_string.Right( m_wndEdit.m_string.GetLength() - 1 );
						// 중간에 스페이스가 껴 있으면 닫아버린다.
						if( string.Find( ' ' ) == -1 )
							m_pWndCommand->SelectString( 0, string );
						else
							m_pWndCommand->Destroy();
						
						if( ::GetLanguage() == LANG_KOR )
						{
							if( m_wndEdit.m_string == "/ㅎ " )
							{
								m_wndEdit.SetString( "/g " );
							}
							else if( m_wndEdit.m_string == "/ㅔ " )
							{
								m_wndEdit.SetString( "/p " );
							}
							else if( m_wndEdit.m_string == "/ㄴ " )
							{
								m_wndEdit.SetString( "/s " );
							}
#if __VER >= 11 // __CSC_VER11_1
							else if( m_wndEdit.m_string == "/ㅈ " )
							{
								m_wndEdit.SetString( "/w " );
							}
#endif //__CSC_VER11_1
						}
					}
				}
				else
				if( m_pWndCommand )
					m_pWndCommand->Destroy();
			}
			break;
		case 10000: // 최소�* 
			break;
		case 10001: // 최대�* 
			break;
		case 10002: // 종료
			Destroy();
			break;
	}
	
	//아래 특정 버튼 누를 경우 Focus가 World로 되어있지 않아 이동키가 먹지 않기 때문에 SetFocus해줌.
	if(nID == WIDC_CHECK1 || nID == WIDC_CHECK3 || nID == WIDC_MOVELOCK)
	{
		CWndWorld* pWndWorld = (CWndWorld*)g_WndMng.GetApplet( APP_WORLD );
		if( pWndWorld ) 
			pWndWorld->SetFocus();
	}
	return CWndNeuz::OnChildNotify( message, nID, pLResult ); 
} 

BOOL CWndChat::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
{
	return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
}
void CWndChat::Parsing( CString string )
{
	/*
	MotionProp* pProp;
	for( int i = 0; i < prj.m_aMotionProp.GetSize(); i++ )
	{
		pProp = prj.GetMotionProp( i );
		if( pProp && pProp->dwRequireLv )
		{
			if( string.Find( pProp->szLink ) != -1 )
			{
			//	g_pPlayer->SendActMsg( OBJMSG_MOTION, pProp->dwID );
			}
		}
	}
	*/
}
void CWndChat::PutString( LPCTSTR lpszString, DWORD dwColor, DWORD dwPStyle )
{
	CWndText* pWndText = (CWndText*)GetDlgItem( WIDC_TEXT );
	
	if( dwColor != 0xffffff00 )
	{
		m_timerInputTimeOut.Reset();
		
		CWndText* pWndText = (CWndText*)GetDlgItem( WIDC_TEXT );	
		pWndText->m_string.SetAlpha( 255 );	
	}

	BOOL bLineEnd = FALSE;
	if( pWndText->m_wndScrollBar.GetScrollPos() == ( pWndText->m_wndScrollBar.GetMaxScrollPos() - pWndText->m_wndScrollBar.GetScrollPage() ) )
		bLineEnd = TRUE;

	pWndText->AddString( lpszString, dwColor, dwPStyle );
	pWndText->AddString( "\n", dwColor );// += '\n';
	// 글 내용이 1000줄을 넘어가면 500라인을 잘라낸다.
	if( pWndText->m_string.GetLineCount() >= 1000 )
	{
		pWndText->m_string.DeleteLine( 0, 500 );
		pWndText->UpdateScrollBar();
	}
	if( bLineEnd )
		pWndText->m_wndScrollBar.SetMaxScrollPos();
}
void CWndChat::OnDestroy()
{
	CWndText* pWndText = (CWndText*)GetDlgItem( WIDC_TEXT );
	g_WndMng.m_ChatString = pWndText->m_string;
}
void CWndChat::SetWndRect( CRect rectWnd, BOOL bOnSize )
{
#if __VER >= 8 //__Y_CHAT_SYSTEM_8
	AdjustMinRect( &rectWnd, 16 * 29, 16 * 3 );
#else // __Y_CHAT_SYSTEM_8
	AdjustMinRect( &rectWnd, 16 * 26, 16 * 3 );
#endif //__Y_CHAT_SYSTEM_8
	CRect rectOld = m_rectClient;
	m_rectWindow = rectWnd;
	m_rectClient = m_rectWindow;
	m_rectClient.DeflateRect( 4, 4, 6, 6 );
	m_rectLayout = m_rectClient;
	if( bOnSize && ( rectOld.Width() != m_rectClient.Width() || rectOld.Height() != m_rectClient.Height() ) )
		OnSize( 0, m_rectClient.Width(), m_rectClient.Height() );
	MakeVertexBuffer();
}
void CWndChat::OnSize(UINT nType, int cx, int cy)
{
//#ifdef __NEWINTERFACE
	CWndText* pWndText = (CWndText*)GetDlgItem( WIDC_TEXT );
	CWndEdit* pWndHead = (CWndEdit*)GetDlgItem( WIDC_HEAD );
	CWndEdit* pWndEdit = (CWndEdit*)GetDlgItem( WIDC_EDIT );

	CRect rectEdit;
	CRect rect = GetClientRect();
	//rect.left = 60;
	rect.top = 0;
	rect.left = 0;
	rect.right -= 0;
	rect.bottom -= 39;
	pWndText->SetWndRect( rect );
	pWndText->m_wndScrollBar.SetMaxScrollPos();
	
	rect = GetClientRect();
	rectEdit = pWndHead->GetWndRect();
	rectEdit.top = rect.bottom - 18;
	rectEdit.bottom = rect.bottom;
	rect.DeflateRect( 1, 1 );
	pWndHead->SetWndRect( rectEdit );

	rect = GetClientRect();
	rectEdit = m_wndEdit.GetWndRect();
	rectEdit.top = rect.bottom - 18;
	rectEdit.bottom = rect.bottom;
	rectEdit.right = rect.right - 20;
	rect.DeflateRect( 1, 1 );
	m_wndEdit.SetWndRect( rectEdit );

	rect = GetClientRect();
	rectEdit = m_wndMacroChat.GetWndRect();
	rectEdit.top = rect.bottom - 19;
	rectEdit.bottom = rect.bottom;
	m_wndMacroChat.SetWndRect( rectEdit );
	CWndButton* pWndRadio1 = (CWndButton*)GetDlgItem( WIDC_RADIO1 );
	CWndButton* pWndRadio2 = (CWndButton*)GetDlgItem( WIDC_RADIO2 );
	CWndButton* pWndRadio3 = (CWndButton*)GetDlgItem( WIDC_RADIO3 );
	CWndButton* pWndRadio4 = (CWndButton*)GetDlgItem( WIDC_RADIO4 );
	CWndButton* pWndRadio5 = (CWndButton*)GetDlgItem( WIDC_RADIO5 );
	CWndButton* pWndCheck  = (CWndButton*)GetDlgItem( WIDC_CHECK1 );
	CWndButton* pWndCheck2  = (CWndButton*)GetDlgItem( WIDC_MOVELOCK );
	CWndButton* pWndButton1 = (CWndButton*)GetDlgItem( WIDC_BUTTON1 );
	CWndButton* pWndButton2 = (CWndButton*)GetDlgItem( WIDC_HELP   );
	CWndButton* pWndButton3 = (CWndButton*)GetDlgItem( WIDC_CLOSE  );

#if __VER >= 8 //__Y_CHAT_SYSTEM_8
	CWndButton* pWndCheck3  = (CWndButton*)GetDlgItem( WIDC_CHECK3 );
#else //__Y_CHAT_SYSTEM_8
	CWndButton* pWndCheck3  = (CWndButton*)GetDlgItem( WIDC_CHECK3 );
	pWndCheck3->SetVisible(FALSE);
#endif //__Y_CHAT_SYSTEM_8

	rect = GetClientRect();
	rectEdit = pWndRadio1->GetWndRect();
	rectEdit.top = rect.bottom - 38;
	rectEdit.left = 0;
	pWndRadio1->Move( rectEdit.TopLeft() ); 
	rectEdit.left = 50;
	pWndRadio2->Move( rectEdit.TopLeft()  ); 
	rectEdit.left = 100;
	pWndRadio3->Move( rectEdit.TopLeft()  ); 
	rectEdit.left = 150;
	pWndRadio4->Move( rectEdit.TopLeft()  ); 
	rectEdit.left = 200;
	pWndRadio5->Move( rectEdit.TopLeft()  ); 
#if __VER >= 8 //__Y_CHAT_SYSTEM_8
	rectEdit.left = rect.right - 200;
	pWndCheck->Move( rectEdit.TopLeft()  ); 
	rectEdit.left = rect.right - 150;
	pWndButton1->Move( rectEdit.TopLeft()  ); 

	rectEdit.left = rect.right - 100;
	pWndCheck3->Move( rectEdit.TopLeft()  ); 	
#else //__Y_CHAT_SYSTEM_8
	rectEdit.left = rect.right - 150;
	pWndCheck->Move( rectEdit.TopLeft()  ); 
	rectEdit.left = rect.right - 100;
	pWndButton1->Move( rectEdit.TopLeft()  ); 
#endif //__Y_CHAT_SYSTEM_8
	rectEdit.left = rect.right - 49;

	CRect rectEdit2 = rectEdit;

	rectEdit2.top  += 1;
	pWndCheck2->Move( rectEdit2.TopLeft()  ); 
	rectEdit.left = rect.right - 32;
	rectEdit.top += 1;
	pWndButton2->Move( rectEdit.TopLeft()  ); 
	rectEdit.left = rect.right - 15;
	pWndButton3->Move( rectEdit.TopLeft()  ); 

	CWndStatic* pWndStatic = (CWndStatic*)GetDlgItem( WIDC_STATIC1 ); 
	
	if( pWndStatic )
	{
		rectEdit.top  += 20;
		rectEdit.left -= 5;
		pWndStatic->Move( rectEdit.TopLeft()  ); 
	}

	CWndNeuz::OnSize(nType,cx,cy);
}
void CWndChat::OnLButtonUp(UINT nFlags, CPoint point)
{
	if(IsWndRoot())
		return;

	//if(IsWndStyle(WBS_CAPTION) && m_bPickup)
	{//
	//	m_wndTitleBar.m_wndMinimize.SetVisible(TRUE);
		//m_wndTitleBar.m_wndMaximize.SetVisible(TRUE);
	}
	if( g_WndMng.m_pWndWorld )
	{
		CRect rect = GetWindowRect( TRUE );
		CPoint p;
		p.x = point.x + rect.left;
		p.y = point.y + rect.top;
//		g_WndMng.m_pWndWorld->m_bLButtonDown = TRUE;
		g_WndMng.m_pWndWorld->OnLButtonUp( nFlags, p );
	}
}

void CWndChat::OnLButtonDown(UINT nFlags, CPoint point)
{
	if( m_pWndCommand )
		m_pWndCommand->Destroy();

	if( g_WndMng.m_pWndWorld )
	{
		CRect rect = GetWindowRect( TRUE );
		CPoint p;
		p.x = point.x + rect.left;
		p.y = point.y + rect.top;
		g_WndMng.m_pWndWorld->m_bLButtonDown = TRUE;
		g_WndMng.m_pWndWorld->OnLButtonDown( nFlags, p );
	}
}

void CWndChat::OnRButtonDown(UINT nFlags, CPoint point)
{
	if( g_WndMng.m_pWndWorld )
	{
		CRect rect = GetWindowRect( TRUE );
		CPoint p;
		p.x = point.x + rect.left;
		p.y = point.y + rect.top;
		g_WndMng.m_pWndWorld->m_bRButtonDown = TRUE;
		g_WndMng.m_pWndWorld->OnRButtonDown( nFlags, p );
	}

	int nLineCount = m_wndText.m_string.GetLineCount();
	int nPos = m_wndText.IsWndStyle( WBS_VSCROLL ) ? m_wndText.m_wndScrollBar.GetScrollPos() : 0;
	DWORD dwMaxHeight = m_wndText.GetFontHeight();
	for( int i = nPos ; i < nLineCount ; ++i )
	{
		if( (int)( ((i-nPos) * dwMaxHeight) ) <= point.y && point.y < (int)( (dwMaxHeight * (i-nPos + 1)) ) )
		{
			CString str = m_wndText.m_string.GetLine( i );
			#ifdef __ITEM_LINK
			CString strTmp = str;
#endif
			char szFind[MAX_NAME] = {0,};
			
			BOOL bChat = FALSE;
			
			// 일반 채팅 검색
			int nFindName = str.Find( " :" );
			if( 0 < nFindName && nFindName < MAX_NAME )
			{
				int nFindSpace = str.Find( ' ' );
				if(  nFindSpace == -1 || nFindName <= nFindSpace )
				{
				#ifdef __ITEM_LINK
					int nExtent = m_wndText.m_pFont->GetTextExtent(str.Mid(0,nFindName)).cx;
					if(point.x < nExtent)
					{
#endif
					strncpy( szFind, str, nFindName );
					if( strcmp( szFind, g_pPlayer->GetName() ) != 0 )
						bChat = TRUE;
						#ifdef __ITEM_LINK
					}
#endif
				}
			}
			
			// 귓속말 검색
			if( bChat == FALSE )
			{
				int nFindName1 = str.Find( "<- [" );
				int nFindName2 = str.Find( "]" );
				if( 0 == nFindName1 )
				{
					str.Replace( "<- [", "" );
				}					
				else
				{
					nFindName1 = str.Find( "-> [" );
					str.Replace( "-> [", "" );
				}
				
				if( 0 == nFindName1 && 0 < nFindName2 && nFindName2 - nFindName1 < MAX_NAME + 4 )
				{
					nFindName2 = str.Find( "]" );
					strncpy( szFind, str, nFindName2 );
					int nFindSpace = strspn( " ", szFind );
					#ifdef __ITEM_LINK
					int nFindName3 = strTmp.Find("]");
					int nExtent = m_wndText.m_pFont->GetTextExtent(strTmp.Mid(0,nFindName3)).cx;
					if(point.x < nExtent)
					{
#endif
					if(  nFindSpace < 1 && strcmp( szFind, g_pPlayer->GetName() ) != 0 )
						bChat = TRUE;
						#ifdef __ITEM_LINK
					}
#endif
				}
			}
			
			// 외치기 검색( 알림은 빠짐 )
			if( bChat == FALSE )
			{
				int nFindName1 = str.Find( "[" );
				int nFindName2 = str.Find( "]" );
				if( 0 == nFindName1 && 0 < nFindName2 && nFindName2 - nFindName1 < MAX_NAME + 1 )
				{
					str.Replace( "[", "" );
					nFindName2 = str.Find( "]" );
					strncpy( szFind, str, nFindName2 );
					int nFindSpace = strspn( " ", szFind );
					#ifdef __ITEM_LINK
					int nFindName3 = strTmp.Find("]");
					int nExtent = m_wndText.m_pFont->GetTextExtent(strTmp.Mid(0,nFindName3)).cx;
					if(point.x < nExtent)
					{
#endif
					if(  nFindSpace < 1 && strcmp( szFind, g_pPlayer->GetName() ) != 0 )
						bChat = TRUE;
						#ifdef __ITEM_LINK
					}
#endif
					
					CString strSystem = prj.GetText(TID_ADMIN_ANNOUNCE);
					strSystem.Replace( "[", "" );
					int nFindSystem = strSystem.Find("]");
					if( 0 < nFindSystem )
					{
						char szFindSystem[MAX_NAME] = {0,};
						strncpy( szFindSystem, strSystem, nFindSystem );
						if( strcmp( szFind, szFindSystem ) == 0 )
							bChat = FALSE;
					}
				}
			}
			#ifdef __ITEM_LINK
			{
				if(!bChat)
				{
					int nFindBeg = strTmp.Find("<");
					int nFindEnd = strTmp.Find(">");
					while(nFindBeg != -1 || nFindEnd != -1)
					{
						int nExtentEnd;
						int nExtentBeg;
						if(nFindBeg != -1)// check line changed
							nExtentBeg = m_wndText.m_pFont->GetTextExtent(strTmp.Mid(0,nFindBeg)).cx;
						else
							nExtentBeg = 0;

						if(nFindEnd != -1) // check line changed
							nExtentEnd = m_wndText.m_pFont->GetTextExtent(strTmp.Mid(nFindBeg,nFindEnd-nFindBeg)).cx+nExtentBeg;
						else{
							nExtentEnd = m_wndText.m_pFont->GetTextExtent(strTmp.Mid(nFindBeg,str.GetLength()-nFindBeg)).cx+nExtentBeg;
						}
						if(point.x > nExtentBeg && point.x < nExtentEnd) // clicked on link
						{
							DWORD dwLinkID = m_wndText.m_string.m_adwLinkedID.GetAt(nFindBeg+m_wndText.m_string.GetLineOffset(i));
							if(dwLinkID) //check if is linked item or normal string
								g_DPlay.SendGetLinkedItem(dwLinkID);
							Error("%d",dwLinkID);
						}
						nFindBeg = strTmp.Find("<",nFindEnd);
						nFindEnd = strTmp.Find(">",nFindEnd+1);
					}
				}
			}
#endif
			
			if( bChat )
			{
				CString strWhisper;
				strWhisper.Format( "/whisper %s ", szFind );
				m_wndEdit.SetString( strWhisper );
				m_wndEdit.SetFocus();
			}
			break;
		}
	}
}	
void CWndChat::OnRButtonUp(UINT nFlags, CPoint point)
{
	if( g_WndMng.m_pWndWorld )
	{
		CRect rect = GetWindowRect( TRUE );
		CPoint p;
		p.x = point.x + rect.left;
		p.y = point.y + rect.top;
//		g_WndMng.m_pWndWorld->m_bRButtonDown = TRUE;
		g_WndMng.m_pWndWorld->OnRButtonUp( nFlags, p );
	}
}

void CWndChat::OnMouseMove(UINT nFlags, CPoint point)
{
	if( g_WndMng.m_pWndWorld )
	{
		CRect rect = GetWindowRect( TRUE );
		CPoint p;
		p.x = point.x + rect.left;
		p.y = point.y + rect.top;
//		g_WndMng.m_pWndWorld->m_bRButtonDown = TRUE;
		g_WndMng.m_pWndWorld->OnMouseMove( nFlags, p );
	}
}



BOOL CWndChat::OnEraseBkgnd(C2DRender* p2DRender)
{
	return TRUE;
}
//void CWndNeuz::PaintTexture( LPBYTE pDest, LPBYTE pSrc, CPoint pt,
// CSize sizeTexture, CSize sizeSurface )

void CWndChat::AdditionalSkinTexture( LPWORD pDest, CSize size, D3DFORMAT d3dFormat )
{
	CWndNeuz::AdditionalSkinTexture( pDest, size, d3dFormat );

	CRect rect = GetWindowRect();
	CPoint point =  CPoint( 0, rect.Height() - m_wndChatEdit[0].size.cy );
	PaintTexture( pDest, &m_wndChatEdit[0], point, size );
	int nWidth = ( rect.Width() - m_wndChatEdit[0].size.cx ) / m_wndChatEdit[1].size.cx;
	point.x += m_wndChatEdit[0].size.cx;
	for( int i = 0; i < nWidth; i++ )
	{
		if( i == nWidth - 2 )
			PaintTexture( pDest, &m_wndChatEdit[2], point, size );
		else
		if( i < nWidth - 2 )
			PaintTexture( pDest, &m_wndChatEdit[1], point, size );
		point.x += m_wndChatEdit[1].size.cx;
	}
}


#if __VER >= 8 //__Y_CHAT_SYSTEM_8

CWndChatLog::CWndChatLog()
{
}
CWndChatLog::~CWndChatLog()
{
}
/*
void CWndChatLog::OnDraw(C2DRender* p2DRender)
{
}
*/
void CWndChatLog::OnInitialUpdate()
{
	CWndNeuz::OnInitialUpdate();

	LPWNDCTRL lpWndText = GetWndCtrl( WIDC_CUSTOM1 );
	m_wndText.Create( WBS_NOFRAME | WBS_NODRAWFRAME | WBS_VSCROLL, lpWndText->rect, this, WIDC_TEXT );
	CWndText* pWndText = (CWndText*)GetDlgItem( WIDC_TEXT );

	if( g_pPlayer->IsAuthHigher( AUTH_GAMEMASTER ) )
	{
		pWndText->m_bEnableClipboard = TRUE;
	}

	pWndText->m_nLineSpace = 2;

	CRect rectRoot = m_pWndRoot->GetLayoutRect();
	CRect rect = GetWindowRect();
	int nWidth  = rect.Width(); 
	int nHeight = rect.Height(); 
	int x = 0;//rectRoot.left + (rectRoot.Width()  / 2) - (nWidth  / 2);
	int y = rectRoot.bottom - nHeight;	
	CPoint point( x, y );
	Move( point );
	
	m_wndMenuPlace.CreateMenu( this );	
	m_wndMenuPlace.AppendMenu( 0, 0 , prj.GetText(TID_GAME_GUIDE_HIDE) );
}

BOOL CWndChatLog::Process ()
{	
	return TRUE;
}
void CWndChatLog::OnSetFocus(CWndBase* pOldWnd)
{
}
void CWndChatLog::OnKillFocus(CWndBase* pNewWnd)
{
}
BOOL CWndChatLog::Initialize(CWndBase* pWndParent,DWORD dwWndId)
{
	CRect rectWindow = m_pWndRoot->GetWindowRect();
	CRect rect( 154, rectWindow.Height() - 100, 154 + rectWindow.Width() - 300, rectWindow.Height() );
	SetTitle( GETTEXT( TID_APP_COMMUNICATION_CHAT ) );
	return CWndNeuz::InitDialog( g_Neuz.GetSafeHwnd(), dwWndId, WBS_THICKFRAME, CPoint( 792, 130 ), pWndParent );
//	return CWndNeuz::InitDialog( g_Neuz.GetSafeHwnd(), dwWndId, 0, CPoint( 792, 130 ), pWndParent );
}

void CWndChatLog::OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags)
{
}
void CWndChatLog::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
}
void CWndChatLog::OnDestroyChildWnd( CWndBase* pWndChild )
{
}
BOOL CWndChatLog::OnChildNotify( UINT message, UINT nID, LRESULT* pLResult ) 
{ 
	CWndBase* pWndBase = (CWndBase*) pLResult;
	
	if( pWndBase->m_pParentWnd == &m_wndMenuPlace )
	{
		SetFocus();
		switch( nID )
		{
		case 0:
			{
				CWndChat* pWndChat = (CWndChat*)g_WndMng.GetWndBase( APP_COMMUNICATION_CHAT );

				if( pWndChat )
				{
					CWndButton* pWndCheck = (CWndButton*)pWndChat->GetDlgItem( WIDC_CHECK3 );

					if( pWndCheck )
						pWndCheck->SetCheck(FALSE);
				}

				SetVisible(FALSE);
			}
			break;
		}
	}

	return CWndNeuz::OnChildNotify( message, nID, pLResult ); 
} 

BOOL CWndChatLog::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
{
	return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
}
void CWndChatLog::PutString( LPCTSTR lpszString, DWORD dwColor, DWORD dwPStyle )
{
	CWndText* pWndText = (CWndText*)GetDlgItem( WIDC_TEXT );
	
	BOOL bLineEnd = FALSE;
	if( pWndText->m_wndScrollBar.GetScrollPos() == ( pWndText->m_wndScrollBar.GetMaxScrollPos() - pWndText->m_wndScrollBar.GetScrollPage() ) )
		bLineEnd = TRUE;

	pWndText->AddString( lpszString, dwColor, dwPStyle );
	pWndText->AddString( "\n", dwColor );// += '\n';
	// 글 내용이 1000줄을 넘어가면 500라인을 잘라낸다.
	if( pWndText->m_string.GetLineCount() >= 1000 )
	{
		pWndText->m_string.DeleteLine( 0, 500 );
		pWndText->UpdateScrollBar();
	}
	if( bLineEnd )
		pWndText->m_wndScrollBar.SetMaxScrollPos();
}
void CWndChatLog::OnDestroy()
{
}
void CWndChatLog::OnSize(UINT nType, int cx, int cy)
{
	CRect rectEdit;
	CRect rect = GetClientRect();
	//rect.left = 60;
	rect.top = 0;
	rect.left = 0;
	rect.right -= 0;
	rect.bottom -= 0;

	m_wndText.SetWndRect( rect );
	m_wndText.m_wndScrollBar.SetMaxScrollPos();
	
	CWndNeuz::OnSize(nType,cx,cy);
}
void CWndChatLog::OnLButtonUp(UINT nFlags, CPoint point)
{
}
void CWndChatLog::OnLButtonDown(UINT nFlags, CPoint point)
{
	if( g_WndMng.m_pWndWorld )
	{
		CRect rect = GetWindowRect( TRUE );
		CPoint p;
		p.x = point.x + rect.left;
		p.y = point.y + rect.top;
		g_WndMng.m_pWndWorld->m_bLButtonDown = TRUE;
		g_WndMng.m_pWndWorld->OnLButtonDown( nFlags, p );
	}
}

void CWndChatLog::OnRButtonDown(UINT nFlags, CPoint point)
{
	CRect rect = GetWindowRect( TRUE );
	CRect menurect = m_wndMenuPlace.GetWindowRect();

	rect.top  += point.y;
	rect.left += point.x;
	
	m_wndMenuPlace.Move( CPoint( rect.left, rect.top ) );
	
	m_wndMenuPlace.SetVisible( !m_wndMenuPlace.IsVisible() );
	m_wndMenuPlace.SetFocus();	
}	
void CWndChatLog::OnRButtonUp(UINT nFlags, CPoint point)
{
}
void CWndChatLog::OnMouseMove(UINT nFlags, CPoint point)
{
}
/*
BOOL CWndChatLog::OnEraseBkgnd(C2DRender* p2DRender)
{
	return TRUE;
}
*/

void CWndChatLog::AdditionalSkinTexture( LPWORD pDest, CSize size, D3DFORMAT d3dFormat )
{
	CWndNeuz::AdditionalSkinTexture( pDest, size, d3dFormat );
}

void CWndChatLog::SetWndRect( CRect rectWnd, BOOL bOnSize )
{
	AdjustMinRect( &rectWnd, 16 * 17, 16 * 3 );
	CRect rectOld = m_rectClient;
	m_rectWindow = rectWnd;
	m_rectClient = m_rectWindow;
	m_rectClient.DeflateRect( 4, 4, 6, 6 );
	m_rectLayout = m_rectClient;
	if( bOnSize && ( rectOld.Width() != m_rectClient.Width() || rectOld.Height() != m_rectClient.Height() ) )
		OnSize( 0, m_rectClient.Width(), m_rectClient.Height() );
	MakeVertexBuffer();
}

#endif //__Y_CHAT_SYSTEM_8

#ifdef __ITEM_LINK
CWndLinkedItem::CWndLinkedItem()
{
	m_pItem = NULL;

	CString strPath;
	if(::GetLanguage() == LANG_FRE)
		strPath = MakePath( "Theme\\", ::GetLanguage(), "Icon_Ultimate.dds");
	else
		strPath = MakePath( DIR_ICON, "Icon_Ultimate.dds");

	m_pUltimateTexture = CWndBase::m_textureMng.AddTexture( g_Neuz.m_pd3dDevice, strPath, 0xffff00ff );

	strPath = MakePath( DIR_ICON, "icon_Baruna01.dds" );
	m_pBarunaTexture = CWndBase::m_textureMng.AddTexture( g_Neuz.m_pd3dDevice, strPath, 0xffff00ff );

	m_pJewelBgTexture = CWndBase::m_textureMng.AddTexture( g_Neuz.m_pd3dDevice, MakePath( DIR_THEME, "WndChgElemItem.bmp"), 0xffff00ff );
}
CWndLinkedItem::~CWndLinkedItem()
{
	SAFE_DELETE(m_pItem);
}

BOOL CWndLinkedItem::Initialize(CWndBase *pWndParent,DWORD dwStyle)
{
	return CWndNeuz::InitDialog(g_Neuz.GetSafeHwnd(),APP_TOOLTIP_LINKEDITEM,dwStyle,CPoint(0,0),pWndParent);
}

void CWndLinkedItem::OnInitialUpdate()
{
	CWndNeuz::OnInitialUpdate();
	MoveParentCenter();
	rectItem = GetWndCtrl(WIDC_CUSTOM1)->rect;
}

void CWndLinkedItem::OnMouseWndSurface(CPoint point)
{
	/*
	if(m_pItem && rectItem.PtInRect(point))
	{
		CRect hitrect = rectItem;
		CPoint point2 = point;
		ClientToScreen(&point2);
		ClientToScreen(&hitrect);
		g_WndMng.PutToolTip_Item(m_pItem,point2,&hitrect);
	}
*/
}
void CWndLinkedItem::OnDraw(C2DRender *p2DRender)
{
	if(m_pItem)
	{
		CMover* pMover = g_pPlayer;
		m_pItem->GetTexture()->Render(p2DRender,rectItem.TopLeft(),255);
		CEditString strEdit;
		ItemProp* pItemProp = m_pItem->GetProp();
		strEdit.SetParsingString("");
		strEdit.Init( CWndBase::m_Theme.m_pFontText, &CRect( 0, 0, 240, 0 ) );
		DWORD dwColorBuf = g_WndMng.PutItemName(m_pItem, &strEdit);
		g_WndMng.PutItemAbilityPiercing( m_pItem, &strEdit, dwColorBuf );
		
		
		if( m_pItem->GetProp() && m_pItem->GetProp()->dwFlag & IP_FLAG_EQUIP_BIND )
		{
			strEdit.AddString("\r\n");
			if( m_pItem->IsFlag( CItemElem::binds ) )
				strEdit.AddString( GETTEXT( TID_TOOLTIP_EQUIPBIND_AFTER ), GETTEXTCOLOR( TID_TOOLTIP_EQUIPBIND_AFTER ) );
			else
				strEdit.AddString( GETTEXT( TID_TOOLTIP_EQUIPBIND_BEFORE ), GETTEXTCOLOR( TID_TOOLTIP_EQUIPBIND_BEFORE ) );
		}
		g_WndMng.PutWeapon( m_pItem, &strEdit );
	

     
		CString strExp;
#ifdef __MODEL_CHANGE
		g_WndMng.PutSex( pMover, m_pItem, &strEdit );

		
		

		switch( pItemProp->dwItemKind2 )
		{
			case IK2_WEAPON_DIRECT:
			case IK2_WEAPON_MAGIC:
			case IK2_ARMORETC:
			case IK2_CLOTHETC:
			case IK2_ARMOR:
			case IK2_CLOTH:
			case IK2_BLINKWING:
			{
				g_WndMng.PutItemMinMax( pMover, m_pItem, &strEdit );
				g_WndMng.PutItemSpeed( m_pItem, &strEdit );
				if( pItemProp->dwItemKind3 == IK3_ELECARD )
					g_WndMng.PutItemResist( m_pItem, &strEdit );
				else if( m_pItem->m_nResistAbilityOption && ( pItemProp->dwItemKind1 == IK1_WEAPON  || pItemProp->dwItemKind1 == IK1_ARMOR ) )
					g_WndMng.PutItemResist( m_pItem, &strEdit );
	
				g_WndMng.PutBaseResist( m_pItem, &strEdit );	// 속성 저항력
				
				g_WndMng.PutBaseItemOpt( m_pItem, &strEdit );

				g_WndMng.PutJob( pMover, m_pItem, &strEdit );
				g_WndMng.PutLevel( pMover, m_pItem, &strEdit );
				g_WndMng.PutCommand( m_pItem, &strEdit );
				g_WndMng.PutItemGold( pMover, m_pItem, &strEdit, 0 );	// 가격
				g_WndMng.PutSetItemOpt( pMover, m_pItem, &strEdit );
				g_WndMng.PutPiercingOpt( m_pItem, &strEdit );
				g_WndMng.PutRandomOpt( m_pItem, &strEdit );			
				g_WndMng.PutEnchantOpt( pMover, m_pItem, &strEdit, 0 );
				break;
			}
		case IK2_REFRESHER:
		case IK2_FOOD:
		case IK2_POTION:
			{
				g_WndMng.PutMedicine( m_pItem, m_pItem->GetProp()->dwDestParam1,  pItemProp->nAdjParamVal1, &strEdit );
				g_WndMng.PutMedicine( m_pItem, m_pItem->GetProp()->dwDestParam2,  pItemProp->nAdjParamVal2, &strEdit );
				break;
			}
		case IK2_JEWELRY:
			{
				g_WndMng.PutBaseItemOpt( m_pItem, &strEdit );
				break;
			}
		case IK2_SYSTEM:
			{
				if( pItemProp->dwItemKind3 == IK3_VIS )
				{
					g_WndMng.PutNeededVis( m_pItem, &strEdit );
					g_WndMng.PutBaseItemOpt( m_pItem, &strEdit );
				}
	
				if( m_pItem->m_dwItemId == II_SYS_SYS_SCR_SEALCHARACTER )
				{
					g_WndMng.PutSealChar( m_pItem, &strEdit );
				}
				break;
			}

			case IK2_GMTEXT:
			{
				if( pItemProp->dwItemKind3 == IK3_TEXT_DISGUISE )
				{
					g_WndMng.PutDestParam( pItemProp->dwDestParam[0], pItemProp->dwDestParam[1],
					pItemProp->nAdjParamVal[0], pItemProp->nAdjParamVal[1], strEdit );

					if( pItemProp->dwActiveSkill != NULL_ID )
					{
						ItemProp *pSkillProp;
						AddSkillProp* pAddSkillProp;
						pMover->GetSkillProp( &pSkillProp, &pAddSkillProp, pItemProp->dwActiveSkill, 1, "CWndMgr::PutToolTip_Item" );
					
						if( pAddSkillProp )
						{
							g_WndMng.PutDestParam( pAddSkillProp->dwDestParam[0], pAddSkillProp->dwDestParam[1],
								pAddSkillProp->nAdjParamVal[0], pAddSkillProp->nAdjParamVal[1], strEdit );
						}
					}
				}			
			}
			break;
		}
		default:
		{
			break;
		}
	}

	if( m_pItem->IsEatPet() )
	{
		if( pItemProp->dwActiveSkill != NULL_ID )
		{
			ItemProp *pSkillProp;
			AddSkillProp* pAddSkillProp;
			pMover->GetSkillProp( &pSkillProp, &pAddSkillProp, pItemProp->dwActiveSkill, 1, "CWndMgr::PutToolTip_Item" );
			
			if( pAddSkillProp )
			{
				g_WndMng.PutDestParam( pAddSkillProp->dwDestParam[0], pAddSkillProp->dwDestParam[1],
					pAddSkillProp->nAdjParamVal[0], pAddSkillProp->nAdjParamVal[1], strEdit );
			}
		}
	}
       
	if( m_pItem->IsVisPet( ) )
		g_WndMng.PutVisPetInfo( m_pItem, &strEdit );

	g_WndMng.PutCoolTime( pMover, m_pItem, &strEdit );			// 쿨타임
	g_WndMng.PutEndurance( m_pItem, &strEdit, 0 );			// 내구력
	g_WndMng.PutKeepTime( m_pItem, &strEdit );					// 사용할수 있는 시간

	if( pItemProp->dwItemKind3 == IK3_EGG && m_pItem->m_pPet )//&& pItemElem->m_pPet->GetLevel() != PL_EGG )
		g_WndMng.PutPetInfo( m_pItem, &strEdit );
	if( pItemProp->dwID == II_SYS_SYS_SCR_PET_FEED_POCKET ) //먹이 주머니 툴팁
		g_WndMng.PutPetFeedPocket( m_pItem, &strEdit );

	//g_WndMng.PutPiercingOpt( m_pItem, &strEdit );

	g_WndMng.PutAwakeningBlessing( m_pItem, &strEdit );

	if( (pItemProp->dwItemKind2 == IK2_WEAPON_DIRECT || pItemProp->dwItemKind2 == IK2_WEAPON_MAGIC) && m_pItem->GetProp()->dwReferStat1 == WEAPON_ULTIMATE )
		g_WndMng.PutAddedOpt( m_pItem, &strEdit );

	if( (pItemProp->dwItemKind2 == IK2_WEAPON_DIRECT || pItemProp->dwItemKind2 == IK2_WEAPON_MAGIC) && pItemProp->IsUltimate() )
		m_pUltimateTexture->Render( p2DRender, CPoint( 10, 55) );
//	else if( (pItemProp->dwItemKind2 == IK2_WEAPON_DIRECT || pItemProp->dwItemKind2 == IK2_WEAPON_MAGIC) && pItemProp->IsBaruna() )
//		m_pBarunaTexture->Render( p2DRender, CPoint( 10, 55) );
	m_p2DRender->TextOut_EditString(rectItem.left - 80, rectItem.bottom + 15, strEdit);
	this->SetWndSize(90 + p2DRender->m_pFont->GetTextExtent(strEdit).cx, 100 + p2DRender->m_pFont->GetTextExtent(strEdit).cy);
	}
}

void CWndLinkedItem::SetItem(CItemElem *pItem)
{
	if( pItem && pItem->GetProp() )
	this->m_pItem = pItem;
}
#endif //__MODEL_CHANGE
Thanks , thats what i did in the beginning but i removed it because of this error

Code:
1>..\_Interface\WndCommunication.cpp(1813): fatal error C1070: mismatched #if/#endif pair in file 'c:\users\meher\desktop\v15\official source\official source\_interface\wndcommunication.cpp'
xMeher is offline  
Old   #5
 
max982's Avatar
 
elite*gold: 0
Join Date: Nov 2010
Posts: 119
Received Thanks: 35
Quote:
Originally Posted by WurstbrotQT View Post
Your parents must be really proud...

Code:
#include "stdafx.h"
#include "defineText.h"
#include "AppDefine.h"
#include "WndCommand.h"
#include "party.h"

#include "WndManager.h"

#include "WndChatFilter.h"

#include "DPClient.h"
extern	CDPClient	g_DPlay;


#define		MAX_HISTORY_STRING		20

CWndEditChat::CWndEditChat()
{
}
CWndEditChat::~CWndEditChat()
{
}
void CWndEditChat::OnLButtonDown(UINT nFlags, CPoint point)
{
	CWndChat* pWndChat = (CWndChat*) m_pParentWnd;
	if( pWndChat->m_pWndCommand )
		pWndChat->m_pWndCommand->Destroy();
	CWndEdit::OnLButtonDown( nFlags, point );
}
void CWndEditChat::OnSetFocus(CWndBase* pOldWnd)
{
	if( m_string.IsEmpty() )
	{
		CWndChat* pWndChat = (CWndChat*) m_pParentWnd;	

		if( pWndChat->m_pWndCommand == NULL )
		{
			if( pWndChat->m_nChatChannel == CHATSTY_GENERAL )
			{
			}
			else
			if( pWndChat->m_nChatChannel == CHATSTY_WHISPER )
			{
				CString string;
				if(  pWndChat->m_strCharName.IsEmpty() )
					string.Format( "/w " );
				else
					string.Format( "/w %s ", pWndChat->m_strCharName );
				SetString( string );
			}
			else
			if( pWndChat->m_nChatChannel == CHATSTY_SHOUT )
			{
				SetString( "/s " );
			}
			else
			if( pWndChat->m_nChatChannel == CHATSTY_PARTY )
			{
				SetString( "/p " );
			}
			else
			if( pWndChat->m_nChatChannel == CHATSTY_GUILD )
			{
				SetString( "/g " );
			}
		}
	}


	CWndEdit::OnSetFocus( pOldWnd );
}
void CWndEditChat::OnKillFocus(CWndBase* pNewWnd)
{
	CWndChat* pWndChat = (CWndChat*) m_pParentWnd;
	if( pWndChat->m_pWndCommand && this!= pNewWnd )
		pWndChat->m_pWndCommand->Destroy();
	CWndEdit::OnKillFocus( pNewWnd );
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// 채팅 윈도 
//
/////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////

CWndMacroChat::CWndMacroChat()
{
}
CWndMacroChat::~CWndMacroChat()
{
}
void CWndMacroChat::OnDraw( C2DRender* p2DRender )
{
	CWndChat* pWndChat = (CWndChat*)g_WndMng.GetApplet( APP_COMMUNICATION_CHAT );
	CWndEditChat* pWndEdit = &pWndChat->m_wndEdit;//GetDlgItem( WIDC_EDIT );
	if( pWndEdit->m_string.IsEmpty() == FALSE )
		p2DRender->RenderTexture( CPoint( 0, 0 ), &m_texMacroChat );
}
void CWndMacroChat::OnLButtonDown(UINT nFlags, CPoint point)
{
	CWndChat* pWndChat = (CWndChat*)g_WndMng.GetApplet( APP_COMMUNICATION_CHAT );
	CWndEditChat* pWndEdit = &pWndChat->m_wndEdit;//GetDlgItem( WIDC_EDIT );
	if( pWndEdit->m_string.IsEmpty() == FALSE )
	{
		CWndChat* pWndChat = (CWndChat*)g_WndMng.GetApplet( APP_COMMUNICATION_CHAT );
		m_GlobalShortcut.m_dwShortcut = SHORTCUT_CHAT;
		m_GlobalShortcut.m_pFromWnd = this;
		m_GlobalShortcut.m_pTexture = m_pTexMacro; //.m_pFromWnd   = this;
		m_GlobalShortcut.m_dwData = 0;
		//CWndEdit* pWndEdit = (CWndEdit*)pWndChat->GetDlgItem( WIDC_EDIT );
		//strcpy( m_GlobalShortcut.m_szString, pWndEdit->m_string );

		CString strFormat;
		strFormat = pWndEdit->m_string;

		pWndEdit->m_string.GetTextFormat(strFormat);
		
		if( pWndEdit->m_string.GetLength() >= MAX_SHORTCUT_STRING-1 )
		{
			memcpy( m_GlobalShortcut.m_szString, strFormat, MAX_SHORTCUT_STRING-1 );
		}
		else
		{
			strcpy( m_GlobalShortcut.m_szString, strFormat );
		}
	}
}

void CWndMacroChat::OnMouseMove(UINT nFlags, CPoint point)
{
}
void CWndMacroChat::OnInitialUpdate()
{
	//m_ptexMacroe.LoadTexture( m_pApp->m_pd3dDevice, MakePath( DIR_ICON, "icon_MacroChat.dds" ), 0xffff00ff );
	m_pTexMacro = m_textureMng.AddTexture( m_pApp->m_pd3dDevice, MakePath( DIR_ICON, "icon_MacroChat.dds" ), 0xffff00ff );//, bMyLoader );
	m_texMacroChat.LoadTexture( m_pApp->m_pd3dDevice, MakePath( DIR_THEME, "wndButtMacroChat.bmp" ), 0xffff00ff );
}
CWndTextChat::CWndTextChat()
{
}
CWndTextChat::~CWndTextChat()
{
}
BOOL CWndTextChat::IsPickupSpace( CPoint point )
{
	return FALSE;
}
int CWndChat::m_nChatChannel = CHATSTY_GENERAL;

CWndChat::CWndChat()
{
	m_pWndCommand = NULL;
//	m_timerInsMsg.Set( MIN( 1 ) );
	m_timerInsMsg.Set( MIN( 2 ) );  // 도움말 표시 간격 증가
#ifdef __CSC_GAME_GRADE
	m_timerAlertGGrade.Set( MIN(60) );
#endif //__CSC_GAME_GRADE
	m_nInsMsgCnt = 0;
	m_bChatLock = FALSE;
	m_bMoveLock = FALSE;
	m_pWndChatFilter = NULL;
	m_nHistoryIndex = 0;
#if __VER >= 8 //__CSC_VER8_1
	m_bChatLog = FALSE;
#endif //__CSC_VER8_1
#ifdef __ITEM_LINK
	m_pWndLinkedItem = NULL;
#endif
}
CWndChat::~CWndChat()
{
	SAFE_DELETE( m_pWndCommand );
	SAFE_DELETE( m_pWndChatFilter );
	#ifdef __ITEM_LINK
	SAFE_DELETE(m_pWndLinkedItem);
#endif
}
void CWndChat::OnDraw(C2DRender* p2DRender)
{
	if( g_pPlayer == NULL )
		return;
	//if( timer.IsTimeOut() )
	//{
	//	timer.Set( SEC( 10 ) );
	//	if( szMessage[ nMsgCnt ][0] )
	//		PutString( szMessage[ nMsgCnt ++ ] );
	//}
	if( g_Option.m_nInstantHelp )
	{
		CString string;
		if( m_strArray.GetSize() && m_timerInsMsg.TimeOut() )
		{
			m_timerInsMsg.Reset();
			//string = "[도움말] ";
			string  = prj.GetText(TID_SYS_HELP);
			string += " ";
			string += m_strArray.GetAt( m_nInsMsgCnt );
			g_WndMng.PutString( string, NULL, 0xffffff00, CHATSTY_HELP );
			m_nInsMsgCnt++;
			if( m_nInsMsgCnt == m_strArray.GetSize() )
				m_nInsMsgCnt = 0;
		}
	}

#ifdef __CSC_GAME_GRADE
	if(m_timerAlertGGrade.TimeOut())
	{
		m_timerAlertGGrade.Reset();
		//PK�*버 구분  12세 or 15세
		if(g_eLocal.GetState( EVE_PK ))
			g_WndMng.PutString( prj.GetText(TID_SYS_ALERTGGRADE_PK), NULL, 0xffffff00, CHATSTY_HELP );
		else
			g_WndMng.PutString( prj.GetText(TID_SYS_ALERTGGRADE_NONPK), NULL, 0xffffff00, CHATSTY_HELP );		
	}
#endif //__CSC_GAME_GRADE

	CWndButton* pWndRadio4 = (CWndButton*)GetDlgItem( WIDC_RADIO4 ); // party
	CWndButton* pWndRadio5 = (CWndButton*)GetDlgItem( WIDC_RADIO5 ); // guild

	pWndRadio4->EnableWindow( g_Party.IsMember( g_pPlayer->m_idPlayer ) );
	pWndRadio5->EnableWindow( g_pPlayer->GetGuild() == NULL ? FALSE : TRUE );

	if( ::GetLanguage() == LANG_KOR || ::GetLanguage() == LANG_TWN || ::GetLanguage() == LANG_HK )
	{
		static TCHAR text[12] = { 0 };
		static wchar_t* wText = g_imeMgr.GetStringIndicator();

		if( wText )
		{
			CWndStatic* pWndStatic = (CWndStatic*)GetDlgItem( WIDC_STATIC1 ); 

			if( pWndStatic )
			{
				WideCharToMultiByteEx(g_imeMgr.m_codePage, 0, wText, wcslen(wText), text, 12, NULL, NULL);		
				
				pWndStatic->m_dwColor = D3DCOLOR_ARGB( 255, 50, 50, 220 );

				if( PRIMARYLANGID(g_imeMgr.m_hkl)==LANG_KOREAN )
				{
					if( g_imeMgr.GetImeState() == 0 )
					{
						_tcscpy( text, "En" );
					}
				}
				else
				if( PRIMARYLANGID(g_imeMgr.m_hkl)==LANG_CHINESE )
				{
					static wchar_t wTextCh[3][3] = 
					{ 
						L"\x6CE8", 
						L"\x65B0", 
						L"\x5176", 
					};
					
					if( g_imeMgr.IsNewPhonetic() )
					{
						if( g_imeMgr.GetImeState() == 2 )
							_tcscpy( text, "En" );
						else
							WideCharToMultiByteEx(g_imeMgr.m_codePage, 0, wTextCh[1], wcslen(wTextCh[1]), text, 12, NULL, NULL);		
					}
					else
					if( g_imeMgr.IsPhonetic() )
					{
						if( g_imeMgr.GetImeState() == 0 )
							_tcscpy( text, "En" );
						else	
							WideCharToMultiByteEx(g_imeMgr.m_codePage, 0, wTextCh[0], wcslen(wTextCh[0]), text, 12, NULL, NULL);		
					}
					else
					{
						if( g_imeMgr.GetImeState() == 0 )
							_tcscpy( text, "En" );
						else	
							WideCharToMultiByteEx(g_imeMgr.m_codePage, 0, wTextCh[2], wcslen(wTextCh[2]), text, 12, NULL, NULL);		
					}
				}
				pWndStatic->SetTitle( text );
			}
		}
	}
}
void CWndChat::OnInitialUpdate()
{
	CWndNeuz::OnInitialUpdate();

	//AddWndStyle( WBS_THICKFRAME );

	m_timerDobe.Set( SEC( 5 ) );

	LPWNDCTRL lpWndCtrl = GetWndCtrl( WIDC_MACRO_CHAT );
	LPWNDCTRL lpWndText = GetWndCtrl( WIDC_CUSTOM1 );
	m_wndMacroChat.Create( "g", WBS_NODRAWFRAME, lpWndCtrl->rect, this, WIDC_MACRO_CHAT );
	m_wndMacroChat.AddWndStyle( WBS_NODRAWFRAME );

	lpWndCtrl = GetWndCtrl( WIDC_EDIT );
	m_wndEdit.Create( g_Neuz.GetSafeHwnd(), WBS_NODRAWFRAME, lpWndCtrl->rect, this, WIDC_EDIT );
	m_wndText.Create( WBS_NOFRAME | WBS_NODRAWFRAME | WBS_VSCROLL, lpWndText->rect, this, WIDC_TEXT );
	CWndText* pWndText = (CWndText*)GetDlgItem( WIDC_TEXT );
	CWndEdit* pWndHead = (CWndEdit*)GetDlgItem( WIDC_HEAD );
	CWndEdit* pWndEdit = (CWndEdit*)GetDlgItem( WIDC_EDIT );

	if( g_pPlayer->IsAuthHigher( AUTH_GAMEMASTER ) )
	{
		pWndText->m_bEnableClipboard = TRUE;
		pWndHead->m_bEnableClipboard = TRUE;
		pWndEdit->m_bEnableClipboard = TRUE;
	}
	pWndEdit->SetNativeMode();

#if __VER >= 11 // __CSC_VER11_1
	CRect rectEdit = m_wndEdit.GetWndRect();
	rectEdit.left = rectEdit.left - 90;
	m_wndEdit.SetWndRect( rectEdit );

	CRect customRect = lpWndCtrl->rect;
	CWndCustom* pCustom = (CWndCustom*)GetDlgItem(WIDC_MACRO_CHAT);
	if(pCustom)
		pCustom->Move(customRect.TopLeft().x - 119, customRect.TopLeft().y);
	if(pWndHead)
	{
		pWndHead->EnableWindow(FALSE);
		pWndHead->SetVisible(FALSE);
	}
#endif //__CSC_VER11_1
	if( g_Option.m_nInstantHelp )
	{
		CScript	s;
		s.Load( MakePath( DIR_CLIENT, "InstantHelp.inc" ) );
		s.GetToken();
		while( s.tok != FINISHED )
		{
			m_strArray.Add( s.Token );
			s.GetToken();
		}
	}
	//m_strArray.

/*
	CRect rect = GetClientRect();
	rect.top = rect.bottom - 20;
	rect.right = 70;
	rect.left += 5;
	rect.DeflateRect( 1, 1 );
	m_wndBeginning.Create( g_Neuz.GetSafeHwnd(), WBS_NODRAWFRAME, rect, this, 1000);

	rect = GetClientRect();
	rect.top = rect.bottom - 20;
	rect.left = 75;
	rect.right -= 134;
	rect.DeflateRect( 1, 1 );
	//rect.left = rect.Width() * 20 / 100;
	//m_wndEdit.AddWndStyle( WBS_NODRAWFRAME );
	m_wndEdit.Create( g_Neuz.GetSafeHwnd(), WBS_NODRAWFRAME, rect, this, 1001 );
*/
//	m_texEdit.LoadTexture( m_pApp->m_pd3dDevice, MakePath( DIR_THEME, "WndChat2.bmp" ), 0xffff00ff, TRUE );
/*
	rect = GetClientRect();
	rect.top = rect.bottom - 20;
	rect.left = rect.right - 134;
	rect.right = r mnnnnft + 15;
	rect.DeflateRect( 1, 1 );
	m_wndShout.Create( " ", 0, rect, this, 1010 );

	rect = GetClientRect();
	rect.top = rect.bottom - 20;
	rect.left = rect.right - 117;
	rect.right = rect.left + 15;
	rect.DeflateRect( 1, 1 );
	m_wndParty.Create( " ", 0, rect, this, 1011 );
*/

/*
	m_wndText.AddWndStyle( WBS_VSCROLL );
	m_wndText.AddWndStyle( WBS_NOFRAME );
	m_wndText.AddWndStyle( WBS_NODRAWFRAME );
	m_wndText.Create( 0, rect, this, 1003 ); 
	m_wndText.SetFont( g_Neuz.m_Theme.m_pFontChat );
	m_wndText.m_string.Reset( m_pFont, &rect);
*/
/*
	rect = GetClientRect();
	rect.left = rect.right - 100;
	//rect.bottom -= 80;
	rect.DeflateRect( 1, 1 );
	m_wndReceiver.AddWndStyle( WBS_VSCROLL );
	m_wndReceiver.AddWndStyle( WBS_NOFRAME );
	m_wndReceiver.Create( EBS_AUTOVSCROLL, rect, this, 1002 );
	m_wndReceiver.AddString( "Vampyre\n" );
	m_wndReceiver.AddString( "Xuzhu\n" );
	m_wndReceiver.AddString( "Zodiacus\n" );
	m_wndReceiver.AddString( "Jeff\n" );
	m_wndReceiver.m_string.Reset( m_pFont, &rect);
*/

	//CWndText* pWndText = (CWndText*)GetDlgItem( WIDC_TEXT );
	SetChannel();
	CWndButton* pWndRadio1 = (CWndButton*)GetDlgItem( WIDC_RADIO1 );
	CWndButton* pWndRadio2 = (CWndButton*)GetDlgItem( WIDC_RADIO2 );
	CWndButton* pWndRadio3 = (CWndButton*)GetDlgItem( WIDC_RADIO3 );
	CWndButton* pWndRadio4 = (CWndButton*)GetDlgItem( WIDC_RADIO4 );
	CWndButton* pWndRadio5 = (CWndButton*)GetDlgItem( WIDC_RADIO5 );
	if( m_nChatChannel == CHATSTY_GENERAL ) pWndRadio1->SetCheck( TRUE );	else
	if( m_nChatChannel == CHATSTY_WHISPER ) pWndRadio2->SetCheck( TRUE );	else
	if( m_nChatChannel == CHATSTY_SHOUT   ) pWndRadio3->SetCheck( TRUE );	else
	if( m_nChatChannel == CHATSTY_PARTY   ) pWndRadio4->SetCheck( TRUE );	else
	if( m_nChatChannel == CHATSTY_GUILD   ) pWndRadio5->SetCheck( TRUE );
	//pWndText->m_string.Init(
	//pWndText->m_string = g_WndMng.m_ChatString;
	pWndText->m_nLineSpace = 2;
	//pWndText->m_string.Reset( m_pFont, &pWndText->GetClientRect() );
	
	//pWndText->
	/*
	CRect rect = GetClientRect();
	rect.bottom -= 20;
	rect.right -= 0;//100;
	rect.DeflateRect( 1, 1);
	m_wndText.SetWndRect( rect );
*/
	//LPBYTE m_wndChatEdit[3];
	//CSize sizeWndChatEdit[3];
#if __VER >= 11 // __CSC_VER11_1
	LoadTGA( MakePath( DIR_THEME, "WndChatEdit00_1.tga" ), &m_wndChatEdit[0] );
#else //__CSC_VER11_1
	LoadTGA( MakePath( DIR_THEME, "WndChatEdit00.tga" ), &m_wndChatEdit[0] );
#endif //__CSC_VER11_1
	LoadTGA( MakePath( DIR_THEME, "WndChatEdit01.tga" ), &m_wndChatEdit[1] );
#ifdef __LANG_IME_0327
	LoadTGA( MakePath( "Theme\\", ::GetLanguage(), "WndChatEdit02.tga" ), &m_wndChatEdit[2] );
#else	// __LANG_IME_0327
	LoadTGA( MakePath( DIR_THEME, "WndChatEdit02.tga" ), &m_wndChatEdit[2] );
#endif	// __LANG_IME_0327

	if( m_wndChatEdit[2].lpData == NULL )
	{
		Error( "CWndChat::OnInitialUpdate() m_wndChatEdit[2].lpData = NULL" );
		return;
	}
/*
	CRect rectRoot = m_pWndRoot->GetLayoutRect();
	CRect rectWindow = GetWindowRect();
	CPoint point( 154, rectRoot.bottom - rectWindow.Height() );
	Move( point );
*/
	CWndButton* pWndLock = (CWndButton*)GetDlgItem( WIDC_CHECK1 );
	pWndLock->SetCheck( m_bChatLock );
	CWndButton* pWndMoveLock = (CWndButton*)GetDlgItem( WIDC_MOVELOCK );
	pWndMoveLock->SetCheck( m_bMoveLock );
	CRect rectRoot = m_pWndRoot->GetLayoutRect();
	CRect rect = GetWindowRect();
	int nWidth  = rect.Width(); 
	int nHeight = rect.Height(); 
	int x = 0;//rectRoot.left + (rectRoot.Width()  / 2) - (nWidth  / 2);
	int y = rectRoot.bottom - nHeight;	
	CPoint point( x, y );
	Move( point );

	m_timerInputTimeOut.Set( SEC( 300 ) );

#if __VER >= 8 //__Y_CHAT_SYSTEM_8
	if( g_WndMng.m_pWndChatLog == NULL )
	{
		g_WndMng.m_pWndChatLog = new CWndChatLog;
		
		if( g_WndMng.m_pWndChatLog )
		{
			g_WndMng.m_pWndChatLog->Initialize( NULL, APP_CHAT_LOG );
			
			CRect rectRoot = m_pWndRoot->GetLayoutRect();
			CRect rect = GetWindowRect(TRUE);
			CRect rect2 = g_WndMng.m_pWndChatLog->GetClientRect(TRUE);
			
			int x = 0;
			int y = rect.top;
			
			if( (rect.right+rect2.Width()) < rectRoot.right )
				x = rect.right;
			else
				x = (rect.left - rect2.Width() );
			
			CPoint point( x, y );
			g_WndMng.m_pWndChatLog->Move( point );

			g_WndMng.m_pWndChatLog->SetVisible(FALSE);
		}
	}

	if( g_WndMng.m_pWndChatLog )
	{
		CWndButton* pWndCheck3  = (CWndButton*)GetDlgItem( WIDC_CHECK3 );
		if( pWndCheck3 )
			pWndCheck3->SetCheck(g_WndMng.m_pWndChatLog->m_bVisible);
	}
#endif //__Y_CHAT_SYSTEM_8
}

BOOL CWndChat::Process ()
{
	if( m_timerInputTimeOut.IsTimeOut() )
	{
		CWndText* pWndText = (CWndText*)GetDlgItem( WIDC_TEXT );

		pWndText->m_string.SetAlpha( 0 );
	}
	
	if( 0 < strlen( g_Neuz.m_szWhisperName ) )
	{
		LPCTSTR lpstr = m_wndEdit.GetString();
		BOOL bCommand = FALSE;
		if( strcmp( lpstr, "/r " ) == 0 || strcmp( lpstr, "/R " ) == 0 || ( GetLanguage() == LANG_KOR && strcmp( lpstr, "/ㄱ " ) == 0 ) )
		{
			CString strWhisper;
			strWhisper.Format( "/whisper %s ", g_Neuz.m_szWhisperName );
			m_wndEdit.SetString( strWhisper );
			m_wndEdit.SetFocus();
		}		
	}
	
	return TRUE;
}

void CWndChat::SetChannel()
{
	m_wndText.SetString( "" );

	int nChannel = 0;
	switch( CWndChat::m_nChatChannel )
	{
		case CHATSTY_GENERAL: nChannel = 0; break;
		case CHATSTY_WHISPER: nChannel = 1; break;
		case CHATSTY_SHOUT  : nChannel = 2; break;
		case CHATSTY_PARTY  : nChannel = 3; break;
		case CHATSTY_GUILD  : nChannel = 4; break;
	}
	DWORD dwChatFilter = g_Option.m_dwChatFilterEtc | g_Option.m_dwChatFilter[ nChannel ];

	for( int i = 0; i < g_WndMng.m_aChatString.GetSize(); i++ )
	{
		if( g_WndMng.m_aChatStyle.GetAt( i ) & dwChatFilter ) 
		{
			CString string = g_WndMng.m_aChatString.GetAt( i );
			m_wndText.m_string.AddParsingString( string, g_WndMng.m_aChatColor.GetAt( i ), 0x00000000, 0, PS_NOT_MACRO );
			m_wndText.m_string.AddString( "\n" );
		}
	}
	m_wndText.ResetString();
	m_wndText.m_wndScrollBar.SetMaxScrollPos();
}
void CWndChat::OnSetFocus(CWndBase* pOldWnd)
{
}
void CWndChat::OnKillFocus(CWndBase* pNewWnd)
{
	//if( m_pWndCommand && pNewWnd != m_pWndCommand )
	//	m_pWndCommand->Destroy();
}
BOOL CWndChat::Initialize(CWndBase* pWndParent,DWORD dwWndId)
{
	CRect rectWindow = m_pWndRoot->GetWindowRect();
	CRect rect( 154, rectWindow.Height() - 100, 154 + rectWindow.Width() - 300, rectWindow.Height() );
	SetTitle( GETTEXT( TID_APP_COMMUNICATION_CHAT ) );
	return CWndNeuz::InitDialog( g_Neuz.GetSafeHwnd(), dwWndId, WBS_KEY| WBS_THICKFRAME, CPoint( 792, 130 ), pWndParent );
	//return CWndNeuz::Create( 0|WBS_MOVE|/*WBS_DOCKABLE|*/WBS_SOUND|WBS_CAPTION|WBS_THICKFRAME|WBS_MAXIMIZEBOX, rect, &g_WndMng, dwWndId);
}

/*
	"applet" TY_CLIENT 0
	"to"     TY_SERVER 0 
	"to"     TY_SERVER 0
	"to"     TY_SERVER 0
*/

extern	CDPClient	g_DPlay;

void CWndChat::OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags)
{
}
void CWndChat::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
}
void CWndChat::OnDestroyChildWnd( CWndBase* pWndChild )
{
	if( m_pWndCommand == pWndChild )
	{
		SAFE_DELETE( m_pWndCommand );
	}
	if( m_pWndChatFilter == pWndChild )
	{
		SAFE_DELETE( m_pWndChatFilter );
		//ChatFilter Wnd Destroy후 Focus가 World로 되어있지 않아 이동키가 먹지 않기 때문에 SetFocus해줌.
		CWndWorld* pWndWorld = (CWndWorld*)g_WndMng.GetApplet( APP_WORLD );
		if( pWndWorld ) 
			pWndWorld->SetFocus();
	}
}
void CWndChat::SerializeRegInfo( CAr& ar, DWORD& dwVersion )
{
	CWndNeuz::SerializeRegInfo( ar, dwVersion );
	if( ar.IsLoading() )
	{
		if( dwVersion == 0 )
		{
		}
		else
		{
			ar >> m_bChatLock;
		}
		CWndButton* pWndLock = (CWndButton*)GetDlgItem( WIDC_CHECK1 );
		pWndLock->SetCheck( m_bChatLock );
	}
	else
	{
		dwVersion = 1;
		ar << m_bChatLock;
	}
}

BOOL CWndChat::OnChildNotify( UINT message, UINT nID, LRESULT* pLResult ) 
{ 
	m_timerInputTimeOut.Reset();

	CWndText* pWndText = (CWndText*)GetDlgItem( WIDC_TEXT );	
	if( pWndText )
		pWndText->m_string.SetAlpha( 255 );	
	
	switch(nID)
	{
		case WIDC_CLOSE:
			nID = WTBID_CLOSE;
			break;
		case WIDC_HELP:
			nID = WTBID_HELP;
			break;
		case WIDC_BUTTON1:
			{
				if( m_pWndChatFilter == NULL )
				{
					m_pWndChatFilter = new CWndChatFilter;
					m_pWndChatFilter->Initialize( this );
				}
			}
			break;
		case WIDC_CHECK1: // 채팅 입력창 잠구기 
			{
				CWndButton* pWndCheck = (CWndButton*)GetDlgItem( WIDC_CHECK1 );
				m_bChatLock = pWndCheck->GetCheck();
			}
			break;
#if __VER >= 8 //__Y_CHAT_SYSTEM_8
		case WIDC_CHECK3: // 시스탐창
			{
				CWndButton* pWndCheck = (CWndButton*)GetDlgItem( WIDC_CHECK3 );
				BOOL bChatLog = pWndCheck->GetCheck();
#if __VER >= 8 //__CSC_VER8_1 모든 윈도우를 지울때 ChatLog의 유무 구별을 위해 추가.
				m_bChatLog = bChatLog;
#endif //_CSC_VER8_1
				if( g_WndMng.m_pWndChatLog )
				{
					if( bChatLog )
					{
						CRect rectRoot = m_pWndRoot->GetLayoutRect();
						CRect rect = GetWindowRect(TRUE);
						CRect rect2 = g_WndMng.m_pWndChatLog->GetClientRect(TRUE);
						
						int x = 0;
						int y = rect.top;
						
						if( (rect.right+rect2.Width()) < rectRoot.right )
							x = rect.right;
						else
							x = (rect.left - rect2.Width() );
						
						CPoint point( x, y );
						g_WndMng.m_pWndChatLog->Move( point );
					}

					g_WndMng.m_pWndChatLog->SetVisible( bChatLog );
				}
			}
			break;
#endif //__Y_CHAT_SYSTEM_8
		case WIDC_MOVELOCK: // 이동 잠그기
			{
				CWndButton* pWndCheck = (CWndButton*)GetDlgItem( WIDC_MOVELOCK );
				m_bMoveLock = pWndCheck->GetCheck();
				DWORD dwStyle = GetWndStyle();
				if( m_bMoveLock )
					dwStyle &= (~WBS_MOVE);
				else
					dwStyle |= WBS_MOVE;
				SetWndStyle( dwStyle );
			}
			break;
		case WIDC_RADIO1:
			m_nChatChannel = CHATSTY_GENERAL;
			m_wndEdit.SetString( "" );
			m_wndEdit.SetFocus();
			SetChannel();
			break;
		case WIDC_RADIO2:
			m_nChatChannel = CHATSTY_WHISPER;
			m_wndEdit.SetString( "/w " );
			m_wndEdit.SetFocus();
			SetChannel();
			break;
		case WIDC_RADIO3:
			m_nChatChannel = CHATSTY_SHOUT;
			m_wndEdit.SetString( "/s " );
			m_wndEdit.SetFocus();
			SetChannel();
			break;
		case WIDC_RADIO4:
			m_nChatChannel = CHATSTY_PARTY;
			m_wndEdit.SetString( "/p " );
			m_wndEdit.SetFocus();
			SetChannel();
			break;
		case WIDC_RADIO5:
			m_nChatChannel = CHATSTY_GUILD;
			m_wndEdit.SetString( "/g " );
			m_wndEdit.SetFocus();
			SetChannel();
			break;
		case APP_COMMAND:
			{
				if( message == WNM_DBLCLK )
				{
					CString string;
					m_pWndCommand->GetText( m_pWndCommand->GetCurSel(), string );
					string += " ";
					m_wndEdit.SetString( "/" );
					m_wndEdit.AddString( string );
					m_wndEdit.ResetString();
					m_pWndCommand->Destroy();
				}
				SetFocus();
			}
		case WIDC_HEAD: // 말머리
			if( message == EN_RETURN )
			{
				g_WndMng.SetFocus();
			}
			break;
		case WIDC_EDIT: // 본문
			if( message == EN_UP )		
			{
				if( m_strHistory.size() == 0 )
					return FALSE;

				if( m_nHistoryIndex >= (int)( m_strHistory.size() ) )
				{
					m_strHistory.front();
					m_nHistoryIndex = 0;
				}

				m_nHistoryIndex++;
		#ifdef __ITEM_LINK
				m_wndEdit.SetString(m_strHistory[m_strHistory.size()-m_nHistoryIndex]);
#else
				m_wndEdit.m_string = m_strHistory[m_strHistory.size()-m_nHistoryIndex];
#endif

				return TRUE;
			}
			
			if( message == EN_RETURN )
			{
				BOOL bFinished = TRUE;
				if( m_pWndCommand )
				{
					CString str1, str2;
					str1 = m_wndEdit.m_string.Right( m_wndEdit.m_string.GetLength() - 1 );
					if( m_pWndCommand->GetCurSel() != -1 )
					{
						m_pWndCommand->GetText( m_pWndCommand->GetCurSel(), str2 );
						if( str1 != str2 )
						{
							str2 += " ";
							m_wndEdit.SetString( "/" );
							m_wndEdit.AddString( str2 );
							m_wndEdit.ResetString();
							bFinished = FALSE;
						}
					}
					m_pWndCommand->Destroy();
				}
				if( bFinished == TRUE )
				{
					CWndText* pWndText = (CWndText*)GetDlgItem( WIDC_TEXT );
					CWndEdit* pWndHead = (CWndEdit*)GetDlgItem( WIDC_HEAD );
					CString string; 
					if( pWndHead->m_string.IsEmpty() == FALSE && 
						( pWndHead->m_string[ 0 ] == '/' || 
						( m_wndEdit.m_string.IsEmpty() == FALSE && pWndHead->m_string[ 0 ] != '/' && m_wndEdit.m_string[ 0 ] != '/' ) ) 
					)
						string = pWndHead->m_string + " ";

					WORD wCodePage = g_codePage;
					const char* begin = m_wndEdit.m_string;
					const char* end = begin + m_wndEdit.m_string.GetLength();
					const char* iter = begin;
					while(*iter && iter < end)
					{
						if(*((BYTE*)iter) >= 0x80) 
						{
							if(wCodePage != m_wndEdit.m_string.m_awCodePage[iter-begin])
							{
								wCodePage = m_wndEdit.m_string.m_awCodePage[iter-begin];
								
								char temp[16];
								
								if(wCodePage == g_codePage)
								{
									wsprintf(temp, "#nl");
								}
								else
								{
									wsprintf(temp, "#l%04d", wCodePage);
								}
								string += temp;
							}
						}
						const char* next = CharNextEx(iter, wCodePage);
						char temp[16];
						memcpy(temp, iter, next-iter);
						temp[next-iter] = 0;
						string += temp;
						iter = next;
					}
					if( m_strHistory.size() >= MAX_HISTORY_STRING )
					{
						m_nHistoryIndex = 0;
						m_strHistory.erase( m_strHistory.begin() );
					}

					m_strHistory.push_back(string);
					int a = string.GetLength();
					if( !m_wndEdit.m_string.IsEmpty() )
						m_wndEdit.m_string.GetTextFormat(string);
						
						#ifdef __ITEM_LINK
					m_strHistory.push_back(string);
#endif
					
					g_WndMng.ParsingChat( string );
					CScanner scanner;
					scanner.SetProg( m_wndEdit.m_string.LockBuffer() );
					scanner.GetToken(); // 
					if( scanner.Token == "/" )
					{
						scanner.GetToken();
						if( scanner.Token == "w" || scanner.Token == "whisper" )
						{
							scanner.GetToken();
							m_strCharName = scanner.Token;
						}
					}
					m_wndEdit.m_string.UnlockBuffer();
					m_wndEdit.Empty();
					if( m_bChatLock == FALSE ) 
					{
						if( IsWndStyle( WBS_MODAL ) == TRUE )
						{
							DelWndStyle( WBS_MODAL );
							if( g_Neuz.pOldModalWindow )
							{
								g_Neuz.pOldModalWindow->SetFocus();
							}
						}
						else
						{
							CWndWorld* pWndWorld = ( CWndWorld* )g_WndMng.GetApplet( APP_WORLD );
							if( pWndWorld )
							{
								pWndWorld->SetFocus();
							}
							else
							{
								g_WndMng.SetFocus();
							}
						}
					}
					else
						m_wndEdit.SetFocus();
				}
			}
			else
			if( message == EN_CHANGE )
			{
				if( m_wndEdit.m_string.IsEmpty() == FALSE )
				{
					if( m_wndEdit.m_string[ 0 ] == '/' && m_wndEdit.GetOffset() == 1 && m_pWndCommand == NULL )
					{
						m_pWndCommand = new CWndCommand;
						m_pWndCommand->m_pWndEdit = this;
						m_pWndCommand->Initialize( this );
						CRect rect = m_wndEdit.GetScreenRect();
						CPoint point = rect.TopLeft();
						point.y -= m_pWndCommand->GetWndRect().Height();
						m_pWndCommand->Move( point );
					}
					else
					if( m_pWndCommand )
					{
						CString string; 
						string = m_wndEdit.m_string.Right( m_wndEdit.m_string.GetLength() - 1 );
						// 중간에 스페이스가 껴 있으면 닫아버린다.
						if( string.Find( ' ' ) == -1 )
							m_pWndCommand->SelectString( 0, string );
						else
							m_pWndCommand->Destroy();
						
						if( ::GetLanguage() == LANG_KOR )
						{
							if( m_wndEdit.m_string == "/ㅎ " )
							{
								m_wndEdit.SetString( "/g " );
							}
							else if( m_wndEdit.m_string == "/ㅔ " )
							{
								m_wndEdit.SetString( "/p " );
							}
							else if( m_wndEdit.m_string == "/ㄴ " )
							{
								m_wndEdit.SetString( "/s " );
							}
#if __VER >= 11 // __CSC_VER11_1
							else if( m_wndEdit.m_string == "/ㅈ " )
							{
								m_wndEdit.SetString( "/w " );
							}
#endif //__CSC_VER11_1
						}
					}
				}
				else
				if( m_pWndCommand )
					m_pWndCommand->Destroy();
			}
			break;
		case 10000: // 최소�* 
			break;
		case 10001: // 최대�* 
			break;
		case 10002: // 종료
			Destroy();
			break;
	}
	
	//아래 특정 버튼 누를 경우 Focus가 World로 되어있지 않아 이동키가 먹지 않기 때문에 SetFocus해줌.
	if(nID == WIDC_CHECK1 || nID == WIDC_CHECK3 || nID == WIDC_MOVELOCK)
	{
		CWndWorld* pWndWorld = (CWndWorld*)g_WndMng.GetApplet( APP_WORLD );
		if( pWndWorld ) 
			pWndWorld->SetFocus();
	}
	return CWndNeuz::OnChildNotify( message, nID, pLResult ); 
} 

BOOL CWndChat::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
{
	return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
}
void CWndChat::Parsing( CString string )
{
	/*
	MotionProp* pProp;
	for( int i = 0; i < prj.m_aMotionProp.GetSize(); i++ )
	{
		pProp = prj.GetMotionProp( i );
		if( pProp && pProp->dwRequireLv )
		{
			if( string.Find( pProp->szLink ) != -1 )
			{
			//	g_pPlayer->SendActMsg( OBJMSG_MOTION, pProp->dwID );
			}
		}
	}
	*/
}
void CWndChat::PutString( LPCTSTR lpszString, DWORD dwColor, DWORD dwPStyle )
{
	CWndText* pWndText = (CWndText*)GetDlgItem( WIDC_TEXT );
	
	if( dwColor != 0xffffff00 )
	{
		m_timerInputTimeOut.Reset();
		
		CWndText* pWndText = (CWndText*)GetDlgItem( WIDC_TEXT );	
		pWndText->m_string.SetAlpha( 255 );	
	}

	BOOL bLineEnd = FALSE;
	if( pWndText->m_wndScrollBar.GetScrollPos() == ( pWndText->m_wndScrollBar.GetMaxScrollPos() - pWndText->m_wndScrollBar.GetScrollPage() ) )
		bLineEnd = TRUE;

	pWndText->AddString( lpszString, dwColor, dwPStyle );
	pWndText->AddString( "\n", dwColor );// += '\n';
	// 글 내용이 1000줄을 넘어가면 500라인을 잘라낸다.
	if( pWndText->m_string.GetLineCount() >= 1000 )
	{
		pWndText->m_string.DeleteLine( 0, 500 );
		pWndText->UpdateScrollBar();
	}
	if( bLineEnd )
		pWndText->m_wndScrollBar.SetMaxScrollPos();
}
void CWndChat::OnDestroy()
{
	CWndText* pWndText = (CWndText*)GetDlgItem( WIDC_TEXT );
	g_WndMng.m_ChatString = pWndText->m_string;
}
void CWndChat::SetWndRect( CRect rectWnd, BOOL bOnSize )
{
#if __VER >= 8 //__Y_CHAT_SYSTEM_8
	AdjustMinRect( &rectWnd, 16 * 29, 16 * 3 );
#else // __Y_CHAT_SYSTEM_8
	AdjustMinRect( &rectWnd, 16 * 26, 16 * 3 );
#endif //__Y_CHAT_SYSTEM_8
	CRect rectOld = m_rectClient;
	m_rectWindow = rectWnd;
	m_rectClient = m_rectWindow;
	m_rectClient.DeflateRect( 4, 4, 6, 6 );
	m_rectLayout = m_rectClient;
	if( bOnSize && ( rectOld.Width() != m_rectClient.Width() || rectOld.Height() != m_rectClient.Height() ) )
		OnSize( 0, m_rectClient.Width(), m_rectClient.Height() );
	MakeVertexBuffer();
}
void CWndChat::OnSize(UINT nType, int cx, int cy)
{
//#ifdef __NEWINTERFACE
	CWndText* pWndText = (CWndText*)GetDlgItem( WIDC_TEXT );
	CWndEdit* pWndHead = (CWndEdit*)GetDlgItem( WIDC_HEAD );
	CWndEdit* pWndEdit = (CWndEdit*)GetDlgItem( WIDC_EDIT );

	CRect rectEdit;
	CRect rect = GetClientRect();
	//rect.left = 60;
	rect.top = 0;
	rect.left = 0;
	rect.right -= 0;
	rect.bottom -= 39;
	pWndText->SetWndRect( rect );
	pWndText->m_wndScrollBar.SetMaxScrollPos();
	
	rect = GetClientRect();
	rectEdit = pWndHead->GetWndRect();
	rectEdit.top = rect.bottom - 18;
	rectEdit.bottom = rect.bottom;
	rect.DeflateRect( 1, 1 );
	pWndHead->SetWndRect( rectEdit );

	rect = GetClientRect();
	rectEdit = m_wndEdit.GetWndRect();
	rectEdit.top = rect.bottom - 18;
	rectEdit.bottom = rect.bottom;
	rectEdit.right = rect.right - 20;
	rect.DeflateRect( 1, 1 );
	m_wndEdit.SetWndRect( rectEdit );

	rect = GetClientRect();
	rectEdit = m_wndMacroChat.GetWndRect();
	rectEdit.top = rect.bottom - 19;
	rectEdit.bottom = rect.bottom;
	m_wndMacroChat.SetWndRect( rectEdit );
	CWndButton* pWndRadio1 = (CWndButton*)GetDlgItem( WIDC_RADIO1 );
	CWndButton* pWndRadio2 = (CWndButton*)GetDlgItem( WIDC_RADIO2 );
	CWndButton* pWndRadio3 = (CWndButton*)GetDlgItem( WIDC_RADIO3 );
	CWndButton* pWndRadio4 = (CWndButton*)GetDlgItem( WIDC_RADIO4 );
	CWndButton* pWndRadio5 = (CWndButton*)GetDlgItem( WIDC_RADIO5 );
	CWndButton* pWndCheck  = (CWndButton*)GetDlgItem( WIDC_CHECK1 );
	CWndButton* pWndCheck2  = (CWndButton*)GetDlgItem( WIDC_MOVELOCK );
	CWndButton* pWndButton1 = (CWndButton*)GetDlgItem( WIDC_BUTTON1 );
	CWndButton* pWndButton2 = (CWndButton*)GetDlgItem( WIDC_HELP   );
	CWndButton* pWndButton3 = (CWndButton*)GetDlgItem( WIDC_CLOSE  );

#if __VER >= 8 //__Y_CHAT_SYSTEM_8
	CWndButton* pWndCheck3  = (CWndButton*)GetDlgItem( WIDC_CHECK3 );
#else //__Y_CHAT_SYSTEM_8
	CWndButton* pWndCheck3  = (CWndButton*)GetDlgItem( WIDC_CHECK3 );
	pWndCheck3->SetVisible(FALSE);
#endif //__Y_CHAT_SYSTEM_8

	rect = GetClientRect();
	rectEdit = pWndRadio1->GetWndRect();
	rectEdit.top = rect.bottom - 38;
	rectEdit.left = 0;
	pWndRadio1->Move( rectEdit.TopLeft() ); 
	rectEdit.left = 50;
	pWndRadio2->Move( rectEdit.TopLeft()  ); 
	rectEdit.left = 100;
	pWndRadio3->Move( rectEdit.TopLeft()  ); 
	rectEdit.left = 150;
	pWndRadio4->Move( rectEdit.TopLeft()  ); 
	rectEdit.left = 200;
	pWndRadio5->Move( rectEdit.TopLeft()  ); 
#if __VER >= 8 //__Y_CHAT_SYSTEM_8
	rectEdit.left = rect.right - 200;
	pWndCheck->Move( rectEdit.TopLeft()  ); 
	rectEdit.left = rect.right - 150;
	pWndButton1->Move( rectEdit.TopLeft()  ); 

	rectEdit.left = rect.right - 100;
	pWndCheck3->Move( rectEdit.TopLeft()  ); 	
#else //__Y_CHAT_SYSTEM_8
	rectEdit.left = rect.right - 150;
	pWndCheck->Move( rectEdit.TopLeft()  ); 
	rectEdit.left = rect.right - 100;
	pWndButton1->Move( rectEdit.TopLeft()  ); 
#endif //__Y_CHAT_SYSTEM_8
	rectEdit.left = rect.right - 49;

	CRect rectEdit2 = rectEdit;

	rectEdit2.top  += 1;
	pWndCheck2->Move( rectEdit2.TopLeft()  ); 
	rectEdit.left = rect.right - 32;
	rectEdit.top += 1;
	pWndButton2->Move( rectEdit.TopLeft()  ); 
	rectEdit.left = rect.right - 15;
	pWndButton3->Move( rectEdit.TopLeft()  ); 

	CWndStatic* pWndStatic = (CWndStatic*)GetDlgItem( WIDC_STATIC1 ); 
	
	if( pWndStatic )
	{
		rectEdit.top  += 20;
		rectEdit.left -= 5;
		pWndStatic->Move( rectEdit.TopLeft()  ); 
	}

	CWndNeuz::OnSize(nType,cx,cy);
}
void CWndChat::OnLButtonUp(UINT nFlags, CPoint point)
{
	if(IsWndRoot())
		return;

	//if(IsWndStyle(WBS_CAPTION) && m_bPickup)
	{//
	//	m_wndTitleBar.m_wndMinimize.SetVisible(TRUE);
		//m_wndTitleBar.m_wndMaximize.SetVisible(TRUE);
	}
	if( g_WndMng.m_pWndWorld )
	{
		CRect rect = GetWindowRect( TRUE );
		CPoint p;
		p.x = point.x + rect.left;
		p.y = point.y + rect.top;
//		g_WndMng.m_pWndWorld->m_bLButtonDown = TRUE;
		g_WndMng.m_pWndWorld->OnLButtonUp( nFlags, p );
	}
}

void CWndChat::OnLButtonDown(UINT nFlags, CPoint point)
{
	if( m_pWndCommand )
		m_pWndCommand->Destroy();

	if( g_WndMng.m_pWndWorld )
	{
		CRect rect = GetWindowRect( TRUE );
		CPoint p;
		p.x = point.x + rect.left;
		p.y = point.y + rect.top;
		g_WndMng.m_pWndWorld->m_bLButtonDown = TRUE;
		g_WndMng.m_pWndWorld->OnLButtonDown( nFlags, p );
	}
}

void CWndChat::OnRButtonDown(UINT nFlags, CPoint point)
{
	if( g_WndMng.m_pWndWorld )
	{
		CRect rect = GetWindowRect( TRUE );
		CPoint p;
		p.x = point.x + rect.left;
		p.y = point.y + rect.top;
		g_WndMng.m_pWndWorld->m_bRButtonDown = TRUE;
		g_WndMng.m_pWndWorld->OnRButtonDown( nFlags, p );
	}

	int nLineCount = m_wndText.m_string.GetLineCount();
	int nPos = m_wndText.IsWndStyle( WBS_VSCROLL ) ? m_wndText.m_wndScrollBar.GetScrollPos() : 0;
	DWORD dwMaxHeight = m_wndText.GetFontHeight();
	for( int i = nPos ; i < nLineCount ; ++i )
	{
		if( (int)( ((i-nPos) * dwMaxHeight) ) <= point.y && point.y < (int)( (dwMaxHeight * (i-nPos + 1)) ) )
		{
			CString str = m_wndText.m_string.GetLine( i );
			#ifdef __ITEM_LINK
			CString strTmp = str;
#endif
			char szFind[MAX_NAME] = {0,};
			
			BOOL bChat = FALSE;
			
			// 일반 채팅 검색
			int nFindName = str.Find( " :" );
			if( 0 < nFindName && nFindName < MAX_NAME )
			{
				int nFindSpace = str.Find( ' ' );
				if(  nFindSpace == -1 || nFindName <= nFindSpace )
				{
				#ifdef __ITEM_LINK
					int nExtent = m_wndText.m_pFont->GetTextExtent(str.Mid(0,nFindName)).cx;
					if(point.x < nExtent)
					{
#endif
					strncpy( szFind, str, nFindName );
					if( strcmp( szFind, g_pPlayer->GetName() ) != 0 )
						bChat = TRUE;
						#ifdef __ITEM_LINK
					}
#endif
				}
			}
			
			// 귓속말 검색
			if( bChat == FALSE )
			{
				int nFindName1 = str.Find( "<- [" );
				int nFindName2 = str.Find( "]" );
				if( 0 == nFindName1 )
				{
					str.Replace( "<- [", "" );
				}					
				else
				{
					nFindName1 = str.Find( "-> [" );
					str.Replace( "-> [", "" );
				}
				
				if( 0 == nFindName1 && 0 < nFindName2 && nFindName2 - nFindName1 < MAX_NAME + 4 )
				{
					nFindName2 = str.Find( "]" );
					strncpy( szFind, str, nFindName2 );
					int nFindSpace = strspn( " ", szFind );
					#ifdef __ITEM_LINK
					int nFindName3 = strTmp.Find("]");
					int nExtent = m_wndText.m_pFont->GetTextExtent(strTmp.Mid(0,nFindName3)).cx;
					if(point.x < nExtent)
					{
#endif
					if(  nFindSpace < 1 && strcmp( szFind, g_pPlayer->GetName() ) != 0 )
						bChat = TRUE;
						#ifdef __ITEM_LINK
					}
#endif
				}
			}
			
			// 외치기 검색( 알림은 빠짐 )
			if( bChat == FALSE )
			{
				int nFindName1 = str.Find( "[" );
				int nFindName2 = str.Find( "]" );
				if( 0 == nFindName1 && 0 < nFindName2 && nFindName2 - nFindName1 < MAX_NAME + 1 )
				{
					str.Replace( "[", "" );
					nFindName2 = str.Find( "]" );
					strncpy( szFind, str, nFindName2 );
					int nFindSpace = strspn( " ", szFind );
					#ifdef __ITEM_LINK
					int nFindName3 = strTmp.Find("]");
					int nExtent = m_wndText.m_pFont->GetTextExtent(strTmp.Mid(0,nFindName3)).cx;
					if(point.x < nExtent)
					{
#endif
					if(  nFindSpace < 1 && strcmp( szFind, g_pPlayer->GetName() ) != 0 )
						bChat = TRUE;
						#ifdef __ITEM_LINK
					}
#endif
					
					CString strSystem = prj.GetText(TID_ADMIN_ANNOUNCE);
					strSystem.Replace( "[", "" );
					int nFindSystem = strSystem.Find("]");
					if( 0 < nFindSystem )
					{
						char szFindSystem[MAX_NAME] = {0,};
						strncpy( szFindSystem, strSystem, nFindSystem );
						if( strcmp( szFind, szFindSystem ) == 0 )
							bChat = FALSE;
					}
				}
			}
			#ifdef __ITEM_LINK
			{
				if(!bChat)
				{
					int nFindBeg = strTmp.Find("<");
					int nFindEnd = strTmp.Find(">");
					while(nFindBeg != -1 || nFindEnd != -1)
					{
						int nExtentEnd;
						int nExtentBeg;
						if(nFindBeg != -1)// check line changed
							nExtentBeg = m_wndText.m_pFont->GetTextExtent(strTmp.Mid(0,nFindBeg)).cx;
						else
							nExtentBeg = 0;

						if(nFindEnd != -1) // check line changed
							nExtentEnd = m_wndText.m_pFont->GetTextExtent(strTmp.Mid(nFindBeg,nFindEnd-nFindBeg)).cx+nExtentBeg;
						else{
							nExtentEnd = m_wndText.m_pFont->GetTextExtent(strTmp.Mid(nFindBeg,str.GetLength()-nFindBeg)).cx+nExtentBeg;
						}
						if(point.x > nExtentBeg && point.x < nExtentEnd) // clicked on link
						{
							DWORD dwLinkID = m_wndText.m_string.m_adwLinkedID.GetAt(nFindBeg+m_wndText.m_string.GetLineOffset(i));
							if(dwLinkID) //check if is linked item or normal string
								g_DPlay.SendGetLinkedItem(dwLinkID);
							Error("%d",dwLinkID);
						}
						nFindBeg = strTmp.Find("<",nFindEnd);
						nFindEnd = strTmp.Find(">",nFindEnd+1);
					}
				}
			}
#endif
			
			if( bChat )
			{
				CString strWhisper;
				strWhisper.Format( "/whisper %s ", szFind );
				m_wndEdit.SetString( strWhisper );
				m_wndEdit.SetFocus();
			}
			break;
		}
	}
}	
void CWndChat::OnRButtonUp(UINT nFlags, CPoint point)
{
	if( g_WndMng.m_pWndWorld )
	{
		CRect rect = GetWindowRect( TRUE );
		CPoint p;
		p.x = point.x + rect.left;
		p.y = point.y + rect.top;
//		g_WndMng.m_pWndWorld->m_bRButtonDown = TRUE;
		g_WndMng.m_pWndWorld->OnRButtonUp( nFlags, p );
	}
}

void CWndChat::OnMouseMove(UINT nFlags, CPoint point)
{
	if( g_WndMng.m_pWndWorld )
	{
		CRect rect = GetWindowRect( TRUE );
		CPoint p;
		p.x = point.x + rect.left;
		p.y = point.y + rect.top;
//		g_WndMng.m_pWndWorld->m_bRButtonDown = TRUE;
		g_WndMng.m_pWndWorld->OnMouseMove( nFlags, p );
	}
}



BOOL CWndChat::OnEraseBkgnd(C2DRender* p2DRender)
{
	return TRUE;
}
//void CWndNeuz::PaintTexture( LPBYTE pDest, LPBYTE pSrc, CPoint pt,
// CSize sizeTexture, CSize sizeSurface )

void CWndChat::AdditionalSkinTexture( LPWORD pDest, CSize size, D3DFORMAT d3dFormat )
{
	CWndNeuz::AdditionalSkinTexture( pDest, size, d3dFormat );

	CRect rect = GetWindowRect();
	CPoint point =  CPoint( 0, rect.Height() - m_wndChatEdit[0].size.cy );
	PaintTexture( pDest, &m_wndChatEdit[0], point, size );
	int nWidth = ( rect.Width() - m_wndChatEdit[0].size.cx ) / m_wndChatEdit[1].size.cx;
	point.x += m_wndChatEdit[0].size.cx;
	for( int i = 0; i < nWidth; i++ )
	{
		if( i == nWidth - 2 )
			PaintTexture( pDest, &m_wndChatEdit[2], point, size );
		else
		if( i < nWidth - 2 )
			PaintTexture( pDest, &m_wndChatEdit[1], point, size );
		point.x += m_wndChatEdit[1].size.cx;
	}
}


#if __VER >= 8 //__Y_CHAT_SYSTEM_8

CWndChatLog::CWndChatLog()
{
}
CWndChatLog::~CWndChatLog()
{
}
/*
void CWndChatLog::OnDraw(C2DRender* p2DRender)
{
}
*/
void CWndChatLog::OnInitialUpdate()
{
	CWndNeuz::OnInitialUpdate();

	LPWNDCTRL lpWndText = GetWndCtrl( WIDC_CUSTOM1 );
	m_wndText.Create( WBS_NOFRAME | WBS_NODRAWFRAME | WBS_VSCROLL, lpWndText->rect, this, WIDC_TEXT );
	CWndText* pWndText = (CWndText*)GetDlgItem( WIDC_TEXT );

	if( g_pPlayer->IsAuthHigher( AUTH_GAMEMASTER ) )
	{
		pWndText->m_bEnableClipboard = TRUE;
	}

	pWndText->m_nLineSpace = 2;

	CRect rectRoot = m_pWndRoot->GetLayoutRect();
	CRect rect = GetWindowRect();
	int nWidth  = rect.Width(); 
	int nHeight = rect.Height(); 
	int x = 0;//rectRoot.left + (rectRoot.Width()  / 2) - (nWidth  / 2);
	int y = rectRoot.bottom - nHeight;	
	CPoint point( x, y );
	Move( point );
	
	m_wndMenuPlace.CreateMenu( this );	
	m_wndMenuPlace.AppendMenu( 0, 0 , prj.GetText(TID_GAME_GUIDE_HIDE) );
}

BOOL CWndChatLog::Process ()
{	
	return TRUE;
}
void CWndChatLog::OnSetFocus(CWndBase* pOldWnd)
{
}
void CWndChatLog::OnKillFocus(CWndBase* pNewWnd)
{
}
BOOL CWndChatLog::Initialize(CWndBase* pWndParent,DWORD dwWndId)
{
	CRect rectWindow = m_pWndRoot->GetWindowRect();
	CRect rect( 154, rectWindow.Height() - 100, 154 + rectWindow.Width() - 300, rectWindow.Height() );
	SetTitle( GETTEXT( TID_APP_COMMUNICATION_CHAT ) );
	return CWndNeuz::InitDialog( g_Neuz.GetSafeHwnd(), dwWndId, WBS_THICKFRAME, CPoint( 792, 130 ), pWndParent );
//	return CWndNeuz::InitDialog( g_Neuz.GetSafeHwnd(), dwWndId, 0, CPoint( 792, 130 ), pWndParent );
}

void CWndChatLog::OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags)
{
}
void CWndChatLog::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
}
void CWndChatLog::OnDestroyChildWnd( CWndBase* pWndChild )
{
}
BOOL CWndChatLog::OnChildNotify( UINT message, UINT nID, LRESULT* pLResult ) 
{ 
	CWndBase* pWndBase = (CWndBase*) pLResult;
	
	if( pWndBase->m_pParentWnd == &m_wndMenuPlace )
	{
		SetFocus();
		switch( nID )
		{
		case 0:
			{
				CWndChat* pWndChat = (CWndChat*)g_WndMng.GetWndBase( APP_COMMUNICATION_CHAT );

				if( pWndChat )
				{
					CWndButton* pWndCheck = (CWndButton*)pWndChat->GetDlgItem( WIDC_CHECK3 );

					if( pWndCheck )
						pWndCheck->SetCheck(FALSE);
				}

				SetVisible(FALSE);
			}
			break;
		}
	}

	return CWndNeuz::OnChildNotify( message, nID, pLResult ); 
} 

BOOL CWndChatLog::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
{
	return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
}
void CWndChatLog::PutString( LPCTSTR lpszString, DWORD dwColor, DWORD dwPStyle )
{
	CWndText* pWndText = (CWndText*)GetDlgItem( WIDC_TEXT );
	
	BOOL bLineEnd = FALSE;
	if( pWndText->m_wndScrollBar.GetScrollPos() == ( pWndText->m_wndScrollBar.GetMaxScrollPos() - pWndText->m_wndScrollBar.GetScrollPage() ) )
		bLineEnd = TRUE;

	pWndText->AddString( lpszString, dwColor, dwPStyle );
	pWndText->AddString( "\n", dwColor );// += '\n';
	// 글 내용이 1000줄을 넘어가면 500라인을 잘라낸다.
	if( pWndText->m_string.GetLineCount() >= 1000 )
	{
		pWndText->m_string.DeleteLine( 0, 500 );
		pWndText->UpdateScrollBar();
	}
	if( bLineEnd )
		pWndText->m_wndScrollBar.SetMaxScrollPos();
}
void CWndChatLog::OnDestroy()
{
}
void CWndChatLog::OnSize(UINT nType, int cx, int cy)
{
	CRect rectEdit;
	CRect rect = GetClientRect();
	//rect.left = 60;
	rect.top = 0;
	rect.left = 0;
	rect.right -= 0;
	rect.bottom -= 0;

	m_wndText.SetWndRect( rect );
	m_wndText.m_wndScrollBar.SetMaxScrollPos();
	
	CWndNeuz::OnSize(nType,cx,cy);
}
void CWndChatLog::OnLButtonUp(UINT nFlags, CPoint point)
{
}
void CWndChatLog::OnLButtonDown(UINT nFlags, CPoint point)
{
	if( g_WndMng.m_pWndWorld )
	{
		CRect rect = GetWindowRect( TRUE );
		CPoint p;
		p.x = point.x + rect.left;
		p.y = point.y + rect.top;
		g_WndMng.m_pWndWorld->m_bLButtonDown = TRUE;
		g_WndMng.m_pWndWorld->OnLButtonDown( nFlags, p );
	}
}

void CWndChatLog::OnRButtonDown(UINT nFlags, CPoint point)
{
	CRect rect = GetWindowRect( TRUE );
	CRect menurect = m_wndMenuPlace.GetWindowRect();

	rect.top  += point.y;
	rect.left += point.x;
	
	m_wndMenuPlace.Move( CPoint( rect.left, rect.top ) );
	
	m_wndMenuPlace.SetVisible( !m_wndMenuPlace.IsVisible() );
	m_wndMenuPlace.SetFocus();	
}	
void CWndChatLog::OnRButtonUp(UINT nFlags, CPoint point)
{
}
void CWndChatLog::OnMouseMove(UINT nFlags, CPoint point)
{
}
/*
BOOL CWndChatLog::OnEraseBkgnd(C2DRender* p2DRender)
{
	return TRUE;
}
*/

void CWndChatLog::AdditionalSkinTexture( LPWORD pDest, CSize size, D3DFORMAT d3dFormat )
{
	CWndNeuz::AdditionalSkinTexture( pDest, size, d3dFormat );
}

void CWndChatLog::SetWndRect( CRect rectWnd, BOOL bOnSize )
{
	AdjustMinRect( &rectWnd, 16 * 17, 16 * 3 );
	CRect rectOld = m_rectClient;
	m_rectWindow = rectWnd;
	m_rectClient = m_rectWindow;
	m_rectClient.DeflateRect( 4, 4, 6, 6 );
	m_rectLayout = m_rectClient;
	if( bOnSize && ( rectOld.Width() != m_rectClient.Width() || rectOld.Height() != m_rectClient.Height() ) )
		OnSize( 0, m_rectClient.Width(), m_rectClient.Height() );
	MakeVertexBuffer();
}

#endif //__Y_CHAT_SYSTEM_8

#ifdef __ITEM_LINK
CWndLinkedItem::CWndLinkedItem()
{
	m_pItem = NULL;

	CString strPath;
	if(::GetLanguage() == LANG_FRE)
		strPath = MakePath( "Theme\\", ::GetLanguage(), "Icon_Ultimate.dds");
	else
		strPath = MakePath( DIR_ICON, "Icon_Ultimate.dds");

	m_pUltimateTexture = CWndBase::m_textureMng.AddTexture( g_Neuz.m_pd3dDevice, strPath, 0xffff00ff );

	strPath = MakePath( DIR_ICON, "icon_Baruna01.dds" );
	m_pBarunaTexture = CWndBase::m_textureMng.AddTexture( g_Neuz.m_pd3dDevice, strPath, 0xffff00ff );

	m_pJewelBgTexture = CWndBase::m_textureMng.AddTexture( g_Neuz.m_pd3dDevice, MakePath( DIR_THEME, "WndChgElemItem.bmp"), 0xffff00ff );
}
CWndLinkedItem::~CWndLinkedItem()
{
	SAFE_DELETE(m_pItem);
}

BOOL CWndLinkedItem::Initialize(CWndBase *pWndParent,DWORD dwStyle)
{
	return CWndNeuz::InitDialog(g_Neuz.GetSafeHwnd(),APP_TOOLTIP_LINKEDITEM,dwStyle,CPoint(0,0),pWndParent);
}

void CWndLinkedItem::OnInitialUpdate()
{
	CWndNeuz::OnInitialUpdate();
	MoveParentCenter();
	rectItem = GetWndCtrl(WIDC_CUSTOM1)->rect;
}

void CWndLinkedItem::OnMouseWndSurface(CPoint point)
{
	/*
	if(m_pItem && rectItem.PtInRect(point))
	{
		CRect hitrect = rectItem;
		CPoint point2 = point;
		ClientToScreen(&point2);
		ClientToScreen(&hitrect);
		g_WndMng.PutToolTip_Item(m_pItem,point2,&hitrect);
	}
*/
}
void CWndLinkedItem::OnDraw(C2DRender *p2DRender)
{
	if(m_pItem)
	{
		CMover* pMover = g_pPlayer;
		m_pItem->GetTexture()->Render(p2DRender,rectItem.TopLeft(),255);
		CEditString strEdit;
		ItemProp* pItemProp = m_pItem->GetProp();
		strEdit.SetParsingString("");
		strEdit.Init( CWndBase::m_Theme.m_pFontText, &CRect( 0, 0, 240, 0 ) );
		DWORD dwColorBuf = g_WndMng.PutItemName(m_pItem, &strEdit);
		g_WndMng.PutItemAbilityPiercing( m_pItem, &strEdit, dwColorBuf );
		
		
		if( m_pItem->GetProp() && m_pItem->GetProp()->dwFlag & IP_FLAG_EQUIP_BIND )
		{
			strEdit.AddString("\r\n");
			if( m_pItem->IsFlag( CItemElem::binds ) )
				strEdit.AddString( GETTEXT( TID_TOOLTIP_EQUIPBIND_AFTER ), GETTEXTCOLOR( TID_TOOLTIP_EQUIPBIND_AFTER ) );
			else
				strEdit.AddString( GETTEXT( TID_TOOLTIP_EQUIPBIND_BEFORE ), GETTEXTCOLOR( TID_TOOLTIP_EQUIPBIND_BEFORE ) );
		}
		g_WndMng.PutWeapon( m_pItem, &strEdit );
	

     
		CString strExp;
#ifdef __MODEL_CHANGE
		g_WndMng.PutSex( pMover, m_pItem, &strEdit );

		
		

		switch( pItemProp->dwItemKind2 )
		{
			case IK2_WEAPON_DIRECT:
			case IK2_WEAPON_MAGIC:
			case IK2_ARMORETC:
			case IK2_CLOTHETC:
			case IK2_ARMOR:
			case IK2_CLOTH:
			case IK2_BLINKWING:
			{
				g_WndMng.PutItemMinMax( pMover, m_pItem, &strEdit );
				g_WndMng.PutItemSpeed( m_pItem, &strEdit );
				if( pItemProp->dwItemKind3 == IK3_ELECARD )
					g_WndMng.PutItemResist( m_pItem, &strEdit );
				else if( m_pItem->m_nResistAbilityOption && ( pItemProp->dwItemKind1 == IK1_WEAPON  || pItemProp->dwItemKind1 == IK1_ARMOR ) )
					g_WndMng.PutItemResist( m_pItem, &strEdit );
	
				g_WndMng.PutBaseResist( m_pItem, &strEdit );	// 속성 저항력
				
				g_WndMng.PutBaseItemOpt( m_pItem, &strEdit );

				g_WndMng.PutJob( pMover, m_pItem, &strEdit );
				g_WndMng.PutLevel( pMover, m_pItem, &strEdit );
				g_WndMng.PutCommand( m_pItem, &strEdit );
				g_WndMng.PutItemGold( pMover, m_pItem, &strEdit, 0 );	// 가격
				g_WndMng.PutSetItemOpt( pMover, m_pItem, &strEdit );
				g_WndMng.PutPiercingOpt( m_pItem, &strEdit );
				g_WndMng.PutRandomOpt( m_pItem, &strEdit );			
				g_WndMng.PutEnchantOpt( pMover, m_pItem, &strEdit, 0 );
				break;
			}
		case IK2_REFRESHER:
		case IK2_FOOD:
		case IK2_POTION:
			{
				g_WndMng.PutMedicine( m_pItem, m_pItem->GetProp()->dwDestParam1,  pItemProp->nAdjParamVal1, &strEdit );
				g_WndMng.PutMedicine( m_pItem, m_pItem->GetProp()->dwDestParam2,  pItemProp->nAdjParamVal2, &strEdit );
				break;
			}
		case IK2_JEWELRY:
			{
				g_WndMng.PutBaseItemOpt( m_pItem, &strEdit );
				break;
			}
		case IK2_SYSTEM:
			{
				if( pItemProp->dwItemKind3 == IK3_VIS )
				{
					g_WndMng.PutNeededVis( m_pItem, &strEdit );
					g_WndMng.PutBaseItemOpt( m_pItem, &strEdit );
				}
	
				if( m_pItem->m_dwItemId == II_SYS_SYS_SCR_SEALCHARACTER )
				{
					g_WndMng.PutSealChar( m_pItem, &strEdit );
				}
				break;
			}

			case IK2_GMTEXT:
			{
				if( pItemProp->dwItemKind3 == IK3_TEXT_DISGUISE )
				{
					g_WndMng.PutDestParam( pItemProp->dwDestParam[0], pItemProp->dwDestParam[1],
					pItemProp->nAdjParamVal[0], pItemProp->nAdjParamVal[1], strEdit );

					if( pItemProp->dwActiveSkill != NULL_ID )
					{
						ItemProp *pSkillProp;
						AddSkillProp* pAddSkillProp;
						pMover->GetSkillProp( &pSkillProp, &pAddSkillProp, pItemProp->dwActiveSkill, 1, "CWndMgr::PutToolTip_Item" );
					
						if( pAddSkillProp )
						{
							g_WndMng.PutDestParam( pAddSkillProp->dwDestParam[0], pAddSkillProp->dwDestParam[1],
								pAddSkillProp->nAdjParamVal[0], pAddSkillProp->nAdjParamVal[1], strEdit );
						}
					}
				}			
			}
			break;
		}
		default:
		{
			break;
		}
	}

	if( m_pItem->IsEatPet() )
	{
		if( pItemProp->dwActiveSkill != NULL_ID )
		{
			ItemProp *pSkillProp;
			AddSkillProp* pAddSkillProp;
			pMover->GetSkillProp( &pSkillProp, &pAddSkillProp, pItemProp->dwActiveSkill, 1, "CWndMgr::PutToolTip_Item" );
			
			if( pAddSkillProp )
			{
				g_WndMng.PutDestParam( pAddSkillProp->dwDestParam[0], pAddSkillProp->dwDestParam[1],
					pAddSkillProp->nAdjParamVal[0], pAddSkillProp->nAdjParamVal[1], strEdit );
			}
		}
	}
       
	if( m_pItem->IsVisPet( ) )
		g_WndMng.PutVisPetInfo( m_pItem, &strEdit );

	g_WndMng.PutCoolTime( pMover, m_pItem, &strEdit );			// 쿨타임
	g_WndMng.PutEndurance( m_pItem, &strEdit, 0 );			// 내구력
	g_WndMng.PutKeepTime( m_pItem, &strEdit );					// 사용할수 있는 시간

	if( pItemProp->dwItemKind3 == IK3_EGG && m_pItem->m_pPet )//&& pItemElem->m_pPet->GetLevel() != PL_EGG )
		g_WndMng.PutPetInfo( m_pItem, &strEdit );
	if( pItemProp->dwID == II_SYS_SYS_SCR_PET_FEED_POCKET ) //먹이 주머니 툴팁
		g_WndMng.PutPetFeedPocket( m_pItem, &strEdit );

	//g_WndMng.PutPiercingOpt( m_pItem, &strEdit );

	g_WndMng.PutAwakeningBlessing( m_pItem, &strEdit );

	if( (pItemProp->dwItemKind2 == IK2_WEAPON_DIRECT || pItemProp->dwItemKind2 == IK2_WEAPON_MAGIC) && m_pItem->GetProp()->dwReferStat1 == WEAPON_ULTIMATE )
		g_WndMng.PutAddedOpt( m_pItem, &strEdit );

	if( (pItemProp->dwItemKind2 == IK2_WEAPON_DIRECT || pItemProp->dwItemKind2 == IK2_WEAPON_MAGIC) && pItemProp->IsUltimate() )
		m_pUltimateTexture->Render( p2DRender, CPoint( 10, 55) );
//	else if( (pItemProp->dwItemKind2 == IK2_WEAPON_DIRECT || pItemProp->dwItemKind2 == IK2_WEAPON_MAGIC) && pItemProp->IsBaruna() )
//		m_pBarunaTexture->Render( p2DRender, CPoint( 10, 55) );
	m_p2DRender->TextOut_EditString(rectItem.left - 80, rectItem.bottom + 15, strEdit);
	this->SetWndSize(90 + p2DRender->m_pFont->GetTextExtent(strEdit).cx, 100 + p2DRender->m_pFont->GetTextExtent(strEdit).cy);
	}
}

void CWndLinkedItem::SetItem(CItemElem *pItem)
{
	if( pItem && pItem->GetProp() )
	this->m_pItem = pItem;
}
#endif //__MODEL_CHANGE
Your's too.

PHP Code:
void CWndLinkedItem::OnDraw(C2DRender *p2DRender)
{
    if(
m_pItem)
    {
        
CMover* pMover = g_pPlayer;
        
m_pItem->GetTexture()->Render(p2DRender,rectItem.TopLeft(),255);
        
CEditString strEdit;
        
ItemProp* pItemProp = m_pItem->GetProp();
        
strEdit.SetParsingString("");
        
strEdit.Init( CWndBase::m_Theme.m_pFontText, &CRect( 0, 0, 240, 0 ) );
        
DWORD dwColorBuf = g_WndMng.PutItemName(m_pItem, &strEdit);
        
g_WndMng.PutItemAbilityPiercing( m_pItem, &strEdit, dwColorBuf );
        
        
        if( 
m_pItem->GetProp() && m_pItem->GetProp()->dwFlag & IP_FLAG_EQUIP_BIND )
        {
            
strEdit.AddString("\r\n");
            if( 
m_pItem->IsFlag( CItemElem::binds ) )
                
strEdit.AddString( GETTEXT( TID_TOOLTIP_EQUIPBIND_AFTER ), GETTEXTCOLOR( TID_TOOLTIP_EQUIPBIND_AFTER ) );
            else
                
strEdit.AddString( GETTEXT( TID_TOOLTIP_EQUIPBIND_BEFORE ), GETTEXTCOLOR( TID_TOOLTIP_EQUIPBIND_BEFORE ) );
        }
        
g_WndMng.PutWeapon( m_pItem, &strEdit );
         
        
CString strExp;
        
#ifdef __MODEL_CHANGE
        
g_WndMng.PutSex( pMover, m_pItem, &strEdit );
#endif //__MODEL_CHANGE

        
switch( pItemProp->dwItemKind2 )
        {
            case 
IK2_WEAPON_DIRECT:
            case 
IK2_WEAPON_MAGIC:
            case 
IK2_ARMORETC:
            case 
IK2_CLOTHETC:
            case 
IK2_ARMOR:
            case 
IK2_CLOTH:
            case 
IK2_BLINKWING:
            {
                
g_WndMng.PutItemMinMax( pMover, m_pItem, &strEdit );
                
g_WndMng.PutItemSpeed( m_pItem, &strEdit );
                if( 
pItemProp->dwItemKind3 == IK3_ELECARD )
                    
g_WndMng.PutItemResist( m_pItem, &strEdit );
                else if( 
m_pItem->m_nResistAbilityOption && ( pItemProp->dwItemKind1 == IK1_WEAPON  || pItemProp->dwItemKind1 == IK1_ARMOR ) )
                    
g_WndMng.PutItemResist( m_pItem, &strEdit );
    
                
g_WndMng.PutBaseResist( m_pItem, &strEdit );    // 속성 저항력
                
                
g_WndMng.PutBaseItemOpt( m_pItem, &strEdit );

                
g_WndMng.PutJob( pMover, m_pItem, &strEdit );
                
g_WndMng.PutLevel( pMover, m_pItem, &strEdit );
                
g_WndMng.PutCommand( m_pItem, &strEdit );
                
g_WndMng.PutItemGold( pMover, m_pItem, &strEdit, 0 );    // 가격
                
g_WndMng.PutSetItemOpt( pMover, m_pItem, &strEdit );
                
g_WndMng.PutPiercingOpt( m_pItem, &strEdit );
                
g_WndMng.PutRandomOpt( m_pItem, &strEdit );            
                
g_WndMng.PutEnchantOpt( pMover, m_pItem, &strEdit, 0 );
                break;
            }
        case 
IK2_REFRESHER:
        case 
IK2_FOOD:
        case 
IK2_POTION:
            {
                
g_WndMng.PutMedicine( m_pItem, m_pItem->GetProp()->dwDestParam1,  pItemProp->nAdjParamVal1, &strEdit );
                
g_WndMng.PutMedicine( m_pItem, m_pItem->GetProp()->dwDestParam2,  pItemProp->nAdjParamVal2, &strEdit );
                break;
            }
        case 
IK2_JEWELRY:
            {
                
g_WndMng.PutBaseItemOpt( m_pItem, &strEdit );
                break;
            }
        case 
IK2_SYSTEM:
            {
                if( 
pItemProp->dwItemKind3 == IK3_VIS )
                {
                    
g_WndMng.PutNeededVis( m_pItem, &strEdit );
                    
g_WndMng.PutBaseItemOpt( m_pItem, &strEdit );
                }
    
                if( 
m_pItem->m_dwItemId == II_SYS_SYS_SCR_SEALCHARACTER )
                {
                    
g_WndMng.PutSealChar( m_pItem, &strEdit );
                }
                break;
            }

            case 
IK2_GMTEXT:
            {
                if( 
pItemProp->dwItemKind3 == IK3_TEXT_DISGUISE )
                {
                    
g_WndMng.PutDestParam( pItemProp->dwDestParam[0], pItemProp->dwDestParam[1],
                    
pItemProp->nAdjParamVal[0], pItemProp->nAdjParamVal[1], strEdit );

                    if( 
pItemProp->dwActiveSkill != NULL_ID )
                    {
                        
ItemProp *pSkillProp;
                        
AddSkillProp* pAddSkillProp;
                        
pMover->GetSkillProp( &pSkillProp, &pAddSkillProp, pItemProp->dwActiveSkill, 1, "CWndMgr::PutToolTip_Item" );
                    
                        if( 
pAddSkillProp )
                        {
                            
g_WndMng.PutDestParam( pAddSkillProp->dwDestParam[0], pAddSkillProp->dwDestParam[1],
                                
pAddSkillProp->nAdjParamVal[0], pAddSkillProp->nAdjParamVal[1], strEdit );
                        }
                    }
                }            
            }
            break;
        }
        default:
        {
            break;
        }
    }

    if( 
m_pItem->IsEatPet() )
    {
        if( 
pItemProp->dwActiveSkill != NULL_ID )
        {
            
ItemProp *pSkillProp;
            
AddSkillProp* pAddSkillProp;
            
pMover->GetSkillProp( &pSkillProp, &pAddSkillProp, pItemProp->dwActiveSkill, 1, "CWndMgr::PutToolTip_Item" );
            
            if( 
pAddSkillProp )
            {
                
g_WndMng.PutDestParam( pAddSkillProp->dwDestParam[0], pAddSkillProp->dwDestParam[1],
                    
pAddSkillProp->nAdjParamVal[0], pAddSkillProp->nAdjParamVal[1], strEdit );
            }
        }
    }
       
    if( 
m_pItem->IsVisPet( ) )
        
g_WndMng.PutVisPetInfo( m_pItem, &strEdit );

    
g_WndMng.PutCoolTime( pMover, m_pItem, &strEdit );            // 쿨타임
    
g_WndMng.PutEndurance( m_pItem, &strEdit, 0 );            // 내구력
    
g_WndMng.PutKeepTime( m_pItem, &strEdit );                    // 사용할수 있는 시간

    
if( pItemProp->dwItemKind3 == IK3_EGG && m_pItem->m_pPet )//&& pItemElem->m_pPet->GetLevel() != PL_EGG )
        
g_WndMng.PutPetInfo( m_pItem, &strEdit );
    if( 
pItemProp->dwID == II_SYS_SYS_SCR_PET_FEED_POCKET ) //먹이 주머니 툴팁
        
g_WndMng.PutPetFeedPocket( m_pItem, &strEdit );

    
//g_WndMng.PutPiercingOpt( m_pItem, &strEdit );

    
g_WndMng.PutAwakeningBlessing( m_pItem, &strEdit );

    if( (
pItemProp->dwItemKind2 == IK2_WEAPON_DIRECT || pItemProp->dwItemKind2 == IK2_WEAPON_MAGIC) && m_pItem->GetProp()->dwReferStat1 == WEAPON_ULTIMATE )
        
g_WndMng.PutAddedOpt( m_pItem, &strEdit );

    if( (
pItemProp->dwItemKind2 == IK2_WEAPON_DIRECT || pItemProp->dwItemKind2 == IK2_WEAPON_MAGIC) && pItemProp->IsUltimate() )
        
m_pUltimateTexture->Render( p2DRender, CPoint( 10, 55) );
//    else if( (pItemProp->dwItemKind2 == IK2_WEAPON_DIRECT || pItemProp->dwItemKind2 == IK2_WEAPON_MAGIC) && pItemProp->IsBaruna() )
//        m_pBarunaTexture->Render( p2DRender, CPoint( 10, 55) );
    
m_p2DRender->TextOut_EditString(rectItem.left - 80, rectItem.bottom + 15, strEdit);
    
this->SetWndSize(90 + p2DRender->m_pFont->GetTextExtent(strEdit).cx, 100 + p2DRender->m_pFont->GetTextExtent(strEdit).cy);
    }
}

void CWndLinkedItem::SetItem(CItemElem *pItem)
{
    if( 
pItem && pItem->GetProp() )
    
this->m_pItem = pItem;
} 
max982 is offline  
Old   #6
 
elite*gold: 0
Join Date: Aug 2014
Posts: 113
Received Thanks: 36
Quote:
Originally Posted by max982 View Post
Your's too.

PHP Code:
void CWndLinkedItem::OnDraw(C2DRender *p2DRender)
{
    if(
m_pItem)
    {
        
CMover* pMover = g_pPlayer;
        
m_pItem->GetTexture()->Render(p2DRender,rectItem.TopLeft(),255);
        
CEditString strEdit;
        
ItemProp* pItemProp = m_pItem->GetProp();
        
strEdit.SetParsingString("");
        
strEdit.Init( CWndBase::m_Theme.m_pFontText, &CRect( 0, 0, 240, 0 ) );
        
DWORD dwColorBuf = g_WndMng.PutItemName(m_pItem, &strEdit);
        
g_WndMng.PutItemAbilityPiercing( m_pItem, &strEdit, dwColorBuf );
        
        
        if( 
m_pItem->GetProp() && m_pItem->GetProp()->dwFlag & IP_FLAG_EQUIP_BIND )
        {
            
strEdit.AddString("\r\n");
            if( 
m_pItem->IsFlag( CItemElem::binds ) )
                
strEdit.AddString( GETTEXT( TID_TOOLTIP_EQUIPBIND_AFTER ), GETTEXTCOLOR( TID_TOOLTIP_EQUIPBIND_AFTER ) );
            else
                
strEdit.AddString( GETTEXT( TID_TOOLTIP_EQUIPBIND_BEFORE ), GETTEXTCOLOR( TID_TOOLTIP_EQUIPBIND_BEFORE ) );
        }
        
g_WndMng.PutWeapon( m_pItem, &strEdit );
         
        
CString strExp;
        
#ifdef __MODEL_CHANGE
        
g_WndMng.PutSex( pMover, m_pItem, &strEdit );
#endif //__MODEL_CHANGE

        
switch( pItemProp->dwItemKind2 )
        {
            case 
IK2_WEAPON_DIRECT:
            case 
IK2_WEAPON_MAGIC:
            case 
IK2_ARMORETC:
            case 
IK2_CLOTHETC:
            case 
IK2_ARMOR:
            case 
IK2_CLOTH:
            case 
IK2_BLINKWING:
            {
                
g_WndMng.PutItemMinMax( pMover, m_pItem, &strEdit );
                
g_WndMng.PutItemSpeed( m_pItem, &strEdit );
                if( 
pItemProp->dwItemKind3 == IK3_ELECARD )
                    
g_WndMng.PutItemResist( m_pItem, &strEdit );
                else if( 
m_pItem->m_nResistAbilityOption && ( pItemProp->dwItemKind1 == IK1_WEAPON  || pItemProp->dwItemKind1 == IK1_ARMOR ) )
                    
g_WndMng.PutItemResist( m_pItem, &strEdit );
    
                
g_WndMng.PutBaseResist( m_pItem, &strEdit );    // 속성 저항력
                
                
g_WndMng.PutBaseItemOpt( m_pItem, &strEdit );

                
g_WndMng.PutJob( pMover, m_pItem, &strEdit );
                
g_WndMng.PutLevel( pMover, m_pItem, &strEdit );
                
g_WndMng.PutCommand( m_pItem, &strEdit );
                
g_WndMng.PutItemGold( pMover, m_pItem, &strEdit, 0 );    // 가격
                
g_WndMng.PutSetItemOpt( pMover, m_pItem, &strEdit );
                
g_WndMng.PutPiercingOpt( m_pItem, &strEdit );
                
g_WndMng.PutRandomOpt( m_pItem, &strEdit );            
                
g_WndMng.PutEnchantOpt( pMover, m_pItem, &strEdit, 0 );
                break;
            }
        case 
IK2_REFRESHER:
        case 
IK2_FOOD:
        case 
IK2_POTION:
            {
                
g_WndMng.PutMedicine( m_pItem, m_pItem->GetProp()->dwDestParam1,  pItemProp->nAdjParamVal1, &strEdit );
                
g_WndMng.PutMedicine( m_pItem, m_pItem->GetProp()->dwDestParam2,  pItemProp->nAdjParamVal2, &strEdit );
                break;
            }
        case 
IK2_JEWELRY:
            {
                
g_WndMng.PutBaseItemOpt( m_pItem, &strEdit );
                break;
            }
        case 
IK2_SYSTEM:
            {
                if( 
pItemProp->dwItemKind3 == IK3_VIS )
                {
                    
g_WndMng.PutNeededVis( m_pItem, &strEdit );
                    
g_WndMng.PutBaseItemOpt( m_pItem, &strEdit );
                }
    
                if( 
m_pItem->m_dwItemId == II_SYS_SYS_SCR_SEALCHARACTER )
                {
                    
g_WndMng.PutSealChar( m_pItem, &strEdit );
                }
                break;
            }

            case 
IK2_GMTEXT:
            {
                if( 
pItemProp->dwItemKind3 == IK3_TEXT_DISGUISE )
                {
                    
g_WndMng.PutDestParam( pItemProp->dwDestParam[0], pItemProp->dwDestParam[1],
                    
pItemProp->nAdjParamVal[0], pItemProp->nAdjParamVal[1], strEdit );

                    if( 
pItemProp->dwActiveSkill != NULL_ID )
                    {
                        
ItemProp *pSkillProp;
                        
AddSkillProp* pAddSkillProp;
                        
pMover->GetSkillProp( &pSkillProp, &pAddSkillProp, pItemProp->dwActiveSkill, 1, "CWndMgr::PutToolTip_Item" );
                    
                        if( 
pAddSkillProp )
                        {
                            
g_WndMng.PutDestParam( pAddSkillProp->dwDestParam[0], pAddSkillProp->dwDestParam[1],
                                
pAddSkillProp->nAdjParamVal[0], pAddSkillProp->nAdjParamVal[1], strEdit );
                        }
                    }
                }            
            }
            break;
        }
        default:
        {
            break;
        }
    }

    if( 
m_pItem->IsEatPet() )
    {
        if( 
pItemProp->dwActiveSkill != NULL_ID )
        {
            
ItemProp *pSkillProp;
            
AddSkillProp* pAddSkillProp;
            
pMover->GetSkillProp( &pSkillProp, &pAddSkillProp, pItemProp->dwActiveSkill, 1, "CWndMgr::PutToolTip_Item" );
            
            if( 
pAddSkillProp )
            {
                
g_WndMng.PutDestParam( pAddSkillProp->dwDestParam[0], pAddSkillProp->dwDestParam[1],
                    
pAddSkillProp->nAdjParamVal[0], pAddSkillProp->nAdjParamVal[1], strEdit );
            }
        }
    }
       
    if( 
m_pItem->IsVisPet( ) )
        
g_WndMng.PutVisPetInfo( m_pItem, &strEdit );

    
g_WndMng.PutCoolTime( pMover, m_pItem, &strEdit );            // 쿨타임
    
g_WndMng.PutEndurance( m_pItem, &strEdit, 0 );            // 내구력
    
g_WndMng.PutKeepTime( m_pItem, &strEdit );                    // 사용할수 있는 시간

    
if( pItemProp->dwItemKind3 == IK3_EGG && m_pItem->m_pPet )//&& pItemElem->m_pPet->GetLevel() != PL_EGG )
        
g_WndMng.PutPetInfo( m_pItem, &strEdit );
    if( 
pItemProp->dwID == II_SYS_SYS_SCR_PET_FEED_POCKET ) //먹이 주머니 툴팁
        
g_WndMng.PutPetFeedPocket( m_pItem, &strEdit );

    
//g_WndMng.PutPiercingOpt( m_pItem, &strEdit );

    
g_WndMng.PutAwakeningBlessing( m_pItem, &strEdit );

    if( (
pItemProp->dwItemKind2 == IK2_WEAPON_DIRECT || pItemProp->dwItemKind2 == IK2_WEAPON_MAGIC) && m_pItem->GetProp()->dwReferStat1 == WEAPON_ULTIMATE )
        
g_WndMng.PutAddedOpt( m_pItem, &strEdit );

    if( (
pItemProp->dwItemKind2 == IK2_WEAPON_DIRECT || pItemProp->dwItemKind2 == IK2_WEAPON_MAGIC) && pItemProp->IsUltimate() )
        
m_pUltimateTexture->Render( p2DRender, CPoint( 10, 55) );
//    else if( (pItemProp->dwItemKind2 == IK2_WEAPON_DIRECT || pItemProp->dwItemKind2 == IK2_WEAPON_MAGIC) && pItemProp->IsBaruna() )
//        m_pBarunaTexture->Render( p2DRender, CPoint( 10, 55) );
    
m_p2DRender->TextOut_EditString(rectItem.left - 80, rectItem.bottom + 15, strEdit);
    
this->SetWndSize(90 + p2DRender->m_pFont->GetTextExtent(strEdit).cx, 100 + p2DRender->m_pFont->GetTextExtent(strEdit).cy);
    }
}

void CWndLinkedItem::SetItem(CItemElem *pItem)
{
    if( 
pItem && pItem->GetProp() )
    
this->m_pItem = pItem;
} 
All of our parents are proud xD , ty max982
xMeher is offline  
Old   #7
 
elite*gold: 0
Join Date: Jun 2013
Posts: 166
Received Thanks: 259
Quote:
Originally Posted by max982 View Post
Your's too.

PHP Code:
void CWndLinkedItem::OnDraw(C2DRender *p2DRender)
{
    if(
m_pItem)
    {
        
CMover* pMover = g_pPlayer;
        
m_pItem->GetTexture()->Render(p2DRender,rectItem.TopLeft(),255);
        
CEditString strEdit;
        
ItemProp* pItemProp = m_pItem->GetProp();
        
strEdit.SetParsingString("");
        
strEdit.Init( CWndBase::m_Theme.m_pFontText, &CRect( 0, 0, 240, 0 ) );
        
DWORD dwColorBuf = g_WndMng.PutItemName(m_pItem, &strEdit);
        
g_WndMng.PutItemAbilityPiercing( m_pItem, &strEdit, dwColorBuf );
        
        
        if( 
m_pItem->GetProp() && m_pItem->GetProp()->dwFlag & IP_FLAG_EQUIP_BIND )
        {
            
strEdit.AddString("\r\n");
            if( 
m_pItem->IsFlag( CItemElem::binds ) )
                
strEdit.AddString( GETTEXT( TID_TOOLTIP_EQUIPBIND_AFTER ), GETTEXTCOLOR( TID_TOOLTIP_EQUIPBIND_AFTER ) );
            else
                
strEdit.AddString( GETTEXT( TID_TOOLTIP_EQUIPBIND_BEFORE ), GETTEXTCOLOR( TID_TOOLTIP_EQUIPBIND_BEFORE ) );
        }
        
g_WndMng.PutWeapon( m_pItem, &strEdit );
         
        
CString strExp;
        
#ifdef __MODEL_CHANGE
        
g_WndMng.PutSex( pMover, m_pItem, &strEdit );
#endif //__MODEL_CHANGE

        
switch( pItemProp->dwItemKind2 )
        {
            case 
IK2_WEAPON_DIRECT:
            case 
IK2_WEAPON_MAGIC:
            case 
IK2_ARMORETC:
            case 
IK2_CLOTHETC:
            case 
IK2_ARMOR:
            case 
IK2_CLOTH:
            case 
IK2_BLINKWING:
            {
                
g_WndMng.PutItemMinMax( pMover, m_pItem, &strEdit );
                
g_WndMng.PutItemSpeed( m_pItem, &strEdit );
                if( 
pItemProp->dwItemKind3 == IK3_ELECARD )
                    
g_WndMng.PutItemResist( m_pItem, &strEdit );
                else if( 
m_pItem->m_nResistAbilityOption && ( pItemProp->dwItemKind1 == IK1_WEAPON  || pItemProp->dwItemKind1 == IK1_ARMOR ) )
                    
g_WndMng.PutItemResist( m_pItem, &strEdit );
    
                
g_WndMng.PutBaseResist( m_pItem, &strEdit );    // 속성 저항력
                
                
g_WndMng.PutBaseItemOpt( m_pItem, &strEdit );

                
g_WndMng.PutJob( pMover, m_pItem, &strEdit );
                
g_WndMng.PutLevel( pMover, m_pItem, &strEdit );
                
g_WndMng.PutCommand( m_pItem, &strEdit );
                
g_WndMng.PutItemGold( pMover, m_pItem, &strEdit, 0 );    // 가격
                
g_WndMng.PutSetItemOpt( pMover, m_pItem, &strEdit );
                
g_WndMng.PutPiercingOpt( m_pItem, &strEdit );
                
g_WndMng.PutRandomOpt( m_pItem, &strEdit );            
                
g_WndMng.PutEnchantOpt( pMover, m_pItem, &strEdit, 0 );
                break;
            }
        case 
IK2_REFRESHER:
        case 
IK2_FOOD:
        case 
IK2_POTION:
            {
                
g_WndMng.PutMedicine( m_pItem, m_pItem->GetProp()->dwDestParam1,  pItemProp->nAdjParamVal1, &strEdit );
                
g_WndMng.PutMedicine( m_pItem, m_pItem->GetProp()->dwDestParam2,  pItemProp->nAdjParamVal2, &strEdit );
                break;
            }
        case 
IK2_JEWELRY:
            {
                
g_WndMng.PutBaseItemOpt( m_pItem, &strEdit );
                break;
            }
        case 
IK2_SYSTEM:
            {
                if( 
pItemProp->dwItemKind3 == IK3_VIS )
                {
                    
g_WndMng.PutNeededVis( m_pItem, &strEdit );
                    
g_WndMng.PutBaseItemOpt( m_pItem, &strEdit );
                }
    
                if( 
m_pItem->m_dwItemId == II_SYS_SYS_SCR_SEALCHARACTER )
                {
                    
g_WndMng.PutSealChar( m_pItem, &strEdit );
                }
                break;
            }

            case 
IK2_GMTEXT:
            {
                if( 
pItemProp->dwItemKind3 == IK3_TEXT_DISGUISE )
                {
                    
g_WndMng.PutDestParam( pItemProp->dwDestParam[0], pItemProp->dwDestParam[1],
                    
pItemProp->nAdjParamVal[0], pItemProp->nAdjParamVal[1], strEdit );

                    if( 
pItemProp->dwActiveSkill != NULL_ID )
                    {
                        
ItemProp *pSkillProp;
                        
AddSkillProp* pAddSkillProp;
                        
pMover->GetSkillProp( &pSkillProp, &pAddSkillProp, pItemProp->dwActiveSkill, 1, "CWndMgr::PutToolTip_Item" );
                    
                        if( 
pAddSkillProp )
                        {
                            
g_WndMng.PutDestParam( pAddSkillProp->dwDestParam[0], pAddSkillProp->dwDestParam[1],
                                
pAddSkillProp->nAdjParamVal[0], pAddSkillProp->nAdjParamVal[1], strEdit );
                        }
                    }
                }            
            }
            break;
        }
        default:
        {
            break;
        }
    }

    if( 
m_pItem->IsEatPet() )
    {
        if( 
pItemProp->dwActiveSkill != NULL_ID )
        {
            
ItemProp *pSkillProp;
            
AddSkillProp* pAddSkillProp;
            
pMover->GetSkillProp( &pSkillProp, &pAddSkillProp, pItemProp->dwActiveSkill, 1, "CWndMgr::PutToolTip_Item" );
            
            if( 
pAddSkillProp )
            {
                
g_WndMng.PutDestParam( pAddSkillProp->dwDestParam[0], pAddSkillProp->dwDestParam[1],
                    
pAddSkillProp->nAdjParamVal[0], pAddSkillProp->nAdjParamVal[1], strEdit );
            }
        }
    }
       
    if( 
m_pItem->IsVisPet( ) )
        
g_WndMng.PutVisPetInfo( m_pItem, &strEdit );

    
g_WndMng.PutCoolTime( pMover, m_pItem, &strEdit );            // 쿨타임
    
g_WndMng.PutEndurance( m_pItem, &strEdit, 0 );            // 내구력
    
g_WndMng.PutKeepTime( m_pItem, &strEdit );                    // 사용할수 있는 시간

    
if( pItemProp->dwItemKind3 == IK3_EGG && m_pItem->m_pPet )//&& pItemElem->m_pPet->GetLevel() != PL_EGG )
        
g_WndMng.PutPetInfo( m_pItem, &strEdit );
    if( 
pItemProp->dwID == II_SYS_SYS_SCR_PET_FEED_POCKET ) //먹이 주머니 툴팁
        
g_WndMng.PutPetFeedPocket( m_pItem, &strEdit );

    
//g_WndMng.PutPiercingOpt( m_pItem, &strEdit );

    
g_WndMng.PutAwakeningBlessing( m_pItem, &strEdit );

    if( (
pItemProp->dwItemKind2 == IK2_WEAPON_DIRECT || pItemProp->dwItemKind2 == IK2_WEAPON_MAGIC) && m_pItem->GetProp()->dwReferStat1 == WEAPON_ULTIMATE )
        
g_WndMng.PutAddedOpt( m_pItem, &strEdit );

    if( (
pItemProp->dwItemKind2 == IK2_WEAPON_DIRECT || pItemProp->dwItemKind2 == IK2_WEAPON_MAGIC) && pItemProp->IsUltimate() )
        
m_pUltimateTexture->Render( p2DRender, CPoint( 10, 55) );
//    else if( (pItemProp->dwItemKind2 == IK2_WEAPON_DIRECT || pItemProp->dwItemKind2 == IK2_WEAPON_MAGIC) && pItemProp->IsBaruna() )
//        m_pBarunaTexture->Render( p2DRender, CPoint( 10, 55) );
    
m_p2DRender->TextOut_EditString(rectItem.left - 80, rectItem.bottom + 15, strEdit);
    
this->SetWndSize(90 + p2DRender->m_pFont->GetTextExtent(strEdit).cx, 100 + p2DRender->m_pFont->GetTextExtent(strEdit).cy);
    }
}

void CWndLinkedItem::SetItem(CItemElem *pItem)
{
    if( 
pItem && pItem->GetProp() )
    
this->m_pItem = pItem;
} 
Your arguments are invalid since the call to PutSex has no relation to the model change itself.
I'd recommend to remove the condition instead of adding an ending macro.
WurstbrotQT is offline  
Thanks
1 User
Old   #8
 
elite*gold: 0
Join Date: Aug 2014
Posts: 113
Received Thanks: 36
Quote:
Originally Posted by WurstbrotQT View Post
Your arguments are invalid since the call to PutSex has no relation to the model change itself.
I'd recommend to remove the condition instead of adding an ending macro.
I already changed everything this item link sucks , i used yours ( GoW)

but thank you anyway.
xMeher is offline  
Reply


Similar Threads Similar Threads
File's not found at the IIS Folder
04/06/2014 - SRO Private Server - 2 Replies
after i have finished all steps on my server setup i got no files on the IIS Folder can i continue without it or what would i do ? http://i.epvpimg.com/LoRhd.png
Tetris HACK Found By ME lMarco666l 1 Line is 20000 Combo Unlimited KO's 21/01/2012
03/14/2012 - Facebook - 23 Replies
Tetris HACK Found By ME lMarco666l 1 Line is 20000 Combo Unlimited KO's 21/01/2012 Have fun With this Preview :) Tetris HACK Found By ME lMarco666l 1 Line is 20000 Combo Unlimited KO's 21/01/2012 - YouTube More to come :D
[Help]File/Session/provider.ccc Line 12 and CMD crashed
02/14/2011 - Dekaron Private Server - 1 Replies
i having this problem alot alot of time 3696 File/Session/provider.ccc Line 12 and i noticed it came up tat problem it was my CMD not working it crashed..any1 can help me out tat?
no sm.txt file found
04/22/2007 - Silkroad Online - 3 Replies
Hey guys, Everytime i want to start iSRObot i get this massage: No sm.txt file found. Please creat one and restart the client. okay... so lets make a sm.txt. file, and i created one. Started bot again, failed. wtf is going on with the bot? there is a sm.txt file and it tells me creat one! i installed the client 100 times again and again, nothing helped. so you can help me?



All times are GMT +1. The time now is 11:58.


Powered by vBulletin®
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2026 elitepvpers All Rights Reserved.