mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2025-05-23 15:22:28 +00:00
Consilidating
This commit is contained in:
parent
1bdce8384f
commit
e5bea0a5ef
@ -521,52 +521,7 @@ void Entity::Initialize() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (int componentID = compRegistryTable->GetByIDAndType(m_TemplateID, eReplicaComponentType::QUICK_BUILD) > 0) {
|
if (int componentID = compRegistryTable->GetByIDAndType(m_TemplateID, eReplicaComponentType::QUICK_BUILD) > 0) {
|
||||||
auto* quickBuildComponent = AddComponent<QuickBuildComponent>();
|
auto* quickBuildComponent = AddComponent<QuickBuildComponent>(componentID);
|
||||||
|
|
||||||
CDRebuildComponentTable* rebCompTable = CDClientManager::Instance().GetTable<CDRebuildComponentTable>();
|
|
||||||
std::vector<CDRebuildComponent> rebCompData = rebCompTable->Query([=](CDRebuildComponent entry) { return (entry.id == quickBuildComponentID); });
|
|
||||||
|
|
||||||
if (rebCompData.size() > 0) {
|
|
||||||
quickBuildComponent->SetResetTime(rebCompData[0].reset_time);
|
|
||||||
quickBuildComponent->SetCompleteTime(rebCompData[0].complete_time);
|
|
||||||
quickBuildComponent->SetTakeImagination(rebCompData[0].take_imagination);
|
|
||||||
quickBuildComponent->SetInterruptible(rebCompData[0].interruptible);
|
|
||||||
quickBuildComponent->SetSelfActivator(rebCompData[0].self_activator);
|
|
||||||
quickBuildComponent->SetActivityId(rebCompData[0].activityID);
|
|
||||||
quickBuildComponent->SetPostImaginationCost(rebCompData[0].post_imagination_cost);
|
|
||||||
quickBuildComponent->SetTimeBeforeSmash(rebCompData[0].time_before_smash);
|
|
||||||
|
|
||||||
const auto rebuildResetTime = GetVar<float>(u"rebuild_reset_time");
|
|
||||||
|
|
||||||
if (rebuildResetTime != 0.0f) {
|
|
||||||
quickBuildComponent->SetResetTime(rebuildResetTime);
|
|
||||||
|
|
||||||
// Known bug with moving platform in FV that casues it to build at the end instead of the start.
|
|
||||||
// This extends the smash time so players can ride up the lift.
|
|
||||||
if (m_TemplateID == 9483) {
|
|
||||||
quickBuildComponent->SetResetTime(quickBuildComponent->GetResetTime() + 25);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const auto activityID = GetVar<int32_t>(u"activityID");
|
|
||||||
|
|
||||||
if (activityID > 0) {
|
|
||||||
quickBuildComponent->SetActivityId(activityID);
|
|
||||||
Loot::CacheMatrix(activityID);
|
|
||||||
}
|
|
||||||
|
|
||||||
const auto timeBeforeSmash = GetVar<float>(u"tmeSmsh");
|
|
||||||
|
|
||||||
if (timeBeforeSmash > 0) {
|
|
||||||
quickBuildComponent->SetTimeBeforeSmash(timeBeforeSmash);
|
|
||||||
}
|
|
||||||
|
|
||||||
const auto compTime = GetVar<float>(u"compTime");
|
|
||||||
|
|
||||||
if (compTime > 0) {
|
|
||||||
quickBuildComponent->SetCompleteTime(compTime);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (compRegistryTable->GetByIDAndType(m_TemplateID, eReplicaComponentType::SWITCH, -1) != -1) {
|
if (compRegistryTable->GetByIDAndType(m_TemplateID, eReplicaComponentType::SWITCH, -1) != -1) {
|
||||||
@ -2023,6 +1978,10 @@ LDFBaseData* Entity::GetVarData(const std::u16string& name) const {
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Entity::CheckIfVarExists(const std::u16string& name) const {
|
||||||
|
return GetVarData(name) != nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
std::string Entity::GetVarAsString(const std::u16string& name) const {
|
std::string Entity::GetVarAsString(const std::u16string& name) const {
|
||||||
auto* data = GetVarData(name);
|
auto* data = GetVarData(name);
|
||||||
|
|
||||||
|
@ -282,6 +282,12 @@ public:
|
|||||||
*/
|
*/
|
||||||
LDFBaseData* GetVarData(const std::u16string& name) const;
|
LDFBaseData* GetVarData(const std::u16string& name) const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns if a var exists
|
||||||
|
*/
|
||||||
|
bool CheckIfVarExists(const std::u16string& name) const;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the LDF value and convert it to a string.
|
* Get the LDF value and convert it to a string.
|
||||||
*/
|
*/
|
||||||
|
@ -7,7 +7,6 @@
|
|||||||
#include "Logger.h"
|
#include "Logger.h"
|
||||||
#include "BehaviorBranchContext.h"
|
#include "BehaviorBranchContext.h"
|
||||||
#include "BehaviorContext.h"
|
#include "BehaviorContext.h"
|
||||||
#include "QuickBuildComponent.h"
|
|
||||||
#include "DestroyableComponent.h"
|
#include "DestroyableComponent.h"
|
||||||
#include "Game.h"
|
#include "Game.h"
|
||||||
#include "Logger.h"
|
#include "Logger.h"
|
||||||
|
@ -6,7 +6,6 @@
|
|||||||
#include "BehaviorContext.h"
|
#include "BehaviorContext.h"
|
||||||
#include "BaseCombatAIComponent.h"
|
#include "BaseCombatAIComponent.h"
|
||||||
#include "EntityManager.h"
|
#include "EntityManager.h"
|
||||||
#include "QuickBuildComponent.h"
|
|
||||||
#include "DestroyableComponent.h"
|
#include "DestroyableComponent.h"
|
||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
@ -30,8 +30,14 @@
|
|||||||
#include "LeaderboardManager.h"
|
#include "LeaderboardManager.h"
|
||||||
|
|
||||||
ActivityComponent::ActivityComponent(Entity* parent, int32_t activityID) : Component(parent) {
|
ActivityComponent::ActivityComponent(Entity* parent, int32_t activityID) : Component(parent) {
|
||||||
|
m_Parent = parent;
|
||||||
|
if (activityID == -1) return;
|
||||||
|
SetupActivity(activityID);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ActivityComponent::SetupActivity(int32_t activityID){
|
||||||
if (activityID > 0) m_ActivityID = activityID;
|
if (activityID > 0) m_ActivityID = activityID;
|
||||||
else m_ActivityID = parent->GetVar<int32_t>(u"activityID");
|
else m_ActivityID = m_Parent->GetVar<int32_t>(u"activityID");
|
||||||
CDActivitiesTable* activitiesTable = CDClientManager::Instance().GetTable<CDActivitiesTable>();
|
CDActivitiesTable* activitiesTable = CDClientManager::Instance().GetTable<CDActivitiesTable>();
|
||||||
std::vector<CDActivities> activities = activitiesTable->Query([=](CDActivities entry) {return (entry.ActivityID == m_ActivityID); });
|
std::vector<CDActivities> activities = activitiesTable->Query([=](CDActivities entry) {return (entry.ActivityID == m_ActivityID); });
|
||||||
|
|
||||||
@ -42,7 +48,7 @@ ActivityComponent::ActivityComponent(Entity* parent, int32_t activityID) : Compo
|
|||||||
m_ActivityInfo.minTeams = 1;
|
m_ActivityInfo.minTeams = 1;
|
||||||
}
|
}
|
||||||
if (m_ActivityInfo.instanceMapID == -1) {
|
if (m_ActivityInfo.instanceMapID == -1) {
|
||||||
const auto& transferOverride = parent->GetVarAsString(u"transferZoneID");
|
const auto& transferOverride = m_Parent->GetVarAsString(u"transferZoneID");
|
||||||
if (!transferOverride.empty()) {
|
if (!transferOverride.empty()) {
|
||||||
GeneralUtils::TryParse(transferOverride, m_ActivityInfo.instanceMapID);
|
GeneralUtils::TryParse(transferOverride, m_ActivityInfo.instanceMapID);
|
||||||
}
|
}
|
||||||
|
@ -150,7 +150,7 @@ struct ActivityPlayer {
|
|||||||
*/
|
*/
|
||||||
class ActivityComponent : public Component {
|
class ActivityComponent : public Component {
|
||||||
public:
|
public:
|
||||||
ActivityComponent(Entity* parent, int32_t activityID);
|
ActivityComponent(Entity* parent, int32_t activityID = -1);
|
||||||
|
|
||||||
void Update(float deltaTime) override;
|
void Update(float deltaTime) override;
|
||||||
void Serialize(RakNet::BitStream* outBitStream, bool bIsInitialUpdate) override;
|
void Serialize(RakNet::BitStream* outBitStream, bool bIsInitialUpdate) override;
|
||||||
@ -205,6 +205,12 @@ public:
|
|||||||
*/
|
*/
|
||||||
int GetActivityID() { return m_ActivityInfo.ActivityID; }
|
int GetActivityID() { return m_ActivityInfo.ActivityID; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the ID of this activity
|
||||||
|
*/
|
||||||
|
void SetActivityID(int32_t activityID) { m_ActivityID = activityID; }
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns if this activity has a lobby, e.g. if it needs to instance players to some other map
|
* Returns if this activity has a lobby, e.g. if it needs to instance players to some other map
|
||||||
* @return true if this activity has a lobby, false otherwise
|
* @return true if this activity has a lobby, false otherwise
|
||||||
@ -280,7 +286,7 @@ public:
|
|||||||
* Returns all the score for the players that are currently playing this activity
|
* Returns all the score for the players that are currently playing this activity
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
std::vector<ActivityPlayer*> GetActivityPlayers() { return m_ActivityPlayers; };
|
std::vector<ActivityPlayer*> GetActivityPlayers() const { return m_ActivityPlayers; };
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns activity data for a specific entity (e.g. score and such).
|
* Returns activity data for a specific entity (e.g. score and such).
|
||||||
@ -330,6 +336,13 @@ public:
|
|||||||
* @return the LMI that this activity points to for a team size
|
* @return the LMI that this activity points to for a team size
|
||||||
*/
|
*/
|
||||||
uint32_t GetLootMatrixForTeamSize(uint32_t teamSize) { return m_ActivityLootMatrices[teamSize]; }
|
uint32_t GetLootMatrixForTeamSize(uint32_t teamSize) { return m_ActivityLootMatrices[teamSize]; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets up the activity data for a gievn activity
|
||||||
|
*/
|
||||||
|
void SetupActivity(int32_t activityID);
|
||||||
|
|
||||||
|
void ClearActivityPlayerData() { m_ActivityPlayers.clear(); m_DirtyActivityInfo = true;};
|
||||||
private:
|
private:
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -21,16 +21,46 @@
|
|||||||
#include "Loot.h"
|
#include "Loot.h"
|
||||||
#include "TeamManager.h"
|
#include "TeamManager.h"
|
||||||
#include "RenderComponent.h"
|
#include "RenderComponent.h"
|
||||||
|
#include "CDRebuildComponentTable.h"
|
||||||
|
|
||||||
#include "CppScripts.h"
|
#include "CppScripts.h"
|
||||||
|
|
||||||
QuickBuildComponent::QuickBuildComponent(Entity* entity) : Component(entity) {
|
QuickBuildComponent::QuickBuildComponent(Entity* parent, uint32_t id) : ActivityComponent(parent) {
|
||||||
std::u16string checkPreconditions = entity->GetVar<std::u16string>(u"CheckPrecondition");
|
m_Parent = parent;
|
||||||
|
|
||||||
|
CDRebuildComponentTable* rebCompTable = CDClientManager::Instance().GetTable<CDRebuildComponentTable>();
|
||||||
|
std::vector<CDRebuildComponent> rebCompData = rebCompTable->Query([=](CDRebuildComponent entry) { return (entry.id == id); });
|
||||||
|
|
||||||
|
if (rebCompData.size() > 0) {
|
||||||
|
SetResetTime(rebCompData[0].reset_time);
|
||||||
|
SetCompleteTime(rebCompData[0].complete_time);
|
||||||
|
SetTakeImagination(rebCompData[0].take_imagination);
|
||||||
|
SetActivityID(rebCompData[0].activityID);
|
||||||
|
SetInterruptible(rebCompData[0].interruptible);
|
||||||
|
SetSelfActivator(rebCompData[0].self_activator);
|
||||||
|
SetPostImaginationCost(rebCompData[0].post_imagination_cost);
|
||||||
|
SetTimeBeforeSmash(rebCompData[0].time_before_smash);
|
||||||
|
const auto compTime = m_Parent->GetVar<float>(u"compTime");
|
||||||
|
if (compTime > 0) SetCompleteTime(compTime);
|
||||||
|
}
|
||||||
|
std::u16string checkPreconditions = m_Parent->GetVar<std::u16string>(u"CheckPrecondition");
|
||||||
|
|
||||||
if (!checkPreconditions.empty()) {
|
if (!checkPreconditions.empty()) {
|
||||||
m_Precondition = new PreconditionExpression(GeneralUtils::UTF16ToWTF8(checkPreconditions));
|
m_Precondition = new PreconditionExpression(GeneralUtils::UTF16ToWTF8(checkPreconditions));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const auto activityID = m_Parent->GetVar<int32_t>(u"activityID");
|
||||||
|
if (activityID > 0) SetActivityID(activityID);
|
||||||
|
SetupActivity(GetActivityID());
|
||||||
|
|
||||||
|
const auto rebuildResetTime = m_Parent->GetVar<float>(u"rebuild_reset_time");
|
||||||
|
if (rebuildResetTime != 0.0f) {
|
||||||
|
SetResetTime(rebuildResetTime);
|
||||||
|
// Known bug with moving platform in FV that casues it to build at the end instead of the start.
|
||||||
|
// This extends the smash time so players can ride up the lift.
|
||||||
|
if (m_Parent->GetLOT() == 9483) SetResetTime(GetResetTime() + 25);
|
||||||
|
}
|
||||||
|
|
||||||
// Should a setting that has the build activator position exist, fetch that setting here and parse it for position.
|
// Should a setting that has the build activator position exist, fetch that setting here and parse it for position.
|
||||||
// It is assumed that the user who sets this setting uses the correct character delimiter (character 31 or in hex 0x1F)
|
// It is assumed that the user who sets this setting uses the correct character delimiter (character 31 or in hex 0x1F)
|
||||||
auto positionAsVector = GeneralUtils::SplitString(m_Parent->GetVarAsString(u"rebuild_activators"), 0x1F);
|
auto positionAsVector = GeneralUtils::SplitString(m_Parent->GetVarAsString(u"rebuild_activators"), 0x1F);
|
||||||
@ -38,11 +68,22 @@ QuickBuildComponent::QuickBuildComponent(Entity* entity) : Component(entity) {
|
|||||||
GeneralUtils::TryParse(positionAsVector[0], m_ActivatorPosition.x) &&
|
GeneralUtils::TryParse(positionAsVector[0], m_ActivatorPosition.x) &&
|
||||||
GeneralUtils::TryParse(positionAsVector[1], m_ActivatorPosition.y) &&
|
GeneralUtils::TryParse(positionAsVector[1], m_ActivatorPosition.y) &&
|
||||||
GeneralUtils::TryParse(positionAsVector[2], m_ActivatorPosition.z)) {
|
GeneralUtils::TryParse(positionAsVector[2], m_ActivatorPosition.z)) {
|
||||||
|
} else if (
|
||||||
|
m_Parent->CheckIfVarExists(u"position.x") &&
|
||||||
|
m_Parent->CheckIfVarExists(u"position.y") &&
|
||||||
|
m_Parent->CheckIfVarExists(u"position.z")) {
|
||||||
|
m_ActivatorPosition.x = m_Parent->GetVar<float>(u"position.x");
|
||||||
|
m_ActivatorPosition.y = m_Parent->GetVar<float>(u"position.y");
|
||||||
|
m_ActivatorPosition.x = m_Parent->GetVar<float>(u"position.z");
|
||||||
} else {
|
} else {
|
||||||
LOG("Failed to find activator position for lot %i. Defaulting to parents position.", m_Parent->GetLOT());
|
|
||||||
m_ActivatorPosition = m_Parent->GetPosition();
|
m_ActivatorPosition = m_Parent->GetPosition();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const auto timeBeforeSmash = m_Parent->GetVar<float>(u"tmeSmsh");
|
||||||
|
if (timeBeforeSmash > 0) SetTimeBeforeSmash(timeBeforeSmash);
|
||||||
|
m_IsChoiceBuild = m_Parent->GetBoolean(u"is_ChoiceBuild");
|
||||||
|
|
||||||
SpawnActivator();
|
SpawnActivator();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -58,71 +99,27 @@ QuickBuildComponent::~QuickBuildComponent() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void QuickBuildComponent::Serialize(RakNet::BitStream* outBitStream, bool bIsInitialUpdate) {
|
void QuickBuildComponent::Serialize(RakNet::BitStream* outBitStream, bool bIsInitialUpdate) {
|
||||||
if (m_Parent->GetComponent(eReplicaComponentType::DESTROYABLE) == nullptr) {
|
ActivityComponent::Serialize(outBitStream, bIsInitialUpdate);
|
||||||
|
outBitStream->Write(m_StateDirty);
|
||||||
|
if (m_StateDirty) {
|
||||||
|
outBitStream->Write(m_State);
|
||||||
|
outBitStream->Write(m_ShowResetEffect);
|
||||||
|
outBitStream->Write(m_Activator != nullptr);
|
||||||
|
outBitStream->Write(m_Timer);
|
||||||
|
outBitStream->Write(m_TimerIncomplete);
|
||||||
if (bIsInitialUpdate) {
|
if (bIsInitialUpdate) {
|
||||||
outBitStream->Write(false);
|
outBitStream->Write(m_IsChoiceBuild);
|
||||||
|
if (m_IsChoiceBuild) outBitStream->Write(m_ResetTime);
|
||||||
|
outBitStream->Write(m_ActivatorPosition);
|
||||||
|
outBitStream->Write(m_RepositionPlayer);
|
||||||
}
|
}
|
||||||
|
if (!bIsInitialUpdate) m_StateDirty = false;
|
||||||
outBitStream->Write(false);
|
|
||||||
|
|
||||||
outBitStream->Write(false);
|
|
||||||
}
|
}
|
||||||
// If build state is completed and we've already serialized once in the completed state,
|
|
||||||
// don't serializing this component anymore as this will cause the build to jump again.
|
|
||||||
// If state changes, serialization will begin again.
|
|
||||||
if (!m_StateDirty && m_State == eQuickBuildState::COMPLETED) {
|
|
||||||
outBitStream->Write0();
|
|
||||||
outBitStream->Write0();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
// BEGIN Scripted Activity
|
|
||||||
outBitStream->Write1();
|
|
||||||
|
|
||||||
Entity* builder = GetBuilder();
|
|
||||||
|
|
||||||
if (builder) {
|
|
||||||
outBitStream->Write<uint32_t>(1);
|
|
||||||
outBitStream->Write(builder->GetObjectID());
|
|
||||||
|
|
||||||
for (int i = 0; i < 10; i++) {
|
|
||||||
outBitStream->Write(0.0f);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
outBitStream->Write<uint32_t>(0);
|
|
||||||
}
|
|
||||||
// END Scripted Activity
|
|
||||||
|
|
||||||
outBitStream->Write1();
|
|
||||||
|
|
||||||
outBitStream->Write(m_State);
|
|
||||||
|
|
||||||
outBitStream->Write(m_ShowResetEffect);
|
|
||||||
outBitStream->Write(m_Activator != nullptr);
|
|
||||||
|
|
||||||
outBitStream->Write(m_Timer);
|
|
||||||
outBitStream->Write(m_TimerIncomplete);
|
|
||||||
|
|
||||||
if (bIsInitialUpdate) {
|
|
||||||
outBitStream->Write(false);
|
|
||||||
outBitStream->Write(m_ActivatorPosition);
|
|
||||||
outBitStream->Write(m_RepositionPlayer);
|
|
||||||
}
|
|
||||||
m_StateDirty = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void QuickBuildComponent::Update(float deltaTime) {
|
void QuickBuildComponent::Update(float deltaTime) {
|
||||||
m_Activator = GetActivator();
|
m_Activator = GetActivator();
|
||||||
|
|
||||||
// Serialize the quickbuild every so often, fixes the odd bug where the quickbuild is not buildable
|
|
||||||
/*if (m_SoftTimer > 0.0f) {
|
|
||||||
m_SoftTimer -= deltaTime;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
m_SoftTimer = 5.0f;
|
|
||||||
|
|
||||||
Game::entityManager->SerializeEntity(m_Parent);
|
|
||||||
}*/
|
|
||||||
|
|
||||||
switch (m_State) {
|
switch (m_State) {
|
||||||
case eQuickBuildState::OPEN: {
|
case eQuickBuildState::OPEN: {
|
||||||
SpawnActivator();
|
SpawnActivator();
|
||||||
@ -138,14 +135,14 @@ void QuickBuildComponent::Update(float deltaTime) {
|
|||||||
if (m_TimeBeforeSmash > 0) {
|
if (m_TimeBeforeSmash > 0) {
|
||||||
if (m_TimerIncomplete >= m_TimeBeforeSmash - 4.0f) {
|
if (m_TimerIncomplete >= m_TimeBeforeSmash - 4.0f) {
|
||||||
m_ShowResetEffect = true;
|
m_ShowResetEffect = true;
|
||||||
|
m_StateDirty = true;
|
||||||
Game::entityManager->SerializeEntity(m_Parent);
|
Game::entityManager->SerializeEntity(m_Parent);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_TimerIncomplete >= m_TimeBeforeSmash) {
|
if (m_TimerIncomplete >= m_TimeBeforeSmash) {
|
||||||
m_Builder = LWOOBJID_EMPTY;
|
ClearActivityPlayerData();
|
||||||
|
|
||||||
GameMessages::SendDieNoImplCode(m_Parent, LWOOBJID_EMPTY, LWOOBJID_EMPTY, eKillType::VIOLENT, u"", 0.0f, 0.0f, 0.0f, false, true);
|
GameMessages::SendDie(m_Parent, LWOOBJID_EMPTY, LWOOBJID_EMPTY, true, eKillType::VIOLENT, u"", 0.0f, 0.0f, 0.0f, false, true);
|
||||||
|
|
||||||
ResetQuickBuild(false);
|
ResetQuickBuild(false);
|
||||||
}
|
}
|
||||||
@ -162,14 +159,14 @@ void QuickBuildComponent::Update(float deltaTime) {
|
|||||||
if (m_Timer >= m_ResetTime - 4.0f) {
|
if (m_Timer >= m_ResetTime - 4.0f) {
|
||||||
if (!m_ShowResetEffect) {
|
if (!m_ShowResetEffect) {
|
||||||
m_ShowResetEffect = true;
|
m_ShowResetEffect = true;
|
||||||
|
m_StateDirty = true;
|
||||||
Game::entityManager->SerializeEntity(m_Parent);
|
Game::entityManager->SerializeEntity(m_Parent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_Timer >= m_ResetTime) {
|
if (m_Timer >= m_ResetTime) {
|
||||||
|
|
||||||
GameMessages::SendDieNoImplCode(m_Parent, LWOOBJID_EMPTY, LWOOBJID_EMPTY, eKillType::VIOLENT, u"", 0.0f, 0.0f, 0.0f, false, true);
|
GameMessages::SendDie(m_Parent, LWOOBJID_EMPTY, LWOOBJID_EMPTY, true, eKillType::VIOLENT, u"", 0.0f, 0.0f, 0.0f, false, true);
|
||||||
|
|
||||||
ResetQuickBuild(false);
|
ResetQuickBuild(false);
|
||||||
}
|
}
|
||||||
@ -190,7 +187,7 @@ void QuickBuildComponent::Update(float deltaTime) {
|
|||||||
m_Timer += deltaTime;
|
m_Timer += deltaTime;
|
||||||
m_TimerIncomplete = 0;
|
m_TimerIncomplete = 0;
|
||||||
m_ShowResetEffect = false;
|
m_ShowResetEffect = false;
|
||||||
|
m_StateDirty = true;
|
||||||
if (m_TimeBeforeDrain <= 0.0f) {
|
if (m_TimeBeforeDrain <= 0.0f) {
|
||||||
m_TimeBeforeDrain = m_CompleteTime / static_cast<float>(m_TakeImagination);
|
m_TimeBeforeDrain = m_CompleteTime / static_cast<float>(m_TakeImagination);
|
||||||
|
|
||||||
@ -223,14 +220,14 @@ void QuickBuildComponent::Update(float deltaTime) {
|
|||||||
if (m_TimeBeforeSmash > 0) {
|
if (m_TimeBeforeSmash > 0) {
|
||||||
if (m_TimerIncomplete >= m_TimeBeforeSmash - 4.0f) {
|
if (m_TimerIncomplete >= m_TimeBeforeSmash - 4.0f) {
|
||||||
m_ShowResetEffect = true;
|
m_ShowResetEffect = true;
|
||||||
|
m_StateDirty = true;
|
||||||
Game::entityManager->SerializeEntity(m_Parent);
|
Game::entityManager->SerializeEntity(m_Parent);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_TimerIncomplete >= m_TimeBeforeSmash) {
|
if (m_TimerIncomplete >= m_TimeBeforeSmash) {
|
||||||
m_Builder = LWOOBJID_EMPTY;
|
ClearActivityPlayerData();
|
||||||
|
|
||||||
GameMessages::SendDieNoImplCode(m_Parent, LWOOBJID_EMPTY, LWOOBJID_EMPTY, eKillType::VIOLENT, u"", 0.0f, 0.0f, 0.0f, false, true);
|
GameMessages::SendDie(m_Parent, LWOOBJID_EMPTY, LWOOBJID_EMPTY, true, eKillType::VIOLENT, u"", 0.0f, 0.0f, 0.0f, false, true);
|
||||||
|
|
||||||
ResetQuickBuild(false);
|
ResetQuickBuild(false);
|
||||||
}
|
}
|
||||||
@ -317,10 +314,6 @@ std::vector<int> QuickBuildComponent::GetCustomModules() {
|
|||||||
return m_CustomModules;
|
return m_CustomModules;
|
||||||
}
|
}
|
||||||
|
|
||||||
int QuickBuildComponent::GetActivityId() {
|
|
||||||
return m_ActivityId;
|
|
||||||
}
|
|
||||||
|
|
||||||
int QuickBuildComponent::GetPostImaginationCost() {
|
int QuickBuildComponent::GetPostImaginationCost() {
|
||||||
return m_PostImaginationCost;
|
return m_PostImaginationCost;
|
||||||
}
|
}
|
||||||
@ -334,7 +327,9 @@ eQuickBuildState QuickBuildComponent::GetState() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Entity* QuickBuildComponent::GetBuilder() const {
|
Entity* QuickBuildComponent::GetBuilder() const {
|
||||||
auto* builder = Game::entityManager->GetEntity(m_Builder);
|
const auto players = GetActivityPlayers();
|
||||||
|
if (players.empty()) return nullptr;
|
||||||
|
auto* builder = Game::entityManager->GetEntity(players[0]->playerID);
|
||||||
|
|
||||||
return builder;
|
return builder;
|
||||||
}
|
}
|
||||||
@ -348,15 +343,13 @@ void QuickBuildComponent::SetActivatorPosition(NiPoint3 value) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void QuickBuildComponent::SetResetTime(float value) {
|
void QuickBuildComponent::SetResetTime(float value) {
|
||||||
m_ResetTime = value;
|
if (value < 0) m_ResetTime = 20.0f;
|
||||||
|
else m_ResetTime = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QuickBuildComponent::SetCompleteTime(float value) {
|
void QuickBuildComponent::SetCompleteTime(float value) {
|
||||||
if (value < 0) {
|
if (value < 0) m_CompleteTime = 4.5f;
|
||||||
m_CompleteTime = 4.5f;
|
else m_CompleteTime = value;
|
||||||
} else {
|
|
||||||
m_CompleteTime = value;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void QuickBuildComponent::SetTakeImagination(int value) {
|
void QuickBuildComponent::SetTakeImagination(int value) {
|
||||||
@ -375,20 +368,13 @@ void QuickBuildComponent::SetCustomModules(std::vector<int> value) {
|
|||||||
m_CustomModules = value;
|
m_CustomModules = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QuickBuildComponent::SetActivityId(int value) {
|
|
||||||
m_ActivityId = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
void QuickBuildComponent::SetPostImaginationCost(int value) {
|
void QuickBuildComponent::SetPostImaginationCost(int value) {
|
||||||
m_PostImaginationCost = value;
|
m_PostImaginationCost = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QuickBuildComponent::SetTimeBeforeSmash(float value) {
|
void QuickBuildComponent::SetTimeBeforeSmash(float value) {
|
||||||
if (value < 0) {
|
if (value < 0) m_TimeBeforeSmash = 10.0f;
|
||||||
m_TimeBeforeSmash = 10.0f;
|
else m_TimeBeforeSmash = value;
|
||||||
} else {
|
|
||||||
m_TimeBeforeSmash = value;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void QuickBuildComponent::SetRepositionPlayer(bool value) {
|
void QuickBuildComponent::SetRepositionPlayer(bool value) {
|
||||||
@ -397,7 +383,8 @@ void QuickBuildComponent::SetRepositionPlayer(bool value) {
|
|||||||
|
|
||||||
void QuickBuildComponent::StartQuickBuild(Entity* user) {
|
void QuickBuildComponent::StartQuickBuild(Entity* user) {
|
||||||
if (m_State == eQuickBuildState::OPEN || m_State == eQuickBuildState::COMPLETED || m_State == eQuickBuildState::INCOMPLETE) {
|
if (m_State == eQuickBuildState::OPEN || m_State == eQuickBuildState::COMPLETED || m_State == eQuickBuildState::INCOMPLETE) {
|
||||||
m_Builder = user->GetObjectID();
|
// user->GetObjectID();
|
||||||
|
AddActivityPlayerData(user->GetObjectID());
|
||||||
|
|
||||||
auto* character = user->GetComponent<CharacterComponent>();
|
auto* character = user->GetComponent<CharacterComponent>();
|
||||||
character->SetCurrentActivity(eGameActivity::QUICKBUILDING);
|
character->SetCurrentActivity(eGameActivity::QUICKBUILDING);
|
||||||
@ -478,14 +465,14 @@ void QuickBuildComponent::CompleteQuickBuild(Entity* user) {
|
|||||||
auto* member = Game::entityManager->GetEntity(memberId);
|
auto* member = Game::entityManager->GetEntity(memberId);
|
||||||
if (member) {
|
if (member) {
|
||||||
auto* missionComponent = member->GetComponent<MissionComponent>();
|
auto* missionComponent = member->GetComponent<MissionComponent>();
|
||||||
if (missionComponent) missionComponent->Progress(eMissionTaskType::ACTIVITY, m_ActivityId);
|
if (missionComponent) missionComponent->Progress(eMissionTaskType::ACTIVITY, GetActivityID());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
auto* missionComponent = builder->GetComponent<MissionComponent>();
|
auto* missionComponent = builder->GetComponent<MissionComponent>();
|
||||||
if (missionComponent) missionComponent->Progress(eMissionTaskType::ACTIVITY, m_ActivityId);
|
if (missionComponent) missionComponent->Progress(eMissionTaskType::ACTIVITY, GetActivityID());
|
||||||
}
|
}
|
||||||
Loot::DropActivityLoot(builder, m_Parent, m_ActivityId, 1);
|
Loot::DropActivityLoot(builder, m_Parent, GetActivityID(), 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Notify scripts
|
// Notify scripts
|
||||||
@ -557,8 +544,7 @@ void QuickBuildComponent::ResetQuickBuild(bool failed) {
|
|||||||
|
|
||||||
void QuickBuildComponent::CancelQuickBuild(Entity* entity, eQuickBuildFailReason failReason, bool skipChecks) {
|
void QuickBuildComponent::CancelQuickBuild(Entity* entity, eQuickBuildFailReason failReason, bool skipChecks) {
|
||||||
if (m_State != eQuickBuildState::COMPLETED || skipChecks) {
|
if (m_State != eQuickBuildState::COMPLETED || skipChecks) {
|
||||||
|
RemoveActivityPlayerData(entity->GetObjectID());
|
||||||
m_Builder = LWOOBJID_EMPTY;
|
|
||||||
|
|
||||||
const auto entityID = entity != nullptr ? entity->GetObjectID() : LWOOBJID_EMPTY;
|
const auto entityID = entity != nullptr ? entity->GetObjectID() : LWOOBJID_EMPTY;
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
#include "NiPoint3.h"
|
#include "NiPoint3.h"
|
||||||
#include "ScriptedActivityComponent.h"
|
#include "ScriptedActivityComponent.h"
|
||||||
#include "Preconditions.h"
|
#include "Preconditions.h"
|
||||||
#include "Component.h"
|
#include "ActivityComponent.h"
|
||||||
#include "eReplicaComponentType.h"
|
#include "eReplicaComponentType.h"
|
||||||
#include "eQuickBuildState.h"
|
#include "eQuickBuildState.h"
|
||||||
|
|
||||||
@ -20,11 +20,11 @@ enum class eQuickBuildFailReason : uint32_t;
|
|||||||
* consists of an activator that shows a popup and then the actual entity that the bricks are built into. Note
|
* consists of an activator that shows a popup and then the actual entity that the bricks are built into. Note
|
||||||
* that quick builds are also scripted activities so this shared some logic with the ScriptedActivityComponent.
|
* that quick builds are also scripted activities so this shared some logic with the ScriptedActivityComponent.
|
||||||
*/
|
*/
|
||||||
class QuickBuildComponent : public Component {
|
class QuickBuildComponent : public ActivityComponent {
|
||||||
public:
|
public:
|
||||||
inline static const eReplicaComponentType ComponentType = eReplicaComponentType::QUICK_BUILD;
|
inline static const eReplicaComponentType ComponentType = eReplicaComponentType::QUICK_BUILD;
|
||||||
|
|
||||||
QuickBuildComponent(Entity* entity);
|
QuickBuildComponent(Entity* parent, uint32_t id);
|
||||||
~QuickBuildComponent() override;
|
~QuickBuildComponent() override;
|
||||||
|
|
||||||
void Serialize(RakNet::BitStream* outBitStream, bool bIsInitialUpdate) override;
|
void Serialize(RakNet::BitStream* outBitStream, bool bIsInitialUpdate) override;
|
||||||
@ -213,11 +213,11 @@ public:
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Cancels the quickbuild if it wasn't completed
|
* Cancels the quickbuild if it wasn't completed
|
||||||
* @param builder the player that's currently building
|
* @param entity the player that's currently building
|
||||||
* @param failReason the reason the quickbuild was cancelled
|
* @param failReason the reason the quickbuild was cancelled
|
||||||
* @param skipChecks whether or not to skip the check for the quickbuild not being completed
|
* @param skipChecks whether or not to skip the check for the quickbuild not being completed
|
||||||
*/
|
*/
|
||||||
void CancelQuickBuild(Entity* builder, eQuickBuildFailReason failReason, bool skipChecks = false);
|
void CancelQuickBuild(Entity* entity, eQuickBuildFailReason failReason, bool skipChecks = false);
|
||||||
private:
|
private:
|
||||||
/**
|
/**
|
||||||
* Whether or not the quickbuild state has been changed since we last serialized it.
|
* Whether or not the quickbuild state has been changed since we last serialized it.
|
||||||
@ -304,11 +304,6 @@ private:
|
|||||||
*/
|
*/
|
||||||
std::vector<int> m_CustomModules{};
|
std::vector<int> m_CustomModules{};
|
||||||
|
|
||||||
/**
|
|
||||||
* The activity ID that players partake in when doing this quickbuild
|
|
||||||
*/
|
|
||||||
int m_ActivityId = 0;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Currently unused
|
* Currently unused
|
||||||
*/
|
*/
|
||||||
@ -339,11 +334,6 @@ private:
|
|||||||
*/
|
*/
|
||||||
float m_SoftTimer = 0;
|
float m_SoftTimer = 0;
|
||||||
|
|
||||||
/**
|
|
||||||
* The ID of the entity that's currently building the quickbuild
|
|
||||||
*/
|
|
||||||
LWOOBJID m_Builder = LWOOBJID_EMPTY;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Preconditions to be met before being able to start the quickbuild
|
* Preconditions to be met before being able to start the quickbuild
|
||||||
*/
|
*/
|
||||||
@ -360,6 +350,11 @@ private:
|
|||||||
* @param user the entity that completed the quickbuild
|
* @param user the entity that completed the quickbuild
|
||||||
*/
|
*/
|
||||||
void CompleteQuickBuild(Entity* user);
|
void CompleteQuickBuild(Entity* user);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Is this quickbuild from a choicebuild
|
||||||
|
*/
|
||||||
|
bool m_IsChoiceBuild = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // QUICKBUILDCOMPONENT_H
|
#endif // QUICKBUILDCOMPONENT_H
|
||||||
|
@ -814,28 +814,6 @@ void GameMessages::SendTerminateInteraction(const LWOOBJID& objectID, eTerminate
|
|||||||
SEND_PACKET_BROADCAST;
|
SEND_PACKET_BROADCAST;
|
||||||
}
|
}
|
||||||
|
|
||||||
void GameMessages::SendDieNoImplCode(Entity* entity, const LWOOBJID& killerID, const LWOOBJID& lootOwnerID, eKillType killType, std::u16string deathType, float directionRelative_AngleY, float directionRelative_AngleXZ, float directionRelative_Force, bool bClientDeath, bool bSpawnLoot) {
|
|
||||||
CBITSTREAM;
|
|
||||||
CMSGHEADER;
|
|
||||||
|
|
||||||
bitStream.Write(entity->GetObjectID());
|
|
||||||
bitStream.Write(eGameMessageType::DIE);
|
|
||||||
bitStream.Write(bClientDeath);
|
|
||||||
bitStream.Write(bSpawnLoot);
|
|
||||||
bitStream.Write(deathType);
|
|
||||||
bitStream.Write(directionRelative_AngleXZ);
|
|
||||||
bitStream.Write(directionRelative_AngleY);
|
|
||||||
bitStream.Write(directionRelative_Force);
|
|
||||||
|
|
||||||
bitStream.Write(killType != eKillType::VIOLENT);
|
|
||||||
if (killType != eKillType::VIOLENT) bitStream.Write(killType);
|
|
||||||
|
|
||||||
bitStream.Write(killerID);
|
|
||||||
bitStream.Write(lootOwnerID);
|
|
||||||
|
|
||||||
SEND_PACKET_BROADCAST;
|
|
||||||
}
|
|
||||||
|
|
||||||
void GameMessages::SendDie(Entity* entity, const LWOOBJID& killerID, const LWOOBJID& lootOwnerID, bool bDieAccepted, eKillType killType, std::u16string deathType, float directionRelative_AngleY, float directionRelative_AngleXZ, float directionRelative_Force, bool bClientDeath, bool bSpawnLoot, float coinSpawnTime) {
|
void GameMessages::SendDie(Entity* entity, const LWOOBJID& killerID, const LWOOBJID& lootOwnerID, bool bDieAccepted, eKillType killType, std::u16string deathType, float directionRelative_AngleY, float directionRelative_AngleXZ, float directionRelative_Force, bool bClientDeath, bool bSpawnLoot, float coinSpawnTime) {
|
||||||
CBITSTREAM;
|
CBITSTREAM;
|
||||||
CMSGHEADER;
|
CMSGHEADER;
|
||||||
@ -4953,7 +4931,7 @@ void GameMessages::HandleQuickBuildCancel(RakNet::BitStream* inStream, Entity* e
|
|||||||
inStream->Read(bEarlyRelease);
|
inStream->Read(bEarlyRelease);
|
||||||
inStream->Read(userID);
|
inStream->Read(userID);
|
||||||
|
|
||||||
auto* quickBuildComponent = static_cast<QuickBuildComponent*>(entity->GetComponent(eReplicaComponentType::QUICK_BUILD));;
|
auto* quickBuildComponent = entity->GetComponent<QuickBuildComponent>();
|
||||||
if (!quickBuildComponent) return;
|
if (!quickBuildComponent) return;
|
||||||
|
|
||||||
quickBuildComponent->CancelQuickBuild(Game::entityManager->GetEntity(userID), eQuickBuildFailReason::CANCELED_EARLY);
|
quickBuildComponent->CancelQuickBuild(Game::entityManager->GetEntity(userID), eQuickBuildFailReason::CANCELED_EARLY);
|
||||||
|
@ -105,7 +105,6 @@ namespace GameMessages {
|
|||||||
void AddActivityOwner(Entity* entity, LWOOBJID& ownerID);
|
void AddActivityOwner(Entity* entity, LWOOBJID& ownerID);
|
||||||
void SendTerminateInteraction(const LWOOBJID& objectID, eTerminateType type, const LWOOBJID& terminator);
|
void SendTerminateInteraction(const LWOOBJID& objectID, eTerminateType type, const LWOOBJID& terminator);
|
||||||
|
|
||||||
void SendDieNoImplCode(Entity* entity, const LWOOBJID& killerID, const LWOOBJID& lootOwnerID, eKillType killType, std::u16string deathType, float directionRelative_AngleY, float directionRelative_AngleXZ, float directionRelative_Force, bool bClientDeath, bool bSpawnLoot);
|
|
||||||
void SendDie(Entity* entity, const LWOOBJID& killerID, const LWOOBJID& lootOwnerID, bool bDieAccepted, eKillType killType, std::u16string deathType, float directionRelative_AngleY, float directionRelative_AngleXZ, float directionRelative_Force, bool bClientDeath, bool bSpawnLoot, float coinSpawnTime);
|
void SendDie(Entity* entity, const LWOOBJID& killerID, const LWOOBJID& lootOwnerID, bool bDieAccepted, eKillType killType, std::u16string deathType, float directionRelative_AngleY, float directionRelative_AngleXZ, float directionRelative_Force, bool bClientDeath, bool bSpawnLoot, float coinSpawnTime);
|
||||||
|
|
||||||
void SendSetInventorySize(Entity* entity, int invType, int size);
|
void SendSetInventorySize(Entity* entity, int invType, int size);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user