Files
mir_server/server/LogicServer/entity/ActorNetCut.cpp
aixianling 5c9f1dae4a init
2025-01-09 17:45:40 +08:00

114 lines
2.6 KiB
C++

#include "StdAfx.h"
#include "Actor.h"
#include "../script/interface/LogDef.h"
#include<vector>
#define FUBEN_ID_KFSL 22 //跨服首领特殊处理
#define CAN_DISPLAY_NUM_KFSL 30 //同屏数量暂定20个 后续看看是否优化
#define BOSS_ID_KFSL 385 //bossID
int CActor::CanNetworkCutDownDisplayCount()
{
return (int)CAN_DISPLAY_NUM_KFSL;
}
bool CActor::CanNetworkCutDown()
{
return false;
//return true;
//return m_CanNetworkCutDown;
}
bool CActor::CheckNetworkCutDown(const int fuId, const int SceneId)
{
if (!GetLogicServer()->IsCrossServer())
{
return false;
}
if(fuId == FUBEN_ID_KFSL)
{
return true;
}
return false;
}
void CActor::InitCanDisplay()
{
m_CanDisplayList.clear();
m_PrecedenceDisplayList.clear();
}
void CActor::OnAddCanDisplay(EntityHandleTag& tag)
{
m_CanDisplayList.push_back(tag);
}
void CActor::OnCalculateDisplay()
{
CEntityManager* em = GetGlobalLogicEngine()->GetEntityMgr();
std::vector<EntityHandleTag>::iterator it = m_CanDisplayList.begin();
for (;it != m_CanDisplayList.end();)
{
CEntity *pEntity = em->GetEntity((*it).m_handle);
if(!pEntity)
{
it = m_CanDisplayList.erase(it);
}
else
{
++it;
}
}
if(m_CanDisplayList.size() > CAN_DISPLAY_NUM_KFSL)
{
auto iter = m_CanDisplayList.erase(std::begin(m_CanDisplayList) + CAN_DISPLAY_NUM_KFSL, std::end(m_CanDisplayList));
}
}
//增加可视玩家
bool CActor::OnAddCanSeeEntity(EntityHandle & hEntity)
{
unsigned long long handle = (unsigned long long)hEntity.GetHandle();
if (m_CanSeeEntityList.insert(std::make_pair(handle, hEntity)).second)
{
return true;
}
else
{
return false;
}
}
//删除可视玩家
bool CActor::OnClearCanSeeEntity(EntityHandle & hEntity)
{
if(m_CanSeeEntityList.empty())
{
return false;
}
unsigned long long handle = (unsigned long long)hEntity.GetHandle();
std::map<unsigned long long, EntityHandle>::iterator it = m_CanSeeEntityList.find(handle);
if (it != m_CanSeeEntityList.end())
{
m_CanSeeEntityList.erase(it);
return true;
}
else
{
return false;
}
}
bool CActor::OnCheckCanSeeEntity(EntityHandle & hEntity)
{
if(m_CanSeeEntityList.empty())
{
return false;
}
unsigned long long handle = (unsigned long long)hEntity.GetHandle();
if (m_CanSeeEntityList.find(handle) == m_CanSeeEntityList.end())
{
return false;
}
else
{
return true;
}
}