⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 charselect.cpp

📁 墨香最新私服
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// CharSelect.cpp: implementation of the CCharSelect class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "CharSelect.h"
#include "MainGame.h"
#include "MainTitle.h"
#include "cWindowSystemFunc.h"
#include "WindowIDEnum.h"
#include "./interface/cWindowManager.h"
#include "./Interface/cPushupButton.h"
#include "./Interface/cResourceManager.h"
#include "ObjectManager.h"
#include "MHTimeManager.h"
#include "ChatManager.h"
#include "OptionManager.h"
#include "MHMap.h"
#include "MHCamera.h"
#include "./Interface/cScriptManager.h"

#include "cMsgBox.h"
#include "./Input/UserInput.h"



#define CHARSELECT_STAND_POSX	27930
#define CHARSELECT_STAND_POSZ	7834
#define CHARSELECT_STAND_GAP	145
#define CHARSELECT_STAND_HEIGHT	4895



//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
GLOBALTON(CCharSelect)
CCharSelect::CCharSelect()
{
	m_CurSelectedPlayer = -1;
	m_pDoublcClickedPlayer = NULL;
//	m_bDoublcClicked	= FALSE;
	m_pPlayer[0] = NULL;
	m_pPlayer[1] = NULL;
	m_pPlayer[2] = NULL;
	m_pPlayer[3] = NULL;

	m_pSelectDlg = NULL;
	m_pChannelDlg = NULL;
}

CCharSelect::~CCharSelect()
{
	
}

BOOL CCharSelect::Init(void* pInitParam)
{
	//YH2DO -_-
	if(MAP->IsInited() == FALSE)
		MAP->InitMap(102);

	m_pPlayer[0] = NULL;
	m_pPlayer[1] = NULL;
	m_pPlayer[2] = NULL;
	m_pPlayer[3] = NULL;
	
	NETWORK->SetCurState(this);

	NewCreateCharSelect_m();
	m_pSelectDlg = WINDOWMGR->GetWindowForID( CS_CHARSELECTDLG );
	CreateChannelDlg();
	m_pChannelDlg = (CChannelDialog*)WINDOWMGR->GetWindowForID( CHA_CHANNELDLG );
	if(m_pChannelDlg)
	{
		m_pChannelDlg->Linking();
	}

	WINDOWMGR->AfterInit();
	ASSERT(pInitParam);
	SEND_CHARSELECT_INFO * pmsg = (SEND_CHARSELECT_INFO *)pInitParam;
	NetworkMsgParse(pmsg->Category, pmsg->Protocol, pInitParam);

	//////////////////////////////////////////////////////////////////////////
	// 弊覆磊 贸府甫 困秦
	VECTOR3 pos = {0,0,0};
	float xpos = CHARSELECT_STAND_POSX;
	float zpos = CHARSELECT_STAND_POSZ;
	float gap = CHARSELECT_STAND_GAP;
	for(int n=0;n<4;++n)
	{
//		pos.x += CHARSELECT_STAND_POSX;
//		pos.y += CHARSELECT_STAND_HEIGHT;		
//		pos.z += CHARSELECT_STAND_POSZ + n * CHARSELECT_STAND_GAP + 100;

		pos.x = xpos + (n *120);
		pos.y = CHARSELECT_STAND_HEIGHT;
		pos.z = zpos + 30 * n;
	}
//	pos.x /= 4.f;
//	pos.y /= 4.f;
//	pos.z /= 4.f;
	MAP->SetShadowPivotPos(&pos);
	//////////////////////////////////////////////////////////////////////////
	
//KES 030827 颗败咳 <-- 颇教窃荐肺 何磐
	InitCameraInCharSelect();
	
	m_CurSelectedPlayer = -1;
	SelectPlayer( -1 );
	m_pDoublcClickedPlayer = NULL;
	SetDisablePick( FALSE );

	m_bBackToMainTitle = FALSE;

	return TRUE;
}

void CCharSelect::Release(CGameState* pNextGameState)
{
	OBJECTMGR->RemoveAllObject();
	WINDOWMGR->DestroyWindowAll();
	RESRCMGR->ReleaseResource(11);

	if(pNextGameState == NULL )
		MAP->Release();
	//map release()窍绰 镑捞 绝促?
}

void CCharSelect::Process()
{
///	MHTIMEMGR->Process();
	if(CAMERA->GetGotoPosition() != -1)
		CAMERA->Process();

	if( m_pDoublcClickedPlayer )
	{
		if( m_pDoublcClickedPlayer->GetEngineObject()->GetCurMotion() == eMotion_Sel1Afterstop )
		{
			SendMsgGetChannelInfo();
			m_pDoublcClickedPlayer = NULL;
		}
	}	

//KES
	if( WINDOWMGR->IsMouseInputProcessed() ) return;	//dialog啊 喘啡促.
	if( m_bDiablePick ) return;							//皋技瘤冠胶啊 豆促.
//

//付快胶肺 努腐
	if( MOUSE->LButtonDoubleClick() )
	{
		CPlayer* pPlayer = (CPlayer*)GetSelectedObject( MOUSE->GetMouseEventX(), MOUSE->GetMouseEventY());

		if( pPlayer && m_pDoublcClickedPlayer == NULL )
		if( pPlayer == GetCurSelectedPlayer() )
		{
			m_pDoublcClickedPlayer = pPlayer;
			SetDisablePick( TRUE );
		}
	}
	else if( MOUSE->LButtonDown()  )
	{
		if( GetCurSelectedPlayer() )
		if( GetCurSelectedPlayer()->GetEngineObject()->GetCurMotion() != eMotion_Sel1Afterstop )
			return;

		CPlayer* pPlayer = (CPlayer*)GetSelectedObject( MOUSE->GetMouseEventX(), MOUSE->GetMouseEventY());

		if( pPlayer && m_pDoublcClickedPlayer == NULL )
		{
			for( int i = 0 ; i < 4 ; ++i )
			{
				if( m_pPlayer[i] == pPlayer )
				{
					SelectPlayer( i );
					break;
				}
			}
		}
	}


}

void CCharSelect::BeforeRender()
{
	g_pExecutive->GetRenderer()->BeginRender(0,0,0);
	g_pExecutive->GetRenderer()->EndRender();
	MAP->Process( gCurTime );
}

void CCharSelect::AfterRender()
{
	WINDOWMGR->Render();
}

CPlayer* CCharSelect::GetCurSelectedPlayer()
{
	if(m_CurSelectedPlayer == -1)
		return NULL;
	CPlayer* pPlayer = m_pPlayer[m_CurSelectedPlayer];
		return pPlayer;
}

void CCharSelect::NetworkMsgParse(BYTE Category,BYTE Protocol,void* pMsg)
{
	switch(Category) 
	{
	case MP_USERCONN:
		{
			switch(Protocol) 
			{
			case MP_USERCONN_CHARACTERLIST_ACK:
				{	
					
					SEND_CHARSELECT_INFO* pmsg = (SEND_CHARSELECT_INFO*)pMsg;

					memset(m_pPlayer,0,sizeof(CPlayer*)*MAX_CHARACTER_NUM);

					VECTOR3 pos;
//					float xpos[4] = { 25755, 25684, 25613, 25542 };
					float xpos = CHARSELECT_STAND_POSX;
					float zpos = CHARSELECT_STAND_POSZ;
					float gap = CHARSELECT_STAND_GAP;
					float height = CHARSELECT_STAND_HEIGHT;

					DWORD basiccolor = RGBA_MAKE(255,255,255,255);
					DWORD overcolor = RGBA_MAKE(255,255,255,255);
					DWORD presscolor = RGBA_MAKE(255,255,0,255);

					int t = -1;
					for(int i = 0; i < pmsg->CharNum ; i++)
					{
						WORD standpoint = pmsg->StandingArrayNum[i];
						
						// YH 老窜 急琶芒俊辑 公扁 哗初澜.
						pmsg->ChrTotalInfo[i].WearedItemIdx[eWearedItem_Weapon] = 0;
						
						m_pPlayer[standpoint] = OBJECTMGR->AddPlayer(&pmsg->BaseObjectInfo[i],NULL,&pmsg->ChrTotalInfo[i]);
						CPlayer* pPlayer = m_pPlayer[standpoint];						

						pPlayer->GetEngineObject()->ApplyHeightField(FALSE);
						pPlayer->SetOverInfoOption(0);

//						pos.x = xpos[standpoint] + 2000;
						pos.x = xpos + (standpoint *120);
						pos.y = height;
						pos.z = zpos + 30 * standpoint;
						
						char LevelName[255];
/*
						//烙矫肺 蜡历绰 立加窍绰 甘阑 葛弗促. 唱吝俊 牢磐其捞胶 促矫 父甸锭 甸绢哎 傍埃阑 积阿秦辑 父甸磊.
						if( MAINGAME->GetUserLevel() <= eUSERLEVEL_DEVELOPER )
							sprintf(LevelName,"[Lv%2d] %-16s[%s]",pmsg->ChrTotalInfo[i].Level,pmsg->BaseObjectInfo[i].ObjectName, GetMapName(pmsg->ChrTotalInfo[i].LoginMapNum) );
						else
							sprintf(LevelName,"[Lv%2d] %-16s",pmsg->ChrTotalInfo[i].Level,pmsg->BaseObjectInfo[i].ObjectName );
*/
						cPushupButton * btn = (cPushupButton *)WINDOWMGR->GetWindowForIDEx(MT_FIRSTCHOSEBTN+standpoint);
						wsprintf(LevelName,"[Lv%2d] %-16s",pmsg->ChrTotalInfo[i].Level,pmsg->BaseObjectInfo[i].ObjectName );
						btn->SetText(LevelName, basiccolor, overcolor, presscolor);
						cImage ToolTipImg;
						SCRIPTMGR->GetImage( 63, &ToolTipImg, PFT_HARDPATH );
//						if( MAINGAME->GetUserLevel() <= eUSERLEVEL_DEVELOPER )
						{
							btn->SetToolTip( GetMapName(pmsg->ChrTotalInfo[i].LoginMapNum), RGB_HALF(255,255,255), &ToolTipImg, TTCLR_ITEM_CANEQUIP );
						}

						pPlayer->SetPosition(&pos);
						pPlayer->SetAngle(DEGTORAD(50 - 20*standpoint ));	// 规氢 倒府扁

						//KES 烙矫.. 4锅掳 某腐磐 规氢 距埃 炼沥
						if( standpoint == 3 )
							pPlayer->SetAngle(DEGTORAD(50 - 20*standpoint + 10 ));	// 规氢 倒府扁
						
						pPlayer->ChangeBaseMotion(eMotion_Sel1Before);//+4*standpoint);
						pPlayer->ChangeMotion(eMotion_Sel1Before,0);//+4*standpoint, 0);
						
						pPlayer->ShowObjectName( FALSE );
						pPlayer->GetEngineObject()->EnableShadow(TRUE);
						
//						OPTIONMGR->ClrKyungGong();//***
					}

					//InitCameraInCharSelect();
				}				
				return;
			case MP_USERCONN_CHARACTERLIST_NACK:
				{
					LOG(EC_CHARACTERLIST_FAILED);
				}				
				return;
			case MP_USERCONN_CHARACTER_REMOVE_ACK:
				{
					CPlayer* pPlayer = GetCurSelectedPlayer();
					if(!pPlayer)
					{
						ASSERTMSG(0, "某腐磐 昏力-敲饭捞绢啊 绝嚼聪促.No Character For Delete!");
						return;
					}				
					
					cPushupButton * editboxName = (cPushupButton *)WINDOWMGR->GetWindowForIDEx(MT_FIRSTCHOSEBTN + m_CurSelectedPlayer);
					editboxName->SetText("",RGBA_MAKE(255,255,255,255),NULL,NULL);
					editboxName->SetPush(FALSE);
					
					m_pPlayer[m_CurSelectedPlayer] = NULL;
					m_CurSelectedPlayer = -1;
					OBJECTMGR->AddGarbageObject(pPlayer);
				
					SelectPlayer(-1);
					SetDisablePick( FALSE );
				}
				return;
			case MP_USERCONN_CHARACTER_REMOVE_NACK:
				{
					WINDOWMGR->MsgBox( MBI_DELETECHARFAIL, MBT_OK, CHATMGR->GetChatMsg(25) );
					SetDisablePick( FALSE );
				}
				return;

			case MP_USERCONN_DISCONNECT_ACK:
				{
					SetDisablePick( TRUE );
//					OBJECTMGR->RemoveAllObject();	//咯扁辑 救瘤快绊 release俊辑 瘤快搁 maintitle拳搁俊 泪矫 焊牢促.
//					MAINGAME->SetGameState(eGAMESTATE_TITLE);	//俊捞怜飘啊 谗唱搁..
//					SetBlock(FALSE);
					
					//立加 谗扁绰 镑俊辑 窃.
					m_bBackToMainTitle = TRUE;
					

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -