void DrawMinimap() { D3DCOLOR MapColor = D3DCOLOR_ARGB(255, 0, 0, 0); D3DCOLOR TrashColor = D3DCOLOR_ARGB(255, 255, 0, 0); D3DCOLOR PlayerColor = D3DCOLOR_ARGB(255, 0, 0, 255); RECT mapRect; mapRect.left=0; mapRect.right=100; mapRect.top=0; mapRect.bottom=100; D3DXVECTOR3 mapPos(25, 25, 0); spriteMap->Begin(NULL); spriteMap->Draw(texMap, &mapRect, NULL, &mapPos, MapColor); spriteMap->End(); mapRect.left=0; mapRect.right=10; mapRect.top=0; mapRect.bottom=10; D3DXVECTOR3 playerPos(TheCamera.GetPosition().x / 4 + 75,TheCamera.GetPosition().z / 4 + 75, 0 ); D3DXVECTOR3 pcenter(5, 5, 0); spritePlayer->Begin(NULL); spritePlayer->Draw(texMap, &mapRect, &pcenter, &playerPos, PlayerColor); spritePlayer->End(); mapRect.left=0; mapRect.right=5; mapRect.top=0; mapRect.bottom=5; D3DXVECTOR3 trashPos; D3DXVECTOR3 tcenter(2.5, 2.5, 0); for(int i = 0; i < 10; i++) { if(BoolTrash[i]) { trashPos.x = TrashPositions[i].x / 4 + 75; trashPos.y = TrashPositions[i].z / 4 + 75; trashPos.z = 0; spriteTrash[i]->Begin(NULL); spriteTrash[i]->Draw(texMap, &mapRect, &tcenter, &trashPos, TrashColor); spriteTrash[i]->End(); } } }
void C1DRenderer::mouseup(float x, float y) { scene->handle(C1DEvent(C1DEvent::RELEASE, mapPos(x, y))); }
void C1DRenderer::mousedown(float x, float y) { lastPos = mapPos(x, y); scene->handle(C1DEvent(C1DEvent::PRESS, lastPos)); }
void C1DRenderer::mousemove(float x, float y) { C1DVec2 pos = mapPos(x, y); scene->handle(C1DEvent(C1DEvent::DRAG, pos - lastPos)); lastPos = pos; }
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 ; }
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 ; }
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 ; }
uint GCNewMonsterHandler :: Execute( GCNewMonster* 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))) { KLThrow("ERROR POSITION @ GCNewMonsterHandler"); } // 创建Npc CObject_PlayerNPC* pNPC = (CObject_PlayerNPC*)pObjectManager->FindServerObject( (INT)pPacket->getObjID() ); fVector3 fvGame; CGameProcedure::s_pGfxSystem->Axis_Trans ( tGfxSystem::AX_PLAN, fVector3(pPacket->getWorldPos().m_fX, 0.0f, pPacket->getWorldPos().m_fZ), tGfxSystem::AX_GAME, fvGame ); // 设置位置和方向 // 朝向 FLOAT fFaceDir = pPacket->getDir(); // 不存在, 创建新的 if( pNPC == NULL ) { pNPC = pObjectManager->NewPlayerNPC( (INT)pPacket->getObjID() ); SObjectInit initPlayerNPC; initPlayerNPC.m_fvPos = fvGame; initPlayerNPC.m_fvRot = fVector3( 0.f, fFaceDir, 0.f ); pNPC->Initial( &initPlayerNPC ); // 20100514 AddCodeBegin 将该行放到此处,如果NPC是新进场景的,才请求详细属性 // 放入Ask队列 CObjectManager::GetMe()->GetLoadQueue()->TryAddLoadTask( pNPC->GetID() ); // 20100514 AddCodeEnd } else { fVector2 mapPos(fvGame.x, fvGame.z); pNPC->SetMapPosition(mapPos); pNPC->SetFaceDir( fFaceDir ); pNPC->Enable( OSF_VISIABLE ); pNPC->Disalbe( OSF_OUT_VISUAL_FIELD ); } // 标识为怪 pNPC->SetNpcType( NPC_TYPE_MONSTER ); // 设置移动速度 pNPC->GetCharacterData()->Set_MoveSpeed( pPacket->getMoveSpeed() ); // 设置坐骑 pNPC->GetCharacterData()->Set_MountID( pPacket->getHorseID() ); // 设置武器装备 pNPC->GetCharacterData()->Set_MonstWeapon( pPacket->getWeaponID() ); 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; pNPC->PushCommand( &cmdTemp ); // 20100514 DeleteCodeBegin // 放入Ask队列 //CObjectManager::GetMe()->GetLoadQueue()->TryAddLoadTask( pNPC->GetID() ); // 20100514 DeleteCodeEnd // 同步渲染层 char szTemp[MAX_PATH]; _snprintf(szTemp, MAX_PATH, "GCNewMonster(%.1f,%.1f)", pPacket->getWorldPos().m_fX, pPacket->getWorldPos().m_fZ); pNPC->PushDebugString(szTemp); pNPC->SetMsgTime(CGameProcedure::s_pTimeSystem->GetTimeNow()); // 20100415 AddCodeBegin // 自动寻路的NPC数据到达后向服务器发请求打开NPC对话框 if ( CObjectManager::GetMe()->GetMySelf()->GetIsAutoNPCPath()->m_isAutoPath == TRUE && CObjectManager::GetMe()->GetMySelf()->GetIsAutoNPCPath()->m_strAutoNPCName == pNPC->GetCharacterData()->Get_Name() && CGameProcedure::s_pWorldManager->GetActiveSceneID() == CObjectManager::GetMe()->GetMySelf()->GetIsAutoNPCPath()->m_nSceneID ) { CObject_Character* pCharObj = NULL; STRING strName = CObjectManager::GetMe()->GetMySelf()->GetIsAutoNPCPath()->m_strAutoNPCName; pCharObj = CObjectManager::GetMe()->FindCharacterByName( strName ); if ( pCharObj != NULL ) { int i = pCharObj->GetServerID(); CGameProcedure::s_pGameInterface->Player_Speak( i ); if ( CObjectManager::GetMe()->GetMySelf()->CharacterLogic_IsStopped( CObject_Character::LOGIC_BASE ) ) { CObjectManager::GetMe()->GetMySelf()->SetIsAutoNPCPath(-1, "", FALSE ); } } } // 20100415 AddCodeEnd } return PACKET_EXE_CONTINUE ; }