diff --git a/server/gameserver/framedata.cc b/server/gameserver/framedata.cc index 35af3d0..4b32e8e 100644 --- a/server/gameserver/framedata.cc +++ b/server/gameserver/framedata.cc @@ -10,17 +10,6 @@ void FrameData::ClearFrameData(Human* hum) new_objects.clear(); } if (!del_objects.empty()) { - if (!a8::HasBitFlag(hum->status, CS_Disable)) { - for (auto& itr : del_objects) { - Entity* entity = hum->room->GetEntityByUniId(itr); - if (entity) { - hum->RemovePartObjects(entity); - if (entity->IsEntityType(ET_Player)) { - ((Human*)entity)->RemovePartObjects(hum); - } - } - } - } del_objects.clear(); } if (!out_objects.empty()) { diff --git a/server/gameserver/framemaker.cc b/server/gameserver/framemaker.cc index 8fc4ea4..479e028 100644 --- a/server/gameserver/framemaker.cc +++ b/server/gameserver/framemaker.cc @@ -93,30 +93,31 @@ cs::SMUpdate* FrameMaker::MakeUpdateMsg(Human* hum) cs::SMUpdate* msg = new cs::SMUpdate; Room* room = hum->room; - PreProcess(msg, room, hum, framedata); - SerializeNewObjects(msg, room, hum, framedata); - SerializePartObjects(msg, room, hum, framedata); - SerializeDelObjects(msg, room, hum, framedata); - SerializeOutObjects(msg, room, hum, framedata); - SerializeShots(msg, room, hum, framedata); - SerializeEmotes(msg, room, hum, framedata); - SerializeBullets(msg, room, hum, framedata); - SerializeSmokes(msg, room, hum, framedata); - SerializePlaySkills(msg, room, hum, framedata); - SerializeExplosions(msg, room, hum, framedata); - SerializeChgedBuffs(msg, room, hum, framedata); - SerializeChgedBulletNums(msg, room, hum, framedata); - SerializeChgedHps(msg, room, hum, framedata); - SerializeChgedSkillCds(msg, room, hum, framedata); - SerializeChgedSkillCurrTimes(msg, room, hum, framedata); - SerializeChgedItems(msg, room, hum, framedata); - SerializeChgedWeaponAmmo(msg, room, hum, framedata); - SerializeDeadAliveObjs(msg, room, hum, framedata); - SerializeChgedCars(msg, room, hum, framedata); - SerializeChgedProps(msg, room, hum, framedata); - SerializeDelBullets(msg, room, hum, framedata); - PostProcess(msg, room, hum, framedata); - + if (hum->IsPlayer() || hum->HasObserver) { + PreProcess(msg, room, hum, framedata); + SerializeNewObjects(msg, room, hum, framedata); + SerializePartObjects(msg, room, hum, framedata); + SerializeDelObjects(msg, room, hum, framedata); + SerializeOutObjects(msg, room, hum, framedata); + SerializeShots(msg, room, hum, framedata); + SerializeEmotes(msg, room, hum, framedata); + SerializeBullets(msg, room, hum, framedata); + SerializeSmokes(msg, room, hum, framedata); + SerializePlaySkills(msg, room, hum, framedata); + SerializeExplosions(msg, room, hum, framedata); + SerializeChgedBuffs(msg, room, hum, framedata); + SerializeChgedBulletNums(msg, room, hum, framedata); + SerializeChgedHps(msg, room, hum, framedata); + SerializeChgedSkillCds(msg, room, hum, framedata); + SerializeChgedSkillCurrTimes(msg, room, hum, framedata); + SerializeChgedItems(msg, room, hum, framedata); + SerializeChgedWeaponAmmo(msg, room, hum, framedata); + SerializeDeadAliveObjs(msg, room, hum, framedata); + SerializeChgedCars(msg, room, hum, framedata); + SerializeChgedProps(msg, room, hum, framedata); + SerializeDelBullets(msg, room, hum, framedata); + PostProcess(msg, room, hum, framedata); + } return msg; } diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index e0f5cca..e81afa1 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -1300,7 +1300,7 @@ void Human::RemoveObserver(Human* observer) bool Human::HasObserver() { - return !observers_.empty(); + return observers_.size() > 1; } void Human::SendUpdateMsg()