コード例 #1
0
	// 获得宠物
	INT StallSale::EnumPet(LuaPlus::LuaState* state)
	{
		LuaPlus::LuaStack args(state);
		if (!(args[2].IsInteger()))
		{
			TDThrow("LUA:StallSale::EnumPet[2] param parameter error");
		}
		INT nIndex = args[2].GetInteger();

		SDATA_PET* pPet = CDataPool::GetMe()->MyStallBox_GetPet(nIndex);
		if(pPet)
		{
			STRING szName = pPet->m_szName;
			state->PushString(szName.c_str());
		}
		else
		{
			state->PushString("");
		}
		return 1;
	}
コード例 #2
0
	INT PetInviteFriend::SetPetModel(LuaPlus::LuaState* state)
	{
		LuaStack args(state);

		if(!(args[2].IsInteger()))
		{
			TDThrow("LUA: PetInviteFriend SetPetModel Wrong Param1");
			return -1;
		}
		INT lidx = args[2].GetInteger() - 1;	//Lua is begin from 1, but c begin from 0

		if(GetPetListData(lidx))
		{
			if(INVALID_ID != GetPetListData(lidx)->m_nIsPresent)
			{
				SetPetListFakeObj(lidx, GetPetListData(lidx)->m_nDataID);
			}
		}

		return 0;
	}
コード例 #3
0
//g_MoneyBonus=905
void parseMoneyBonus(CHAR** pDest,CHAR* pSrc,INT j)
{
	CHAR* pCur = strchr(pSrc,'=');
	if(!pCur)
		TDThrow("策划写错了这个脚本:%s", pSrc);
	while(!isdigit(*pCur))
		pCur++;

	sprintf(*pDest,"%d",atoi(pCur));

	SMissionBonus* rewardItem = new SMissionBonus;
	rewardItem->m_uMoney = atoi(pCur);
	rewardItem->m_nType =  MISSION_BONUS_TYPE_MONEY;

	_MISSION_INFO::QuestRewardItem newRewardItem;

	newRewardItem.pItemData = rewardItem;
	newRewardItem.bSelected = FALSE;

	misInfo->m_vecQuestRewardItem.push_back(newRewardItem);
}
コード例 #4
0
	// 更改摊位名字
	INT StallSale::ModifStallName(LuaPlus::LuaState* state)
	{
		LuaPlus::LuaStack args(state);
		if (!(args[2].IsString()))
		{
			TDThrow("LUA:StallSale::ModifStallName[2] param parameter error");
			return 0;
		}
		std::string str	= args[2].GetString();

		//过虑不能使用的字
		//验证商店名称的合法性
		if(!CGameProcedure::s_pUISystem->CheckStringFilter(str))
		{
			STRING strTemp = "";
			strTemp = NOCOLORMSGFUNC("ERRORSpecialString");
			CGameProcedure::s_pEventSystem->PushEvent( GE_GAMELOGIN_SHOW_SYSTEM_INFO, strTemp.c_str());
			return 0;
		}
		//验证商店名称的合法性
		if(!TDU_CheckStringValid(str.c_str()))
		{
			STRING strTemp = "";
			strTemp = NOCOLORMSGFUNC("ERRORSpecialString");
			CGameProcedure::s_pEventSystem->PushEvent( GE_GAMELOGIN_SHOW_SYSTEM_INFO, strTemp.c_str());
			return 0;
		}


		if(str.size() > MAX_STALL_NAME)
		{
			str.resize(MAX_STALL_NAME);
		}
		CGStallShopName msg;
		msg.SetStallName((CHAR*)str.c_str());
		msg.SetStallNameSize((BYTE)str.size());
		CNetManager::GetMe()->SendPacket(&msg);
		
		return 0;
	}
コード例 #5
0
	INT PetInviteFriend::ShowTargetPet(LuaPlus::LuaState* state)
	{
		LuaStack args(state);

		if(!(args[2].IsInteger()))
		{
			TDThrow("LUA: PetInviteFriend ShowTargetPet Wrong Param1");
			return -1;
		}
		INT lidx = args[2].GetInteger() - 1;	//Lua is begin from 1, but c begin from 0

		if(GetPetListData(lidx))
		{
			if(INVALID_ID != GetPetListData(lidx)->m_nIsPresent)
			{
				CDataPool::GetMe()->Pet_CopyToTarget(GetPetListData(lidx));
				CEventSystem::GetMe()->PushEvent(GE_UPDATE_PETINVITEFRIEND, "target");	//通知TargetPet显示宠物
			}
		}

		return 0;
	}
コード例 #6
0
	//从玩家信息界面切换到玩家装备界面
	INT SystemSetup::Lua_OpenEquipFrame(LuaPlus::LuaState* state)
	{
		//打开装备界面
		LuaPlus::LuaStack args(state);
		if (!(args[2].IsString()))
		{
			TDThrow("SystemSetup::Lua_OpenEquipFrame[2] param parameter error");
		}
		std::string str = args[2].GetString();

		if( str == "self" )
		{
			//打开自己的
			CEventSystem::GetMe()->PushEvent(GE_OPEN_EQUIP);
		}
		else
		{
			// 打开别人的
			CEventSystem::GetMe()->PushEvent(GE_OTHERPLAYER_UPDATE_EQUIP);
		}
		return 0;
	}
コード例 #7
0
ファイル: RenderSystem.cpp プロジェクト: brock7/TianLong
/// 渲染OGRE场景
VOID CRenderSystem::RenderFrame(VOID)
{
	if(!Ogre::Root::getSingletonPtr())
	{
		TDThrow("Ogre::Root = 0");
	}

	const UINT MAX_RENDER_INTER_TIME = 2000;

	static UINT s_nLastRenderTime = 0;
	UINT s_nTimeNow = g_pTimeSystem->GetTimeNow();

	if(g_pTimeSystem->CalSubTime(s_nLastRenderTime, s_nTimeNow) > MAX_RENDER_INTER_TIME)
	{
		Ogre::Root::getSingleton().clearEventTimes();
		s_nLastRenderTime = s_nTimeNow;
		return;
	}
	s_nLastRenderTime = s_nTimeNow;
	
	Ogre::Root::getSingleton().renderOneFrame();
}
コード例 #8
0
	// 宠物更改价格
	INT StallSale::PetReprice(LuaPlus::LuaState* state)
	{
		//更改宠物价格
		LuaPlus::LuaStack args(state);
		if (!(args[2].IsInteger()))
		{
			TDThrow("LUA:StallSale::ItemReprice[2] param parameter error");
		}
		INT nMoney = args[2].GetInteger();

		if(nMoney > 1000000000)
		{
			CEventSystem::GetMe()->PushEvent(GE_NEW_DEBUGMESSAGE,"摆摊时不得进行超过十万金以上的交易");
			return 0;
		}
		if(nMoney <= 0)
		{
			CEventSystem::GetMe()->PushEvent(GE_NEW_DEBUGMESSAGE,"改价失败,上架价格不能为零");
			return 0;
		}

		INT nPetId = CDataPool::GetMe()->MyStallBox_GetnSelectPetOnStall();

		SDATA_PET *pPet = CDataPool::GetMe()->MyStallBox_GetPet(nPetId);

		if(!pPet)
		{
			return 0;
		}

		CGStallItemPrice msg;
		msg.SetPetGUID(pPet->m_GUID);
		msg.SetPrice(nMoney);
		msg.SetSerial( CDataPool::GetMe()->MyStallBox_GetPetSerial(nPetId) );

		CNetManager::GetMe()->SendPacket(&msg);
		return 0;
	}
コード例 #9
0
	INT		PlayerMySelf::GetBuffIconNameByIndex( LuaPlus::LuaState* state )
	{
		LuaPlus::LuaStack args(state);
		if (!(args[2].IsInteger()))
		{
			TDThrow("LUA:GetBuffIconNameByIndex param parameter error");
		}

		INT nIndex = args[2].GetInteger();
		CDataPool *pDataPool = CDataPool::GetMe();
		const _BUFF_IMPACT_INFO *pBuffImpactInfo = pDataPool->BuffImpact_GetByIndex( nIndex );
		if ( pBuffImpactInfo != NULL )
		{
			_BUFF_IMPACT *pBuffImpact = GetBuffImpactMgr()->GetBuffImpact( pBuffImpactInfo->m_nBuffID );
			if ( pBuffImpact != NULL )
			{
				if ( strlen( pBuffImpact->m_szIconName ) > 0 )
				{
					state->PushString(pBuffImpact->m_szIconName);
					return 1;
				}
				else
				{
					Assert( strlen( pBuffImpact->m_szIconName ) > 0 && "PlayerMySelf::GetBuffIconNameByIndex" );
				}
			}
			else
			{
				Assert( pBuffImpact != NULL > 0 && "PlayerMySelf::GetBuffIconNameByIndex" );
			}
		}
		else
		{
			Assert( pBuffImpactInfo != NULL > 0 && "PlayerMySelf::GetBuffIconNameByIndex" );
		}
		state->PushString("");
		return 1;
	}
コード例 #10
0
VOID CInputSystem::Initial(VOID*)
{
	HRESULT hr;

	m_hWnd = g_hMainWnd;

    // Create a DInput object
    if( FAILED( hr = DirectInput8Create( GetModuleHandle(NULL), DIRECTINPUT_VERSION, 
                                         IID_IDirectInput8, (VOID**)&m_pDI, NULL ) ) )
	{
		TDThrow(_T("Create a DInput object error:%08X"), hr);
        return;
	}

	// Create the keyboard device
	hr = m_pDI->CreateDevice(GUID_SysKeyboard, &m_lpDIDKeyboard, NULL);
	if(hr == DI_OK)
	{
		m_lpDIDKeyboard->SetDataFormat(&c_dfDIKeyboard);
		m_lpDIDKeyboard->SetCooperativeLevel(g_hMainWnd, DISCL_NONEXCLUSIVE | DISCL_FOREGROUND);

		AcquireKeyboard();
	}
}
コード例 #11
0
VOID CGameProcedure::CreateMainWnd(VOID)
{
	//------------------------------------------------------
	//计算窗口大小
	m_bMinimized		= FALSE;
	m_bFullScreen		= TRUE;
	fVector2 fResoution;
	if (CGameProcedure::s_pVariableSystem->GetAs_Int("View_FullScreen"))
	{
		fResoution.x  = (float)::GetSystemMetrics(SM_CXSCREEN);
		fResoution.y  = (float)::GetSystemMetrics(SM_CYSCREEN);	
	}
	else
	{
		fResoution = s_pVariableSystem->GetAs_Vector2("View_Resoution");
	}
	CGameProcedure::m_fWindowFOV = fResoution.x / fResoution.y;
	SetRect(&m_rectWindow, 0, 0, (int)fResoution.x, (int)fResoution.y);
	AdjustWindowRect(&m_rectWindow, DEFWINDOW_STYLE, FALSE);

	SetRect(&m_rectFCOffset, m_rectWindow.left, m_rectWindow.top, 
		m_rectWindow.right-(int)fResoution.x, m_rectWindow.bottom-(int)fResoution.y);

	UINT dwX = (::GetSystemMetrics(SM_CXFULLSCREEN)-(m_rectWindow.right-m_rectWindow.left))/2;
	UINT dwY = (::GetSystemMetrics(SM_CYFULLSCREEN)-(m_rectWindow.bottom-m_rectWindow.top))/2;
	OffsetRect(&m_rectWindow, -m_rectFCOffset.left, -m_rectFCOffset.top);
	OffsetRect(&m_rectWindow, dwX, dwY);

	m_bActive			= true;
	m_bRenderingPaused	= FALSE;

	//------------------------------------------------------
	//注册窗口类
	WNDCLASSEX wcex;

	wcex.cbSize = sizeof(WNDCLASSEX); 
	wcex.style			= CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
	wcex.lpfnWndProc	= (WNDPROC)_MainWndProc;
	wcex.cbClsExtra		= 0;
	wcex.cbWndExtra		= 0;
	wcex.hInstance		= g_hInstance;
	wcex.hIcon			= LoadIcon(g_hInstance, (LPCTSTR)IDD_GAME_DIALOG);
	wcex.hCursor		= LoadCursor( NULL, IDC_ARROW );
	wcex.hbrBackground	= (HBRUSH)NULL; //GetStockObject(WHITE_BRUSH);
	wcex.lpszMenuName	= (LPCTSTR)NULL;
	wcex.lpszClassName	= MAINWINDOW_CLASS;
	wcex.hIconSm		= LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL);

	RegisterClassEx(&wcex);

	//------------------------------------------------------
	//创建窗口
	CHAR szTitle[MAX_PATH];
	_snprintf(szTitle, MAX_PATH, "%s %s (%s %s)", GAME_TITLE, VERSION_INFO, __DATE__, __TIME__);

	HWND hWnd = CreateWindowEx(NULL, MAINWINDOW_CLASS, szTitle, 
		DEFWINDOW_STYLE,
		m_rectWindow.left, m_rectWindow.top, 
		m_rectWindow.right-m_rectWindow.left, 
		m_rectWindow.bottom-m_rectWindow.top,
		NULL, NULL, g_hInstance, NULL);

	if (!hWnd)
	{
		TDThrow(_T("Can't create main window!"));
	}

	if (CGameProcedure::s_pVariableSystem->GetAs_Int("View_FullScreen"))
	{
		s_pEventSystem->PushEvent(GE_VARIABLE_CHANGED, "View_FullScreen", "1");
		s_pEventSystem->PushEvent(GE_CHAT_ADJUST_MOVE_CTL, (INT)fResoution.x, (INT)fResoution.y);
	}else
	{
		const STRING& strVariable = CGameProcedure::s_pVariableSystem->GetAs_String("View_Resoution");
		s_pEventSystem->PushEvent(GE_VARIABLE_CHANGED,"View_Resoution", strVariable.c_str());
		s_pEventSystem->PushEvent(GE_CHAT_ADJUST_MOVE_CTL, (INT)fResoution.x, (INT)fResoution.y);
	}

	ShowWindow(hWnd, SW_SHOW);
	UpdateWindow(hWnd);

	g_hMainWnd = hWnd;
}
コード例 #12
0
ファイル: RFObjDummy.cpp プロジェクト: brock7/TianLong
//设置是否可见
VOID CRFObj_Dummy::SetVisible(BOOL bVisible)
{
	TDThrow("Not support!");
}
コード例 #13
0
uint GCNewPet_MoveHandler::Execute( GCNewPet_Move* pPacket, Player* pPlayer ) 
{
	//当前流程是主流程
	if(CGameProcedure::GetActiveProcedure() == (CGameProcedure*)CGameProcedure::s_pProcMain)
	{
		CObjectManager* pObjectManager = CObjectManager::GetMe();

		//检查位置是否合法
		if(!CWorldManager::GetMe()->GetActiveScene()->IsValidPosition(fVector2(pPacket->getWorldPos().m_fX, pPacket->getWorldPos().m_fZ)))
		{
			TDThrow("ERROR POSITION @ GCNewMonster_MoveHandler");
		}
		if(!CWorldManager::GetMe()->GetActiveScene()->IsValidPosition(fVector2(pPacket->getTargetPos().m_fX, pPacket->getTargetPos().m_fZ)))
		{
			TDThrow("ERROR POSITION @ GCNewMonster_MoveHandler target");
		}

		//创建玩家
		CObject_PlayerNPC* pNPC = (CObject_PlayerNPC*)pObjectManager->FindServerObject( (INT)pPacket->getObjID() );
		fVector3 fvGame;
		CGameProcedure::s_pGfxSystem->Axis_Trans(
			CRenderSystem::AX_PLAN, fVector3(pPacket->getWorldPos().m_fX, 0.0f, pPacket->getWorldPos().m_fZ),
			CRenderSystem::AX_GAME, fvGame);

		if ( pNPC == NULL )
		{
			pNPC = pObjectManager->NewPlayerNPC( (INT)pPacket->getObjID() );

			SObjectInit initPlayerNPC;
			initPlayerNPC.m_fvPos	= fvGame;
			initPlayerNPC.m_fvRot	= fVector3( 0.f, 0.f, 0.f );

			pNPC->Initial( &initPlayerNPC );
		}
		else
		{
			fVector2 mapPos(fvGame.x, fvGame.z);
			pNPC->SetMapPosition(mapPos);
			pNPC->Enable( OSF_VISIABLE );
			pNPC->Disalbe( OSF_OUT_VISUAL_FIELD );
		}
		pNPC->SetNpcType(NPC_TYPE_PET);

		pNPC->GetCharacterData()->Set_MoveSpeed(pPacket->getMoveSpeed());

		// move to command
		{
			WORLD_POS posTarget;
			posTarget.m_fX	= pPacket->getTargetPos().m_fX;
			posTarget.m_fZ	= pPacket->getTargetPos().m_fZ;

			SCommand_Object cmdTemp;
			cmdTemp.m_wID			= OC_MOVE;
			cmdTemp.m_auParam[0]	= 0;
			cmdTemp.m_anParam[1]	= pPacket->getHandleID();
			cmdTemp.m_anParam[2]	= 1;
			cmdTemp.m_apParam[3]	= &posTarget;
			pNPC->PushCommand(&cmdTemp );
		}

		//放入Ask队列
		CObjectManager::GetMe()->GetLoadQueue()->TryAddLoadTask(pNPC->GetID(), CObject_Character::CT_MONSTER);

		// tempcode{
		// 此版不做服务器繁忙客户端延后发消息的处理
//		CGCharAskBaseAttrib msgAskBaseAttrib;
//		msgAskBaseAttrib.setTargetID( (INT)pPacket->getObjID() );
//		CNetManager::GetMe()->SendPacket( &msgAskBaseAttrib );

		// }


		//同步渲染层
		char szTemp[MAX_PATH];
		_snprintf(szTemp, MAX_PATH, "GCNewPet_Move(%.1f,%.1f)", 
			pPacket->getWorldPos().m_fX, pPacket->getWorldPos().m_fZ);
		pNPC->PushDebugString(szTemp);
		pNPC->SetMsgTime(CGameProcedure::s_pTimeSystem->GetTimeNow());
	}

	return PACKET_EXE_CONTINUE ;
}
コード例 #14
0
	//获得玩家信息
	INT SystemSetup::Lua_SetPrivateInfo(LuaPlus::LuaState* state)
	{
		LuaPlus::LuaStack args(state);
		if (!(args[2].IsString()))
		{
			TDThrow("SystemSetup::Lua_SetPrivateInfo[2] param parameter error");
		}
		if (!(args[3].IsString()))
		{
			TDThrow("SystemSetup::Lua_SetPrivateInfo[3] param parameter error");
		}
		//std::string strWho = args[2].GetString();
		//std::string str = args[3].GetString();

		//std::string strDesc;
		//if ((args[4].IsString()))
		//{
		//	strDesc = args[4].GetString();
		//	//验证商店名称的合法性
		//	if(!CGameProcedure::s_pUISystem->CheckStringFilter(strDesc))
		//	{
		//		STRING strTemp = "";
		//		strTemp = NOCOLORMSGFUNC("ERRORSpecialString");
		//		CGameProcedure::s_pEventSystem->PushEvent( GE_NEW_DEBUGMESSAGE, strTemp.c_str());
		//		strDesc = "";

		//		state->PushInteger(0);
		//		return 1;
		//	}
		//}
		//if( strWho == "self" )
		//{
		//	if( str == "type" )
		//	{
		//		CDataPool::GetMe()->PI_SetMyInfoType(args[4].GetInteger() );
		//	}
		//	else if( str == "age" )
		//	{
		//		CDataPool::GetMe()->PI_SetMyAge((args[4].GetInteger()==-1) ? 0 : args[4].GetInteger());
		//	}
		//	else if( str == "sex" )
		//	{
		//		CDataPool::GetMe()->PI_SetMySex((args[4].GetInteger()==-1) ? 0 : args[4].GetInteger());
		//	}
		//	else if( str == "job" )
		//	{
		//		CDataPool::GetMe()->PI_SetMyJobInfo(args[4].GetString());
		//	}
		//	else if( str == "school" )
		//	{
		//		CDataPool::GetMe()->PI_SetMySchoolInfo(args[4].GetString());
		//	}
		//	else if( str == "blood" )
		//	{
		//		CDataPool::GetMe()->PI_SetMyBloodType((args[4].GetInteger()==-1) ? 0 : args[4].GetInteger());
		//	}
		//	else if( str == "animal" )
		//	{
		//		CDataPool::GetMe()->PI_SetMyYearAnimal((args[4].GetInteger()==-1) ? 0 : args[4].GetInteger());
		//	}
		//	else if( str == "Consella" )
		//	{
		//		CDataPool::GetMe()->PI_SetMyConsella((args[4].GetInteger()==-1) ? 0 : args[4].GetInteger());
		//	}
		//	else if( str == "Province" )
		//	{
		//		CDataPool::GetMe()->PI_SetMyProvince((args[4].GetInteger()==-1) ? 0 : args[4].GetInteger());
		//	}
		//	else if( str == "city" )
		//	{
		//		CDataPool::GetMe()->PI_SetMyCity(args[4].GetString());
		//	}
		//	else if( str == "email" )
		//	{
		//		CDataPool::GetMe()->PI_SetMyEmailInfo(args[4].GetString());
		//	}
		//	else if( str == "luck" )
		//	{
		//		CDataPool::GetMe()->PI_SetMyLuckWord(args[4].GetString());
		//	}
		//}
		//else
		//{
		//	if( str == "type" )
		//	{
		//		CDataPool::GetMe()->PI_SetOtInfoType(args[4].GetInteger());
		//	}
		//	else if( str == "age" )
		//	{
		//		CDataPool::GetMe()->PI_SetOtAge(args[4].GetInteger());
		//	}
		//	else if( str == "sex" )
		//	{
		//		CDataPool::GetMe()->PI_SetOtSex(args[4].GetInteger());
		//	}
		//	else if( str == "job" )
		//	{
		//		CDataPool::GetMe()->PI_SetOtJobInfo(args[4].GetString());
		//	}
		//	else if( str == "school" )
		//	{
		//		CDataPool::GetMe()->PI_SetOtSchoolInfo(args[4].GetString());
		//	}
		//	else if( str == "blood" )
		//	{
		//		CDataPool::GetMe()->PI_SetOtBloodType(args[4].GetInteger());
		//	}
		//	else if( str == "animal" )
		//	{
		//		CDataPool::GetMe()->PI_SetOtYearAnimal(args[4].GetInteger());
		//	}
		//	else if( str == "Consella" )
		//	{
		//		CDataPool::GetMe()->PI_SetOtConsella(args[4].GetInteger());
		//	}
		//	else if( str == "Province" )
		//	{
		//		CDataPool::GetMe()->PI_SetOtProvince(args[4].GetInteger());
		//	}
		//	else if( str == "city" )
		//	{
		//		CDataPool::GetMe()->PI_SetOtCity(args[4].GetString());
		//	}
		//	else if( str == "email" )
		//	{
		//		CDataPool::GetMe()->PI_SetOtEmailInfo(args[4].GetString());
		//	}
		//	else if( str == "luck" )
		//	{
		//		CDataPool::GetMe()->PI_SetOtLuckWord(args[4].GetString());
		//	}
		//}
		//state->PushInteger(1);

		return 0;
	}
コード例 #15
0
VOID CNetManager::WaitConnecting(VOID)
{
	//监测登录线程是否结束
	int nExitCode = 0;
	
	if(::GetExitCodeThread(m_hConnectThread, (DWORD*)&nExitCode))
	{

	}

	//登录线程未结束
	if( STILL_ACTIVE == nExitCode)
	{
		//检查是否超时
		UINT dwTimeNow = CGameProcedure::s_pTimeSystem->GetTimeNow();
		UINT dwUsed =  CGameProcedure::s_pTimeSystem->CalSubTime(m_timeConnectBegin, dwTimeNow);
		//超时
		if(dwUsed >= MAX_CONNECT_TIME)
		{
			//强制结束登录线程
			TerminateThread(m_hConnectThread, 0);
			nExitCode = -3;
		}
		//继续等待
		else 
		{
			return;
		}
	}

	//登录线程已经结束 关闭句柄
	if(CloseHandle(m_hConnectThread))
	{
		m_hConnectThread = NULL;
	}
	
	//登录过程中发生错误
	if(nExitCode < 0)
	{
		//LPCTSTR szErrorDesc;
		switch(nExitCode)
		{
		case -1:
			{
				SetNetStatus(CONNECT_FAILED_CREATE_SOCKET_ERROR);
				CGameProcedure::s_pEventSystem->PushEvent(GE_NET_CLOSE, "创建网络连接失败!");
				break;
			}
		case -2:
			{
				SetNetStatus(CONNECT_FAILED_CONNECT_ERROR);
				CGameProcedure::s_pEventSystem->PushEvent(GE_NET_CLOSE, "目的服务器可能关闭!");
				break;
			}
		case -3:
			{
				SetNetStatus(CONNECT_FAILED_TIME_OUT);
				CGameProcedure::s_pEventSystem->PushEvent(GE_NET_CLOSE, "连接超时!");
				break;
			}
		default:
			{
				SetNetStatus(CONNECT_FAILED_CONNECT_ERROR);
				CGameProcedure::s_pEventSystem->PushEvent(GE_NET_CLOSE, "未知错误!");
				break;
			}

		}
	
		this->Close();
		return;
	}

	//连接成功后设置为非阻塞模式和设置Linger参数
	if(!m_Socket.setNonBlocking() || !m_Socket.setLinger(0))
	{
		SetNetStatus(CONNECT_FAILED_CONNECT_ERROR);
		TDThrow(_T("(CNetManager::Tick)SetSocket Error"));
		return;
	}

	//通知登录流程,SOCKET连接成功
	
	if(CGameProcedure::GetActiveProcedure() == (CGameProcedure*)CGameProcedure::s_pProcLogIn)
	{
		CGameProcedure::s_pProcLogIn->SendClConnectMsg();
		SetNetStatus(CONNECT_SUCESS);//
	}
	else if(CGameProcedure::GetActiveProcedure() == (CGameProcedure*)CGameProcedure::s_pProcChangeScene)
	{
		SetNetStatus(CONNECT_SUCESS);//
	}

	return;
}
コード例 #16
0
ファイル: RenderSystem.cpp プロジェクト: brock7/TianLong
BOOL CRenderSystem::Axis_Trans(	AXIS_TYPE typeSource, const fVector3& fvSource,
								AXIS_TYPE typeTar,			fVector3& fvTarget)
{
	register WX::TerrainData*	pTerrainData = m_pRenderSystem->getTerrainData();
	//尚未加载
	if(pTerrainData && (pTerrainData->getXSize()==0 || pTerrainData->getZSize()==0))
	{
		pTerrainData = 0;
	}

	fVector3 fvScale = GetSacle();

	//检查是否是合法的坐标
	fvTarget = fvSource;
	if(!Axis_CheckValid(typeSource, fvSource)) return FALSE;
	if(typeSource == typeTar) return TRUE;

	switch(typeSource)
	{
		//-----------------------------------------------
	case AX_GAME:
		{
			if(AX_PLAN==typeTar) return TRUE;
			else if(AX_GFX == typeTar)
			{
				if(pTerrainData)
				{
					fvTarget.x = pTerrainData->mPosition.x + (FLOAT)fvSource.x * pTerrainData->mScale.x;
					fvTarget.y = pTerrainData->mPosition.y + (FLOAT)fvSource.y * pTerrainData->mScale.y;
					fvTarget.z = pTerrainData->mPosition.z + (FLOAT)fvSource.z * pTerrainData->mScale.z;
				}
				else
				{
					fvTarget.x = (FLOAT)fvSource.x * fvScale.x;
					fvTarget.y = (FLOAT)fvSource.y * fvScale.y;
					fvTarget.z = (FLOAT)fvSource.z * fvScale.z;
				}
				return TRUE;
			}
			else if(AX_SCREEN==typeTar)
			{
				TDThrow("(AX_GAME->AX_SCREEN) Not support yet!");
			}
		}
		break;
		//-----------------------------------------------
	case AX_PLAN:
		{
			if(!pTerrainData) return FALSE;

			FLOAT fGfxX = pTerrainData->mPosition.x + (FLOAT)fvSource.x * pTerrainData->mScale.x;
			FLOAT fGfxZ = pTerrainData->mPosition.z + (FLOAT)fvSource.z * pTerrainData->mScale.z;

			if(AX_GAME==typeTar)
			{
				//取得相地形高度作为Y坐标(游戏坐标)
				fvTarget.y = (pTerrainData->getHeightAtGrid(fvSource.x, fvSource.z)-pTerrainData->mPosition.y)/ pTerrainData->mScale.y;
				return TRUE;
			}
			else if(AX_GFX == typeTar)
			{
				//取得相地形高度作为Y坐标
				fvTarget.x = fGfxX;
				fvTarget.z = fGfxZ;
				fvTarget.y = pTerrainData->getHeightAtGrid(fvSource.x, fvSource.z);
				return TRUE;
			}
			else if(AX_SCREEN==typeTar)
			{
				TDThrow("(AX_PLAN->AX_SCREEN) Not support yet!");
			}
		}
		break;

		//-----------------------------------------------
	case AX_GFX:
		{
			if(AX_GAME==typeTar || AX_PLAN==typeTar)
			{
				if(pTerrainData)
				{
					fvTarget.x = (fvSource.x-pTerrainData->mPosition.x)/pTerrainData->mScale.x;
					fvTarget.y = (fvSource.y-pTerrainData->mPosition.y)/pTerrainData->mScale.y;
					fvTarget.z = (fvSource.z-pTerrainData->mPosition.z)/pTerrainData->mScale.z;
				}
				else
				{
					fvTarget.x = (fvSource.x)/fvScale.x;
					fvTarget.y = (fvSource.y)/fvScale.y;
					fvTarget.z = (fvSource.z)/fvScale.z;
				}
				return TRUE;
			}
			else if(AX_SCREEN==typeTar)
			{
				//TDThrow("(AX_GFX->AX_SCREEN) Not support yet!");
				if(!pTerrainData) return FALSE;
				
				//得到Ogre相机
				Ogre::Camera* pOgreCamera = m_pCamera_Current->GetOgreCamera();
				if(!pOgreCamera) return FALSE;
				if(!(pOgreCamera->isVisible(Ogre::Vector3(fvSource.x, fvSource.y, fvSource.z)))) return FALSE;

				// x:[-1w, 1w]	z:[-1h, 1h]
				Ogre::Vector3 vRet = pOgreCamera->getProjectionMatrix()* pOgreCamera->getViewMatrix() * Ogre::Vector3(fvSource.x, fvSource.y, fvSource.z);

				int nWidth  = m_pRenderSystem->getViewport()->getActualWidth();
				int nHeight = m_pRenderSystem->getViewport()->getActualHeight();

				fvTarget.x = (( vRet.x + 1.0f)*nWidth/2.0f);
				fvTarget.y = ((-vRet.y + 1.0f)*nHeight/2.0f);
					
				return TRUE;
			}
		}
		break;

		//-----------------------------------------------
	case AX_SCREEN:
		{
			if(!pTerrainData) return FALSE;

			Ogre::Vector3 vRenderPos;
			BOOL bRet = m_pRenderSystem->getTerrainIntersects(WX::Point((INT)fvSource.x, fvSource.y), vRenderPos);
			if(!bRet) return FALSE;

			if(AX_GAME==typeTar || AX_PLAN==typeTar)
			{
				return Axis_Trans(AX_GFX, fVector3(vRenderPos.x, vRenderPos.y, vRenderPos.z), AX_GAME, fvTarget);
			}
			else if(AX_GFX==typeTar)
			{
				fvTarget = fVector3(vRenderPos.x, vRenderPos.y, vRenderPos.z);
				return TRUE;
			}
		}
		break;
	}
	return FALSE;
}
コード例 #17
0
	//获得玩家信息
	INT SystemSetup::Lua_GetPrivateInfo(LuaPlus::LuaState* state)
	{
		LuaPlus::LuaStack args(state);
		if (!(args[2].IsString()))
		{
			TDThrow("SystemSetup::Lua_GetPrivateInfo[2] param parameter error");
		}
		if (!(args[3].IsString()))
		{
			TDThrow("SystemSetup::Lua_GetPrivateInfo[3] param parameter error");
		}
		//std::string strWho = args[2].GetString();
		//std::string str = args[3].GetString();

		//if( strWho == "self" )
		//{
		//	if( str == "type" )
		//	{
		//		state->PushInteger(CDataPool::GetMe()->PI_GetMyInfoType());
		//	}
		//	else if( str == "guid" )
		//	{
		//		CHAR szTemp[16] = {0};
		//		_snprintf(szTemp, 16, "%X",CDataPool::GetMe()->PI_GetMyCharGUID());
		//		state->PushString(szTemp);
		//	}
		//	else if( str == "age" )
		//	{
		//		state->PushInteger(CDataPool::GetMe()->PI_GetMyAge());
		//	}
		//	else if( str == "sex" )
		//	{
		//		state->PushInteger(CDataPool::GetMe()->PI_GetMySex());
		//	}
		//	else if( str == "job" )
		//	{
		//		state->PushString(CDataPool::GetMe()->PI_GetMyJobInfo());
		//	}
		//	else if( str == "school" )
		//	{
		//		state->PushString(CDataPool::GetMe()->PI_GetMySchoolInfo());
		//	}
		//	else if( str == "blood" )
		//	{
		//		state->PushInteger(CDataPool::GetMe()->PI_GetMyBloodType());
		//	}
		//	else if( str == "animal" )
		//	{
		//		state->PushInteger(CDataPool::GetMe()->PI_GetMyYearAnimal());
		//	}
		//	else if( str == "Consella" )
		//	{
		//		state->PushInteger(CDataPool::GetMe()->PI_GetMyConsella());
		//	}
		//	else if( str == "Province" )
		//	{
		//		state->PushInteger(CDataPool::GetMe()->PI_GetMyProvince());
		//	}
		//	else if( str == "city" )
		//	{
		//		state->PushString(CDataPool::GetMe()->PI_GetMyCity());
		//	}
		//	else if( str == "email" )
		//	{
		//		state->PushString(CDataPool::GetMe()->PI_GetMyEmailInfo());
		//	}
		//	else if( str == "luck" )
		//	{
		//		state->PushString(CDataPool::GetMe()->PI_GetMyLuckWord());
		//	}
		//	else if( str == "name" )
		//	{
		//		state->PushString(CObjectManager::GetMe()->GetMySelf()->GetCharacterData()->Get_Name());
		//	}
		//	else
		//	{
		//		state->PushInteger(0);
		//	}
		//}
		//else
		//{
		//	if( str == "type" )
		//	{
		//		state->PushInteger(CDataPool::GetMe()->PI_GetOtInfoType());
		//	}
		//	else if( str == "guid" )
		//	{
		//		CHAR szTemp[16];
		//		_snprintf(szTemp, 16, "%X",CDataPool::GetMe()->PI_GetOtCharGUID());
		//		state->PushString(szTemp);
		//	}
		//	else if( str == "age" )
		//	{
		//		state->PushInteger(CDataPool::GetMe()->PI_GetOtAge());
		//	}
		//	else if( str == "sex" )
		//	{
		//		state->PushInteger(CDataPool::GetMe()->PI_GetOtSex());
		//	}
		//	else if( str == "job" )
		//	{
		//		state->PushString(CDataPool::GetMe()->PI_GetOtJobInfo());
		//	}
		//	else if( str == "school" )
		//	{
		//		state->PushString(CDataPool::GetMe()->PI_GetOtSchoolInfo());
		//	}
		//	else if( str == "blood" )
		//	{
		//		state->PushInteger(CDataPool::GetMe()->PI_GetOtBloodType());
		//	}
		//	else if( str == "animal" )
		//	{
		//		state->PushInteger(CDataPool::GetMe()->PI_GetOtYearAnimal());
		//	}
		//	else if( str == "Consella" )
		//	{
		//		state->PushInteger(CDataPool::GetMe()->PI_GetOtConsella());
		//	}
		//	else if( str == "Province" )
		//	{
		//		state->PushInteger(CDataPool::GetMe()->PI_GetOtProvince());
		//	}
		//	else if( str == "city" )
		//	{
		//		state->PushString(CDataPool::GetMe()->PI_GetOtCity());
		//	}
		//	else if( str == "email" )
		//	{
		//		state->PushString(CDataPool::GetMe()->PI_GetOtEmailInfo());
		//	}
		//	else if( str == "luck" )
		//	{
		//		state->PushString(CDataPool::GetMe()->PI_GetOtLuckWord());
		//	}
		//	else if( str == "name" )
		//	{
		//		state->PushString(CDataPool::GetMe()->PI_GetOtName());
		//	}
		//	else
		//	{
		//		state->PushInteger(0);
		//	}
		//}

		return 0;
	}
コード例 #18
0
	//获得视频设置数据
	INT SystemSetup::Lua_View_GetData(LuaPlus::LuaState* state)
	{
		LuaPlus::LuaStack args(state);

		if (!(args[2].IsString()))
		{
			TDThrow("SystemSetup::View_GetData[2] param parameter error");
		}
		std::string str	= args[2].GetString();

		if(str == "dxyy")			//地形阴影
		{
			INT fTemp = CGameProcedure::s_pVariableSystem->GetAs_Int("View_LightmapQuality");
			state->PushNumber(fTemp);
		}
		else if(str == "fhj")		//反混角
		{
			INT nTemp = CGameProcedure::s_pVariableSystem->GetAs_Int("View_Fanhunjiao");
			state->PushNumber(nTemp);
		}
		else if(str == "wtdh")		//物体动画
		{
			INT nTemp = CGameProcedure::s_pVariableSystem->GetAs_Int("View_ObjectMove");
			state->PushNumber(nTemp);
		}
		else if(str == "gamma")		//gamma调整
		{
			INT nTemp = CGameProcedure::s_pVariableSystem->GetAs_Int("View_Gamma");
			state->PushNumber(nTemp);
		}
		else if(str == "yszl")		//颜色质量
		{
			INT nTemp = CGameProcedure::s_pVariableSystem->GetAs_Int("View_ColorQuality");
			state->PushNumber(nTemp);
		}
		else if(str == "wldx")		//纹理大小
		{
			INT nTemp = CGameProcedure::s_pVariableSystem->GetAs_Int("View_TextureQuality");
			state->PushNumber(nTemp);
		}
		else if(str == "cy")		//采样
		{
			INT nTemp = CGameProcedure::s_pVariableSystem->GetAs_Int("View_TextureFiltering");
			state->PushNumber(nTemp);
		}
		else if(str == "dbxs")		//多边形数
		{
			INT nTemp = CGameProcedure::s_pVariableSystem->GetAs_Int("View_PolygonQuantity");
			state->PushNumber(nTemp);
		}

		else if(str == "dxgg")		//地形高光
		{
			INT nTemp = CGameProcedure::s_pVariableSystem->GetAs_Int("View_GroundHighLight");
			state->PushNumber(nTemp);
		}
		else if(str == "rwgg")		//人物高光
		{
			INT nTemp = CGameProcedure::s_pVariableSystem->GetAs_Int("View_HumanHighLight");
			state->PushNumber(nTemp);
		}
		else if(str == "rwyy")		//人物阴影
		{
			INT nTemp = CGameProcedure::s_pVariableSystem->GetAs_Int("View_HumanLightmap");
			state->PushNumber(nTemp);
		}
		else if(str == "qpfg")		//全屏泛光
		{
			INT nTemp = CGameProcedure::s_pVariableSystem->GetAs_Int("View_FullScreenLight");
			state->PushNumber(nTemp);
		}
		else if(str == "cztb")		//垂直同步
		{
			INT nTemp = CGameProcedure::s_pVariableSystem->GetAs_Int("View_Aplomb");
			state->PushNumber(nTemp);
		}
		else if(str == "sdh")		//水动画
		{
			INT nTemp = CGameProcedure::s_pVariableSystem->GetAs_Int("View_WaterMove");
			state->PushNumber(nTemp);
		}
		else if(str == "qpms")		//全屏模式
		{
			INT nTemp = CGameProcedure::s_pVariableSystem->GetAs_Int("View_FullScreen");
			state->PushNumber(nTemp);
		}

		return 1;
	}
コード例 #19
0
	//设置视频数据
	INT SystemSetup::Lua_View_SetData(LuaPlus::LuaState* state)
	{
		LuaPlus::LuaStack args(state);

		if (!(args[2].IsString()))
		{
			TDThrow("SystemSetup::View_SetData[2] param parameter error");
		}
		if (!(args[3].IsInteger()))
		{
			TDThrow("SystemSetup::View_SetData[3] param parameter error");
		}
		std::string str	= args[2].GetString();
		INT fTemp = args[3].GetInteger();

		if(str == "dxyy")			//地形阴影
		{
			CGameProcedure::s_pVariableSystem->SetAs_Int("View_LightmapQuality",fTemp,FALSE);
		}
		else if(str == "fhj")		//反混角
		{
			CGameProcedure::s_pVariableSystem->SetAs_Int("View_Fanhunjiao",fTemp,FALSE);
		}
		else if(str == "wtdh")		//物体动画
		{
			CGameProcedure::s_pVariableSystem->SetAs_Int("View_ObjectMove",fTemp,FALSE);
		}
		else if(str == "gamma")		//gamma调整
		{
			CGameProcedure::s_pVariableSystem->SetAs_Int("View_Gamma",fTemp,FALSE);
		}
		else if(str == "yszl")		//颜色质量
		{
			CGameProcedure::s_pVariableSystem->SetAs_Int("View_ColorQuality",fTemp,FALSE);
		}
		else if(str == "wldx")		//纹理大小
		{
			CGameProcedure::s_pVariableSystem->SetAs_Int("View_TextureQuality",fTemp,FALSE);
		}
		else if(str == "cy")		//采样
		{
			CGameProcedure::s_pVariableSystem->SetAs_Int("View_TextureFiltering",fTemp,FALSE);
		}
		else if(str == "dbxs")		//多边形数
		{
			CGameProcedure::s_pVariableSystem->SetAs_Int("View_PolygonQuantity",fTemp,FALSE);
		}

		else if(str == "dxgg")		//地形高光
		{
			CGameProcedure::s_pVariableSystem->SetAs_Int("View_GroundHighLight",fTemp,FALSE);
		}
		else if(str == "rwgg")		//人物高光
		{
			CGameProcedure::s_pVariableSystem->SetAs_Int("View_HumanHighLight",fTemp,FALSE);
		}
		else if(str == "rwyy")		//人物阴影
		{
			CGameProcedure::s_pVariableSystem->SetAs_Int("View_HumanLightmap",fTemp,FALSE);
		}
		else if(str == "qpfg")		//全屏泛光
		{
			CGameProcedure::s_pVariableSystem->SetAs_Int("View_FullScreenLight",fTemp,FALSE);
		}
		else if(str == "cztb")		//垂直同步
		{
			CGameProcedure::s_pVariableSystem->SetAs_Int("View_Aplomb",fTemp,FALSE);
		}
		else if(str == "sdh")		//水动画
		{
			CGameProcedure::s_pVariableSystem->SetAs_Int("View_WaterMove",fTemp,FALSE);
		}
		else if(str == "qpms")		//全屏模式
		{
			char szTemp[MAX_PATH];
			_snprintf(szTemp, MAX_PATH, "%d",fTemp);
			CGameProcedure::s_pVariableSystem->SetVariableDelay("View_FullScreen",szTemp);
		}

		return 0;
	}
コード例 #20
0
ファイル: GMDP_Struct_Quest.cpp プロジェクト: brock7/TianLong
//g_DemandItem={{id=20004008,num=1},{id=20004009,num=1}}
void parseDemandItem(CHAR** pDest,CHAR* pSrc,INT j)
{
	CHAR* pCur = strchr(pSrc,'=');
	if(!pCur)
		TDThrow("策划写错了这个脚本:%s", pSrc);
	strcpy(*pDest,tokens[j]);
	CHAR* pNow = *pDest + strlen(tokens[j]);
	
	int count = 0;
	int digit = 1;

	int itemId = 0;
	int itemCount = 0;
	while(pCur++)
	{
		if(*pCur == '{')
		{
			digit = 1;
			count++;
		}
		else if(*pCur == '}')
		{
			digit = 1;
			count--;
			if(count == 0)
				break;
		}

		if(digit == 1 && isdigit(*pCur))
		{	
			digit = 2;
			itemId = atoi(pCur);

			*pNow++=*pCur;			
		}
		else if(digit == 3 && isdigit(*pCur))
		{
			digit = 4;
			itemCount = atoi(pCur);

			tObject_Item* pItem = CObject_Item::NewItem(itemId);
			if(!pItem)
			{
				TDThrow("非法的奖励物品ID:%d", itemId);
			}

			_MISSION_INFO::QuestDemandItem newDemandItem;
			newDemandItem.pDemandItem = new SMissionBonusItem;
			newDemandItem.pDemandItem->m_uItemID = itemId;
			newDemandItem.pDemandItem->m_yCount = itemCount;
			pItem->SetTypeOwner(tObject_Item::IO_QUESTVIRTUALITEM);
			newDemandItem.pItemImpl = pItem;
			misInfo->m_vecQuestDemandItem.push_back(newDemandItem);

			*pNow++=*pCur;
			
		}
		else if(digit && (*pCur == ','))
		{
			digit = 3;
			*pNow++=',';			
		}
	}
}
コード例 #21
0
ファイル: GMDP_Struct_Quest.cpp プロジェクト: brock7/TianLong
void parseRadioItemBonus(CHAR** pDest,CHAR* pSrc,INT j)
{
	CHAR* pCur = strchr(pSrc,'=');
	if(!pCur)
		TDThrow("策划写错了这个脚本:%s", pSrc);
	strcpy(*pDest,tokens[j]);
	CHAR* pNow = *pDest + strlen(tokens[j]);

	int count = 0;
	int digit = 1;

	int itemId = 0;
	int itemCount = 0;

	while(pCur++)
	{
		if(*pCur == '{')
		{
			digit = 1;
			count++;
		}
		else if(*pCur == '}')
		{
			digit = 1;
			count--;
			if(count == 0)
				break;
		}

		if(digit == 1 && isdigit(*pCur))
		{	
			itemId = atoi(pCur);

			digit = 2;
			*pNow++=*pCur;			
		}
		else if(digit == 3 && isdigit(*pCur))
		{
			digit = 4;
			itemCount = atoi(pCur);
			
			//以后考虑内存池
			SMissionBonus* rewardItem = new SMissionBonus;
			rewardItem->m_ItemBonus.m_uItemID = itemId;
			rewardItem->m_ItemBonus.m_yCount = itemCount;
			rewardItem->m_nType =  MISSION_BONUS_TYPE_ITEM_RADIO;

			tObject_Item* pItem = CObject_Item::NewItem(itemId);
			if(!pItem)
			{
				TDThrow("非法的奖励物品ID:%d", itemId);
			}

			_MISSION_INFO::QuestRewardItem newRewardItem;
//			CActionSystem::GetMe()->UpdateAction_FromItem(pItem);
			newRewardItem.pItemData = rewardItem;
			pItem->SetTypeOwner(tObject_Item::IO_QUESTVIRTUALITEM);
			newRewardItem.pItemImpl = pItem;
			newRewardItem.bSelected = FALSE;	
			misInfo->m_vecQuestRewardItem.push_back(newRewardItem);

			*pNow++=*pCur;			
		}
		else if(digit && (*pCur == ','))
		{
			*pNow++=',';
			digit = 3;
		}

	}
}
コード例 #22
0
uint GCNewPlayerHandler :: Execute( GCNewPlayer* pPacket, Player* pPlayer ) 
{
//__ENTER_FUNCTION

	//当前流程是主流程
	if(CGameProcedure::GetActiveProcedure() == (CGameProcedure*)CGameProcedure::s_pProcMain)
	{
		CObjectManager* pObjectManager = CObjectManager::GetMe();
		//检查位置是否合法
		if(!CWorldManager::GetMe()->GetActiveScene()->IsValidPosition(fVector2(pPacket->getWorldPos().m_fX, pPacket->getWorldPos().m_fZ)))
		{
			TDThrow("ERROR POSITION @ GCNewPlayerHandler");
		}

		//创建玩家
		CObject_PlayerOther* pOther = (CObject_PlayerOther*)(pObjectManager->FindServerObject( (INT)pPacket->getObjID()));
		fVector3 fvGame;
		CGameProcedure::s_pGfxSystem->Axis_Trans(
			CRenderSystem::AX_PLAN, fVector3(pPacket->getWorldPos().m_fX, 0.0f, pPacket->getWorldPos().m_fZ),
			CRenderSystem::AX_GAME, fvGame);

		FLOAT fFaceDir = pPacket->getDir();

		if ( pOther == NULL )
		{
			pOther = pObjectManager->NewPlayerOther( (INT)pPacket->getObjID() );

			SObjectInit initPlayerOther;
			initPlayerOther.m_fvPos	= fvGame;
			initPlayerOther.m_fvRot = fVector3( 0.f, fFaceDir, 0.f );
			pOther->Initial( &initPlayerOther );

			fVector2 mapPos(fvGame.x, fvGame.z);
			pOther->SetMapPosition( mapPos );
		}
		else
		{
			fVector2 mapPos(fvGame.x, fvGame.z);
			pOther->SetMapPosition( mapPos );
			pOther->SetFaceDir( fFaceDir );
			pOther->Enable( OSF_VISIABLE );
			pOther->Disalbe( OSF_OUT_VISUAL_FIELD );
		}

		//更新装备信息
		pOther->GetCharacterData()->Set_EquipVer(pPacket->getEquipVer());

		pOther->GetCharacterData()->Set_MoveSpeed(pPacket->getMoveSpeed());

		////激活鼠标查询
		//if(pOther->GetRenderInterface())
		//{
		//	pOther->Enable(OSF_RAY_QUERY);
		//}

		SCommand_Object cmdTemp;
		cmdTemp.m_wID			= OC_IDLE;
		cmdTemp.m_afParam[0]	= fvGame.x;
		cmdTemp.m_afParam[1]	= fvGame.z;
		cmdTemp.m_abParam[2]	= FALSE;
		pOther->PushCommand(&cmdTemp );

		//放入Ask队列
		CObjectManager::GetMe()->GetLoadQueue()->TryAddLoadTask(pOther->GetID(), CObject_Character::CT_PLAYEROTHER);

		// tempcode{
		// 此版不做服务器繁忙客户端延后发消息的处理
//		CGCharAskBaseAttrib msgAskBaseAttrib;
//		msgAskBaseAttrib.setTargetID( (INT)pPacket->getObjID() );
//		CNetManager::GetMe()->SendPacket( &msgAskBaseAttrib );

		//AxTrace(0, 0, "[%d]Ask %d", m_hmObject.size(), pPacket->getObjID());
		// }

		//如果是自己,退出死亡效果
		if(pOther == (CObject_PlayerOther*)pObjectManager->GetMySelf())
		{
			CGameProcedure::s_pGfxSystem->Scene_SetPostFilter_Death(FALSE);
		}

		pOther->PushDebugString("GCNewPlayer");
		pOther->SetMsgTime(CGameProcedure::s_pTimeSystem->GetTimeNow());
	}

	return PACKET_EXE_CONTINUE ;

//__LEAVE_FUNCTION

	return PACKET_EXE_ERROR ;
}
コード例 #23
0
uint GCNewPlayer_MoveHandler :: Execute( GCNewPlayer_Move* pPacket, Player* pPlayer ) 
{
//__ENTER_FUNCTION
	//AxTrace(0, 2, "GCNewPlayerHandler");
//	return PACKET_EXE_CONTINUE ;

	//当前流程是主流程
	if(CGameProcedure::GetActiveProcedure() == (CGameProcedure*)CGameProcedure::s_pProcMain)
	{
		CObjectManager* pObjectManager = CObjectManager::GetMe();

		//检查位置是否合法
		if(!CWorldManager::GetMe()->GetActiveScene()->IsValidPosition(fVector2(pPacket->getWorldPos().m_fX, pPacket->getWorldPos().m_fZ)))
		{
			TDThrow("ERROR POSITION @ GCNewPlayer_MoveHandler");
		}

		//创建玩家
		CObject_PlayerOther* pOther = (CObject_PlayerOther*)(pObjectManager->FindServerObject( (INT)pPacket->getObjID() ));
		fVector3 fvGame;
		CGameProcedure::s_pGfxSystem->Axis_Trans(
			CRenderSystem::AX_PLAN, fVector3(pPacket->getWorldPos().m_fX, 0.0f, pPacket->getWorldPos().m_fZ),
			CRenderSystem::AX_GAME, fvGame);

		if ( pOther == NULL )
		{
			pOther = pObjectManager->NewPlayerOther( (INT)pPacket->getObjID() );

			SObjectInit initPlayerOther;
			initPlayerOther.m_fvPos	= fvGame;

			pOther->Initial( &initPlayerOther );
		}
		else
		{
			fVector2 mapPos(fvGame.x, fvGame.z);
			pOther->SetMapPosition(mapPos);
			pOther->Enable( OSF_VISIABLE );
			pOther->Disalbe( OSF_OUT_VISUAL_FIELD );
		}

		////激活鼠标查询
		//if(pOther->GetRenderInterface())
		//{
		//	pOther->Enable(OSF_RAY_QUERY);
		//}

		//更新装备信息
		pOther->GetCharacterData()->Set_EquipVer(pPacket->getEquipVer());
		//跟新移动速度
		pOther->GetCharacterData()->Set_MoveSpeed(pPacket->getMoveSpeed());

		// move to command
		{
			WORLD_POS posTarget;
			posTarget.m_fX	= pPacket->getTargetPos().m_fX;
			posTarget.m_fZ	= pPacket->getTargetPos().m_fZ;

			SCommand_Object cmdTemp;
			cmdTemp.m_wID			= OC_MOVE;
			cmdTemp.m_auParam[0]	= 0;
			cmdTemp.m_anParam[1]	= pPacket->getHandleID();
			cmdTemp.m_anParam[2]	= 1;
			cmdTemp.m_apParam[3]	= &posTarget;
			pOther->PushCommand(&cmdTemp );
		}

		//放入Ask队列
		CObjectManager::GetMe()->GetLoadQueue()->TryAddLoadTask(pOther->GetID(), CObject_Character::CT_PLAYEROTHER);

		// tempcode{
		// 此版不做服务器繁忙客户端延后发消息的处理
//		CGCharAskBaseAttrib msgAskBaseAttrib;
//		msgAskBaseAttrib.setTargetID( (INT)pPacket->getObjID() );
//		CNetManager::GetMe()->SendPacket( &msgAskBaseAttrib );

		//AxTrace(0, 0, "[%d]Ask %d", m_hmObject.size(), pPacket->getObjID());
		// }

		pOther->PushDebugString("GCNewPlayer");
		pOther->SetMsgTime(CGameProcedure::s_pTimeSystem->GetTimeNow());
	}

	return PACKET_EXE_CONTINUE ;

//__LEAVE_FUNCTION

	return PACKET_EXE_ERROR ;
//__ENTER_FUNCTION
//	AxTrace(0, 2, "GCNewPlayerHandler");
//
//	//当前流程是主流程
//	if(CGameProcedure::GetActiveProcedure() == (CGameProcedure*)CGameProcedure::s_pProcMain)
//	{
//		CObjectManager* pObjectManager = CObjectManager::GetMe();
//
//		//创建玩家
//		CObject_PlayerOther* pOther = pObjectManager->CreatePlayerOther(
//											(INT)pPacket->getObjID(),
//											(INT)pPacket->getRace(),
//											pPacket->getEquipVer(),
//											fVector2(pPacket->getWorldPos().m_fX, pPacket->getWorldPos().m_fZ),
//											true);
//
//		if(!pOther) return PACKET_EXE_CONTINUE;
//
//		//设置新的位置
//		pOther->SetMapPosition(fVector2(pPacket->getWorldPos().m_fX, pPacket->getWorldPos().m_fZ));
//		pOther->RegisterToZone();
//		//IDLE装态
//		pOther->SetMotionStatus(CMS_STATUS_IDLE);
//		pOther->PushDebugString("GCNewPlayer");
//		pOther->SetMsgTime(CGameProcedure::s_pTimeSystem->GetTimeNow());
//	}
//
//	return PACKET_EXE_CONTINUE ;
//
//__LEAVE_FUNCTION
//
//	return PACKET_EXE_ERROR ;
}
コード例 #24
0
//处理消息缓冲
VOID CNetManager::ProcessInputStream(SocketInputStream& inputStream)
{
	static USHORT nPacketIDSaved=0;
	BOOL ret ;

	char PackCompart[PACKET_HEADER_SIZE];
	char header[PACKET_HEADER_SIZE];
	PacketID_t packetID;
	uint packetuint, packetSize, packetIndex;
	WORD packetTick;
	Packet* pPacket = NULL ;
	static PacketID_t packetIDList[10];
	static int packetIDListIdx = 0;

	{

		for( ;; )
		{
			if( !m_SocketInputStream.Find( PackCompart ) )
			{//数据没有消息分隔点
				break ;
			}
			if( !m_SocketInputStream.Peek(&header[0], PACKET_HEADER_SIZE) )
			{//数据不能填充消息头
				break ;
			}

			ENCRYPT_HEAD(header, LOGIN_TO_CLIENT_KEY)//封包头解密

			memcpy( &packetID, &header[0], sizeof(PacketID_t) ) ;	
			memcpy( &packetTick, &header[sizeof(WORD)], sizeof(WORD) ) ;
			memcpy( &packetuint, &header[sizeof(WORD)+sizeof(PacketID_t)], sizeof(uint) );
			packetSize = GET_PACKET_LEN(packetuint) ;
			packetIndex = GET_PACKET_INDEX(packetuint) ;

			if( packetID >= (PacketID_t)PACKET_MAX )
			{//无效的消息类型
				TDU_Log( "Invalid Packet, Old Packet List[%d,%d,%d,%d,%d,%d,%d,%d,%d,%d], Idx=%d", 
					packetIDList[0], packetIDList[1], packetIDList[2], packetIDList[3], packetIDList[4],
					packetIDList[5], packetIDList[6], packetIDList[7], packetIDList[8], packetIDList[9], 
					packetIDListIdx );

				TDU_Log("Invalid Packet[%d]!", packetID);
				//TDThrow("Invalid Packet[%d]!", packetID);
				return ;
			}

			//消息解密处理--Begin
			{
				UINT t_uSize = packetSize+PACKET_HEADER_SIZE;
				UINT t_uHead = m_SocketInputStream.GetHead();
				UINT t_uTail = m_SocketInputStream.GetTail();
				UINT t_uBufferLen = m_SocketInputStream.GetBuffLen();
				CHAR* t_szBuffer = m_SocketInputStream.GetBuff();
				if ( t_uHead < t_uTail ) 
				{
					ENCRYPT(&t_szBuffer[t_uHead], t_uSize, LOGIN_TO_CLIENT_KEY, 0);
				} 
				else 
				{
					UINT rightLen = t_uBufferLen - t_uHead ;
					if( t_uSize <= rightLen ) 
					{
						ENCRYPT(&t_szBuffer[t_uHead], t_uSize, LOGIN_TO_CLIENT_KEY, 0);
					} 
					else 
					{
						ENCRYPT(&t_szBuffer[t_uHead], rightLen, LOGIN_TO_CLIENT_KEY, 0);
						ENCRYPT(t_szBuffer, t_uSize-rightLen, LOGIN_TO_CLIENT_KEY, rightLen);
					}
				}
			}
			//消息解密处理--End

			{
				if( m_SocketInputStream.Length()<PACKET_HEADER_SIZE+packetSize )
				{
					//消息没有接收全
					break;
				}

				if( packetSize>m_PacketFactoryManager.GetPacketMaxSize(packetID) )
				{
					TDU_Log( "Packet size error, Old Packet List[%d,%d,%d,%d,%d,%d,%d,%d,%d,%d], Idx=%d", 
						packetIDList[0], packetIDList[1], packetIDList[2], packetIDList[3], packetIDList[4],
						packetIDList[5], packetIDList[6], packetIDList[7], packetIDList[8], packetIDList[9], 
						packetIDListIdx );
					//消息的大小出现异常,收到的消息比预定义消息的最大值还要大
					TDU_Log("Packet size error![ID=%d](%d>%d)", 
						packetID, packetSize, m_PacketFactoryManager.GetPacketMaxSize(packetID));
					//TDThrow("Packet size error![ID=%d](%d>%d)", 
					//	packetID, packetSize, m_PacketFactoryManager.GetPacketMaxSize(packetID));
//					m_SocketInputStream.Skip( PACKET_HEADER_SIZE+packetSize ) ;
					return ;
				}

				Packet* pPacket = m_PacketFactoryManager.CreatePacket( packetID ) ;
				Assert( pPacket ) ;
				if( pPacket==NULL )
				{//不能分配到足够的内存
					TDU_Log( "Create Packet error, Old Packet List[%d,%d,%d,%d,%d,%d,%d,%d,%d,%d], Idx=%d", 
						packetIDList[0], packetIDList[1], packetIDList[2], packetIDList[3], packetIDList[4],
						packetIDList[5], packetIDList[6], packetIDList[7], packetIDList[8], packetIDList[9], 
						packetIDListIdx );
					TDThrow("Create Packet error[%d]!", packetID);
//					m_SocketInputStream.Skip( PACKET_HEADER_SIZE+packetSize ) ;
					return ;
				}

				//设置消息序列号
				pPacket->SetPacketIndex( packetIndex ) ;

				ret = m_SocketInputStream.ReadPacket( pPacket ) ;
				if( ret==FALSE )
				{
					//读取消息内容错误
					TDU_Log( "Read Packet error, Old Packet List[%d,%d,%d,%d,%d,%d,%d,%d,%d,%d], Idx=%d", 
						packetIDList[0], packetIDList[1], packetIDList[2], packetIDList[3], packetIDList[4],
						packetIDList[5], packetIDList[6], packetIDList[7], packetIDList[8], packetIDList[9], 
						packetIDListIdx );
					TDU_Log("Read Packet error!");
					//TDThrow("Read Packet error!");
					continue ;
				}

				packetIDList[packetIDListIdx++] = packetID;
				if( packetIDListIdx == 10 ) packetIDListIdx = 0;

				//消息包执行
				ret = executePacket_Gen_Exception(pPacket);

				if(ret != PACKET_EXE_NOTREMOVE)
				{
					m_PacketFactoryManager.RemovePacket( pPacket ) ;
				}

				nPacketIDSaved = packetID;
			}
		}
	}
}
コード例 #25
0
VOID CDataBaseSystem::OpenAllDataBase(VOID)
{
	//所有需要打开的数据库定义
	struct _DATABASE_DEFINE
	{
		INT			idDatabase;
		const CHAR*		pFileName;
	};

	_DATABASE_DEFINE  s_dbToLoad[] = 
	{
		{ DBC_CHARACTER_RACE,			"CharRace.txt"			},
		{ DBC_CHARACTER_HAIR_GEO,		"CharHairGeo.txt"		},
		{ DBC_CHARACTER_HEAD_GEO,		"CharHeadGeo.txt"		},
		{ DBC_CHARACTER_ACTION_SET,		"CharActionSet.txt"		},
		{ DBC_CHARACTER_MODEL,			"CharModel.txt"			},
		{ DBC_CHARACTER_MOUNT,			"CharMount.txt"			},
		{ DBC_MISSION_LIST,				"MissionList.txt"		},
		{ DBC_MISSION_DATA,				"MissionData.txt"		},
		{ DBC_MISSION_REWARD,			"MissionReward.txt"		},
		{ DBC_MISSION_PUNISH,			"MissionPunish.txt"		},
		{ DBC_MISSION_DIALOG,			"MissionDialog.txt"		},
		{ DBC_CHARACTER_EFFECT,			"CharEffect.txt"		},
		{ DBC_CHARACTER_EXPLEVEL,		"PlayerExpLevel.txt"	},
		{ DBC_CHARACTER_FACE,			"CharacterFace.txt"		},	// 头像信息
		{ DBC_SYSTEM_COLOR,				"SystemColour.txt"		},
		{ DBC_CREATURE_ATT,				"MonsterAttrExTable.txt"},
		{ DBC_PET_EX_ATT,				"PetAttrTable.txt"		},
		{ DBC_CREATURE_SOUND,			"CreatureSound.txt"		},
		{ DBC_ITEM_VISUAL_CHAR,			"ItemVisualChar.txt"	},
		{ DBC_ITEM_VISUAL_LOCATOR,		"ItemVisualLocator.txt"	},
		{ DBC_ITEM_EQUIP_WHITE,			"WhiteEquipBase.txt"	},
		{ DBC_ITEM_EQUIP_GREEN,			"GreenEquipBase.txt"	},
		{ DBC_ITEM_EQUIP_BLUE,			"BlueEquipBase.txt"		},
		{ DBC_ITEM_MEDIC,				"CommonItem.txt"		},
		{ DBC_ITEM_GEM,					"GemInfo.txt"			},
		{ DBC_ITEM_STOREMAP,			"StoreMapItem.txt"		},
		{ DBC_ITEM_SETATT,				"EquipSetAttr.txt"		},
		{ DBC_SOUND_INFO,				"SoundInfo.txt"			},
		{ DBC_EFFECT_DEFINE,			"EffectDefine.txt"		},
		{ DBC_SKILL_XINFA,				"XinFa_V1.txt"			},
		{ DBC_SKILL_ADDIMPACT,			"SkillAddImpact.txt"	},
		{ DBC_BUFF_IMPACT,				"ImpactSEData_V1.txt"	},
		{ DBC_DIRECTLY_IMPACT,			"ImpactDirectly.txt"	},
		{ DBC_BULLET_DATA,				"Bullet.txt"			},
		{ DBC_SKILL_DATA,				"SkillTemplate_V1.txt"	},
		{ DBC_SKILL_DEPLETE,			"SkillDeplete.txt"		},
		{ DBC_SPECIAL_OBJ_DATA,			"SpecialObjData.txt"	},
		{ DBC_SCENE_DEFINE,				"SceneDefine.txt"		},
		{ DBC_SCENE_POS_DEFINE,			"ScenePosDefine.txt"	},
		{ DBC_UI_LAYOUTDEFINE,			"Interface.txt"			},
		{ DBC_LIFEABILITY_GROWPOINT,	"GrowPoint.txt"			},
		{ DBC_LIFEABILITY_DEFINE,		"Ability.txt"			},
		{ DBC_LIFEABILITY_ITEMCOMPOSE,	"ItemCompound.txt"		},
		{ DBC_LIFEABILITY_PLATFORM,		"Platform.txt"			},
		{ DBC_CODE_CONVERT,				"CodeConvert.txt"		},
		//{ DBC_XINFA_STUDYSPEND,			"XinFaStudySpend_V1.txt"},
		{ DBC_TITLE_NAME,				"CharTitle.txt"			},
		{ DBC_SKILLDATA_V1_DEPLETE,		"SkillData_V1.txt"		},	// 读取skillData_V1.txt;
		{ DBC_MISSION_KIND,				"MissionKind.txt"		},
		{ DBC_STRING_DICT,				"StrDictionary.txt"		},	//字典
		{ DBC_ITEM_RULE,				"ItemRule.txt"			},	//物品规则
		{ DBC_TALK_FILTER,				"StrFilter.txt"			},	//过滤词汇文件
		{ DBC_LV_MAXMONEY,				"LvMaxMoney.txt"		},	//等级金钱对应表
		{ DBC_TALK_ACT,					"ChatMood.txt"			},	//聊天动作命令文件
		{ DBC_TALK_CONFIG,				"ChatConfig.txt"		},	//聊天配置文件
		{ DBC_MONSTER_PAOPAO,			"MonsterPaoPao.txt"		},	//怪物聊天泡泡
		{ DBC_HAIR_STYLE,				"HairStyle.txt"			},	//发型消耗表
		{ DBC_BUILDING_DEINFE,			"BuildingDefine.txt"	},	//城市建筑物定义表
		{ DBC_CITY_BUILDING,			"CityBuilding.txt"		},	//城市建筑物表
		{ DBC_CAMP_AND_STAND,			"CampAndStand.txt"		},	//阵营配置表
		{ DBC_FULLCMP_FILTER,			"FullCompareFilter.txt"	},	//完全匹配过滤表
		{ DBC_PET_LEVELUP,				"PetLevelUpTable.txt"	},	//宠物升级所需经验表
	};

	//打开所有数据库
	INT nNum = sizeof(s_dbToLoad)/sizeof(_DATABASE_DEFINE);
	for(INT i=0; i<nNum; i++)
	{
		CDataBase* pDataBase = new CDataBase(s_dbToLoad[i].idDatabase);

		if(!(pDataBase->OpenFromTXT (s_dbToLoad[i].pFileName)))
		{
			TDThrow("Open %s Error!", s_dbToLoad[i].pFileName);
		}
		if(m_mapDataBaseBuf.find(s_dbToLoad[i].idDatabase) != m_mapDataBaseBuf.end())
		{
			TDThrow("DBC ID Multi define(%s)", s_dbToLoad[i].pFileName);
		}
		m_mapDataBaseBuf.insert(std::make_pair(s_dbToLoad[i].idDatabase, pDataBase));
	}
}
コード例 #26
0
	INT SystemSetup::Lua_SaveGameSetup(LuaPlus::LuaState* state)
	{
		LuaPlus::LuaStack args(state);

		if (!(args[2].IsInteger()))
		{
			TDThrow("SystemSetup::SaveGameSetup[2] param parameter error");
		}
		if (!(args[3].IsInteger()))
		{
			TDThrow("SystemSetup::SaveGameSetup[3] param parameter error");
		}
		if (!(args[4].IsInteger()))
		{
			TDThrow("SystemSetup::SaveGameSetup[4] param parameter error");
		}
		if (!(args[5].IsInteger()))
		{
			TDThrow("SystemSetup::SaveGameSetup[5] param parameter error");
		}
		if (!(args[6].IsInteger()))
		{
			TDThrow("SystemSetup::SaveGameSetup[6] param parameter error");
		}
		if (!(args[7].IsInteger()))
		{
			TDThrow("SystemSetup::SaveGameSetup[7] param parameter error");
		}
		if (!(args[8].IsInteger()))
		{
			TDThrow("SystemSetup::SaveGameSetup[8] param parameter error");
		}
		if (!(args[9].IsInteger()))
		{
			TDThrow("SystemSetup::View_SetData[9] param parameter error");
		}
		INT nRefuseAllMail			= args[2].GetInteger();
		INT nRefuseJoinMeToFriend	= args[3].GetInteger();
		INT nRefuseStrangerMail		= args[4].GetInteger();
		INT nRefuseExchange			= args[5].GetInteger();
		INT nRefuseTeamRequest		= args[6].GetInteger();
		INT nCloseMyPaopao			= args[7].GetInteger();
		INT nRefuseSeeMySpouse		= args[8].GetInteger();

		INT nCloseTalkFrame			= args[9].GetInteger();

		INT Original = m_GameData;

		if(nRefuseAllMail == 0)
		{
			INT nGsf =  1 << (GSF_CANNOT_RECV_MAIL);
			m_GameData = ~(nGsf) & m_GameData;
		}
		else
		{
			INT nGsf =  1 << (GSF_CANNOT_RECV_MAIL);		
			m_GameData = nGsf | m_GameData;
		}

		if(nRefuseJoinMeToFriend == 0)
		{
			INT nGsf =  1 << (GSF_CANNOT_ADD_FRIEND);
			m_GameData = ~(nGsf) & m_GameData;
		}
		else
		{
			INT nGsf =  1 << (GSF_CANNOT_ADD_FRIEND);		
			m_GameData = nGsf | m_GameData;
		}

		if(nRefuseStrangerMail == 0)
		{
			INT nGsf = 1 << (GSF_CANNOT_RECV_STRANGER_MAIL);
			m_GameData = ~(nGsf) & m_GameData;
		}
		else
		{
			INT nGsf = 1<< (GSF_CANNOT_RECV_STRANGER_MAIL);		
			m_GameData = nGsf | m_GameData;
		}

		if(nRefuseExchange == 0)
		{
			INT nGsf = 1 << (GSF_REFUSE_TRADE);
			m_GameData = ~(nGsf) & m_GameData;
		}
		else
		{
			INT nGsf = 1<< (GSF_REFUSE_TRADE);		
			m_GameData = nGsf | m_GameData;
		}

		if(nRefuseTeamRequest == 0)
		{
			INT nGsf = 1 << (GSF_REFUSE_TEAM_INVITE);
			m_GameData = ~(nGsf) & m_GameData;
		}
		else
		{
			INT nGsf = 1<< (GSF_REFUSE_TEAM_INVITE);		
			m_GameData = nGsf | m_GameData;
		}

		if(nCloseMyPaopao == 0)
		{
			INT nGsf = 1 << (GSF_CLOSE_POPUP);
			m_GameData = ~(nGsf) & m_GameData;
			CGameProcedure::s_pUISystem->SetPaoPaoActive(true);
		}
		else
		{
			INT nGsf = 1<< (GSF_CLOSE_POPUP);		
			m_GameData = nGsf | m_GameData;
			CGameProcedure::s_pUISystem->SetPaoPaoActive(false);
		}

		if(nRefuseSeeMySpouse == 0)
		{
			INT nGsf = 1 << (GSF_REFUSE_LOOK_SPOUSE_INFO);
			m_GameData = ~(nGsf) & m_GameData;
		}
		else
		{
			INT nGsf = 1<< (GSF_REFUSE_LOOK_SPOUSE_INFO);		
			m_GameData = nGsf | m_GameData;
		}


		if(Original != m_GameData)
		{
			CGModifySetting msg;
			_OWN_SETTING* pSend_Value = msg.GetValue();

			msg.SetType(SETTING_TYPE_GAME);
			pSend_Value->m_SettingType = -1;
			pSend_Value->m_SettingData = m_GameData;
			//给服务器发送CGMODIFYSETTING
	
			CNetManager::GetMe()->SendPacket( &msg );
		}

		return 0;
	}
コード例 #27
0
ファイル: GMDP_Struct_Quest.cpp プロジェクト: brock7/TianLong
//g_DemandKill={{id=66,num=1},{id=56,num=1}}
void parseDemandKill(CHAR** pDest,CHAR* pSrc,INT j)
{
	CHAR* pCur = strchr(pSrc,'=');
	if(!pCur)
		TDThrow("策划写错了这个脚本:%s", pSrc);
	strcpy(*pDest,tokens[j]);
	CHAR* pNow = *pDest + strlen(tokens[j]);
	
	int count = 0;
	int digit = 1;

	int npcId = 0;
	int npcCount = 0;
	while(pCur++)
	{
		if(*pCur == '{')
		{
			digit = 1;
			count++;
		}
		else if(*pCur == '}')
		{
			digit = 1;
			count--;
			if(count == 0)
				break;
		}

		if(digit == 1 && isdigit(*pCur))
		{	
			digit = 2;
			npcId = atoi(pCur);

			*pNow++=*pCur;			
		}
		else if(digit == 3 && isdigit(*pCur))
		{
			digit = 4;
			npcCount = atoi(pCur);

			DBC_DEFINEHANDLE(s_pCreatureDBC, DBC_CREATURE_ATT);
	
			//从DBC中查找定义
			const _DBC_CREATURE_ATT* pMissionNpc = (const _DBC_CREATURE_ATT*)s_pCreatureDBC->Search_Index_EQU(npcId);
			_MISSION_INFO::QuestDemandKill newDemandKill;
			newDemandKill.pDemandKill = new SMissionDemandKill;
			newDemandKill.pDemandKill->m_uNPCID = npcId;
			newDemandKill.pDemandKill->m_yCount = npcCount;
			if(!pMissionNpc)
				newDemandKill.szNPCName = "???";
			else
				newDemandKill.szNPCName = (STRING)pMissionNpc->pName;
			misInfo->m_vecQuestDemandKill.push_back(newDemandKill);

			*pNow++=*pCur;
			
		}
		else if(digit && (*pCur == ','))
		{
			digit = 3;
			*pNow++=',';			
		}
	}
}
コード例 #28
0
ファイル: RenderSystem.cpp プロジェクト: brock7/TianLong
//初始化
VOID CRenderSystem::Initial(VOID* pParam)
{
#if (_MSC_VER >= 1400)
//	std::locale langLocale("");
//	std::locale::global(langLocale);
	setlocale( LC_CTYPE, "" );
#endif
	//---------------------------------------------------------
	//取得渲染窗口句柄
	TDAssert(pParam);
	HWND hMainWnd = *((HWND*)pParam);
	g_hMainWnd = hMainWnd;

	g_pVaribleSys = (tVariableSystem*)g_pKernel->GetNode("bin\\var");
	TDAssert(g_pVaribleSys);

	g_pEventSys = (tEventSystem*)g_pKernel->GetNode("bin\\event");
	TDAssert(g_pEventSys);

	//---------------------------------------------------------
	//初始化RenderSystem
	m_pRenderSystem->init("WXResources.cfg", "", "", "WXRender.log");

	//---------------------------------------------------------
	//加载OGRE插件
	g_pDebuger = (tDebuger*)g_pKernel->GetNode("bin\\debuger");

	g_pSoundSystem = (tSoundSystem*)g_pKernel->GetNode("bin\\snd");
	TDAssert(g_pSoundSystem);

	g_pWorldSystem = (tWorldSystem*)g_pKernel->GetNode("bin\\worldman");
	TDAssert(g_pWorldSystem);

	g_pTimeSystem = (tTimeSystem*)g_pKernel->GetNode("bin\\time");
	TDAssert(g_pTimeSystem);

	g_pResourceProvider = (CResourceProvider*)g_pKernel->GetNode("bin\\resprovider");
	TDAssert(g_pResourceProvider);

	//STRING str = g_pVaribleSys->GetAs_String("Gfx_API");
	Ogre::Root* pTheRoot = &(Ogre::Root::getSingleton());

	//选择渲染系统
	//if(stricmp(g_pVaribleSys->GetAs_String("Gfx_API").c_str(), "Direct3D") == 0)
	//{
	//	pTheRoot->loadPlugin("RenderSystem_Direct3D9.dll");
	//	pTheRoot->setRenderSystem(pTheRoot->getRenderSystemByName("Direct3D9 Rendering Subsystem"));
	//}
	//else if(stricmp(g_pVaribleSys->GetAs_String("Gfx_API").c_str(), "OpenGL") == 0)
	//{
	//	TDThrow("Don't Support GL RenderSystem!");
	//	//pTheRoot->loadPlugin("RenderSystem_GL.dll");
	//	//pTheRoot->setRenderSystem(pTheRoot->getRenderSystemByName("OpenGL Rendering Subsystem"));
	//}
	//else 
	//	TDThrow("UnKnown RenderSystem!");


	//使用D3D渲染
	pTheRoot->loadRenderPlugins_D3D9();
	//加载其他插件
	pTheRoot->loadInnerPlugins();
	//pTheRoot->loadPlugin("Plugin_ParticleFX.dll");
	//pTheRoot->loadPlugin("Plugin_ParticleFX2.dll");
	//pTheRoot->loadPlugin("Plugin_OctreeSceneManager.dll");
	//pTheRoot->loadPlugin("Plugin_CgProgramManager.dll");

	//分析资源
	ScriptParsingListener listener;
	try 
	{
		//传入渲染窗口句柄
		WX::System::NameValuePairList ViewSetting;
		INT nFSAA = g_pVaribleSys->GetAs_Int(szFSAAVar);
		INT nVsync = g_pVaribleSys->GetAs_Int(szvsyncVar);

		switch(nFSAA)
		{
		case 0:
			ViewSetting["FSAA"]  = Ogre::StringConverter::toString(0);
			break;
		case 1:
			ViewSetting["FSAA"]  = Ogre::StringConverter::toString(2);
			break;
		case 2:
			ViewSetting["FSAA"]  = Ogre::StringConverter::toString(4);
			break;
		default:
			ViewSetting["FSAA"]  = Ogre::StringConverter::toString(0);
			break;
		}

		if(nVsync == 1)
			ViewSetting["vsync"] = "true";
		else
			ViewSetting["vsync"] = "false";

		m_pRenderSystem->setup((WX::ulong)(UINT_PTR)g_hMainWnd, &ViewSetting);

		//关闭OGRE图标
		m_pRenderSystem->getFrameStatsListener()->showLogoPanel(FALSE);
		
		//状态板
		m_pRenderSystem->getFrameStatsListener()->showStatPanel(FALSE);

		//创建射线交集
		m_pRaySceneQuery = m_pRenderSystem->getSceneManager()->createRayQuery(Ogre::Ray());
        m_pRaySceneQuery->setSortByDistance(TRUE);

		//---------------------------------------------------------
		//设置DebugPanel
		m_pDebugPanel = new CDebugPanel(
								Ogre::OverlayManager::getSingleton().getByName("WX/DebugOverlay"),
								Ogre::OverlayManager::getSingleton().getOverlayElement("WX/StatPanel"), 
								Ogre::OverlayManager::getSingleton().getOverlayElement("WX/HitObjPanel"), 
								Ogre::OverlayManager::getSingleton().getOverlayElement("WX/HitObjText"), 
								m_pRenderSystem->getRenderWindow());

		//---------------------------------------------------------
		//创建摄像机
		{
			//设置摄像机
			//取得环境变量
		
			BOOL bHave;
			FLOAT fCamera_MinDistance = g_pVaribleSys->GetAs_Float("Camera_MinDistance", &bHave);
			if(bHave) CCamera_Scene::MIN_DISTANCE = fCamera_MinDistance;

			FLOAT fCamera_MaxDistance = g_pVaribleSys->GetAs_Float("Camera_MaxDistance", &bHave);
			if(bHave) CCamera_Scene::MAX_DISTANCE = fCamera_MaxDistance;

			FLOAT fCamera_Pitch = g_pVaribleSys->GetAs_Float("Camera_Pitch", &bHave);
			if(bHave) CCamera_Scene::STATIC_PITCH = -fCamera_Pitch*TDU_PI/180.0f;
		}

		m_pCamera_CharView = new CCamera_CharSel(m_pRenderSystem->getCamera());
		m_pCamera_Scene = new CCamera_Scene(m_pRenderSystem->getCamera());
		m_pCamera_Scene->SetDistance(CCamera_Scene::MAX_DISTANCE);

		m_pCamera_Current = m_pCamera_CharView;

		//--------------------------------------------
		//初始化PostFilter系统
		m_pPostFilterManager = m_pRenderSystem->getPostFilterManager();
		//注册所有全局渲染器
		WX::registerAllPostFilterFactories(m_pPostFilterManager);
		m_pPostFilterManager->createPostFilter("Floodlighting", m_pRenderSystem->getViewport());
//		m_pPostFilterManager->createPostFilter("Bloom", m_pRenderSystem->getViewport());
//		m_pPostFilterManager->createPostFilter("HeatVision", m_pRenderSystem->getViewport());
		m_pPostFilterManager->createPostFilter("Fade", m_pRenderSystem->getViewport());

		//--------------------------------------------
		//设置特效系统的声音播放函数
		WX::LogicModel::SetPlaySoundFuncton((OnPlaySound)(g_pSoundSystem->GetPlaySoundFunc()));
		WX::LogicModel::SetStopSoundFunction((OnStopSound)(g_pSoundSystem->GetStopSoundFunc()));
		WX::LogicModel::SetGetHeightInWorldListener((GetHeightInWorld)(g_pWorldSystem->GetTerrainHeightFunc()));

		// 初始化 fake obeject manager
		m_pFakeObjectManager = new CFakeObjectManager;
		m_pFakeObjectManager->Initial();

//		WX::Effect::setDefaultIterativeInterval(0.01f);
		Ogre::ParticleSystem::setDefaultIterationInterval(0.033f);

		//系统设置接口挂接变量控制系统
		g_pEventSys->RegisterEventHandle("VARIABLE_CHANGED",_OnVariableChangedEvent);

		//恢复上次颜色设置
		g_pEventSys->PushEvent(
            GE_VARIABLE_CHANGED, 
			sz32BitTexturesVar, 
			g_pVaribleSys->GetAs_String(sz32BitTexturesVar).c_str());

	} 
	catch(const Ogre::Exception& e)
	{
        BOOL rethrow = TRUE;

        if (e.getNumber() == Ogre::Exception::ERR_DUPLICATE_ITEM)
        {
            if (e.getSource() == "ResourceManager::add")
            {
                if (Ogre::StringUtil::endsWith(listener._scriptName, ".material", TRUE))
                {
                    char materialName[256];
                    if (sscanf(e.getDescription().c_str(), "Resource with the name %255s already exists.", materialName) == 1)
                    {
                        Ogre::MaterialPtr material = Ogre::MaterialManager::getSingleton().getByName(materialName);
                        if (!material.isNull())
                        {
                            char message[1024];

                            Ogre::StringVectorPtr currentNames = WX::findResourceFilenames(listener._groupName, listener._scriptName);
                            const Ogre::String& currentName = currentNames.isNull() || currentNames->empty() ? listener._scriptName : currentNames->front();
                            if (material->getOrigin().empty())
                            {
								_snprintf(message, 1024,
										("Predefined material \"%s\" duplicated in file \"%s\", the application will exit."),
                                        material->getName().c_str(), currentName.c_str());
                            }
                            else
                            {
                                Ogre::StringVectorPtr originNames = WX::findResourceFilenames(material->getGroup(), material->getOrigin());
                                const Ogre::String& originName = originNames.isNull() || originNames->empty() ? material->getOrigin() : originNames->front();
                                if (currentName == originName)
                                {
									_snprintf(message, 1024,
												("The material \"%s\" occuring in the file \"%s\" more than once, the application will exit."),
			                                    material->getName().c_str(), currentName.c_str());
                                }
                                else
                                {
									_snprintf(message, 1024,
											("Duplicate material \"%s\" in files \"%s\" and \"%s\", the application will exit."),
                                            material->getName().c_str(), currentName.c_str(), originName.c_str());
                                }
                            }

							TDThrow("Ogre::%s", message);
                        }
                    }
                }
            }
		}
		
		throw;
	}
}