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; }