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

📄 objectmanager.cpp

📁 墨香最新私服
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		if(pObject->IsDied() == TRUE)
			continue;

		pObject->GetPosition(&ObjectPos);
		
		if(pSkillArea->IsInDamageTile(&ObjectPos) == TRUE)
			pObjectArray->AddObject(pObject);
	}
}

CObject* CObjectManager::GetSelectedObject()
{
	if(m_SelectedObjectID == 0)
		return NULL;
	CObject* pObject = GetObject(m_SelectedObjectID);
	return pObject;
}

void CObjectManager::SetSelectedObject(CObject* pObject)
{
	CObject* pLastSelectedObject = GetSelectedObject();
	if( pLastSelectedObject == pObject ) return;

	if( pLastSelectedObject && pLastSelectedObject->IsInited() )
	{
		pLastSelectedObject->OnDeselected();
		
		if( ( CanOverInfoChange( pLastSelectedObject ) && !m_bAllNameShow ) || ( pLastSelectedObject->GetObjectKind() & eObjectKind_Monster ) )
			pLastSelectedObject->ShowObjectName( FALSE );
		else
			pLastSelectedObject->ShowObjectName( TRUE, GetObjectNameColor(pLastSelectedObject) );		
	}

	if( pObject )
	{
		m_SelectedObjectID = pObject->GetID();
		pObject->OnSelected();
		
		if( pObject->GetObjectKind() == eObjectKind_Player )
		{
			if( !((CPlayer*)pObject)->IsPKMode() )
				pObject->ShowObjectName( TRUE, NAMECOLOR_SELECTED );
			
//			if( GAMEIN->GetMonsterGuageDlg() )
//				GAMEIN->GetMonsterGuageDlg()->SetActive(FALSE);

			if( GAMEIN->GetMonsterGuageDlg() )
			{
				GAMEIN->GetMonsterGuageDlg()->SetActive(TRUE);
				GAMEIN->GetMonsterGuageDlg()->SetMonsterName(pObject->GetObjectName());
//				GAMEIN->GetMonsterGuageDlg()->SetMonsterLife( (CMonster *)pObject );
//				GAMEIN->GetMonsterGuageDlg()->SetMonsterShield( (CMonster *)pObject );
			}
		}
		else if( pObject->GetObjectKind() & eObjectKind_Monster )
		{
			pObject->ShowObjectName( TRUE, NAMECOLOR_SELECTED );

			if( GAMEIN->GetMonsterGuageDlg() )//阁胶磐 霸捞瘤 免仿
			{
				GAMEIN->GetMonsterGuageDlg()->SetActive(TRUE);
				GAMEIN->GetMonsterGuageDlg()->SetMonsterName(pObject->GetObjectName());
				GAMEIN->GetMonsterGuageDlg()->SetMonsterLife( (CMonster *)pObject );
				GAMEIN->GetMonsterGuageDlg()->SetMonsterShield( (CMonster *)pObject );
			}
		}
		else if( pObject->GetObjectKind() == eObjectKind_Npc )	//NPC
		{
			pObject->ShowObjectName( TRUE, NAMECOLOR_SELECTED );
			
//			if( GAMEIN->GetMonsterGuageDlg() )
//				GAMEIN->GetMonsterGuageDlg()->SetActive(FALSE);

			WORD npcKind = ((CNpc*)pObject)->GetNpcKind();

			if( npcKind == 30 || npcKind == 31 || npcKind == 0 )
			{
				if( GAMEIN->GetMonsterGuageDlg() )
					GAMEIN->GetMonsterGuageDlg()->SetActive(FALSE);
				return;
			}

			if( GAMEIN->GetMonsterGuageDlg() )
			{
				GAMEIN->GetMonsterGuageDlg()->SetActive(TRUE);
				GAMEIN->GetMonsterGuageDlg()->SetMonsterName(pObject->GetObjectName());
//				GAMEIN->GetMonsterGuageDlg()->SetMonsterLife( (CMonster *)pObject );
//				GAMEIN->GetMonsterGuageDlg()->SetMonsterShield( (CMonster *)pObject );
			}
		}
	}
	else
	{
		if(GAMEIN->GetMonsterGuageDlg())
			GAMEIN->GetMonsterGuageDlg()->SetActive(FALSE);
//		if(GAMEIN->GetPlayerGuageDlg())
//			GAMEIN->GetPlayerGuageDlg()->SetActive(FALSE);
		m_SelectedObjectID = 0;
	}
}

void CObjectManager::SetOverInfoOption( DWORD dwOption )
{
	m_dwOverInfoOption = dwOption;
	ApplyOverInfoOptionToAll();
}

void CObjectManager::ApplyOverInfoOptionToAll()
{
	CObject* pObject;
	m_ObjectTable.SetPositionHead();
	while( pObject = m_ObjectTable.GetData() )
	{
		ApplyOverInfoOption( pObject );
	}
}

void CObjectManager::ApplyOverInfoOption( CObject* pObject )
{
	if( pObject == NULL ) return;
	//overinfo on/off
	pObject->SetOverInfoOption( 1 );	//酒流 可记捞 绝促.
	
	//overinfo show/hide
	if( pObject->GetObjectKind() == eObjectKind_Player )
	{
#ifndef _GMTOOL_
		if( ((CPlayer*)pObject)->GetCharacterTotalInfo()->bVisible == FALSE )//hide等 蜡粗 捞抚 救嘛扁.
		{
			pObject->ShowObjectName( FALSE );
			return;
		}
#endif
//		if( ((CPlayer*)pObject)->IsPKMode() )
//		{
//			pObject->ShowObjectName( TRUE, NAMECOLOR_PKMODE );
//			return;
//		}
	}

	if( GetSelectedObject() != pObject )
	{
		if( pObject->GetObjectKind() == eObjectKind_Player )
		{
			if( TRUE/*pObject != HERO || m_bAllNameShow*/ )
			{
				if( WANTEDMGR->IsChrIDInList( pObject->GetID() ) )
				{
					pObject->ShowObjectName( TRUE, NAMECOLOR_WANTED );
					return;
				}

				if( ((CPlayer*)pObject)->IsPKMode() )
				{
					pObject->ShowObjectName( TRUE, NAMECOLOR_PKMODE );
					return;
				}

				if( m_dwOverInfoOption & eOO_NAME_PARTY || m_bAllNameShow )
				{
					if( PARTYMGR->IsPartyMember( pObject->GetID() ) )
					{
						pObject->ShowObjectName( TRUE, NAMECOLOR_PARTY );
						return;
					}
				}
				if( m_dwOverInfoOption & eOO_NAME_MUNPA || m_bAllNameShow )
				{
					if( HERO )
					if( HERO->GetGuildIdx() != 0 )
					if( HERO->GetGuildIdx() == ((CPlayer*)pObject)->GetGuildIdx())
					{
						pObject->ShowObjectName( TRUE, NAMECOLOR_MUNPA );
						if(((CPlayer*)pObject)->GetGuildMarkName() > 0)
							pObject->SetGuildMark();
						return;
					}
				}
				if( ( m_dwOverInfoOption & eOO_NAME_WHOLE ) || m_bAllNameShow )
				{
					pObject->ShowObjectName( TRUE );
					return;
				}
			}
			
			pObject->ShowObjectName( FALSE );
		}
		else if( pObject->GetObjectKind() == eObjectKind_Npc )
		{
			if( m_bAllNameShow )
				pObject->ShowObjectName( TRUE );
			else
				pObject->ShowObjectName( FALSE );
		}
	}
	else
	{
		pObject->ShowObjectName( TRUE, NAMECOLOR_SELECTED );		
	}
}

void CObjectManager::SetAllNameShow( BOOL bShow )
{ 
	if( m_bAllNameShow == bShow )
		return;

	m_bAllNameShow = bShow;
	
//	if( !( m_dwOverInfoOption & eOO_NAME_WHOLE ) )
	ApplyOverInfoOptionToAll();
}

void CObjectManager::OnMouseOver( CObject* pObject )
{
	if( pObject->GetID() != m_SelectedObjectID )
	if( !m_bAllNameShow || pObject->GetObjectKind() & eObjectKind_Monster )
	if( CanOverInfoChange( pObject ) )
	{
		pObject->ShowObjectName( TRUE );
	}
}

void CObjectManager::OnMouseLeave( CObject* pObject )
{
	if( pObject->GetID() != m_SelectedObjectID )
	if( !m_bAllNameShow || pObject->GetObjectKind() & eObjectKind_Monster )
	if( CanOverInfoChange( pObject ) )
	{
		pObject->ShowObjectName( FALSE );
	}
}

BOOL CObjectManager::CanOverInfoChange( CObject* pObject )
{
	if( pObject->GetObjectKind() == eObjectKind_Player )
	{
		if( WANTEDMGR->IsChrIDInList( pObject->GetID() ) ) return FALSE;
		if( ((CPlayer*)pObject)->IsPKMode() )		return FALSE;		
		if( m_dwOverInfoOption & eOO_NAME_WHOLE )	return FALSE;

		if( m_dwOverInfoOption & eOO_NAME_PARTY )
		if( PARTYMGR->IsPartyMember( pObject->GetID() ) )
			return FALSE;

		if( m_dwOverInfoOption & eOO_NAME_MUNPA )
		if( HERO )
		if( HERO->GetMunpaIdx() != 0 )
		if( HERO->GetMunpaMemberRank() > MUNPA_SEMIMEMBER )
		if( HERO->GetMunpaIdx() == ((CPlayer*)pObject)->GetMunpaIdx() && ((CPlayer*)pObject)->GetMunpaMemberRank() > MUNPA_SEMIMEMBER )
			return FALSE;
	}

	return TRUE;
}

DWORD CObjectManager::GetObjectNameColor( CObject* pObject )
{
	if( pObject->GetObjectKind() == eObjectKind_Player )
	{
		if( strncmp( pObject->GetObjectName(), "GM", 2 ) == 0 )
			return NAMECOLOR_GM;
		if( WANTEDMGR->IsChrIDInList( pObject->GetID() ) )
			return NAMECOLOR_WANTED;
		if( ((CPlayer*)pObject)->IsPKMode() )
			return NAMECOLOR_PKMODE;

		if( m_dwOverInfoOption & eOO_NAME_PARTY )
		if( PARTYMGR->IsPartyMember( pObject->GetID() ) )
			return NAMECOLOR_PARTY;

		if( m_dwOverInfoOption & eOO_NAME_MUNPA )
		if( HERO )
		if( HERO->GetMunpaIdx() != 0 )
		if( HERO->GetMunpaMemberRank() > MUNPA_SEMIMEMBER )
		if( HERO->GetMunpaIdx() == ((CPlayer*)pObject)->GetMunpaIdx() && ((CPlayer*)pObject)->GetMunpaMemberRank() > MUNPA_SEMIMEMBER )
			return NAMECOLOR_MUNPA;	

		return NAMECOLOR_PLAYER;
	}

	return NAMECOLOR_DEFAULT;
}

void CObjectManager::SetShadowOption( DWORD dwOption )
{
	m_dwShadowOption = dwOption;
	ApplyShadowOptionToAll();
}

void CObjectManager::ApplyShadowOptionToAll()
{
	CObject* pObject;
	m_ObjectTable.SetPositionHead();
	while( pObject = m_ObjectTable.GetData() )
	{
		ApplyShadowOption( pObject );
	}
}

void CObjectManager::ApplyShadowOption( CObject* pObject )
{
	if( pObject == NULL ) return;
//Shadow on/off
	//烙矫肺 缠荐 乐档废(傍己傈殿)

//Shadow show/hide
	if( m_dwShadowOption & eOO_SHADOW_OTHERCHARACTER )
	{
		if( pObject->GetObjectKind() == eObjectKind_Player )
		if( pObject != HERO )
		{
			AddShadow( pObject );
			return;
		}
	}

	if( m_dwShadowOption & eOO_SHADOW_ONLYHERO  )
	{
		if( pObject == HERO )
		{
			AddShadow( pObject );
			return;
		}
	}

	if( m_dwShadowOption & eOO_SHADOW_MONSTER )
	{
		if( ( pObject->GetObjectKind() & eObjectKind_Monster ) || ( pObject->GetObjectKind() == eObjectKind_Npc ) )
		{
			AddShadow( pObject );
			return;
		}
	}

	RemoveShadow( pObject );
}

void CObjectManager::ShowChatBalloon( CObject* pObject, char* pStrChat, DWORD dwColor, DWORD dwAliveTime )
{
	if( m_dwOverInfoOption & eOO_CHAT_NOBALLOON )
		return;

	if( pObject )
		pObject->ShowChatBalloon( TRUE, pStrChat, dwColor, dwAliveTime );
}

void CObjectManager::HideChatBalloonAll()
{
	CObject* pObject;
	
	m_ObjectTable.SetPositionHead();
	while( pObject = m_ObjectTable.GetData() )
	{
		pObject->ShowChatBalloon( FALSE, NULL );
	}
}

void CObjectManager::UpdateTargetList_Monster(CSkillObject* pSkillObject)
{
	
	CObject* pObject;
	
	m_ObjectTable.SetPositionHead();

	while(pObject = m_ObjectTable.GetData())
	{
		if((pObject->GetObjectKind() & eObjectKind_Monster) == FALSE)
			continue;

		pSkillObject->UpdateTargetList(pObject);
	}
}

void CObjectManager::NetworkMsgParse(BYTE Protocol,void* pMsg)
{
	switch(Protocol) 
	{
	case MP_BOSS_REST_START_NOTIFY:
		{
			MSG_DWORD * pmsg = (MSG_DWORD *)pMsg;
			switch(pmsg->dwData)
			{
			case eBOSSKIND_GENERAL:
				{
					OBJECTSTATEMGR->StartObjectState(m_pBoss[eBOSSTYPE_GENERAL], eObjectState_Rest);
					TARGETSET set;
					set.pTarget = m_pBoss[eBOSSTYPE_GENERAL];
					m_hRestHandle = EFFECTMGR->StartEffectProcess(
						FindEffectNum("Boss001_Rest_s.beff"), 
						m_pBoss[eBOSSTYPE_GENERAL], &set, 0, m_pBoss[eBOSSTYPE_GENERAL]->GetID());
				}
				break;
			}
		}	
		break;
	case MP_BOSS_REST_END_NOTIFY:
		{
			MSG_DWORD * pmsg = (MSG_DWORD *)pMsg;
			switch(pmsg->dwData)
			{
			case eBOSSKIND_GENERAL:
				{
					OBJECTSTATEMGR->EndObjectState(m_pBoss[eBOSSTYPE_GENERAL], eObjectState_Rest, 5000);
					EFFECTMGR->ForcedEndEffect(m_hRestHandle);
				}
				break;
			}
			
		}
		break;
	case MP_BOSS_RECALL_NOTIFY:
		{
			MSG_DWORD * pmsg = (MSG_DWORD *)pMsg;
			switch(pmsg->dwData)
			{
			case eBOSSKIND_GENERAL:
				{
					TARGETSET set;
					set.pTarget = m_pBoss[eBOSSTYPE_GENERAL];
					EFFECTMGR->StartEffectProcess(
						FindEffectNum("Boss001_summon.beff")
						, m_pBoss[eBOSSTYPE_GENERAL], &set, 0, m_pBoss[eBOSSTYPE_GENERAL]->GetID());
				}
				break;
			}
		}
		break;
	case MP_BOSS_LIFE_NOTIFY:
		{
			MSG_DWORD2 * pmsg = (MSG_DWORD2 *)pMsg;
			switch(pmsg->dwData2)
			{
			case eBOSSKIND_GENERAL:
				{
					m_pBoss[eBOSSTYPE_GENERAL]->SetLife(pmsg->dwData1);
				}
				break;
			case eBOSSKIND_YUKJI:
				{
					m_pBoss[eBOSSTYPE_YUKJI]->SetLife(pmsg->dwData1);
				}
				break;
			}
		}
		break;
	}
}

void CObjectManager::AllPlayerPKOff()
{
	m_ObjectTable.SetPositionHead();
	CObject* pObject = NULL;
	while( pObject = m_ObjectTable.GetData() )
	{
		if( pObject->GetObjectKind() != eObjectKind_Player ) continue;
		CPlayer* pPlayer = (CPlayer*)pObject;
		if( pPlayer->IsPKMode() == FALSE ) continue;

		pPlayer->SetPKMode( FALSE );

		if( HERO )
		if( pPlayer != HERO )
		{
			HERO->ClearTarget( pPlayer );
		}
	
		pPlayer->RemoveObjectEffect( PK_EFFECT_ID );
	}
	//某腐磐 坷滚牢器 官操扁
	ApplyOverInfoOptionToAll();
}

⌨️ 快捷键说明

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