fix bug in MxPresenter::CreateEntity (#626)

* fix bug in MxPresenter::CreateEntity

* Match 100%

---------

Co-authored-by: Christian Semmler <mail@csemmler.com>
This commit is contained in:
Misha 2024-03-04 17:00:38 -05:00 committed by GitHub
parent a78b1c7d49
commit 068760056a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 16 additions and 14 deletions

View file

@ -107,7 +107,7 @@ class MxPresenter : public MxCore {
virtual void Enable(MxBool p_enable); // vtable+0x54 virtual void Enable(MxBool p_enable); // vtable+0x54
MxEntity* CreateEntity(const char* p_name); MxEntity* CreateEntity(const char* p_defaultName);
void SendToCompositePresenter(MxOmni*); void SendToCompositePresenter(MxOmni*);
MxBool IsEnabled(); MxBool IsEnabled();

View file

@ -239,24 +239,26 @@ const char* PresenterNameDispatch(const MxDSAction& p_action)
} }
// FUNCTION: LEGO1 0x100b5410 // FUNCTION: LEGO1 0x100b5410
MxEntity* MxPresenter::CreateEntity(const char* p_name) MxEntity* MxPresenter::CreateEntity(const char* p_defaultName)
{ {
char buffer[512]; // create an object from LegoObjectFactory based on OBJECT: value in extra data.
char buffer2[512]; // If that is missing, p_defaultName is used
strcpy(buffer, p_name);
MxU16 extraLen = m_action->GetExtraLength(); char objectName[512];
strcpy(objectName, p_defaultName);
buffer[0] = extraLen; MxU16 extraLength;
buffer[1] = extraLen >> 8; char* extraData;
if (extraLen) { m_action->GetExtra(extraLength, extraData);
extraLen &= MAXWORD;
memcpy(buffer2 + 2, m_action->GetExtraData(), extraLen); if (extraLength & MAXWORD) {
buffer2[extraLen + 2] = 0; char extraCopy[512];
KeyValueStringParse(buffer, g_strOBJECT, buffer2 + 2); memcpy(extraCopy, extraData, extraLength & MAXWORD);
extraCopy[extraLength & MAXWORD] = '\0';
KeyValueStringParse(objectName, g_strOBJECT, extraCopy);
} }
return (MxEntity*) ObjectFactory()->Create(buffer); return (MxEntity*) ObjectFactory()->Create(objectName);
} }
// FUNCTION: LEGO1 0x100b54c0 // FUNCTION: LEGO1 0x100b54c0