========================================================================
    WIN32 Ӧó : GameServer Ŀſ
========================================================================

ӦóΪ GameServer Ӧó
ļ GameServer Ӧó
ÿļժҪ


GameServer.vcproj
    Ӧóɵ VC++ ĿĿļ
    йɴļ Visual C++ 汾ϢԼ
    йӦóѡ
    ƽ̨úĿܵϢ

GameServer.cpp
    ӦóԴļ

/////////////////////////////////////////////////////////////////////////////
ӦóѴԴ:

GameServer.rc
    ǳʹõ Microsoft Windows Դб
    洢 RES Ŀ¼µͼꡢλͼ͹ꡣ
    ļ Microsoft Visual C++ ֱӱ༭
    

Resource.h
    Ǳ׼ͷļµԴ ID
    Microsoft Visual C++ ȡ͸´ļ
GameServer.ico
    һͼļӦóͼ(32x32)
    ͼλԴļ GameServer.rc С

small.ico
    һͼļС汾(16x16)
    ӦóͼꡣͼλԴ
    ļ GameServer.rc С

/////////////////////////////////////////////////////////////////////////////
׼ļ:

StdAfx.hStdAfx.cpp
    ЩļΪ GameServer.pch
    Ԥͷ(PCH)ļԼΪ StdAfx.obj Ԥļ

/////////////////////////////////////////////////////////////////////////////
ע:

Ӧóʹ "TODO:" עָʾӦӻԶԴ벿֡

/////////////////////////////////////////////////////////////////////////////
	char * p = strchr( pszCommand, '(' );
	char * Params[20];
	int nParam = 0;
	if( p != NULL )
	{TRY_BEGIN
		*p++ = 0;
		nParam = SearchParam( p, Params, 20, ',' );
	TRY_END}
	char	szMsg[1024];
	e_gm_command cmd = this->GetCmCommand( pszCommand );
	if( cmd == GC_CTRL_MAX )
	{TRY_BEGIN
		m_pPlayer->SaySystem( "<˴ %s >", pszCommand );
		return;
	TRY_END}

	if( GM_CMDLIST[cmd].wFlag & GCF_NORMALCMD )
	{TRY_BEGIN
		if( GM_CMDLIST[cmd].wFlag & GCF_NEEDLEVEL )
		{TRY_BEGIN
			if( GM_CMDLIST[cmd].btFitLevel > (BYTE)m_pPlayer->GetPropValue(PI_LEVEL))
			{TRY_BEGIN
				m_pPlayer->Say( "ĵȼ޷ʹø!" );
				return;
			TRY_END}
		TRY_END}
	TRY_END}
	else
	{TRY_BEGIN
		if( GetGmLevel() == 0 )return;

		if( GM_CMDLIST[cmd].wFlag & GCF_NEEDLEVEL )
		{TRY_BEGIN
			if( GM_CMDLIST[cmd].btFitLevel > (BYTE)GetGmLevel() )
			{TRY_BEGIN
				m_pPlayer->Say( "Ȩ޲ʹø!" );
				return;
			TRY_END}
		TRY_END} 
	TRY_END}

	switch( cmd )
	{TRY_BEGIN
	case	GC_RESTOREGUILDNAME:
		{TRY_BEGIN
			if( nParam == 0 )
			{TRY_BEGIN
				CGuildManager::GetInstance()->RestoreAllGuildName();
				m_pPlayer->SaySystem( "ѾȫֳָԱΪлᶼֶûлָ" );
				m_pPlayer->SaySystem( "Щ˵Ѿ лظԱ.txt УԱָ֤" );
				m_pPlayer->SaySystem( "ָ restoreguildname( л,  ) " );
				m_pPlayer->SaySystem( "ע⣬ַӳԱ." );
			TRY_END}
			//else if( nParam == 1 )
			//{TRY_BEGIN

			//TRY_END}
			else if( nParam == 2 )
			{TRY_BEGIN
				CGuild * p = CGuildManager::GetInstance()->FindGuild( Params[0] );
				if( p == NULL )
				{TRY_BEGIN
					m_pPlayer->SaySystem( "Ҳл %s !", Params[0] );
					break;
				TRY_END}
				if( !p->IsMemberEx( Params[1] ) )
				{TRY_BEGIN
					m_pPlayer->SaySystem( "%s л %s ĳԱ޷ָ", Params[1], Params[0] );
					break;
				TRY_END}
				CHumanPlayer * player = CHumanPlayerMgr::GetInstance()->FindbyName( Params[1] );
				if( player )
				{TRY_BEGIN
					player->SetGuild( p );
					m_pPlayer->SaySystem( "ɫߣлѾָýɫûлᣬ˵л[%s]ûԱ", Params[0] );
				TRY_END}
				else
				{TRY_BEGIN
					CDBClientObj * pObj = CServer::GetInstance()->GetDBConnection( DI_CHARINFO );
					if( pObj )
					{TRY_BEGIN
						pObj->SendRestoreGuild( Params[1], Params[0] );
					TRY_END}
					m_pPlayer->SaySystem( "ɫߣѾָݿУʹõ°ݿĻ" );
					m_pPlayer->SaySystem( "°棬µ°ģٻָ" );
				TRY_END}
			TRY_END}
		TRY_END}
		break;
	case	GC_MAKEHOMESTONE:
		{TRY_BEGIN
			ITEM item;
			if( CItemManager::GetInstance()->CreateTempItem( "سʯ", item ) )
			{TRY_BEGIN
				if( nParam >= 1 )
				{TRY_BEGIN 
					memcpy( &item.baseitem.btMinAtk, Params[0], 8 );
				TRY_END}
				else
					item.baseitem.btMinAtk = (BYTE)'2';
				m_pPlayer->AddBagItem( item );
			TRY_END}
		TRY_END}
		break;
	case	GC_DOUPGRADEWEAPON:
		{TRY_BEGIN
			m_pPlayer->DoUpgradeWeapon();
		TRY_END}
		break;
	case	GC_TAKEUPGRADEWEAPON:
		{TRY_BEGIN
			m_pPlayer->TakeUpgradeWeapon();
		TRY_END}
		break;
	case	GC_REFUSESPECIALPOWER:
		{TRY_BEGIN
			if( m_pPlayer->IsSystemFlagSeted( SF_ALLOWSPECIALPOWER ) )
			{TRY_BEGIN
				m_pPlayer->SetSystemFlag( SF_ALLOWSPECIALPOWER, FALSE );
				m_pPlayer->SaySystem( "رغһ" );
			TRY_END}
		TRY_END}
		break;
	case	GC_ALLOWSPECIALPOWER:
		{TRY_BEGIN
			if( !m_pPlayer->IsSystemFlagSeted( SF_ALLOWSPECIALPOWER ) )
			{TRY_BEGIN
				m_pPlayer->SetSystemFlag( SF_ALLOWSPECIALPOWER, TRUE );
				m_pPlayer->SaySystem( "غһ" );
			TRY_END}
		TRY_END}
		break;
	case	GC_USESPECIALPOWER:
		{TRY_BEGIN
			if( m_pPlayer->IsSpecialEquipmentFunctionOn(SEF_TELEPORTGROUP))
			{TRY_BEGIN
				if(CGroupObject * pGrp = m_pPlayer->GetGroupObject() )
				{TRY_BEGIN
					xAutoPtrArray<CHumanPlayer> * parray = &pGrp->GetMemberArray();
					CLogicMap * pMap = m_pPlayer->GetMap();
					if( pMap )
					{TRY_BEGIN
						for( UINT i = 0;i < (*parray).GetCount();i ++ )
						{TRY_BEGIN
							if( (*parray)[i] && (*parray)[i] != m_pPlayer && (*parray)[i]->IsSystemFlagSeted( SF_ALLOWSPECIALPOWER ) )
							{TRY_BEGIN
								(*parray)[i]->FlyTo( m_pPlayer->GetMapId(), m_pPlayer->getX(), m_pPlayer->getY() );
							TRY_END}
						TRY_END}
					TRY_END}
				TRY_END}
			TRY_END}
		TRY_END}
		break;
	case	GC_SEARCHING:
		{TRY_BEGIN
			if( m_pPlayer->IsSpecialEquipmentFunctionOn(SEF_SEARCH) )
			{TRY_BEGIN
				if( nParam == 1 )
				{TRY_BEGIN
					CHumanPlayer * p = CHumanPlayerMgr::GetInstance()->FindbyName(Params[0] );
					if( p )
					{TRY_BEGIN
						m_pPlayer->SaySystem( "%s  %s  %d %d λã", 
							p->GetName(), p->GetMap()==NULL?"":p->GetMap()->GetTitle(), p->getX(), p->getY() );
					TRY_END}
					else
					{TRY_BEGIN
						m_pPlayer->SaySystem( "%s ߣ", Params[0] );
					TRY_END}
				TRY_END}
			TRY_END}
		TRY_END}
		break;
	case	GC_DMOVE:
		{TRY_BEGIN
			if( m_pPlayer->IsSpecialEquipmentFunctionOn(SEF_TELEPORT))
			{TRY_BEGIN
				if( nParam == 2 )
				{TRY_BEGIN
					m_pPlayer->FlyTo( m_pPlayer->GetMapId(), StringToInteger(Params[0]), StringToInteger(Params[1] ) );
				TRY_END}
			TRY_END}
		TRY_END}
		break;
	case GC_CHANGEWEAPONVIEW:
		{TRY_BEGIN
			if( nParam == 1 )
			{TRY_BEGIN
				m_pPlayer->ChangeWeaponView( (BYTE)StringToInteger( Params[0] ) );
			TRY_END}
		TRY_END}
		break;
	case	GC_CHANGEHAIR:
		{TRY_BEGIN
			if( nParam == 1 )
			{TRY_BEGIN
				m_pPlayer->ChangeHair( (BYTE)StringToInteger( Params[0] ) );
			TRY_END}
		TRY_END}
		break;
	case	GC_SETSABUKMASTER:
		{TRY_BEGIN
			CSandCity::GetInstance()->SetSabukMaster(m_pPlayer);
		TRY_END}
		break;
	case	GC_RELOADTOPLIST:
		{TRY_BEGIN
			CTopManager::GetInstance()->Load( ".\\data\\figure\\toplist.txt" );
		TRY_END}
		break;
	case	GC_ENTERTOPLIST:
		{TRY_BEGIN
			CTopManager::GetInstance()->TestEnterProfessionTop( m_pPlayer );
		TRY_END}
		break;
	case	GC_BAN:
		{TRY_BEGIN
			if( nParam >= 1 )
			{TRY_BEGIN
				CHumanPlayer * pPlayer = CHumanPlayerMgr::GetInstance()->FindbyName( Params[0] );
				if( pPlayer )
				{TRY_BEGIN
					DWORD dwTime = 0xffffffff;
					if( nParam > 1 )
						dwTime = StringToInteger( Params[1] );
					if( pPlayer->IsSystemFlagSeted(SF_BANED))
					{TRY_BEGIN
						pPlayer->SetSystemFlag( SF_BANED, FALSE );
						m_pPlayer->SaySystem( "%s Խֹ", Params[0] );
					TRY_END}
					else
					{TRY_BEGIN
						pPlayer->SetSystemFlag( SF_BANED, TRUE, 0, dwTime );
						m_pPlayer->SaySystem( "%s ֹԣ", Params[0] );
					TRY_END}
				TRY_END}
				else
				{TRY_BEGIN
					m_pPlayer->SaySystem( "%s ߣ", Params[0] );
				TRY_END}
			TRY_END}
		TRY_END}
		break;
	case	GC_SETMAGICLEVEL:
		{TRY_BEGIN
			if( nParam == 2 )
			{TRY_BEGIN
				if( m_pPlayer->SetMagicLevel( Params[0], StringToInteger( Params[1] ) ) )
				{TRY_BEGIN
					m_pPlayer->SaySystem( "ʹ SetMagicLevel ɹ" );
				TRY_END}
				else
					m_pPlayer->SaySystem( "ʹ SetMagicLevel ʧܣ" );
			TRY_END}
			else
			if( nParam == 3 )
			{TRY_BEGIN
				CHumanPlayer * player = m_pPlayer;
				player = CHumanPlayerMgr::GetInstance()->FindbyName( Params[0] );
				if( !player->SetMagicLevel( Params[1], StringToInteger( Params[2] ) ) )
				{TRY_BEGIN
					m_pPlayer->SaySystem( " %s ʹSetMagicLevelʧܣ", Params[0] );
				TRY_END}
				else
					m_pPlayer->SaySystem( " %s ʹSetMagicLevelɹ", Params[0] );
			TRY_END}
			else
			{TRY_BEGIN
				m_pPlayer->SaySystem( "SETMAGICLEVELִʧܣ" );
			TRY_END}
		TRY_END}
		break;
	case	GC_KICK:
		{TRY_BEGIN
			if( nParam >= 1 )
			{TRY_BEGIN
				if( Params[0][0] == '*' && Params[0][1] == 0 )
				{TRY_BEGIN
					CServer::GetInstance()->KickAll();
					break;
				TRY_END}
				CHumanPlayer * pPlayer = CHumanPlayerMgr::GetInstance()->FindbyName( Params[0] );
				if( pPlayer )
				{TRY_BEGIN
					CClientObj * pObj = pPlayer->GetClientObject();
					if( pObj )
					{TRY_BEGIN
						if( nParam >= 2 )
							pPlayer->SaySystem( "㱻GM,ԭ %s, 10ӺϿ.!!", 
							Params[1] );
						else
							pPlayer->SaySystem( "㱻GM,10ӺϿ.!!" );
						pObj->Disconnect( 10000 );

					TRY_END}
				TRY_END}
			TRY_END}
		TRY_END}
		break;
	case	GC_CRASH:
		{TRY_BEGIN
			CHumanPlayer * p = NULL;
			p->AddExp( 200, 1 );
		TRY_END}
		break;
	case	GC_ALLOWFRIEND:
		{TRY_BEGIN
			m_pPlayer->ToggleFriendMode();
		TRY_END}
		break;
	case GC_SETMASTER:
		{TRY_BEGIN
			if( nParam == 0 )
			{TRY_BEGIN
				m_pPlayer->SetMaster( NULL );
			TRY_END}
			else if( nParam == 1 )
			{TRY_BEGIN
				CHumanPlayer * pPlayer = CHumanPlayerMgr::GetInstance()->FindbyName( Params[0] );
				if( pPlayer )
					m_pPlayer->SetMaster( pPlayer );
			TRY_END}
		TRY_END}
		break;
	case GC_SETWIFE:
		{TRY_BEGIN
			if( nParam == 0 )
				m_pPlayer->SetWife( NULL );
			else if( nParam == 1 )
			{TRY_BEGIN
				CHumanPlayer * pPlayer = CHumanPlayerMgr::GetInstance()->FindbyName( Params[0] );
				if( pPlayer )
					m_pPlayer->SetWife( pPlayer );
			TRY_END}
		TRY_END}
		break;
	case GC_ADDFRIEND:
		{TRY_BEGIN
			//if( nParam == 1 )
			//{TRY_BEGIN
			//	m_pPlayer->AddFriend( Params[0] );
			//TRY_END}
		TRY_END}
		break;
	case GC_DELETEFRIEND:
		{TRY_BEGIN
			//if( nParam == 1 )
			//{TRY_BEGIN
			//	m_pPlayer->DeleteFriend( Params[0] );
			//TRY_END}
		TRY_END}
		break;
	case GC_ADDSTUDENT:
		{TRY_BEGIN
			//if( nParam == 1 )
			//{TRY_BEGIN
			//	m_pPlayer->AddFriend( Params[0] );
			//TRY_END}
		TRY_END}
		break;
	case GC_DELETESTUDENT:
		{TRY_BEGIN
			//if( nParam == 1 )
			//{TRY_BEGIN
			//	m_pPlayer->DeleteFriend( Params[0] );
			//TRY_END}
		TRY_END}
		break;
	case	GC_ADDMAPFLAG:
		{TRY_BEGIN
			if( nParam == 1 )
			{TRY_BEGIN
				if( m_pPlayer->GetMap() != NULL )
				{TRY_BEGIN
					m_pPlayer->GetMap()->SetFlag( Params[0] );
				TRY_END}
			TRY_END}
			else if( nParam == 2 )
			{TRY_BEGIN
				CLogicMap * pMap = CLogicMapMgr::GetInstance()->GetLogicMapById( StringToInteger( Params[0] ) );
				if( pMap )
				{TRY_BEGIN
					pMap->SetFlag( Params[1] );
				TRY_END}
			TRY_END}
		TRY_END}
		break;
	case	GC_SUPERHIDE:
		{TRY_BEGIN
			if(m_pPlayer->IsSystemFlagSeted(SF_HIDED))
			{TRY_BEGIN
				m_pPlayer->SetSystemFlag(SF_HIDED,FALSE);
				m_pPlayer->SaySystem( "뿪ȫ״̬" );
			TRY_END}
			else
			{TRY_BEGIN
				m_pPlayer->SetSystemFlag(SF_HIDED,TRUE);
				m_pPlayer->SaySystem( "ȫ״̬" );
			TRY_END}
		TRY_END}
		break;
	case	GC_TELEPORT:
		{TRY_BEGIN
			if( nParam == 1 )
			{TRY_BEGIN
				CHumanPlayer * pPlayer = CHumanPlayerMgr::GetInstance()->FindbyName(Params[0] );
				if( pPlayer )
				{TRY_BEGIN
					pPlayer->FlyTo( m_pPlayer->GetMapId(), m_pPlayer->getX(), m_pPlayer->getY() );
				TRY_END}
				else
					m_pPlayer->SaySystem( "%s ߣ", Params[0] );

			TRY_END}
		TRY_END}
		break;
	case	GC_SHOWINFO:
		{TRY_BEGIN
			if( nParam == 1 )
			{TRY_BEGIN
				CHumanPlayer * pPlayer = CHumanPlayerMgr::GetInstance()->FindbyName(Params[0] );
				if( pPlayer )
				{TRY_BEGIN
					m_pPlayer->SaySystem( "%s(%s)ϸϢ", Params[0], 
						pPlayer->GetClientObject() == NULL?"0.0.0.0":pPlayer->GetClientObject()->getAddress());
					m_pPlayer->SaySystem( "˺: %s λ: [%s]( %u, %u ) л: %s(%s)", 
						pPlayer->GetAccount(), pPlayer->GetMap() ==NULL?"":pPlayer->GetMap()->GetName(),pPlayer->getX(), pPlayer->getY(),
						pPlayer->GetGuild() == NULL?"": pPlayer->GetGuild()->GetName(), pPlayer->GetGuildTitle() );
					char	szLoginLong[200]; 
					o_strncpy( szLoginLong, pPlayer->GetScriptVarValue( "LOGINLONG" ) ,40 );
					m_pPlayer->SaySystem( "¼ʱ: %s ʱ: %s", 
						pPlayer->GetScriptVarValue( "LOGINTIME" ), szLoginLong );
					m_pPlayer->SaySystem( "HP: %u/%u MP: %u/%u Ǯ: %u Ԫ: %u", 
						pPlayer->GetPropValue(PI_CURHP), pPlayer->GetPropValue(PI_MAXHP), 
						pPlayer->GetPropValue(PI_CURMP), pPlayer->GetPropValue(PI_MAXMP),
						pPlayer->GetMoney(MT_GOLD), pPlayer->GetMoney(MT_YUANBAO));
					m_pPlayer->SaySystem( ": %u-%u ħ: %u-%u : %u-%u : %u-%u ħ: %u-%u",
						pPlayer->GetPropValue(PI_MINDC),pPlayer->GetPropValue(PI_MAXDC),pPlayer->GetPropValue(PI_MINMC),
						pPlayer->GetPropValue(PI_MAXMC),pPlayer->GetPropValue(PI_MINSC),pPlayer->GetPropValue(PI_MAXSC),
						pPlayer->GetPropValue(PI_MINAC),pPlayer->GetPropValue(PI_MAXAC),pPlayer->GetPropValue(PI_MINMAC),pPlayer->GetPropValue(PI_MAXMAC));
					VIEWDETAIL_EX vd_ex;// detail;
					pPlayer->GetViewDetail(vd_ex.detail);
					vd_ex.btTitleLength = 0;
					//8261 0cd0
					SendMsg( 0, 0x2ef, 0x8261, 0x0cd0, 0xff, &vd_ex, sizeof( vd_ex.detail ) + 2 );
				TRY_END}
				else
					m_pPlayer->SaySystem( "%s ߣ", Params[0] );
			TRY_END}
		TRY_END}
		break;
	case	GC_ADDATTACKREQUEST:
		{TRY_BEGIN
			if( nParam >= 1 )
			{TRY_BEGIN
				CGuild * pGuild = CGuildManager::GetInstance()->FindGuild( Params[0] );
				if( pGuild == NULL )
					m_pPlayer->SaySystem( "Ҳ %s лᣡ", Params[0] );
				else
				{TRY_BEGIN
					if( !CSandCity::GetInstance()->AddAttackRequest( pGuild, nParam >= 2?TRUE:FALSE ) )
					{TRY_BEGIN
						m_pPlayer->SaySystem( "ӹʧܣ%s", CSandCity::GetInstance()->getErrorMsg() );
					TRY_END}
					else
						m_pPlayer->SaySystem( "ӹɹ" );
				TRY_END}
			TRY_END}
		TRY_END}
		break;
	case	GC_SHOWNPC:
		{TRY_BEGIN
			UINT nMapId = 0;
			if( nParam == 1 )
			{TRY_BEGIN
				nMapId = StringToInteger( Params[0] );
			TRY_END}
			else
				nMapId = m_pPlayer->GetMapId();
			CGameWorld::GetInstance()->ShowNpc( nMapId );
		TRY_END}
		break;
	case	GC_HIDENPC:
		{TRY_BEGIN
			UINT nMapId = 0;
			if( nParam == 1 )
			{TRY_BEGIN
				nMapId = StringToInteger( Params[0] );
			TRY_END}
			else
				nMapId = m_pPlayer->GetMapId();
			CGameWorld::GetInstance()->HideNpc( nMapId );
		TRY_END}
		break;
	case	GC_SAVESABUK:
		{TRY_BEGIN
			CSandCity::GetInstance()->Save();
		TRY_END}
		break;
	case	GC_SETSABUKOWNER:
		{TRY_BEGIN
			if( nParam == 1 )
			{TRY_BEGIN
				CGuild * pGuild = CGuildManager::GetInstance()->FindGuild( Params[0] );
				if( pGuild )
					CSandCity::GetInstance()->ChangeOwner( pGuild );
				else
					m_pPlayer->SaySystem( "ָл᲻ڣ" );
			TRY_END}
		TRY_END}
		break;
	case	GC_REPAIRSABUKWALL:
		{TRY_BEGIN
			if( nParam == 1 )
			{TRY_BEGIN
				int index = StringToInteger( Params[0] );
				CSandCity::GetInstance()->RepairWall(index);
			TRY_END}
		TRY_END}
		break;

	case	GC_RELOADSCRIPT:
		{TRY_BEGIN
			if( nParam == 1 )
			{TRY_BEGIN
				CScriptPage * pPage = CScriptObjectMgr::GetInstance()->GetScriptPage( Params[0] );
				if( pPage )
				{TRY_BEGIN
					char	szFile[256];
					sprintf( szFile, ".\\data\\Script\\%s.txt", Params[0] );
					pPage->Load( szFile );
				TRY_END}
			TRY_END}
		TRY_END}
		break;

	case	GC_REPAIRSABUKDOOR:
		{TRY_BEGIN
			CSandCity::GetInstance()->RepairGate();
		TRY_END}
		break;
	case	GC_OPENSABUKDOOR:
		{TRY_BEGIN
			CSandCity::GetInstance()->OpenGate();
		TRY_END}
		break;
	case	GC_CLOSESABUKDOOR:
		{TRY_BEGIN
			CSandCity::GetInstance()->CloseGate();
		TRY_END}
		break;

	case	GC_STARTSABUKWAR:
		{TRY_BEGIN
			CSandCity * pSandCity = CSandCity::GetInstance();

			if( !pSandCity->IsWarStarted() )
			{TRY_BEGIN 
				if( !pSandCity->StartWar() )
					m_pPlayer->SaySystem( "ʼսʧ: %s", pSandCity->getErrorMsg() );
			TRY_END}
		TRY_END}
		break;
	case	GC_STOPSABUKWAR:
		{TRY_BEGIN
			CSandCity * pSandCity = CSandCity::GetInstance();

			if( pSandCity->IsWarStarted() )
				pSandCity->EndWar();
		TRY_END}
		break;
	case	GC_RELOADNOTICE:
		{TRY_BEGIN
			CGameWorld::GetInstance()->LoadNotice();
		TRY_END}
		break;
	case	GC_NOTICEMODE:
		{TRY_BEGIN
			if( !m_bNoticeMode )
			{TRY_BEGIN
				m_bNoticeMode = TRUE;
				m_pPlayer->SaySystem( "ϵͳϢģʽÿһ仰ϵͳϢʽпͻ!" );
			TRY_END}
			else
			{TRY_BEGIN
				m_bNoticeMode = FALSE;
				m_pPlayer->SaySystem( "˳ϵͳϢģʽ!" );
			TRY_END}
		TRY_END}
		break;
	case	GC_QUITGUILD:
	case	GC_QUITGUILD2:
		{TRY_BEGIN
			if( m_pPlayer->GetGuild() )
				m_pPlayer->GetGuild()->RemoveMember( m_pPlayer->GetName() );
		TRY_END}
		break;
	case	GC_ADDPKPOINT:
		{TRY_BEGIN
			if( nParam == 1 )
			{TRY_BEGIN
				m_pPlayer->AddPkPoint( StringToInteger( Params[0] ) );
			TRY_END}
		TRY_END}
		break;
	case	GC_DECPKPOINT:
		{TRY_BEGIN
			if( nParam == 1 )
			{TRY_BEGIN
				m_pPlayer->DecPkPoint( StringToInteger( Params[0] ) );
			TRY_END}
		TRY_END}
		break;
	case	GC_SHOWACTIONDELAY:
		{TRY_BEGIN
			if( nParam == 1 )
			{TRY_BEGIN
				actiontype type = GetActionType( Params[0] );
				if( type != AT_MAX )
				{TRY_BEGIN
					m_pPlayer->SaySystem( "%s Ϊ %u", Params[0], g_dwActionDelay[type] );
				TRY_END}
			TRY_END}
		TRY_END}
		break;
	case	GC_SETACTIONDELAY:
		{TRY_BEGIN
			if( nParam == 2 )
			{TRY_BEGIN
				actiontype type = GetActionType( Params[0] );
				if( type != AT_MAX )
				{TRY_BEGIN
					g_dwActionDelay[type] = (DWORD)StringToInteger(Params[1] );
					m_pPlayer->SaySystem( "%s Ϊ %u", Params[0], g_dwActionDelay[type] );
					
				TRY_END}
			TRY_END}
		TRY_END}
		break;
	case	GC_CREATEGUILD:
		{TRY_BEGIN
			if( nParam == 1 )
			{TRY_BEGIN
				if( !CGuildManager::GetInstance()->BuildGuild( m_pPlayer, Params[0] ) )
					m_pPlayer->SaySystem( "ʧܡ" );
			TRY_END}
		TRY_END}
		break;
	case	GC_ENABLECHANNEL:
		{TRY_BEGIN
			if( nParam >= 1 )
			{TRY_BEGIN
				e_chatchannel channel = GetChannelFromString( Params[0] );
				m_pPlayer->EnableChannel( channel );
			TRY_END}
			else
			{TRY_BEGIN
				m_pPlayer->EnableChannel();
			TRY_END}
		TRY_END}
		break;
	case	GC_DISABLECHANNEL:
		{TRY_BEGIN
			if( nParam >= 1 )
			{TRY_BEGIN
				e_chatchannel channel = GetChannelFromString( Params[0] );
				m_pPlayer->DisableChannel( channel );
			TRY_END}
			else
			{TRY_BEGIN
				m_pPlayer->DisableChannel();
			TRY_END}
		TRY_END}
		break;
	case	GC_CCINFO: 
		{TRY_BEGIN
			m_pPlayer->ChangeChatChannel( m_pPlayer->GetChatChannel() );
			m_pPlayer->SaySystemAttrib( CC_GREEN, "Ƶ @ͨƵ @رƵ" );
		TRY_END}
		break;
	case	GC_ATTACKMODE:
		{TRY_BEGIN
			m_pPlayer->ChangeAttackMode();
		TRY_END}
		break;
	case	GC_TEST:  
		{TRY_BEGIN 
			//SendMsg( 0, 0x27c, 0, 0, 0 ); 
			//SendMsg( m_pPlayer->GetId(), 0x27c, 0, 0, 0 );   
			//SendMsg( m_pPlayer->GetId(), 0x0064,  0x38ff, 0x0038, 0x0400, (LPVOID)"Ѱᡫ" );
			//CGameWorld::GetInstance()->Test(0);
			ITEM item;
			//if( )
		TRY_END}
		break;
	case	GC_LISTMAPINFO:
		{TRY_BEGIN
			CLogicMap * pMap = m_pPlayer->GetMap();
			if( pMap )
			{TRY_BEGIN
				m_pPlayer->SaySystem( "---===[ͼϢ]===---" );
				m_pPlayer->SaySystem( "Ʒ: %d ", pMap->GetObjectCount( OBJ_DOWNITEM ) );
				m_pPlayer->SaySystem( ": %d ", pMap->GetObjectCount( OBJ_MONSTER ) );
				m_pPlayer->SaySystem( "ΣУ: %d ", pMap->GetObjectCount( OBJ_NPC ) );
				m_pPlayer->SaySystem( "Ҹ: %d ", pMap->GetObjectCount( OBJ_PLAYER ) );
				m_pPlayer->SaySystem( "¼: %d ", pMap->GetObjectCount( OBJ_EVENT ) );
				m_pPlayer->SaySystem( "Ч: %d ", pMap->GetObjectCount( OBJ_VISIBLEEVENT ) );
			TRY_END}
			
			//OBJ_DOWNITEM,
			//	OBJ_MONSTER,
			//	OBJ_NPC,
			//	OBJ_PLAYER,
			//	OBJ_EVENT,
			//	OBJ_VISIBLEEVENT,
		TRY_END}
		break;
	case	GC_LISTSERVERINFO:
		{TRY_BEGIN
			int u, f, t;
			DWORD a,b,c,d;
			m_pPlayer->SaySystem( "---===[Ϣ]===---" );
			m_pPlayer->SaySystem( "Ʒ: %d ", CDownItemMgr::GetInstance()->getCount());
			m_pPlayer->SaySystem( ": %d ", CMonsterManagerEx::GetInstance()->getCount());
			m_pPlayer->SaySystem( "ΣУ: %d ", CNpcManager::GetInstance()->getCount());
			m_pPlayer->SaySystem( ": %d ", CHumanPlayerMgr::GetInstance()->getCount());
			m_pPlayer->SaySystem( "ͼ: %d ", CLogicMapMgr::GetInstance()->getCount());
			CLogicMap::GetCellInfoInfo(u,f,t);
			m_pPlayer->SaySystem( "ͼ: used %d freed %d total %d", u, f, t );
			CAliveObject::GetVisibleObjectInfo( u, f, t ); 
			m_pPlayer->SaySystem( ": used %d freed %d total %d", u, f, t );
			CItemManager::GetInstance()->GetMiscCount( a,b,c,d );
			m_pPlayer->SaySystem( "Temp: %u Create: %u Delete: %u Ident: %u", a,b,c,d  );

		TRY_END}
		break;
#ifdef _DEBUG
	case	GC_SETATTACKMSG:
		{TRY_BEGIN
			if( nParam == 1 )
			{TRY_BEGIN
				m_pPlayer->SetAttackMsg( StringToInteger( Params[0] ) );
			TRY_END}
		TRY_END}
		break;

#endif
	case	GC_SUPERHIT:
		{TRY_BEGIN
			if( m_pPlayer->IsSuperHit() )
			{TRY_BEGIN
				m_pPlayer->SaySystem( "˳һɱģʽ" );
				m_pPlayer->SetSuperHit( FALSE );
			TRY_END}
			else
			{TRY_BEGIN
				m_pPlayer->SaySystem( "һɱģʽ" );
				m_pPlayer->SetSuperHit( TRUE );
			TRY_END}
		TRY_END}
		break;
	case	GC_ADDMP:
		{TRY_BEGIN
			if( nParam ==  1 )
			{TRY_BEGIN
				m_pPlayer->AddMp( StringToInteger( Params[0] ) );
			TRY_END}
		TRY_END}
		break;
	case	GC_NODEAD:
		{TRY_BEGIN
			if( m_pPlayer->IsNoDead() )
			{TRY_BEGIN
				m_pPlayer->SaySystem( "ȡ״̬!\n" );
			TRY_END}
			else
			{TRY_BEGIN
				m_pPlayer->SaySystem( "벻״̬!\n" );
			TRY_END}
			m_pPlayer->SetNoDead( !m_pPlayer->IsNoDead() );
		TRY_END}
		break;
	case	GC_REST:
		{TRY_BEGIN
			m_pPlayer->SetPetsActive( !m_pPlayer->IsPetsActive());
			if( m_pPlayer->IsPetsActive() )
				m_pPlayer->SaySystem( "ж!" );
			else
				m_pPlayer->SaySystem( "Ϣ!" );
		TRY_END}
		break;
	case	GC_SETSTATUS:
		{TRY_BEGIN
			if( nParam == 3 )
			{TRY_BEGIN
				m_pPlayer->SetStatus( StringToInteger( Params[0] ), StringToInteger( Params[1] ), StringToInteger( Params[2] ) );
			TRY_END}
		TRY_END}
		break;
	case	GC_CLRSTATUS:
		{TRY_BEGIN
			if( nParam == 1 )
			{TRY_BEGIN
				m_pPlayer->ClrStatus( StringToInteger( Params[0] ) );
			TRY_END}
		TRY_END}
		break;
	case	GC_RELOADCONFIG:
		{TRY_BEGIN
			if( nParam == 1 )
			{TRY_BEGIN
				if( stricmp( Params[0], "serverconfig" ) == 0 )
				{TRY_BEGIN
					CGameWorld::GetInstance()->LoadServerConfig();
					break;
				TRY_END}
				if( stricmp( Params[0], "item" ) == 0 )
				{TRY_BEGIN
					CItemManager::GetInstance()->Load( ".\\data\\baseitem.txt" );
					break;
				TRY_END}
				if( stricmp( Params[0], "monster" ) == 0 )
				{TRY_BEGIN
					CMonsterManagerEx::GetInstance()->LoadMonsters( ".\\data\\basemonsterex.txt" );
					break;
				TRY_END}
			TRY_END}
		TRY_END}
		break;
	case	GC_SCROLLTEXTMODE:
		{TRY_BEGIN
			if( !m_bScrollTextMode )
			{TRY_BEGIN
				m_pPlayer->SaySystem( "ģʽ˵ĻԹֵʽеĿͻˣ" );
				m_bScrollTextMode = TRUE;
			TRY_END}
			else
			{TRY_BEGIN
				m_pPlayer->SaySystem( "˳ģʽָ칦ܣ" );
				m_bScrollTextMode = FALSE;
			TRY_END}
		TRY_END}
		break;
	case	GC_MOVE:
		{TRY_BEGIN
			if(nParam == 2 )
			{TRY_BEGIN
				int x = StringToInteger( Params[0] );
				int y = StringToInteger( Params[1] );
				m_pPlayer->FlyTo( m_pPlayer->GetMapId(), x, y );
			TRY_END}
			else if( nParam == 3 )
			{TRY_BEGIN
				int mapid = StringToInteger( Params[0] );
				int x = StringToInteger( Params[1] );
				int y = StringToInteger( Params[2] );
				m_pPlayer->FlyTo( mapid, x, y );
			TRY_END}
		TRY_END}
		break;
	case	GC_SHOW:
		{TRY_BEGIN
			if( nParam == 1 )
			{TRY_BEGIN
				ITEM * pItem = m_pPlayer->GetEquipment( _U_WEAPON );
				if( pItem )
				{TRY_BEGIN
					pItem->baseitem.bNeedIdentify = StringToInteger(Params[0]) & 0xff;
					m_pPlayer->SendUpdateItem(*pItem);
				TRY_END}
			TRY_END}

		TRY_END}
		break;
	case	GC_MAKEITEM:
		{TRY_BEGIN
			if( nParam >= 1 )
			{TRY_BEGIN
				int count = 1;
				if( nParam >= 2 )
					count = StringToInteger( Params[1] );
				if( count == 0 )count = 1;
				for( int i = 0;i < count;i ++ )
					CItemManager::GetInstance()->CreateItem( Params[0], getId(), m_dwClientKey, m_pPlayer->GetDBId(), 0, IDF_BAG );
			TRY_END}
		TRY_END}
		break;
	case	GC_DROPITEM:
		{TRY_BEGIN 
			if( nParam >= 1 )
			{TRY_BEGIN
				int count = 1;
				if( nParam >= 2 )
					count = StringToInteger( Params[1] );
				if( count == 0 )count = 1;
				for( int i = 0;i < count;i ++ )
				{TRY_BEGIN
					ITEM	item;
					if( CItemManager::GetInstance()->CreateTempItem( Params[0], item, FALSE ) )
					{TRY_BEGIN
						m_pPlayer->DropItem(item);
					TRY_END}
					
				TRY_END}

			TRY_END}
		TRY_END}
		break;
	case	GC_DROPITEMTEST:
		{TRY_BEGIN
			if( nParam == 3 ) 
			{TRY_BEGIN
				int i = 0;
				int start = atoi( Params[0] );
				int end = atoi( Params[1] );
				BYTE	btFlag;

				if( Params[2][0] == '1' )
					btFlag = IDF_GROUND; 
				else 
					btFlag = IDF_BAG;
				char	szName[20];

				for( int i = start;i <= end;i ++ )
				{TRY_BEGIN
					sprintf( szName, "%03d", i );
					CreateTestItem( szName, i, 33, 33, btFlag );
				TRY_END}
			TRY_END}
		TRY_END}
		break;
	case	GC_SETITEMCLASS:
		{TRY_BEGIN 
			if( !CItemManager::GetInstance()->AddItemClassString(Params[0]) )
				m_pPlayer->Say( CItemManager::GetInstance()->GetErrorMsg() );
			else
				CItemManager::GetInstance()->SaveItemList( ".\\data\\baseitem.txt" );
		TRY_END}
		break;
	case	GC_CLEANALLITEM:
		{TRY_BEGIN
			ITEM	items[40];
			int	count = 0;
			CItemBox & bag = m_pPlayer->GetBag();
			count = bag.GetItems(items, 40 );
			for( int i = 0;i < count;i ++ )
			{TRY_BEGIN
				m_pPlayer->DropBagItem( items[i].dwMakeIndex );
				/*if( bag.RemoveItem(items[i].dwMakeIndex) )
					SendMsg( items[i].dwMakeIndex, SM_EAT_OK, 0, 0, 0, NULL );*/
			TRY_END}
		TRY_END}
		break;
	case	GC_SENDAROUNDMSG:
		{TRY_BEGIN
			//if( nParam == 1 )
			//{TRY_BEGIN
			//	int size = GetMsgFromString( Params[0], szMsg );
			//	if( size > 0 )
			//	{TRY_BEGIN
			//		m_pPlayer->GetArea()->SendAroundMsg(m_pPlayer, szMsg, size );
			//	TRY_END}
			//TRY_END}
		TRY_END}
		break;
	case	GC_SENDSINGLEMSG:
		{TRY_BEGIN
			if(nParam != 2 )break;

			CHumanPlayer * p = CHumanPlayerMgr::GetInstance()->FindbyName( Params[0] );
			if( p != NULL )
			{TRY_BEGIN
				int size = GetMsgFromString( Params[0], szMsg );
				if( size > 0 )
				{TRY_BEGIN
					p->OnAroundMsg(m_pPlayer, szMsg, size );
				TRY_END}
			TRY_END}

		TRY_END}
		break;
	case	GC_SENDMSG:
		{TRY_BEGIN
			if( nParam != 1 )break;
			int size = GetMsgFromString( Params[0], szMsg );
			if( size > 0 )
			{TRY_BEGIN
				m_pPlayer->OnAroundMsg(m_pPlayer, szMsg, size );
			TRY_END}
		TRY_END}
		break;
	case	GC_ADDMAGIC:
		{TRY_BEGIN
			if( nParam != 1 )break;
			m_pPlayer->AddMagic( Params[0] );
			//MAGIC	magic;
			//if( CMagicManager::GetInstance()->CreateMagic( Params[0], magic ) && m_pPlayer->AddMagic( magic.wId ))
			//	SendMsg( 0, 0xd2, 0, 0, 1, &magic, sizeof( magic ));
			
		TRY_END}
		break;
	case	GC_SETMAGICCLASS:
		{TRY_BEGIN
			if( nParam != 1 )break;
			CMagicManager::GetInstance()->AddMagicClassString( Params[0] );
		TRY_END}
		break;
	case	GC_ADDNPC:
		{TRY_BEGIN
			if( nParam != 1 )break;
			CNpcManager::GetInstance()->AddNpc(Params[0]);
		TRY_END}
		break;
	case	GC_ADDSCRIPTPAGE:
		{TRY_BEGIN
			if( nParam != 1 )break;
			CScriptObjectMgr::GetInstance()->OnFoundFile( Params[0] );
		TRY_END}
		break;
	case	GC_NOWDEATH:
		{TRY_BEGIN
			m_pPlayer->ToDeath();
		TRY_END}
		break;
	case	GC_CALLMON:
		{TRY_BEGIN
			if( nParam == 1 )
			{TRY_BEGIN
				BOOL	bSetOwner = FALSE;
				if( *Params[0] == '!' )
				{TRY_BEGIN
					Params[0] ++;
					bSetOwner = TRUE;  
				TRY_END}
				CMonsterEx * pMonster = CMonsterManagerEx::GetInstance()->CreateMonster( Params[0], m_pPlayer->GetMapId(), m_pPlayer->getX(), m_pPlayer->getY()+1);
				if( pMonster )
				{TRY_BEGIN
					if(CGameWorld::GetInstance()->AddMapObject( pMonster ) )
						if( bSetOwner )pMonster->SetOwner( m_pPlayer );
					
				TRY_END}

			TRY_END}
		TRY_END}
		break;
	case	GC_ADDEXP:
		{TRY_BEGIN
			if( nParam == 1 )
			{TRY_BEGIN
				DWORD dwExp = (DWORD)atoi(Params[0] );
				m_pPlayer->AddExp( dwExp, 0 );
				//m_pPlayer->SendScrollText( "12345678901234567890123456789012345678901234567890" );
			TRY_END}
		TRY_END}
		break;
	case	GC_GAMEMASTER:
		{TRY_BEGIN
			if( m_iGmLevel == 0 )
			{TRY_BEGIN
				m_iGmLevel = CGmManager::GetInstance()->GetGmLevel( m_EnterInfo.szAccount );
				if( m_iGmLevel >0 )
				{TRY_BEGIN
					m_pPlayer->SaySystem( "GMģʽ!" );
				TRY_END}
			TRY_END}
			else
			{TRY_BEGIN
				m_iGmLevel = 0;
				m_pPlayer->SaySystem( "˳GMģʽ!" );
			TRY_END}

		TRY_END}
		break;
	case	GC_SETLEVEL:
		{TRY_BEGIN	
			if( nParam == 1 )
			{TRY_BEGIN
				m_pPlayer->LevelUp( StringToInteger(Params[0]));
			TRY_END}
			else if( nParam == 2 )
			{TRY_BEGIN
				UINT level = (UINT)StringToInteger( Params[1] );
				if( level > 0 )
				{TRY_BEGIN
					CHumanPlayer * pPlayer = CHumanPlayerMgr::GetInstance()->FindbyName(Params[0]);
					if( pPlayer )
					{TRY_BEGIN
						pPlayer->LevelUp(level);
					TRY_END}
				TRY_END}
			TRY_END}
		TRY_END}
		break;
	case	GC_ADDGOLD:
		{TRY_BEGIN
			if( nParam == 1 )
			{TRY_BEGIN
				m_pPlayer->AddGold( StringToInteger( Params[0] ) );
			TRY_END}
		TRY_END}
		break;
	case	GC_HOME:
		{TRY_BEGIN
			m_pPlayer->Home();
		TRY_END}
		break;
	default:
		m_pPlayer->SaySystem( "<˴>" );
		break;
	}
TRY_END}