mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2026-11-14 15:57:13 +00:00
LWOLUPExhibitComponent::Deserialize (0x00c63790) reads a flag and the exhibit's LOT, and that is the only way the client learns which exhibit is shown. DLU wrote the block on a construction only while it was dirty, so a player who came into range after the first update saw no exhibit until the next one was picked, up to 20 seconds later. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
28 lines
870 B
C++
28 lines
870 B
C++
#include "LUPExhibitComponent.h"
|
|
#include "EntityManager.h"
|
|
|
|
void LUPExhibitComponent::Run(float deltaTime) {
|
|
m_UpdateTimer += deltaTime;
|
|
if (m_UpdateTimer > 20.0f) {
|
|
NextLUPExhibit();
|
|
m_UpdateTimer = 0.0f;
|
|
}
|
|
}
|
|
|
|
void LUPExhibitComponent::NextLUPExhibit() {
|
|
m_LUPExhibitIndex++;
|
|
m_DirtyLUPExhibit = true;
|
|
Game::entityManager->SerializeEntity(m_Parent);
|
|
}
|
|
|
|
void LUPExhibitComponent::Serialize(RakNet::BitStream& outBitStream, bool bIsInitialUpdate) {
|
|
// LWOLUPExhibitComponent::Deserialize (0x00c63790) only learns the exhibit from this block, so a client the object
|
|
// comes into range of gets it too
|
|
const bool writeExhibit = bIsInitialUpdate || m_DirtyLUPExhibit;
|
|
outBitStream.Write(writeExhibit);
|
|
if (writeExhibit) {
|
|
outBitStream.Write(m_LUPExhibits[m_LUPExhibitIndex % m_LUPExhibits.size()]);
|
|
if (!bIsInitialUpdate) m_DirtyLUPExhibit = false;
|
|
}
|
|
}
|