diff --git a/apps/openmw-mp/Script/Functions/RecordsDynamic.cpp b/apps/openmw-mp/Script/Functions/RecordsDynamic.cpp index 129a1fd25..49d17ef09 100644 --- a/apps/openmw-mp/Script/Functions/RecordsDynamic.cpp +++ b/apps/openmw-mp/Script/Functions/RecordsDynamic.cpp @@ -1215,6 +1215,36 @@ void RecordsDynamicFunctions::SetRecordFaction(const char* faction) noexcept tempOverrides.hasFaction = true; } +void RecordsDynamicFunctions::SetRecordScale(double scale) noexcept +{ + unsigned short writeRecordsType = WorldstateFunctions::writeWorldstate.recordsType; + + if (writeRecordsType == mwmp::RECORD_TYPE::CREATURE) + tempCreature.data.mScale = scale; + else + { + LOG_MESSAGE_SIMPLE(TimedLog::LOG_ERROR, "Tried to set level for record type %i which lacks that property", writeRecordsType); + return; + } + + tempOverrides.hasScale = true; +} + +void RecordsDynamicFunctions::SetRecordBloodType(int bloodType) noexcept +{ + unsigned short writeRecordsType = WorldstateFunctions::writeWorldstate.recordsType; + + if (writeRecordsType == mwmp::RECORD_TYPE::CREATURE) + tempCreature.data.mBloodType = bloodType; + else + { + LOG_MESSAGE_SIMPLE(TimedLog::LOG_ERROR, "Tried to set blood type for record type %i which lacks that property", writeRecordsType); + return; + } + + tempOverrides.hasBloodType = true; +} + void RecordsDynamicFunctions::SetRecordLevel(int level) noexcept { unsigned short writeRecordsType = WorldstateFunctions::writeWorldstate.recordsType; diff --git a/apps/openmw-mp/Script/Functions/RecordsDynamic.hpp b/apps/openmw-mp/Script/Functions/RecordsDynamic.hpp index b3391bc02..592065872 100644 --- a/apps/openmw-mp/Script/Functions/RecordsDynamic.hpp +++ b/apps/openmw-mp/Script/Functions/RecordsDynamic.hpp @@ -84,6 +84,9 @@ {"SetRecordClass", RecordsDynamicFunctions::SetRecordClass},\ {"SetRecordFaction", RecordsDynamicFunctions::SetRecordFaction},\ \ + {"SetRecordScale", RecordsDynamicFunctions::SetRecordScale},\ + {"SetRecordBloodType", RecordsDynamicFunctions::SetRecordBloodType},\ + \ {"SetRecordLevel", RecordsDynamicFunctions::SetRecordLevel},\ {"SetRecordMagicka", RecordsDynamicFunctions::SetRecordMagicka},\ {"SetRecordFatigue", RecordsDynamicFunctions::SetRecordFatigue},\ @@ -736,6 +739,24 @@ public: */ static void SetRecordFaction(const char* faction) noexcept; + /** + * \brief Set the scale of the temporary record stored on the server for the + * currently specified record type. + * + * \param scale The scale of the record. + * \return void + */ + static void SetRecordScale(double scale) noexcept; + + /** + * \brief Set the blood type of the temporary record stored on the server for the + * currently specified record type. + * + * \param bloodType The blood type of the record. + * \return void + */ + static void SetRecordBloodType(int bloodType) noexcept; + /** * \brief Set the level of the temporary record stored on the server for the * currently specified record type. diff --git a/apps/openmw/mwmp/RecordHelper.cpp b/apps/openmw/mwmp/RecordHelper.cpp index 2b1a1d45f..4f08e924e 100644 --- a/apps/openmw/mwmp/RecordHelper.cpp +++ b/apps/openmw/mwmp/RecordHelper.cpp @@ -486,6 +486,12 @@ void RecordHelper::overrideRecord(const mwmp::CreatureRecord& record) if (record.baseOverrides.hasModel) finalData.mModel = recordData.mModel; + if (record.baseOverrides.hasScale) + finalData.mScale = recordData.mScale; + + if (record.baseOverrides.hasBloodType) + finalData.mBloodType = recordData.mBloodType; + if (record.baseOverrides.hasSubtype) finalData.mData.mType = recordData.mData.mType; diff --git a/components/openmw-mp/Base/BaseWorldstate.hpp b/components/openmw-mp/Base/BaseWorldstate.hpp index f0af1a0db..b5d97febd 100644 --- a/components/openmw-mp/Base/BaseWorldstate.hpp +++ b/components/openmw-mp/Base/BaseWorldstate.hpp @@ -115,6 +115,9 @@ namespace mwmp bool hasGender = false; bool hasFaction = false; + bool hasScale = false; + bool hasBloodType = false; + bool hasLevel = false; bool hasMagicka = false; bool hasFatigue = false; diff --git a/components/openmw-mp/Packets/Worldstate/PacketRecordDynamic.cpp b/components/openmw-mp/Packets/Worldstate/PacketRecordDynamic.cpp index ebd80802d..860308e3b 100644 --- a/components/openmw-mp/Packets/Worldstate/PacketRecordDynamic.cpp +++ b/components/openmw-mp/Packets/Worldstate/PacketRecordDynamic.cpp @@ -222,6 +222,8 @@ void PacketRecordDynamic::Packet(RakNet::BitStream *bs, bool send) RW(recordData.mId, send, true); RW(recordData.mName, send, true); RW(recordData.mModel, send, true); + RW(recordData.mScale, send); + RW(recordData.mBloodType, send); RW(recordData.mData.mType, send); RW(recordData.mData.mLevel, send); RW(recordData.mData.mHealth, send); @@ -240,6 +242,8 @@ void PacketRecordDynamic::Packet(RakNet::BitStream *bs, bool send) auto &&overrides = record.baseOverrides; RW(overrides.hasName, send); RW(overrides.hasModel, send); + RW(overrides.hasScale, send); + RW(overrides.hasBloodType, send); RW(overrides.hasSubtype, send); RW(overrides.hasLevel, send); RW(overrides.hasHealth, send);