void test_reflect() { tKernel::getSinglePtr()->registerClass(GETCLASS(Shape)); tKernel::getSinglePtr()->registerClass(GETCLASS(Rect)); tKernel::getSinglePtr()->registerClass(GETCLASS(Square)); Shape* pRect= (Shape*)tKernel::getSinglePtr()->newNode("Rect","root/","rect"); pRect->draw(); Square* pSquare = (Square*)(tKernel::getSinglePtr()->newNode("Square","root/rect/","square")); pSquare->draw(); }
VOID CObject_Bus::ReleaseRenderInterface(VOID) { if(m_pRenderInterface != NULL) { INT i; for(i = 0; i < m_nPassengerCount; i++) { if(m_abPassengerAttacheds[i]) { CObject *pObj = (CObject*)(CObjectManager::GetMe()->FindServerObject(m_anPassengerIDs[i])); if(pObj != NULL && pObj->GetRenderInterface() != NULL) { if(pObj != NULL && g_theKernel.IsKindOf(pObj->GetClass(), GETCLASS(CObject_Character))) { ((CObject_Character*)pObj)->GetCharacterData()->Set_BusObjID(INVALID_ID); ((CObject_Character*)pObj)->Bus_UpdateCharActionSetFile(); } m_pRenderInterface->Detach_Object(pObj->GetRenderInterface()); } m_abPassengerAttacheds[i] = FALSE; } } m_pRenderInterface->Destroy(); m_pRenderInterface = NULL; } }
VOID CObject_Bus::UpdateMemberRenderInterfaceByIndex(INT nIndex) { if(m_anPassengerIDs[nIndex] == INVALID_ID) return; if(m_abPassengerAttacheds[nIndex]) return; if(m_pRenderInterface != NULL && m_pBusData != NULL && strlen(m_pBusData->m_aSeatInfo[nIndex].m_pszLocator) > 0) { CObject *pObj = (CObject*)(CObjectManager::GetMe()->FindServerObject(m_anPassengerIDs[nIndex])); if(pObj != NULL && pObj->GetRenderInterface() != NULL) { m_pRenderInterface->Attach_Object(pObj->GetRenderInterface(), m_pBusData->m_aSeatInfo[nIndex].m_pszLocator); if(g_theKernel.IsKindOf(pObj->GetClass(), GETCLASS(CObject_Character))) { CObject_Character *pCharMember = (CObject_Character*)(pObj); pCharMember->GetCharacterData()->Set_BusObjID(GetServerID()); pCharMember->Bus_UpdateCharActionSetFile(); } m_abPassengerAttacheds[nIndex] = TRUE; UpdateAnimation(); SetPosition(GetPosition()); } } }
VOID CObject_Bus::RemoveAllPassengers(VOID) { INT i; for(i = 0; i < DEF_BUS_MAX_PASSENGER_COUNT; i++) { if(m_anPassengerIDs[i] != INVALID_ID) { if(m_abPassengerAttacheds[i] && m_pRenderInterface != NULL) { CObject *pObj = (CObject*)(CObjectManager::GetMe()->FindServerObject(m_anPassengerIDs[i])); if(pObj != NULL && pObj->GetRenderInterface() != NULL) { if(pObj != NULL && g_theKernel.IsKindOf(pObj->GetClass(), GETCLASS(CObject_Character))) { ((CObject_Character*)pObj)->Bus_UpdateCharActionSetFile(); } m_pRenderInterface->Detach_Object(pObj->GetRenderInterface()); } } m_anPassengerIDs[i] = INVALID_ID; m_abPassengerAttacheds[i] = FALSE; } } m_nPassengerCount = 0; }
BOOL CObject_Bus::RemovePassenger(ObjID_t nPassengerID) { if(nPassengerID == INVALID_ID) return FALSE; INT nCount = GetPassengerCount(); if(nCount > 0) { INT i; for(i = 0; i < nCount; i++) { if(m_anPassengerIDs[i] == nPassengerID) { if(m_abPassengerAttacheds[i] && m_pRenderInterface != NULL) { CObject *pObj = (CObject*)(CObjectManager::GetMe()->FindServerObject(m_anPassengerIDs[i])); if(pObj != NULL && pObj->GetRenderInterface() != NULL) { if(pObj != NULL && g_theKernel.IsKindOf(pObj->GetClass(), GETCLASS(CObject_Character))) { ((CObject_Character*)pObj)->Bus_UpdateCharActionSetFile(); } m_pRenderInterface->Detach_Object(pObj->GetRenderInterface()); } } m_anPassengerIDs[i] = m_anPassengerIDs[nCount - 1]; m_abPassengerAttacheds[i] = m_abPassengerAttacheds[nCount - 1]; m_anPassengerIDs[nCount - 1] = INVALID_ID; m_abPassengerAttacheds[nCount - 1] = FALSE; return TRUE; } } } return FALSE; }
//插件初始化 extern "C" VOID __stdcall DllInit( tKernel* pKernel ) { TDAssert(pKernel); g_pKernel = pKernel; pKernel->ReisgerClass(GETCLASS(CUISystem)); }
VOID CZone::RegisterObject(CObject_Map* pObject) { KLAssert(pObject); // 判断是否确实是CObject_Map继承类 if(!g_theKernel.IsKindOf(pObject->GetClass(), GETCLASS(CObject_Map))) return; // 注册到Set中,如果已经有该id的物体注册,则直接替换 INT id = pObject->GetID(); m_setRegisterObject.insert( id ); pObject->m_pZone = this; }
nsSMState CVE_2013_0779_seamonkey2_13_2_NextState(char c){ //for each byte we get its class , if it is first byte, we also get byte length PRUint32 byteCls = GETCLASS(c); if (mCurrentState == eStart) { mCurrentBytePos = 0; mCurrentCharLen = mModel->charLenTable[byteCls]; } //from byte's class and stateTable, we get its next state mCurrentState=(nsSMState)GETFROMPCK(mCurrentState*(mModel->classFactor)+byteCls, mModel->stateTable); mCurrentBytePos++; return mCurrentState; }
/* ------------------------------------------------ // 请求目标骑宠属性 ------------------------------------------------ */ INT Mount::TargetMountAttrRequest(LuaPlus::LuaState* state) { tObject* pObj = CObjectManager::GetMe()->GetMainTarget(); if (pObj && g_theKernel.IsKindOf(pObj->GetClass(), GETCLASS(CObject_PlayerOther))) { CObject_PlayerOther* pOtherPlayer = (CObject_PlayerOther*)pObj; if (0 < pOtherPlayer->GetCharacterData()->Get_MountID()) { // 发送 请求目标骑宠属性消息 CGManipulatePet Msg; Msg.SetObjID(pOtherPlayer->GetServerID()); Msg.SetCharObjID(CObjectManager::GetMe()->GetMySelf()->GetServerID()); Msg.SetManipulateType(MANIPULATE_ASKOTHERPETINFO); CNetManager::GetMe()->SendPacket(&Msg); } } return 0; }
extern VOID InstallUISystem( tKernel* pKernel ) { KLAssert(pKernel); g_pKernel = pKernel; pKernel->ReisgerClass(GETCLASS(CUISystem)); }
VOID CGameInterface::Object_ShowContexMenu(INT idObj,BOOL showMyself) { CObject* pObject = (CObject*)CObjectManager::GetMe()->FindServerObject(idObj); if(!pObject) return; CHAR szObjId[32]; _snprintf(szObjId, 32, "%d", pObject->GetID()); //得到鼠标位置 POINT ptMouse = CInputSystem::GetMe()->MouseGetPos(); CHAR szXPos[32]; _snprintf(szXPos, 32, "%d", ptMouse.x); CHAR szYPos[32]; _snprintf(szYPos, 32, "%d", ptMouse.y); std::vector< STRING > vParam; //根据不同物体产生不同右键事件 if(g_theKernel.IsKindOf(pObject->GetClass(), GETCLASS(CObject_PlayerMySelf))) { if(showMyself) { // 如果自己已经在队伍中了 if( CUIDataPool::GetMe()->IsInTeam()) { vParam.push_back("player_in_team"); vParam.push_back(szObjId); vParam.push_back(szXPos); vParam.push_back(szYPos); CEventSystem::GetMe()->PushEvent(GE_SHOW_CONTEXMENU, vParam); return; } // 自己没有组队 vParam.push_back("player"); vParam.push_back(szObjId); vParam.push_back(szXPos); vParam.push_back(szYPos); CEventSystem::GetMe()->PushEvent(GE_SHOW_CONTEXMENU, vParam); } } else if(g_theKernel.IsKindOf(pObject->GetClass(), GETCLASS(CObject_PlayerOther))) { CObject_PlayerOther* pOtherObject = (CObject_PlayerOther*)pObject; // 自己有队伍, 点击的其他玩家也有队伍 if((pOtherObject->GetCharacterData()->Get_HaveTeamFlag())&&( CUIDataPool::GetMe()->IsInTeam())) { vParam.push_back("other_team_member"); vParam.push_back(szObjId); vParam.push_back(szXPos); vParam.push_back(szYPos); CEventSystem::GetMe()->PushEvent(GE_SHOW_CONTEXMENU, vParam); return; } //点击其他玩家没有队伍 if((!pOtherObject->GetCharacterData()->Get_HaveTeamFlag())) { vParam.push_back("other_not_team_member"); vParam.push_back(szObjId); vParam.push_back(szXPos); vParam.push_back(szYPos); CEventSystem::GetMe()->PushEvent(GE_SHOW_CONTEXMENU, vParam); return; } // 自己没队伍, 点击其他玩家有队伍 if((pOtherObject->GetCharacterData()->Get_HaveTeamFlag())&&( !CUIDataPool::GetMe()->IsInTeam())) { vParam.push_back("other_team_member_me_not_teamer"); vParam.push_back(szObjId); vParam.push_back(szXPos); vParam.push_back(szYPos); CEventSystem::GetMe()->PushEvent(GE_SHOW_CONTEXMENU, vParam); return; } vParam.push_back("other_player"); vParam.push_back(szObjId); vParam.push_back(szXPos); vParam.push_back(szYPos); CEventSystem::GetMe()->PushEvent(GE_SHOW_CONTEXMENU, vParam); } else if(g_theKernel.IsKindOf(pObject->GetClass(), GETCLASS(CObject_PlayerNPC))) { PET_GUID_t pg = CObjectManager::GetMe()->GetMySelf()->GetCharacterData()->Get_CurrentPetGUID(); //自己的宠物 if(!(pg.IsNull()) && CDataPool::GetMe()->Pet_GetPet(pg) && CDataPool::GetMe()->Pet_GetPet(pg)->m_idServer == pObject->GetServerID()) { vParam.push_back("my_pet"); vParam.push_back(szObjId); vParam.push_back(szXPos); vParam.push_back(szYPos); CEventSystem::GetMe()->PushEvent(GE_SHOW_CONTEXMENU, vParam); return; } CObject_PlayerNPC* pNpcObject = (CObject_PlayerNPC*)pObject; //其他宠物 if(pNpcObject->GetNpcType() == NPC_TYPE_PET) { if(INVALID_ID != pNpcObject->GetCharacterData()->Get_OwnerID()) { //有归属的宠物才显示菜单 vParam.push_back("other_pet"); vParam.push_back(szObjId); vParam.push_back(szXPos); vParam.push_back(szYPos); CEventSystem::GetMe()->PushEvent(GE_SHOW_CONTEXMENU, vParam); } return; } vParam.push_back("npc"); vParam.push_back(szObjId); vParam.push_back(szXPos); vParam.push_back(szYPos); CEventSystem::GetMe()->PushEvent(GE_SHOW_CONTEXMENU, vParam); } else return; }
VOID CGameProcedure::InitStaticMemeber(VOID) { //------------------------------------------------------------------- //初始化随即变量种子 srand( (unsigned)timeGetTime() ); //------------------------------------------------------------------- // 注册本地类 g_theKernel.ReisgerClass(GETCLASS(tNode)); //网络管理器 g_theKernel.ReisgerClass(GETCLASS(CNetManager)); //场景管理器 g_theKernel.ReisgerClass(GETCLASS(CWorldManager)); //物体管理器 g_theKernel.ReisgerClass(GETCLASS(CObjectManager)); g_theKernel.ReisgerClass(GETCLASS(CObject)); g_theKernel.ReisgerClass(GETCLASS(CObject_Surface)); g_theKernel.ReisgerClass(GETCLASS(CObject_Effect)); g_theKernel.ReisgerClass(GETCLASS(CObject_Bullet)); //g_theKernel.ReisgerClass(GETCLASS(CObject_SkillObj)); g_theKernel.ReisgerClass(GETCLASS(CObject_Special)); g_theKernel.ReisgerClass(GETCLASS(CObject_Map)); g_theKernel.ReisgerClass(GETCLASS(CObject_Static)); g_theKernel.ReisgerClass(GETCLASS(CObject_Building)); g_theKernel.ReisgerClass(GETCLASS(CObject_Dynamic)); g_theKernel.ReisgerClass(GETCLASS(CObject_Character)); g_theKernel.ReisgerClass(GETCLASS(CObject_PlayerMySelf)); g_theKernel.ReisgerClass(GETCLASS(CObject_PlayerNPC)); g_theKernel.ReisgerClass(GETCLASS(CObject_PlayerOther)); g_theKernel.ReisgerClass(GETCLASS(CObject_ProjTex)); g_theKernel.ReisgerClass(GETCLASS(CObject_ProjTex_MouseTarget)); g_theKernel.ReisgerClass(GETCLASS(CObject_ProjTex_AuraDure)); g_theKernel.ReisgerClass(GETCLASS(CTripperObject_Transport)); g_theKernel.ReisgerClass(GETCLASS(CTripperObject_ItemBox)); g_theKernel.ReisgerClass(GETCLASS(CTripperObject_Resource)); g_theKernel.ReisgerClass(GETCLASS(CTripperObject_Platform)); //输入管理器 g_theKernel.ReisgerClass(GETCLASS(CInputSystem)); //计时器 g_theKernel.ReisgerClass(GETCLASS(tTimeSystem)); //声音管理器 g_theKernel.ReisgerClass(GETCLASS(CSoundSystemFMod)); //数据库管理器 g_theKernel.ReisgerClass(GETCLASS(CDataBaseSystem)); //数据库管理器 g_theKernel.ReisgerClass(GETCLASS(CVariableSystem)); //UI操作接口 g_theKernel.ReisgerClass(GETCLASS(CGameInterface)); //UI数据池 g_theKernel.ReisgerClass(GETCLASS(CUIDataPool)); g_theKernel.ReisgerClass(GETCLASS(CDataPool)); //UI鼠标操作类 g_theKernel.ReisgerClass(GETCLASS(CCursorMng)); //脚本系统 g_theKernel.ReisgerClass(GETCLASS(CScriptSystem)); //事件系统 g_theKernel.ReisgerClass(GETCLASS(CEventSystem)); //操作管理 g_theKernel.ReisgerClass(GETCLASS(CActionSystem)); //UI模型显示管理 g_theKernel.ReisgerClass(GETCLASS(CFakeObjSystem)); //外接帮助系统 g_theKernel.ReisgerClass(GETCLASS(CHelperSystem)); //------------------------------------------------------------------- // 加载插件中的类 // PROFILE_PUSH(LoadPluginDll); // g_theKernel.LoadPlugin(_T("Debuger.dll"), &g_theKernel); g_theKernel.LoadPlugin(_T("WXRender.dll"), &g_theKernel); g_theKernel.LoadPlugin(_T("UISystem.dll"), &g_theKernel); // PROFILE_POP(LoadPluginDll); //------------------------------------------------------------------- //初始化所有的循环实例 s_pProcLogIn = new CGamePro_Login(); //!< 登录循环 s_pProcCharSel = new CGamePro_CharSel(); //!< 人物选择流程 s_pProcCharCreate = new CGamePro_CharCreate(); //!< 人物创建流程 s_pProcEnter = new CGamePro_Enter(); //!< 等待进入场景流程 s_pProcMain = new CGamePro_Main(); //!< 主游戏循环 s_pProcChangeScene = new CGamePro_ChangeScene(); //!< 服务器切换流程 // 初始化数据核心 //0. 输入管理器 s_pInputSystem = (tInputSystem*) g_theKernel.NewNode(_T("CInputSystem"), _T("bin"), _T("input")); //1. 计时器 s_pTimeSystem = (tTimeSystem*) g_theKernel.NewNode(_T("tTimeSystem"), _T("bin"), _T("time")); //2. 网络管理器 s_pNetManager = (CNetManager*) g_theKernel.NewNode(_T("CNetManager"), _T("bin"), _T("netman")); //3. 音效管理器 s_pSoundSystem = (tSoundSystem*) g_theKernel.NewNode(_T("CSoundSystemFMod"), _T("bin"), _T("snd")); //4. 渲染器节点 s_pGfxSystem = (CRenderSystem*) g_theKernel.NewNode(_T("CRenderSystem"), _T("bin"), _T("gfx")); //5. 调试器节点 // s_pDebuger = (tDebuger*) g_theKernel.NewNode(_T("TDDebuger"), _T("bin"), _T("debuger")); //6. 物体管理器 s_pObjectManager= (tObjectSystem*) g_theKernel.NewNode(_T("CObjectManager"), _T("bin"), _T("objman")); //7. UI管理器 s_pUISystem = (tUISystem*) g_theKernel.NewNode(_T("CUISystem"), _T("bin"), _T("ui_")); //8. 世界管理器 s_pWorldManager = (tWorldSystem*) g_theKernel.NewNode(_T("CWorldManager"), _T("bin"), _T("worldman")); //9. 数据库管理器 s_pDataBaseSystem = (tDataBaseSystem*) g_theKernel.NewNode(_T("CDataBaseSystem"), _T("bin"), _T("dbc")); //10. 系统变量管理器 s_pVariableSystem = (tVariableSystem*) g_theKernel.NewNode(_T("CVariableSystem"), _T("bin"), _T("var")); //11. 接口管理器 s_pGameInterface = ( tGameInterfaceBase* ) g_theKernel.NewNode( _T("CGameInterface"), _T("bin"), _T("interface")); //12. UI数据池 s_pDataPool = ( tDataPool* ) g_theKernel.NewNode( _T( "CUIDataPool" ), _T( "bin" ), _T( "datapool" ) ); s_pDataPool_ = ( tDataPool_* ) g_theKernel.NewNode( _T( "CDataPool" ), _T( "bin" ), _T( "datapool_" ) ); //13. 鼠标指针管理器 s_pCursorMng = ( tCursorSystem* ) g_theKernel.NewNode( _T( "CCursorMng"), _T( "bin" ), _T("cursor" ) ); //14. 脚本系统 s_pScriptSystem = ( tScriptSystem* ) g_theKernel.NewNode( _T( "CScriptSystem"), _T( "bin" ), _T("script" ) ); //15. 事件系统 s_pEventSystem = ( tEventSystem* ) g_theKernel.NewNode( _T( "CEventSystem"), _T( "bin" ), _T("event" ) ); //16. 操作管理 s_pActionSystem = ( tActionSystem* ) g_theKernel.NewNode( _T( "CActionSystem"), _T( "bin" ), _T("action" ) ); //17. UI模型显示管理 s_pFakeObjSystem = ( tFakeObjSystem* ) g_theKernel.NewNode( _T( "CFakeObjSystem"), _T( "bin" ), _T("fake" ) ); //18. 外接帮助系统 s_pHelperSystem = ( tHelperSystem* ) g_theKernel.NewNode( _T( "CHelperSystem"), _T( "bin" ), _T("helper" ) ); //19. 资源提供 s_pResourceProvider = ( CResourceProvider* ) g_theKernel.NewNode( _T( "CResourceProvider"), _T( "bin" ), _T("resprovider" ) ); //------------------------------------------------------------------- //初始化工作节点 s_pVariableSystem ->Initial(NULL); s_pEventSystem ->Initial(NULL); //------------------------------------------------------------------- // 创建主窗口 CreateMainWnd(); //------------------------------------------------------------------- s_pGfxSystem ->Initial(&g_hMainWnd); s_pScriptSystem ->Initial(NULL); s_pDataBaseSystem ->Initial(NULL); s_pTimeSystem ->Initial(NULL); s_pNetManager ->Initial(NULL); s_pWorldManager ->Initial(NULL); s_pObjectManager ->Initial(NULL); if(s_pDebuger) s_pDebuger->Initial(NULL); if(s_pUISystem) s_pUISystem->Initial(NULL); s_pInputSystem ->Initial(NULL); s_pSoundSystem ->Initial(&g_hMainWnd); s_pDataPool ->Initial(NULL); s_pDataPool_ ->Initial(NULL); s_pCursorMng ->Initial(&g_hInstance); s_pActionSystem ->Initial(NULL); s_pGameInterface ->Initial(NULL); s_pFakeObjSystem ->Initial(NULL); s_pHelperSystem ->Initial(NULL); s_pResourceProvider ->Initial(NULL); s_pSkillDataMgr = new CSkillDataMgr; s_pSkillDataMgr->Init( s_pDataBaseSystem->GetDataBase( DBC_SKILL_DATA )->GetDBCFile() ); s_pBuffImpactMgr = new CBuffImpactMgr; s_pBuffImpactMgr->Init( s_pDataBaseSystem->GetDataBase( DBC_BUFF_IMPACT )->GetDBCFile() ); s_pDirectlyImpactMgr = new CDirectlyImpactMgr; s_pDirectlyImpactMgr->Init( s_pDataBaseSystem->GetDataBase( DBC_DIRECTLY_IMPACT )->GetDBCFile() ); s_pBulletDataMgr = new CBulletDataMgr; s_pBulletDataMgr->Init( s_pDataBaseSystem->GetDataBase( DBC_BULLET_DATA ) ); //camp s_pCampDataMgr = new CampAndStandDataMgr_T; s_pCampDataMgr->InitFromDBMemory(s_pDataBaseSystem->GetDataBase(DBC_CAMP_AND_STAND)->GetDBCFile()); s_pActionSetMgr = new CActionSetMgr; s_pActionSetMgr->Init( "ActionSet/" ); //------------------------------------------------------------------- //创建Tick驱动 INT nMaxFPS = s_pVariableSystem->GetAs_Int("System_MaxFPS"); if(nMaxFPS < 5 || nMaxFPS >150) nMaxFPS = 30; m_hTickEvent = ::CreateEvent(NULL, FALSE, FALSE, NULL); ::ResetEvent(m_hTickEvent); m_hEventTimer = ::timeSetEvent((INT)(1000.0f/nMaxFPS), (INT)(1000.0f/nMaxFPS), EventTimerProc, 0, TIME_PERIODIC|TIME_CALLBACK_FUNCTION); // 2006-2-27 // 初试化 人物创建过程, 在这里面创建了男 , 女人物主角, 避免在进入游戏过程中, 创建很慢. if(s_pProcCharCreate) { s_pProcCharCreate->CallInit(); }// }
VOID CGameProcedure::InitStaticMemeber(VOID) { //------------------------------------------------------------------- // 初始化随即变量种子 srand( (unsigned)timeGetTime() ); //------------------------------------------------------------------- // 注册本地类 g_theKernel.ReisgerClass(GETCLASS(tNode)); // 网络管理器 g_theKernel.ReisgerClass(GETCLASS(CNetManager)); // 场景管理器 g_theKernel.ReisgerClass(GETCLASS(CWorldManager)); // 物体管理器 g_theKernel.ReisgerClass(GETCLASS(CObjectManager)); g_theKernel.ReisgerClass(GETCLASS(CObject)); g_theKernel.ReisgerClass(GETCLASS(CObject_Surface)); g_theKernel.ReisgerClass(GETCLASS(CObject_Effect)); g_theKernel.ReisgerClass(GETCLASS(CObject_Bullet)); //g_theKernel.ReisgerClass(GETCLASS(CObject_SkillObj)); g_theKernel.ReisgerClass(GETCLASS(CObject_Special)); g_theKernel.ReisgerClass(GETCLASS(CObject_Map)); g_theKernel.ReisgerClass(GETCLASS(CObject_Static)); g_theKernel.ReisgerClass(GETCLASS(CObject_Building)); g_theKernel.ReisgerClass(GETCLASS(CObject_Dynamic)); g_theKernel.ReisgerClass(GETCLASS(CObject_Character)); g_theKernel.ReisgerClass(GETCLASS(CObject_PlayerMySelf)); g_theKernel.ReisgerClass(GETCLASS(CObject_PlayerNPC)); g_theKernel.ReisgerClass(GETCLASS(CObject_PlayerOther)); g_theKernel.ReisgerClass(GETCLASS(CObject_ProjTex)); g_theKernel.ReisgerClass(GETCLASS(CObject_ProjTex_MouseTarget)); g_theKernel.ReisgerClass(GETCLASS(CObject_ProjTex_AuraDure)); g_theKernel.ReisgerClass(GETCLASS(CObject_ProjTex_BloodStain)); g_theKernel.ReisgerClass(GETCLASS(CTripperObject_Transport)); g_theKernel.ReisgerClass(GETCLASS(CTripperObject_ItemBox)); g_theKernel.ReisgerClass(GETCLASS(CTripperObject_ItemDrop)); g_theKernel.ReisgerClass(GETCLASS(CTripperObject_Resource)); g_theKernel.ReisgerClass(GETCLASS(CTripperObject_Platform)); g_theKernel.ReisgerClass(GETCLASS(CObject_Bus)); // 图形系统 g_theKernel.ReisgerClass(GETCLASS(CEngineInterface)); // 输入管理器 g_theKernel.ReisgerClass(GETCLASS(CInputSystem)); // 计时器 g_theKernel.ReisgerClass(GETCLASS(tTimeSystem)); // 声音管理器 g_theKernel.ReisgerClass(GETCLASS(CSoundSystemFMod)); // 数据库管理器 g_theKernel.ReisgerClass(GETCLASS(CDataBaseSystem)); // 数据库管理器 g_theKernel.ReisgerClass(GETCLASS(CVariableSystem)); // UI操作接口 g_theKernel.ReisgerClass(GETCLASS(CGameInterface)); // UI数据池 g_theKernel.ReisgerClass(GETCLASS(CUIDataPool)); g_theKernel.ReisgerClass(GETCLASS(CDataPool)); // UI鼠标操作类 g_theKernel.ReisgerClass(GETCLASS(CCursorMng)); // 脚本系统 g_theKernel.ReisgerClass(GETCLASS(CScriptSystem)); // 事件系统 g_theKernel.ReisgerClass(GETCLASS(CEventSystem)); // 操作管理 g_theKernel.ReisgerClass(GETCLASS(CActionSystem)); // UI模型显示管理 g_theKernel.ReisgerClass(GETCLASS(CFakeObjSystem)); // 外接帮助系统 g_theKernel.ReisgerClass(GETCLASS(CHelperSystem)); // 资源 g_theKernel.ReisgerClass(GETCLASS(CResourceProvider)); // 物品传输系统 g_theKernel.ReisgerClass(GETCLASS(CTransferItemSystem)); //注册定时器 g_theKernel.ReisgerClass(GETCLASS(CTimerManager)); //------------------------------------------------------------------- // 加载插件中的类 // PROFILE_PUSH(LoadPluginDll); // g_theKernel.LoadPlugin(_T("Debuger.dll"), &g_theKernel); #ifdef USEOGRELIB extern VOID InstallUISystem( tKernel* pKernel ); InstallUISystem(&g_theKernel); #else g_theKernel.LoadPlugin(_T("UI_CEGUI.dll"), &g_theKernel); #endif // PROFILE_POP(LoadPluginDll); //------------------------------------------------------------------- // 初始化所有的循环实例 s_pProcLogIn = new CGamePro_Login(); // 登录循环 s_pProcCharSel = new CGamePro_CharSel(); // 人物选择流程 s_pProcCharCreate = new CGamePro_CharCreate(); // 人物创建流程 s_pProcEnter = new CGamePro_Enter(); // 等待进入场景流程 s_pProcMain = new CGamePro_Main(); // 主游戏循环 s_pProcChangeScene = new CGamePro_ChangeScene(); // 服务器切换流程 //------------------------------------------------------------------- // 初始化数据核心 //0. 输入管理器 s_pInputSystem = (tInputSystem*) g_theKernel.NewNode( _T("CInputSystem"), _T("bin"), _T("input")); //1. 计时器 s_pTimeSystem = (tTimeSystem*) g_theKernel.NewNode( _T("tTimeSystem"), _T("bin"), _T("time")); //2. 网络管理器 s_pNetManager = (CNetManager*) g_theKernel.NewNode( _T("CNetManager"), _T("bin"), _T("netman")); //3. 音效管理器 s_pSoundSystem = (tSoundSystem*) g_theKernel.NewNode( _T("CSoundSystemFMod"), _T("bin"), _T("snd")); //4. 渲染器节点 s_pGfxSystem = (tGfxSystem*) g_theKernel.NewNode( _T("CEngineInterface"), _T("bin"), _T("gfx")); //5. 调试器节点 // s_pDebuger = (tDebuger*) g_theKernel.NewNode( _T("tDebuger"), _T("bin"), _T("debuger")); //6. 物体管理器 s_pObjectManager = (tObjectSystem*) g_theKernel.NewNode( _T("CObjectManager"), _T("bin"), _T("objman")); //7. UI管理器 s_pUISystem = (tUISystem*) g_theKernel.NewNode( _T("CUISystem"), _T("bin"), _T("ui_")); //8. 数据库管理器 s_pDataBaseSystem = (tDataBaseSystem*) g_theKernel.NewNode( _T("CDataBaseSystem"), _T("bin"), _T("dbc")); //9. 世界管理器 s_pWorldManager = (tWorldSystem*) g_theKernel.NewNode( _T("CWorldManager"), _T("bin"), _T("worldman")); //10. 系统变量管理器 s_pVariableSystem = (tVariableSystem*) g_theKernel.NewNode( _T("CVariableSystem"), _T("bin"), _T("var")); //11. 接口管理器 s_pGameInterface = (tGameInterfaceBase*) g_theKernel.NewNode( _T("CGameInterface"), _T("bin"), _T("interface")); //12. UI数据池 s_pUIDataPool = ( tUIDataPool* ) g_theKernel.NewNode( _T( "CUIDataPool" ), _T( "bin" ), _T( "datapool" ) ); s_pDataPool = ( tDataPool* ) g_theKernel.NewNode( _T( "CDataPool" ), _T( "bin" ), _T( "datapool_" ) ); //13. 鼠标指针管理器 s_pCursorMng = ( tCursorSystem* ) g_theKernel.NewNode( _T( "CCursorMng"), _T( "bin" ), _T("cursor" ) ); //14. 脚本系统 s_pScriptSystem = ( tScriptSystem* ) g_theKernel.NewNode( _T( "CScriptSystem"), _T( "bin" ), _T("script" ) ); //15. 事件系统 s_pEventSystem = ( tEventSystem* ) g_theKernel.NewNode( _T( "CEventSystem"), _T( "bin" ), _T("event" ) ); //16. 操作管理 s_pActionSystem = ( tActionSystem* ) g_theKernel.NewNode( _T( "CActionSystem"), _T( "bin" ), _T("action" ) ); //17. UI模型显示管理 s_pFakeObjSystem = ( tFakeObjSystem* ) g_theKernel.NewNode( _T( "CFakeObjSystem"), _T( "bin" ), _T("fake" ) ); //18. 外接帮助系统 s_pHelperSystem = ( tHelperSystem* ) g_theKernel.NewNode( _T( "CHelperSystem"), _T( "bin" ), _T("helper" ) ); //19. 资源提供 s_pResourceProvider = (tResourceProvider*) g_theKernel.NewNode( _T( "CResourceProvider"), _T( "bin" ), _T("resprovider" ) ); //20.定时器 tTimerSystem* timerSys = (tTimerSystem*)g_theKernel.NewNode(_T("CTimerManager"), _T("bin"), _T("timer") ); timerSys->Initial(NULL); //21.物品传输系统 s_pTransferItemSystem = (tTransferItemSystem*)g_theKernel.NewNode(_T("CTransferItemSystem"), _T("bin"), _T("transfer")); // 在创建主窗口之前先加载配置表 s_pVariableSystem ->Initial(NULL); //------------------------------------------------------------------- // 创建主窗口 CreateMainWnd(); //------------------------------------------------------------------- // 初始化工作节点 s_pEventSystem ->Initial(NULL); s_pGfxSystem ->Initial(&g_hMainWnd); s_pScriptSystem ->Initial(NULL); s_pDataBaseSystem ->Initial(NULL); s_pTimeSystem ->Initial(NULL); s_pNetManager ->Initial(NULL); s_pWorldManager ->Initial(NULL); s_pObjectManager ->Initial(NULL); // if(s_pDebuger) // s_pDebuger ->Initial(NULL); if(s_pUISystem) s_pUISystem ->Initial(NULL); s_pInputSystem ->Initial(NULL); s_pSoundSystem ->Initial(&g_hMainWnd); s_pUIDataPool ->Initial(NULL); s_pDataPool ->Initial(NULL); s_pCursorMng ->Initial(&g_hInstance); s_pActionSystem ->Initial(NULL); s_pGameInterface ->Initial(NULL); s_pFakeObjSystem ->Initial(NULL); s_pHelperSystem ->Initial(NULL); s_pResourceProvider ->Initial(NULL); s_pTransferItemSystem->Initial(NULL); s_pSkillDataMgr = new CSkillDataMgr; s_pSkillDataMgr->Init( s_pDataBaseSystem->GetDataBase( DBC_SKILL_DATA )->GetDBCFile() ); s_pBuffImpactMgr = new CBuffImpactMgr; s_pBuffImpactMgr->Init( s_pDataBaseSystem->GetDataBase( DBC_BUFF_IMPACT )->GetDBCFile() ); s_pDirectlyImpactMgr = new CDirectlyImpactMgr; s_pDirectlyImpactMgr->Init( s_pDataBaseSystem->GetDataBase( DBC_DIRECTLY_IMPACT )->GetDBCFile() ); s_pBulletDataMgr = new CBulletDataMgr; s_pBulletDataMgr->Init( s_pDataBaseSystem->GetDataBase( DBC_BULLET_DATA ) ); s_pBulletEntityManager = new CBulletEntityManager; // camp s_pCampDataMgr = new CampAndStandDataMgr_T; s_pCampDataMgr->InitFromDBMemory(s_pDataBaseSystem->GetDataBase(DBC_CAMP_AND_STAND)->GetDBCFile()); s_pActionSetMgr = new CActionSetMgr; s_pActionSetMgr->Init( "ActionSet/" ); // 每日活动功能 s_pDaytipsDataMgr = new DaytipsDataMgr; s_pDaytipsDataMgr->Init( s_pDataBaseSystem->GetDataBase( DBC_DAY_TIPS )->GetDBCFile() ); // 任务表 s_pQuestLogDataMgr = new QuestLogDataMgr; s_pQuestLogDataMgr->Init( s_pDataBaseSystem->GetDataBase( DBC_QUEST_LOG )->GetDBCFile() ); //------------------------------------------------------------------- // 创建Tick驱动 INT nMaxFPS = s_pVariableSystem->GetAs_Int("System_MaxFPS"); if(nMaxFPS < 5 || nMaxFPS >150) nMaxFPS = 30; m_hTickEvent = ::CreateEvent(NULL, FALSE, FALSE, NULL); ::ResetEvent(m_hTickEvent); m_hEventTimer = ::timeSetEvent((INT)(1000.0f/nMaxFPS), (INT)(1000.0f/nMaxFPS), EventTimerProc, 0, TIME_PERIODIC|TIME_CALLBACK_FUNCTION); // ------------------------------------------------------------------ // 通过关闭窗口事件,来实现初始化所有窗口。 // 解决了在游戏中初始化窗口时卡的问题。 std::vector< STRING > vParam; CHAR szTemp[MAX_PATH]; _snprintf(szTemp, MAX_PATH, "%d", 0); vParam.push_back(szTemp); vParam.push_back("distance"); _snprintf(szTemp, MAX_PATH, "%.3f", 1.0f); vParam.push_back(szTemp); CEventSystem::GetMe()->PushEvent(GE_OBJECT_CARED_EVENT, vParam); }