DarkflameServer/dGame/dGameMessages/PropertyDataMessage.cpp

112 lines
3.2 KiB
C++
Raw Normal View History

#include "PropertyDataMessage.h"
#include "GeneralUtils.h"
#include "Game.h"
#include "dLogger.h"
#include "CDClientManager.h"
2022-07-28 13:39:57 +00:00
void GameMessages::PropertyDataMessage::Serialize(RakNet::BitStream& stream) const {
stream.Write<int64_t>(0); // - property id
stream.Write<int32_t>(TemplateID); // - template id
stream.Write<uint16_t>(ZoneId); // - map id
stream.Write<uint16_t>(VendorMapId); // - vendor map id
stream.Write<uint32_t>(cloneId); // clone id
const auto& name = GeneralUtils::ASCIIToUTF16(Name);
stream.Write(uint32_t(name.size()));
for (uint32_t i = 0; i < name.size(); ++i) {
stream.Write(uint16_t(name[i]));
}
const auto& description = GeneralUtils::ASCIIToUTF16(Description);
stream.Write(uint32_t(description.size()));
for (uint32_t i = 0; i < description.size(); ++i) {
stream.Write(uint16_t(description[i]));
}
const auto& owner = GeneralUtils::ASCIIToUTF16(OwnerName);
stream.Write(uint32_t(owner.size()));
for (uint32_t i = 0; i < owner.size(); ++i) {
stream.Write(uint16_t(owner[i]));
}
stream.Write<LWOOBJID>(OwnerId);
stream.Write<uint32_t>(0); // - type
stream.Write<uint32_t>(0); // - zone code
stream.Write<uint32_t>(0); // - minimum price
stream.Write<uint32_t>(1); // - rent duration
2022-07-28 13:39:57 +00:00
stream.Write<uint64_t>(LastUpdatedTime); // - timestamp
2022-07-28 13:39:57 +00:00
stream.Write<uint32_t>(1);
stream.Write<uint32_t>(reputation); // Reputation
stream.Write<uint32_t>(0);
const auto& spawn = GeneralUtils::ASCIIToUTF16(SpawnName);
stream.Write(uint32_t(spawn.size()));
for (uint32_t i = 0; i < spawn.size(); ++i) {
stream.Write(uint16_t(spawn[i]));
}
2022-07-28 13:39:57 +00:00
stream.Write<uint32_t>(0); // String length
stream.Write<uint32_t>(0); // String length
stream.Write<uint32_t>(0); // - duration type
stream.Write<uint32_t>(1);
stream.Write<uint32_t>(1);
stream.Write<char>(PrivacyOption);
stream.Write<uint64_t>(0);
2022-03-30 23:14:24 +00:00
if (rejectionReason != "") stream.Write<uint32_t>(REJECTION_STATUS_REJECTED);
2022-03-31 03:31:51 +00:00
else if (moderatorRequested == true && rejectionReason == "") stream.Write<uint32_t>(REJECTION_STATUS_APPROVED);
else stream.Write<uint32_t>(REJECTION_STATUS_PENDING);
2022-03-30 07:02:18 +00:00
// Does this go here???
// const auto& rejectionReasonConverted = GeneralUtils::ASCIIToUTF16(rejectionReason);
// stream.Write(uint32_t(rejectionReasonConverted.size()));
// for (uint32_t i = 0; i < rejectionReasonConverted.size(); ++i) {
// stream.Write(uint16_t(rejectionReasonConverted[i]));
// }
2022-03-30 23:14:24 +00:00
stream.Write<uint32_t>(0);
stream.Write<uint64_t>(0);
stream.Write<uint32_t>(1);
stream.Write<uint32_t>(1);
stream.Write<float>(ZonePosition.x);
stream.Write<float>(ZonePosition.y);
stream.Write<float>(ZonePosition.z);
stream.Write<float>(MaxBuildHeight);
stream.Write(ClaimedTime); // - timestamp
2022-07-28 13:39:57 +00:00
stream.Write<char>(PrivacyOption);
stream.Write(uint32_t(Paths.size()));
2022-07-28 13:39:57 +00:00
for (const auto& path : Paths) {
stream.Write(path.x);
stream.Write(path.y);
stream.Write(path.z);
}
}
GameMessages::PropertyDataMessage::PropertyDataMessage(uint32_t mapID) {
2022-07-28 13:39:57 +00:00
const auto propertyTemplate = CDClientManager::Instance()->
GetTable<CDPropertyTemplateTable>("PropertyTemplate")->GetByMapID(mapID);
2022-07-28 13:39:57 +00:00
TemplateID = propertyTemplate.id;
ZoneId = propertyTemplate.mapID;
VendorMapId = propertyTemplate.vendorMapID;
SpawnName = propertyTemplate.spawnName;
}