📄 objectmanager.cpp
字号:
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 + -