mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2026-11-14 07:47:13 +00:00
fix(component): send a script component only when the client makes one
The client makes a script component for a registry script with a non-zero id, or for a custom script in the config it is sent (LOT 176 never): ApplyScriptComponentIfHasScript and LWOScriptComponent's allocator. A character's script and a server-only custom_script_server stay on the server and send nothing. The 5 LOTs whose registry script id is 0 (e.g. the AG concert fan, LOT 3002: live sent no config and no script) lose the bit the client never read. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -51,6 +51,15 @@ void ScriptComponent::LoadConfigData() {
|
||||
|
||||
m_Client = client && m_ScriptName.empty();
|
||||
SetScript(m_ScriptName);
|
||||
|
||||
// Sent only when the client makes a script component too: its registry script (not one with id 0), or a custom
|
||||
// script in the config the client gets (ApplyScriptComponentIfHasScript 0x01031460, LOT 176 never; the
|
||||
// allocator 0x0104d710). A character's and a server-only custom script stay on the server.
|
||||
const auto clientCustomScript = [this](const std::u16string& key) {
|
||||
return m_Parent->IsVarSentToClient(key) && !m_Parent->GetVarAsString(key).empty();
|
||||
};
|
||||
m_Serialized = (m_ComponentID > 0 && !isCharacter)
|
||||
|| (m_Parent->GetLOT() != 176 && (clientCustomScript(u"custom_script_server") || clientCustomScript(u"custom_script_client")));
|
||||
}
|
||||
|
||||
void ScriptComponent::Serialize(RakNet::BitStream& outBitStream, bool bIsInitialUpdate) {
|
||||
|
||||
Reference in New Issue
Block a user