Rename some variables in Component

And add more virtuals
This commit is contained in:
David Markowitz 2023-06-06 18:59:53 -07:00
parent b589755655
commit 716a5fcf37
54 changed files with 602 additions and 580 deletions

View File

@ -17,7 +17,7 @@ __dynamic=1
# Set __compile_backtrace__ to 1 to compile the backtrace library instead of using system libraries. # Set __compile_backtrace__ to 1 to compile the backtrace library instead of using system libraries.
# __compile_backtrace__=1 # __compile_backtrace__=1
# Set to the number of jobs (make -j equivalent) to compile the mariadbconn files with. # Set to the number of jobs (make -j equivalent) to compile the mariadbconn files with.
__maria_db_connector_compile_jobs__=1 __maria_db_connector_compile_jobs__=
# When set to 1 and uncommented, compiling and linking testing folders and libraries will be done. # When set to 1 and uncommented, compiling and linking testing folders and libraries will be done.
__enable_testing__=1 __enable_testing__=1
# The path to OpenSSL. Change this if your OpenSSL install path is different than the default. # The path to OpenSSL. Change this if your OpenSSL install path is different than the default.

View File

@ -162,7 +162,7 @@ void BasicAttackBehavior::DoBehaviorCalculation(BehaviorContext* context, RakNet
} }
auto* destroyableComponent = targetEntity->GetComponent<DestroyableComponent>(); auto* destroyableComponent = targetEntity->GetComponent<DestroyableComponent>();
if (!destroyableComponent || !destroyableComponent->GetParent()) { if (!destroyableComponent || !destroyableComponent->GetOwningEntity()) {
Game::logger->Log("BasicAttackBehavior", "No destroyable component on %llu", branch.target); Game::logger->Log("BasicAttackBehavior", "No destroyable component on %llu", branch.target);
return; return;
} }

View File

@ -65,10 +65,10 @@ BaseCombatAIComponent::BaseCombatAIComponent(Entity* parent, const uint32_t id):
// Get aggro and tether radius from settings and use this if it is present. Only overwrite the // Get aggro and tether radius from settings and use this if it is present. Only overwrite the
// radii if it is greater than the one in the database. // radii if it is greater than the one in the database.
if (m_Parent) { if (m_OwningEntity) {
auto aggroRadius = m_Parent->GetVar<float>(u"aggroRadius"); auto aggroRadius = m_OwningEntity->GetVar<float>(u"aggroRadius");
m_AggroRadius = aggroRadius != 0 ? aggroRadius : m_AggroRadius; m_AggroRadius = aggroRadius != 0 ? aggroRadius : m_AggroRadius;
auto tetherRadius = m_Parent->GetVar<float>(u"tetherRadius"); auto tetherRadius = m_OwningEntity->GetVar<float>(u"tetherRadius");
m_HardTetherRadius = tetherRadius != 0 ? tetherRadius : m_HardTetherRadius; m_HardTetherRadius = tetherRadius != 0 ? tetherRadius : m_HardTetherRadius;
} }
@ -120,14 +120,14 @@ BaseCombatAIComponent::BaseCombatAIComponent(Entity* parent, const uint32_t id):
} }
//Create a phantom physics volume so we can detect when we're aggro'd. //Create a phantom physics volume so we can detect when we're aggro'd.
m_dpEntity = new dpEntity(m_Parent->GetObjectID(), m_AggroRadius); m_dpEntity = new dpEntity(m_OwningEntity->GetObjectID(), m_AggroRadius);
m_dpEntityEnemy = new dpEntity(m_Parent->GetObjectID(), m_AggroRadius, false); m_dpEntityEnemy = new dpEntity(m_OwningEntity->GetObjectID(), m_AggroRadius, false);
m_dpEntity->SetCollisionGroup(collisionGroup); m_dpEntity->SetCollisionGroup(collisionGroup);
m_dpEntityEnemy->SetCollisionGroup(collisionGroup); m_dpEntityEnemy->SetCollisionGroup(collisionGroup);
m_dpEntity->SetPosition(m_Parent->GetPosition()); m_dpEntity->SetPosition(m_OwningEntity->GetPosition());
m_dpEntityEnemy->SetPosition(m_Parent->GetPosition()); m_dpEntityEnemy->SetPosition(m_OwningEntity->GetPosition());
dpWorld::Instance().AddEntity(m_dpEntity); dpWorld::Instance().AddEntity(m_dpEntity);
dpWorld::Instance().AddEntity(m_dpEntityEnemy); dpWorld::Instance().AddEntity(m_dpEntityEnemy);
@ -146,17 +146,17 @@ void BaseCombatAIComponent::Update(const float deltaTime) {
//First, we need to process physics: //First, we need to process physics:
if (!m_dpEntity) return; if (!m_dpEntity) return;
m_dpEntity->SetPosition(m_Parent->GetPosition()); //make sure our position is synced with our dpEntity m_dpEntity->SetPosition(m_OwningEntity->GetPosition()); //make sure our position is synced with our dpEntity
m_dpEntityEnemy->SetPosition(m_Parent->GetPosition()); m_dpEntityEnemy->SetPosition(m_OwningEntity->GetPosition());
//Process enter events //Process enter events
for (auto en : m_dpEntity->GetNewObjects()) { for (auto en : m_dpEntity->GetNewObjects()) {
m_Parent->OnCollisionPhantom(en->GetObjectID()); m_OwningEntity->OnCollisionPhantom(en->GetObjectID());
} }
//Process exit events //Process exit events
for (auto en : m_dpEntity->GetRemovedObjects()) { for (auto en : m_dpEntity->GetRemovedObjects()) {
m_Parent->OnCollisionLeavePhantom(en->GetObjectID()); m_OwningEntity->OnCollisionLeavePhantom(en->GetObjectID());
} }
// Check if we should stop the tether effect // Check if we should stop the tether effect
@ -165,31 +165,31 @@ void BaseCombatAIComponent::Update(const float deltaTime) {
const auto& info = m_MovementAI->GetInfo(); const auto& info = m_MovementAI->GetInfo();
if (m_Target != LWOOBJID_EMPTY || (NiPoint3::DistanceSquared( if (m_Target != LWOOBJID_EMPTY || (NiPoint3::DistanceSquared(
m_StartPosition, m_StartPosition,
m_Parent->GetPosition()) < 20 * 20 && m_TetherTime <= 0) m_OwningEntity->GetPosition()) < 20 * 20 && m_TetherTime <= 0)
) { ) {
GameMessages::SendStopFXEffect(m_Parent, true, "tether"); GameMessages::SendStopFXEffect(m_OwningEntity, true, "tether");
m_TetherEffectActive = false; m_TetherEffectActive = false;
} }
} }
if (m_SoftTimer <= 0.0f) { if (m_SoftTimer <= 0.0f) {
EntityManager::Instance()->SerializeEntity(m_Parent); EntityManager::Instance()->SerializeEntity(m_OwningEntity);
m_SoftTimer = 5.0f; m_SoftTimer = 5.0f;
} else { } else {
m_SoftTimer -= deltaTime; m_SoftTimer -= deltaTime;
} }
if (m_Disabled || m_Parent->GetIsDead()) if (m_Disabled || m_OwningEntity->GetIsDead())
return; return;
bool stunnedThisFrame = m_Stunned; bool stunnedThisFrame = m_Stunned;
CalculateCombat(deltaTime); // Putting this here for now CalculateCombat(deltaTime); // Putting this here for now
if (m_StartPosition == NiPoint3::ZERO) { if (m_StartPosition == NiPoint3::ZERO) {
m_StartPosition = m_Parent->GetPosition(); m_StartPosition = m_OwningEntity->GetPosition();
} }
m_MovementAI = m_Parent->GetComponent<MovementAIComponent>(); m_MovementAI = m_OwningEntity->GetComponent<MovementAIComponent>();
if (m_MovementAI == nullptr) { if (m_MovementAI == nullptr) {
return; return;
@ -243,7 +243,7 @@ void BaseCombatAIComponent::CalculateCombat(const float deltaTime) {
bool hadRemainingDowntime = m_SkillTime > 0.0f; bool hadRemainingDowntime = m_SkillTime > 0.0f;
if (m_SkillTime > 0.0f) m_SkillTime -= deltaTime; if (m_SkillTime > 0.0f) m_SkillTime -= deltaTime;
auto* rebuild = m_Parent->GetComponent<RebuildComponent>(); auto* rebuild = m_OwningEntity->GetComponent<RebuildComponent>();
if (rebuild != nullptr) { if (rebuild != nullptr) {
const auto state = rebuild->GetState(); const auto state = rebuild->GetState();
@ -253,7 +253,7 @@ void BaseCombatAIComponent::CalculateCombat(const float deltaTime) {
} }
} }
auto* skillComponent = m_Parent->GetComponent<SkillComponent>(); auto* skillComponent = m_OwningEntity->GetComponent<SkillComponent>();
if (skillComponent == nullptr) { if (skillComponent == nullptr) {
return; return;
@ -287,7 +287,7 @@ void BaseCombatAIComponent::CalculateCombat(const float deltaTime) {
} }
if (!m_TetherEffectActive && m_OutOfCombat && (m_OutOfCombatTime -= deltaTime) <= 0) { if (!m_TetherEffectActive && m_OutOfCombat && (m_OutOfCombatTime -= deltaTime) <= 0) {
auto* destroyableComponent = m_Parent->GetComponent<DestroyableComponent>(); auto* destroyableComponent = m_OwningEntity->GetComponent<DestroyableComponent>();
if (destroyableComponent != nullptr && destroyableComponent->HasFaction(4)) { if (destroyableComponent != nullptr && destroyableComponent->HasFaction(4)) {
auto serilizationRequired = false; auto serilizationRequired = false;
@ -305,10 +305,10 @@ void BaseCombatAIComponent::CalculateCombat(const float deltaTime) {
} }
if (serilizationRequired) { if (serilizationRequired) {
EntityManager::Instance()->SerializeEntity(m_Parent); EntityManager::Instance()->SerializeEntity(m_OwningEntity);
} }
GameMessages::SendPlayFXEffect(m_Parent->GetObjectID(), 6270, u"tether", "tether"); GameMessages::SendPlayFXEffect(m_OwningEntity->GetObjectID(), 6270, u"tether", "tether");
m_TetherEffectActive = true; m_TetherEffectActive = true;
@ -496,10 +496,10 @@ LWOOBJID BaseCombatAIComponent::FindTarget() {
std::vector<LWOOBJID> BaseCombatAIComponent::GetTargetWithinAggroRange() const { std::vector<LWOOBJID> BaseCombatAIComponent::GetTargetWithinAggroRange() const {
std::vector<LWOOBJID> targets; std::vector<LWOOBJID> targets;
for (auto id : m_Parent->GetTargetsInPhantom()) { for (auto id : m_OwningEntity->GetTargetsInPhantom()) {
auto* other = EntityManager::Instance()->GetEntity(id); auto* other = EntityManager::Instance()->GetEntity(id);
const auto distance = Vector3::DistanceSquared(m_Parent->GetPosition(), other->GetPosition()); const auto distance = Vector3::DistanceSquared(m_OwningEntity->GetPosition(), other->GetPosition());
if (distance > m_AggroRadius * m_AggroRadius) continue; if (distance > m_AggroRadius * m_AggroRadius) continue;
@ -510,7 +510,7 @@ std::vector<LWOOBJID> BaseCombatAIComponent::GetTargetWithinAggroRange() const {
} }
bool BaseCombatAIComponent::IsMech() { bool BaseCombatAIComponent::IsMech() {
switch (m_Parent->GetLOT()) { switch (m_OwningEntity->GetLOT()) {
case 6253: case 6253:
return true; return true;
@ -535,7 +535,7 @@ void BaseCombatAIComponent::SetAiState(AiState newState) {
if (newState == this->m_State) return; if (newState == this->m_State) return;
this->m_State = newState; this->m_State = newState;
m_DirtyStateOrTarget = true; m_DirtyStateOrTarget = true;
EntityManager::Instance()->SerializeEntity(m_Parent); EntityManager::Instance()->SerializeEntity(m_OwningEntity);
} }
bool BaseCombatAIComponent::IsEnemy(LWOOBJID target) const { bool BaseCombatAIComponent::IsEnemy(LWOOBJID target) const {
@ -553,10 +553,10 @@ bool BaseCombatAIComponent::IsEnemy(LWOOBJID target) const {
return false; return false;
} }
auto* referenceDestroyable = m_Parent->GetComponent<DestroyableComponent>(); auto* referenceDestroyable = m_OwningEntity->GetComponent<DestroyableComponent>();
if (referenceDestroyable == nullptr) { if (referenceDestroyable == nullptr) {
Game::logger->Log("BaseCombatAIComponent", "Invalid reference destroyable component on (%llu)!", m_Parent->GetObjectID()); Game::logger->Log("BaseCombatAIComponent", "Invalid reference destroyable component on (%llu)!", m_OwningEntity->GetObjectID());
return false; return false;
} }
@ -588,7 +588,7 @@ void BaseCombatAIComponent::SetTarget(const LWOOBJID target) {
if (this->m_Target == target) return; if (this->m_Target == target) return;
m_Target = target; m_Target = target;
m_DirtyStateOrTarget = true; m_DirtyStateOrTarget = true;
EntityManager::Instance()->SerializeEntity(m_Parent); EntityManager::Instance()->SerializeEntity(m_OwningEntity);
} }
Entity* BaseCombatAIComponent::GetTargetEntity() const { Entity* BaseCombatAIComponent::GetTargetEntity() const {
@ -597,7 +597,7 @@ Entity* BaseCombatAIComponent::GetTargetEntity() const {
void BaseCombatAIComponent::Taunt(LWOOBJID offender, float threat) { void BaseCombatAIComponent::Taunt(LWOOBJID offender, float threat) {
// Can't taunt self // Can't taunt self
if (offender == m_Parent->GetObjectID()) if (offender == m_OwningEntity->GetObjectID())
return; return;
m_ThreatEntries[offender] += threat; m_ThreatEntries[offender] += threat;
@ -788,7 +788,7 @@ void BaseCombatAIComponent::LookAt(const NiPoint3& point) {
return; return;
} }
m_Parent->SetRotation(NiQuaternion::LookAt(m_Parent->GetPosition(), point)); m_OwningEntity->SetRotation(NiQuaternion::LookAt(m_OwningEntity->GetPosition(), point));
} }
void BaseCombatAIComponent::SetDisabled(bool value) { void BaseCombatAIComponent::SetDisabled(bool value) {

View File

@ -30,28 +30,28 @@ void BouncerComponent::Serialize(RakNet::BitStream* outBitStream, bool bIsInitia
} }
Entity* BouncerComponent::GetParentEntity() const { Entity* BouncerComponent::GetParentEntity() const {
return m_Parent; return m_OwningEntity;
} }
void BouncerComponent::SetPetEnabled(bool value) { void BouncerComponent::SetPetEnabled(bool value) {
m_PetEnabled = value; m_PetEnabled = value;
EntityManager::Instance()->SerializeEntity(m_Parent); EntityManager::Instance()->SerializeEntity(m_OwningEntity);
} }
void BouncerComponent::SetPetBouncerEnabled(bool value) { void BouncerComponent::SetPetBouncerEnabled(bool value) {
m_PetBouncerEnabled = value; m_PetBouncerEnabled = value;
GameMessages::SendBouncerActiveStatus(m_Parent->GetObjectID(), value, UNASSIGNED_SYSTEM_ADDRESS); GameMessages::SendBouncerActiveStatus(m_OwningEntity->GetObjectID(), value, UNASSIGNED_SYSTEM_ADDRESS);
EntityManager::Instance()->SerializeEntity(m_Parent); EntityManager::Instance()->SerializeEntity(m_OwningEntity);
if (value) { if (value) {
m_Parent->TriggerEvent(eTriggerEventType::PET_ON_SWITCH, m_Parent); m_OwningEntity->TriggerEvent(eTriggerEventType::PET_ON_SWITCH, m_OwningEntity);
GameMessages::SendPlayFXEffect(m_Parent->GetObjectID(), 1513, u"create", "PetOnSwitch", LWOOBJID_EMPTY, 1, 1, true); GameMessages::SendPlayFXEffect(m_OwningEntity->GetObjectID(), 1513, u"create", "PetOnSwitch", LWOOBJID_EMPTY, 1, 1, true);
} else { } else {
m_Parent->TriggerEvent(eTriggerEventType::PET_OFF_SWITCH, m_Parent); m_OwningEntity->TriggerEvent(eTriggerEventType::PET_OFF_SWITCH, m_OwningEntity);
GameMessages::SendStopFXEffect(m_Parent, true, "PetOnSwitch"); GameMessages::SendStopFXEffect(m_OwningEntity, true, "PetOnSwitch");
} }
} }
@ -65,7 +65,7 @@ bool BouncerComponent::GetPetBouncerEnabled() const {
} }
void BouncerComponent::LookupPetSwitch() { void BouncerComponent::LookupPetSwitch() {
const auto& groups = m_Parent->GetGroups(); const auto& groups = m_OwningEntity->GetGroups();
for (const auto& group : groups) { for (const auto& group : groups) {
const auto& entities = EntityManager::Instance()->GetEntitiesInGroup(group); const auto& entities = EntityManager::Instance()->GetEntitiesInGroup(group);
@ -79,7 +79,7 @@ void BouncerComponent::LookupPetSwitch() {
m_PetSwitchLoaded = true; m_PetSwitchLoaded = true;
m_PetEnabled = true; m_PetEnabled = true;
EntityManager::Instance()->SerializeEntity(m_Parent); EntityManager::Instance()->SerializeEntity(m_OwningEntity);
Game::logger->Log("BouncerComponent", "Loaded pet bouncer"); Game::logger->Log("BouncerComponent", "Loaded pet bouncer");
} }
@ -89,7 +89,7 @@ void BouncerComponent::LookupPetSwitch() {
if (!m_PetSwitchLoaded) { if (!m_PetSwitchLoaded) {
Game::logger->Log("BouncerComponent", "Failed to load pet bouncer"); Game::logger->Log("BouncerComponent", "Failed to load pet bouncer");
m_Parent->AddCallbackTimer(0.5f, [this]() { m_OwningEntity->AddCallbackTimer(0.5f, [this]() {
LookupPetSwitch(); LookupPetSwitch();
}); });
} }

View File

@ -64,7 +64,7 @@ void BuffComponent::Update(float deltaTime) {
buff.second.tickTime = buff.second.tick; buff.second.tickTime = buff.second.tick;
buff.second.stacks--; buff.second.stacks--;
SkillComponent::HandleUnmanaged(buff.second.behaviorID, m_Parent->GetObjectID(), buff.second.source); SkillComponent::HandleUnmanaged(buff.second.behaviorID, m_OwningEntity->GetObjectID(), buff.second.source);
} }
} }
@ -91,7 +91,7 @@ void BuffComponent::ApplyBuff(const int32_t id, const float duration, const LWOO
return; return;
} }
GameMessages::SendAddBuff(const_cast<LWOOBJID&>(m_Parent->GetObjectID()), source, (uint32_t)id, GameMessages::SendAddBuff(const_cast<LWOOBJID&>(m_OwningEntity->GetObjectID()), source, (uint32_t)id,
(uint32_t)duration * 1000, addImmunity, cancelOnDamaged, cancelOnDeath, (uint32_t)duration * 1000, addImmunity, cancelOnDamaged, cancelOnDeath,
cancelOnLogout, cancelOnRemoveBuff, cancelOnUi, cancelOnUnequip, cancelOnZone); cancelOnLogout, cancelOnRemoveBuff, cancelOnUi, cancelOnUnequip, cancelOnZone);
@ -132,7 +132,7 @@ void BuffComponent::RemoveBuff(int32_t id, bool fromUnEquip, bool removeImmunity
return; return;
} }
GameMessages::SendRemoveBuff(m_Parent, fromUnEquip, removeImmunity, id); GameMessages::SendRemoveBuff(m_OwningEntity, fromUnEquip, removeImmunity, id);
m_Buffs.erase(iter); m_Buffs.erase(iter);
@ -149,7 +149,7 @@ void BuffComponent::ApplyBuffEffect(int32_t id) {
if (parameter.name == "max_health") { if (parameter.name == "max_health") {
const auto maxHealth = parameter.value; const auto maxHealth = parameter.value;
auto* destroyable = this->GetParent()->GetComponent<DestroyableComponent>(); auto* destroyable = this->GetOwningEntity()->GetComponent<DestroyableComponent>();
if (destroyable == nullptr) return; if (destroyable == nullptr) return;
@ -157,7 +157,7 @@ void BuffComponent::ApplyBuffEffect(int32_t id) {
} else if (parameter.name == "max_armor") { } else if (parameter.name == "max_armor") {
const auto maxArmor = parameter.value; const auto maxArmor = parameter.value;
auto* destroyable = this->GetParent()->GetComponent<DestroyableComponent>(); auto* destroyable = this->GetOwningEntity()->GetComponent<DestroyableComponent>();
if (destroyable == nullptr) return; if (destroyable == nullptr) return;
@ -165,13 +165,13 @@ void BuffComponent::ApplyBuffEffect(int32_t id) {
} else if (parameter.name == "max_imagination") { } else if (parameter.name == "max_imagination") {
const auto maxImagination = parameter.value; const auto maxImagination = parameter.value;
auto* destroyable = this->GetParent()->GetComponent<DestroyableComponent>(); auto* destroyable = this->GetOwningEntity()->GetComponent<DestroyableComponent>();
if (destroyable == nullptr) return; if (destroyable == nullptr) return;
destroyable->SetMaxImagination(destroyable->GetMaxImagination() + maxImagination); destroyable->SetMaxImagination(destroyable->GetMaxImagination() + maxImagination);
} else if (parameter.name == "speed") { } else if (parameter.name == "speed") {
auto* controllablePhysicsComponent = this->GetParent()->GetComponent<ControllablePhysicsComponent>(); auto* controllablePhysicsComponent = this->GetOwningEntity()->GetComponent<ControllablePhysicsComponent>();
if (!controllablePhysicsComponent) return; if (!controllablePhysicsComponent) return;
const auto speed = parameter.value; const auto speed = parameter.value;
controllablePhysicsComponent->AddSpeedboost(speed); controllablePhysicsComponent->AddSpeedboost(speed);
@ -185,7 +185,7 @@ void BuffComponent::RemoveBuffEffect(int32_t id) {
if (parameter.name == "max_health") { if (parameter.name == "max_health") {
const auto maxHealth = parameter.value; const auto maxHealth = parameter.value;
auto* destroyable = this->GetParent()->GetComponent<DestroyableComponent>(); auto* destroyable = this->GetOwningEntity()->GetComponent<DestroyableComponent>();
if (destroyable == nullptr) return; if (destroyable == nullptr) return;
@ -193,7 +193,7 @@ void BuffComponent::RemoveBuffEffect(int32_t id) {
} else if (parameter.name == "max_armor") { } else if (parameter.name == "max_armor") {
const auto maxArmor = parameter.value; const auto maxArmor = parameter.value;
auto* destroyable = this->GetParent()->GetComponent<DestroyableComponent>(); auto* destroyable = this->GetOwningEntity()->GetComponent<DestroyableComponent>();
if (destroyable == nullptr) return; if (destroyable == nullptr) return;
@ -201,13 +201,13 @@ void BuffComponent::RemoveBuffEffect(int32_t id) {
} else if (parameter.name == "max_imagination") { } else if (parameter.name == "max_imagination") {
const auto maxImagination = parameter.value; const auto maxImagination = parameter.value;
auto* destroyable = this->GetParent()->GetComponent<DestroyableComponent>(); auto* destroyable = this->GetOwningEntity()->GetComponent<DestroyableComponent>();
if (destroyable == nullptr) return; if (destroyable == nullptr) return;
destroyable->SetMaxImagination(destroyable->GetMaxImagination() - maxImagination); destroyable->SetMaxImagination(destroyable->GetMaxImagination() - maxImagination);
} else if (parameter.name == "speed") { } else if (parameter.name == "speed") {
auto* controllablePhysicsComponent = this->GetParent()->GetComponent<ControllablePhysicsComponent>(); auto* controllablePhysicsComponent = this->GetOwningEntity()->GetComponent<ControllablePhysicsComponent>();
if (!controllablePhysicsComponent) return; if (!controllablePhysicsComponent) return;
const auto speed = parameter.value; const auto speed = parameter.value;
controllablePhysicsComponent->RemoveSpeedboost(speed); controllablePhysicsComponent->RemoveSpeedboost(speed);
@ -233,8 +233,8 @@ void BuffComponent::ReApplyBuffs() {
} }
} }
Entity* BuffComponent::GetParent() const { Entity* BuffComponent::GetOwningEntity() const {
return m_Parent; return m_OwningEntity;
} }
void BuffComponent::LoadFromXml(tinyxml2::XMLDocument* doc) { void BuffComponent::LoadFromXml(tinyxml2::XMLDocument* doc) {

View File

@ -48,7 +48,7 @@ public:
~BuffComponent(); ~BuffComponent();
Entity* GetParent() const; Entity* GetOwningEntity() const;
void LoadFromXml(tinyxml2::XMLDocument* doc) override; void LoadFromXml(tinyxml2::XMLDocument* doc) override;

View File

@ -19,7 +19,7 @@ void BuildBorderComponent::OnUse(Entity* originator) {
if (originator->GetCharacter()) { if (originator->GetCharacter()) {
const auto& entities = EntityManager::Instance()->GetEntitiesInGroup("PropertyPlaque"); const auto& entities = EntityManager::Instance()->GetEntitiesInGroup("PropertyPlaque");
auto buildArea = m_Parent->GetObjectID(); auto buildArea = m_OwningEntity->GetObjectID();
if (!entities.empty()) { if (!entities.empty()) {
buildArea = entities[0]->GetObjectID(); buildArea = entities[0]->GetObjectID();
@ -63,7 +63,7 @@ void BuildBorderComponent::OnUse(Entity* originator) {
GameMessages::SendStartArrangingWithItem(originator, originator->GetSystemAddress(), true, buildArea, originator->GetPosition()); GameMessages::SendStartArrangingWithItem(originator, originator->GetSystemAddress(), true, buildArea, originator->GetPosition());
} }
InventoryComponent* inv = m_Parent->GetComponent<InventoryComponent>(); InventoryComponent* inv = m_OwningEntity->GetComponent<InventoryComponent>();
if (!inv) return; if (!inv) return;
inv->PushEquippedItems(); // technically this is supposed to happen automatically... but it doesnt? so just keep this here inv->PushEquippedItems(); // technically this is supposed to happen automatically... but it doesnt? so just keep this here
} }

View File

@ -491,7 +491,7 @@ void CharacterComponent::TrackRaceCompleted(bool won) {
} }
void CharacterComponent::TrackPositionUpdate(const NiPoint3& newPosition) { void CharacterComponent::TrackPositionUpdate(const NiPoint3& newPosition) {
const auto distance = NiPoint3::Distance(newPosition, m_Parent->GetPosition()); const auto distance = NiPoint3::Distance(newPosition, m_OwningEntity->GetPosition());
if (m_IsRacing) { if (m_IsRacing) {
UpdatePlayerStatistic(DistanceDriven, (uint64_t)distance); UpdatePlayerStatistic(DistanceDriven, (uint64_t)distance);
@ -732,8 +732,8 @@ void CharacterComponent::RemoveVentureVisionEffect(std::string ventureVisionType
} }
void CharacterComponent::UpdateClientMinimap(bool showFaction, std::string ventureVisionType) const { void CharacterComponent::UpdateClientMinimap(bool showFaction, std::string ventureVisionType) const {
if (!m_Parent) return; if (!m_OwningEntity) return;
AMFArrayValue arrayToSend; AMFArrayValue arrayToSend;
arrayToSend.Insert(ventureVisionType, showFaction); arrayToSend.Insert(ventureVisionType, showFaction);
GameMessages::SendUIMessageServerToSingleClient(m_Parent, m_Parent ? m_Parent->GetSystemAddress() : UNASSIGNED_SYSTEM_ADDRESS, "SetFactionVisibility", arrayToSend); GameMessages::SendUIMessageServerToSingleClient(m_OwningEntity, m_OwningEntity ? m_OwningEntity->GetSystemAddress() : UNASSIGNED_SYSTEM_ADDRESS, "SetFactionVisibility", arrayToSend);
} }

View File

@ -1,18 +1,15 @@
#include "Component.h" #include "Component.h"
#include "DluAssert.h"
Component::Component(Entity* owningEntity) {
Component::Component(Entity* parent) { DluAssert(owningEntity != nullptr);
m_Parent = parent; m_OwningEntity = owningEntity;
} }
Component::~Component() { Component::~Component() {
} }
Entity* Component::GetParent() const {
return m_Parent;
}
void Component::Update(float deltaTime) { void Component::Update(float deltaTime) {
} }
@ -28,3 +25,15 @@ void Component::UpdateXml(tinyxml2::XMLDocument* doc) {
void Component::LoadFromXml(tinyxml2::XMLDocument* doc) { void Component::LoadFromXml(tinyxml2::XMLDocument* doc) {
} }
void Component::Startup() {
}
void Component::LoadConfigData() {
}
void Component::LoadTemplateData() {
}

View File

@ -1,29 +1,22 @@
#pragma once #pragma once
#include "../thirdparty/tinyxml2/tinyxml2.h" #include "tinyxml2.h"
class Entity; class Entity;
/** /**
* Component base class, provides methods for game loop updates, usage events and loading and saving to XML. * Component base class, provides methods for game loop updates, usage events and loading and saving to XML.
*/ */
class Component class Component {
{
public: public:
Component(Entity* parent); Component(Entity* owningEntity);
virtual ~Component(); virtual ~Component();
/** /**
* Gets the owner of this component * Gets the owner of this component
* @return the owner of this component * @return the owner of this component
*/ */
Entity* GetParent() const; Entity* GetOwningEntity() const { return m_OwningEntity; };
/**
* Updates the component in the game loop
* @param deltaTime time passed since last update
*/
virtual void Update(float deltaTime);
/** /**
* Event called when this component is being used, e.g. when some entity interacted with it * Event called when this component is being used, e.g. when some entity interacted with it
@ -43,10 +36,30 @@ public:
*/ */
virtual void LoadFromXml(tinyxml2::XMLDocument* doc); virtual void LoadFromXml(tinyxml2::XMLDocument* doc);
/**
* Call after you have newed the component to initialize it
*/
virtual void Startup();
/**
* Updates the component in the game loop
* @param deltaTime time passed since last update
*/
virtual void Update(float deltaTime);
/**
* Loads the data of this component from the luz/lvl configuration
*/
virtual void LoadConfigData();
/**
* Loads the data of this component from the cdclient database
*/
virtual void LoadTemplateData();
protected: protected:
/** /**
* The entity that owns this component * The entity that owns this component
*/ */
Entity* m_Parent; Entity* m_OwningEntity;
}; };

View File

@ -58,7 +58,7 @@ ControllablePhysicsComponent::ControllablePhysicsComponent(Entity* entity) : Com
Game::logger->Log("ControllablePhysicsComponent", "Using patch to load minifig physics"); Game::logger->Log("ControllablePhysicsComponent", "Using patch to load minifig physics");
float radius = 1.5f; float radius = 1.5f;
m_dpEntity = new dpEntity(m_Parent->GetObjectID(), radius, false); m_dpEntity = new dpEntity(m_OwningEntity->GetObjectID(), radius, false);
m_dpEntity->SetCollisionGroup(COLLISION_GROUP_DYNAMIC | COLLISION_GROUP_FRIENDLY); m_dpEntity->SetCollisionGroup(COLLISION_GROUP_DYNAMIC | COLLISION_GROUP_FRIENDLY);
dpWorld::Instance().AddEntity(m_dpEntity); dpWorld::Instance().AddEntity(m_dpEntity);
} }
@ -168,7 +168,7 @@ void ControllablePhysicsComponent::LoadFromXml(tinyxml2::XMLDocument* doc) {
return; return;
} }
m_Parent->GetCharacter()->LoadXmlRespawnCheckpoints(); m_OwningEntity->GetCharacter()->LoadXmlRespawnCheckpoints();
character->QueryAttribute("lzx", &m_Position.x); character->QueryAttribute("lzx", &m_Position.x);
character->QueryAttribute("lzy", &m_Position.y); character->QueryAttribute("lzy", &m_Position.y);
@ -300,7 +300,7 @@ void ControllablePhysicsComponent::RemovePickupRadiusScale(float value) {
auto candidateRadius = m_ActivePickupRadiusScales[i]; auto candidateRadius = m_ActivePickupRadiusScales[i];
if (m_PickupRadius < candidateRadius) m_PickupRadius = candidateRadius; if (m_PickupRadius < candidateRadius) m_PickupRadius = candidateRadius;
} }
EntityManager::Instance()->SerializeEntity(m_Parent); EntityManager::Instance()->SerializeEntity(m_OwningEntity);
} }
void ControllablePhysicsComponent::AddSpeedboost(float value) { void ControllablePhysicsComponent::AddSpeedboost(float value) {
@ -321,13 +321,13 @@ void ControllablePhysicsComponent::RemoveSpeedboost(float value) {
// Recalculate speedboost since we removed one // Recalculate speedboost since we removed one
m_SpeedBoost = 0.0f; m_SpeedBoost = 0.0f;
if (m_ActiveSpeedBoosts.empty()) { // no active speed boosts left, so return to base speed if (m_ActiveSpeedBoosts.empty()) { // no active speed boosts left, so return to base speed
auto* levelProgressionComponent = m_Parent->GetComponent<LevelProgressionComponent>(); auto* levelProgressionComponent = m_OwningEntity->GetComponent<LevelProgressionComponent>();
if (levelProgressionComponent) m_SpeedBoost = levelProgressionComponent->GetSpeedBase(); if (levelProgressionComponent) m_SpeedBoost = levelProgressionComponent->GetSpeedBase();
} else { // Used the last applied speedboost } else { // Used the last applied speedboost
m_SpeedBoost = m_ActiveSpeedBoosts.back(); m_SpeedBoost = m_ActiveSpeedBoosts.back();
} }
SetSpeedMultiplier(m_SpeedBoost / 500.0f); // 500 being the base speed SetSpeedMultiplier(m_SpeedBoost / 500.0f); // 500 being the base speed
EntityManager::Instance()->SerializeEntity(m_Parent); EntityManager::Instance()->SerializeEntity(m_OwningEntity);
} }
void ControllablePhysicsComponent::ActivateBubbleBuff(eBubbleType bubbleType, bool specialAnims){ void ControllablePhysicsComponent::ActivateBubbleBuff(eBubbleType bubbleType, bool specialAnims){
@ -339,13 +339,13 @@ void ControllablePhysicsComponent::ActivateBubbleBuff(eBubbleType bubbleType, bo
m_IsInBubble = true; m_IsInBubble = true;
m_DirtyBubble = true; m_DirtyBubble = true;
m_SpecialAnims = specialAnims; m_SpecialAnims = specialAnims;
EntityManager::Instance()->SerializeEntity(m_Parent); EntityManager::Instance()->SerializeEntity(m_OwningEntity);
} }
void ControllablePhysicsComponent::DeactivateBubbleBuff(){ void ControllablePhysicsComponent::DeactivateBubbleBuff(){
m_DirtyBubble = true; m_DirtyBubble = true;
m_IsInBubble = false; m_IsInBubble = false;
EntityManager::Instance()->SerializeEntity(m_Parent); EntityManager::Instance()->SerializeEntity(m_OwningEntity);
}; };
void ControllablePhysicsComponent::SetStunImmunity( void ControllablePhysicsComponent::SetStunImmunity(
@ -378,7 +378,7 @@ void ControllablePhysicsComponent::SetStunImmunity(
} }
GameMessages::SendSetStunImmunity( GameMessages::SendSetStunImmunity(
m_Parent->GetObjectID(), state, m_Parent->GetSystemAddress(), originator, m_OwningEntity->GetObjectID(), state, m_OwningEntity->GetSystemAddress(), originator,
bImmuneToStunAttack, bImmuneToStunAttack,
bImmuneToStunEquip, bImmuneToStunEquip,
bImmuneToStunInteract, bImmuneToStunInteract,

View File

@ -185,7 +185,7 @@ void DestroyableComponent::LoadFromXml(tinyxml2::XMLDocument* doc) {
return; return;
} }
auto* buffComponent = m_Parent->GetComponent<BuffComponent>(); auto* buffComponent = m_OwningEntity->GetComponent<BuffComponent>();
if (buffComponent != nullptr) { if (buffComponent != nullptr) {
buffComponent->LoadFromXml(doc); buffComponent->LoadFromXml(doc);
@ -207,7 +207,7 @@ void DestroyableComponent::UpdateXml(tinyxml2::XMLDocument* doc) {
return; return;
} }
auto* buffComponent = m_Parent->GetComponent<BuffComponent>(); auto* buffComponent = m_OwningEntity->GetComponent<BuffComponent>();
if (buffComponent != nullptr) { if (buffComponent != nullptr) {
buffComponent->UpdateXml(doc); buffComponent->UpdateXml(doc);
@ -224,7 +224,7 @@ void DestroyableComponent::UpdateXml(tinyxml2::XMLDocument* doc) {
void DestroyableComponent::SetHealth(int32_t value) { void DestroyableComponent::SetHealth(int32_t value) {
m_DirtyHealth = true; m_DirtyHealth = true;
auto* characterComponent = m_Parent->GetComponent<CharacterComponent>(); auto* characterComponent = m_OwningEntity->GetComponent<CharacterComponent>();
if (characterComponent != nullptr) { if (characterComponent != nullptr) {
characterComponent->TrackHealthDelta(value - m_iHealth); characterComponent->TrackHealthDelta(value - m_iHealth);
} }
@ -244,16 +244,16 @@ void DestroyableComponent::SetMaxHealth(float value, bool playAnim) {
if (playAnim) { if (playAnim) {
// Now update the player bar // Now update the player bar
if (!m_Parent->GetParentUser()) return; if (!m_OwningEntity->GetParentUser()) return;
AMFArrayValue args; AMFArrayValue args;
args.Insert("amount", std::to_string(difference)); args.Insert("amount", std::to_string(difference));
args.Insert("type", "health"); args.Insert("type", "health");
GameMessages::SendUIMessageServerToSingleClient(m_Parent, m_Parent->GetParentUser()->GetSystemAddress(), "MaxPlayerBarUpdate", args); GameMessages::SendUIMessageServerToSingleClient(m_OwningEntity, m_OwningEntity->GetParentUser()->GetSystemAddress(), "MaxPlayerBarUpdate", args);
} }
EntityManager::Instance()->SerializeEntity(m_Parent); EntityManager::Instance()->SerializeEntity(m_OwningEntity);
} }
void DestroyableComponent::SetArmor(int32_t value) { void DestroyableComponent::SetArmor(int32_t value) {
@ -262,14 +262,14 @@ void DestroyableComponent::SetArmor(int32_t value) {
// If Destroyable Component already has zero armor do not trigger the passive ability again. // If Destroyable Component already has zero armor do not trigger the passive ability again.
bool hadArmor = m_iArmor > 0; bool hadArmor = m_iArmor > 0;
auto* characterComponent = m_Parent->GetComponent<CharacterComponent>(); auto* characterComponent = m_OwningEntity->GetComponent<CharacterComponent>();
if (characterComponent != nullptr) { if (characterComponent != nullptr) {
characterComponent->TrackArmorDelta(value - m_iArmor); characterComponent->TrackArmorDelta(value - m_iArmor);
} }
m_iArmor = value; m_iArmor = value;
auto* inventroyComponent = m_Parent->GetComponent<InventoryComponent>(); auto* inventroyComponent = m_OwningEntity->GetComponent<InventoryComponent>();
if (m_iArmor == 0 && inventroyComponent != nullptr && hadArmor) { if (m_iArmor == 0 && inventroyComponent != nullptr && hadArmor) {
inventroyComponent->TriggerPassiveAbility(PassiveAbilityTrigger::SentinelArmor); inventroyComponent->TriggerPassiveAbility(PassiveAbilityTrigger::SentinelArmor);
} }
@ -285,29 +285,29 @@ void DestroyableComponent::SetMaxArmor(float value, bool playAnim) {
if (playAnim) { if (playAnim) {
// Now update the player bar // Now update the player bar
if (!m_Parent->GetParentUser()) return; if (!m_OwningEntity->GetParentUser()) return;
AMFArrayValue args; AMFArrayValue args;
args.Insert("amount", std::to_string(value)); args.Insert("amount", std::to_string(value));
args.Insert("type", "armor"); args.Insert("type", "armor");
GameMessages::SendUIMessageServerToSingleClient(m_Parent, m_Parent->GetParentUser()->GetSystemAddress(), "MaxPlayerBarUpdate", args); GameMessages::SendUIMessageServerToSingleClient(m_OwningEntity, m_OwningEntity->GetParentUser()->GetSystemAddress(), "MaxPlayerBarUpdate", args);
} }
EntityManager::Instance()->SerializeEntity(m_Parent); EntityManager::Instance()->SerializeEntity(m_OwningEntity);
} }
void DestroyableComponent::SetImagination(int32_t value) { void DestroyableComponent::SetImagination(int32_t value) {
m_DirtyHealth = true; m_DirtyHealth = true;
auto* characterComponent = m_Parent->GetComponent<CharacterComponent>(); auto* characterComponent = m_OwningEntity->GetComponent<CharacterComponent>();
if (characterComponent != nullptr) { if (characterComponent != nullptr) {
characterComponent->TrackImaginationDelta(value - m_iImagination); characterComponent->TrackImaginationDelta(value - m_iImagination);
} }
m_iImagination = value; m_iImagination = value;
auto* inventroyComponent = m_Parent->GetComponent<InventoryComponent>(); auto* inventroyComponent = m_OwningEntity->GetComponent<InventoryComponent>();
if (m_iImagination == 0 && inventroyComponent != nullptr) { if (m_iImagination == 0 && inventroyComponent != nullptr) {
inventroyComponent->TriggerPassiveAbility(PassiveAbilityTrigger::AssemblyImagination); inventroyComponent->TriggerPassiveAbility(PassiveAbilityTrigger::AssemblyImagination);
} }
@ -325,15 +325,15 @@ void DestroyableComponent::SetMaxImagination(float value, bool playAnim) {
if (playAnim) { if (playAnim) {
// Now update the player bar // Now update the player bar
if (!m_Parent->GetParentUser()) return; if (!m_OwningEntity->GetParentUser()) return;
AMFArrayValue args; AMFArrayValue args;
args.Insert("amount", std::to_string(difference)); args.Insert("amount", std::to_string(difference));
args.Insert("type", "imagination"); args.Insert("type", "imagination");
GameMessages::SendUIMessageServerToSingleClient(m_Parent, m_Parent->GetParentUser()->GetSystemAddress(), "MaxPlayerBarUpdate", args); GameMessages::SendUIMessageServerToSingleClient(m_OwningEntity, m_OwningEntity->GetParentUser()->GetSystemAddress(), "MaxPlayerBarUpdate", args);
} }
EntityManager::Instance()->SerializeEntity(m_Parent); EntityManager::Instance()->SerializeEntity(m_OwningEntity);
} }
void DestroyableComponent::SetDamageToAbsorb(int32_t value) { void DestroyableComponent::SetDamageToAbsorb(int32_t value) {
@ -455,8 +455,8 @@ bool DestroyableComponent::IsImmune() const {
} }
bool DestroyableComponent::IsKnockbackImmune() const { bool DestroyableComponent::IsKnockbackImmune() const {
auto* characterComponent = m_Parent->GetComponent<CharacterComponent>(); auto* characterComponent = m_OwningEntity->GetComponent<CharacterComponent>();
auto* inventoryComponent = m_Parent->GetComponent<InventoryComponent>(); auto* inventoryComponent = m_OwningEntity->GetComponent<InventoryComponent>();
if (characterComponent != nullptr && inventoryComponent != nullptr && characterComponent->GetCurrentActivity() == eGameActivity::QUICKBUILDING) { if (characterComponent != nullptr && inventoryComponent != nullptr && characterComponent->GetCurrentActivity() == eGameActivity::QUICKBUILDING) {
const auto hasPassive = inventoryComponent->HasAnyPassive({ const auto hasPassive = inventoryComponent->HasAnyPassive({
@ -532,7 +532,7 @@ void DestroyableComponent::Heal(const uint32_t health) {
SetHealth(current); SetHealth(current);
EntityManager::Instance()->SerializeEntity(m_Parent); EntityManager::Instance()->SerializeEntity(m_OwningEntity);
} }
@ -550,7 +550,7 @@ void DestroyableComponent::Imagine(const int32_t deltaImagination) {
SetImagination(current); SetImagination(current);
EntityManager::Instance()->SerializeEntity(m_Parent); EntityManager::Instance()->SerializeEntity(m_OwningEntity);
} }
@ -564,7 +564,7 @@ void DestroyableComponent::Repair(const uint32_t armor) {
SetArmor(current); SetArmor(current);
EntityManager::Instance()->SerializeEntity(m_Parent); EntityManager::Instance()->SerializeEntity(m_OwningEntity);
} }
@ -616,13 +616,13 @@ void DestroyableComponent::Damage(uint32_t damage, const LWOOBJID source, uint32
SetIsShielded(absorb > 0); SetIsShielded(absorb > 0);
// Dismount on the possessable hit // Dismount on the possessable hit
auto possessable = m_Parent->GetComponent<PossessableComponent>(); auto possessable = m_OwningEntity->GetComponent<PossessableComponent>();
if (possessable && possessable->GetDepossessOnHit()) { if (possessable && possessable->GetDepossessOnHit()) {
possessable->Dismount(); possessable->Dismount();
} }
// Dismount on the possessor hit // Dismount on the possessor hit
auto possessor = m_Parent->GetComponent<PossessorComponent>(); auto possessor = m_OwningEntity->GetComponent<PossessorComponent>();
if (possessor) { if (possessor) {
auto possessableId = possessor->GetPossessable(); auto possessableId = possessor->GetPossessable();
if (possessableId != LWOOBJID_EMPTY) { if (possessableId != LWOOBJID_EMPTY) {
@ -633,17 +633,17 @@ void DestroyableComponent::Damage(uint32_t damage, const LWOOBJID source, uint32
} }
} }
if (m_Parent->GetLOT() != 1) { if (m_OwningEntity->GetLOT() != 1) {
echo = true; echo = true;
} }
if (echo) { if (echo) {
EntityManager::Instance()->SerializeEntity(m_Parent); EntityManager::Instance()->SerializeEntity(m_OwningEntity);
} }
auto* attacker = EntityManager::Instance()->GetEntity(source); auto* attacker = EntityManager::Instance()->GetEntity(source);
m_Parent->OnHit(attacker); m_OwningEntity->OnHit(attacker);
m_Parent->OnHitOrHealResult(attacker, sourceDamage); m_OwningEntity->OnHitOrHealResult(attacker, sourceDamage);
NotifySubscribers(attacker, sourceDamage); NotifySubscribers(attacker, sourceDamage);
for (const auto& cb : m_OnHitCallbacks) { for (const auto& cb : m_OnHitCallbacks) {
@ -651,7 +651,7 @@ void DestroyableComponent::Damage(uint32_t damage, const LWOOBJID source, uint32
} }
if (health != 0) { if (health != 0) {
auto* combatComponent = m_Parent->GetComponent<BaseCombatAIComponent>(); auto* combatComponent = m_OwningEntity->GetComponent<BaseCombatAIComponent>();
if (combatComponent != nullptr) { if (combatComponent != nullptr) {
combatComponent->Taunt(source, sourceDamage * 10); // * 10 is arbatrary combatComponent->Taunt(source, sourceDamage * 10); // * 10 is arbatrary
@ -670,7 +670,7 @@ void DestroyableComponent::Damage(uint32_t damage, const LWOOBJID source, uint32
void DestroyableComponent::Subscribe(LWOOBJID scriptObjId, CppScripts::Script* scriptToAdd) { void DestroyableComponent::Subscribe(LWOOBJID scriptObjId, CppScripts::Script* scriptToAdd) {
m_SubscribedScripts.insert(std::make_pair(scriptObjId, scriptToAdd)); m_SubscribedScripts.insert(std::make_pair(scriptObjId, scriptToAdd));
Game::logger->LogDebug("DestroyableComponent", "Added script %llu to entity %llu", scriptObjId, m_Parent->GetObjectID()); Game::logger->LogDebug("DestroyableComponent", "Added script %llu to entity %llu", scriptObjId, m_OwningEntity->GetObjectID());
Game::logger->LogDebug("DestroyableComponent", "Number of subscribed scripts %i", m_SubscribedScripts.size()); Game::logger->LogDebug("DestroyableComponent", "Number of subscribed scripts %i", m_SubscribedScripts.size());
} }
@ -678,16 +678,16 @@ void DestroyableComponent::Unsubscribe(LWOOBJID scriptObjId) {
auto foundScript = m_SubscribedScripts.find(scriptObjId); auto foundScript = m_SubscribedScripts.find(scriptObjId);
if (foundScript != m_SubscribedScripts.end()) { if (foundScript != m_SubscribedScripts.end()) {
m_SubscribedScripts.erase(foundScript); m_SubscribedScripts.erase(foundScript);
Game::logger->LogDebug("DestroyableComponent", "Removed script %llu from entity %llu", scriptObjId, m_Parent->GetObjectID()); Game::logger->LogDebug("DestroyableComponent", "Removed script %llu from entity %llu", scriptObjId, m_OwningEntity->GetObjectID());
} else { } else {
Game::logger->LogDebug("DestroyableComponent", "Tried to remove a script for Entity %llu but script %llu didnt exist", m_Parent->GetObjectID(), scriptObjId); Game::logger->LogDebug("DestroyableComponent", "Tried to remove a script for Entity %llu but script %llu didnt exist", m_OwningEntity->GetObjectID(), scriptObjId);
} }
Game::logger->LogDebug("DestroyableComponent", "Number of subscribed scripts %i", m_SubscribedScripts.size()); Game::logger->LogDebug("DestroyableComponent", "Number of subscribed scripts %i", m_SubscribedScripts.size());
} }
void DestroyableComponent::NotifySubscribers(Entity* attacker, uint32_t damage) { void DestroyableComponent::NotifySubscribers(Entity* attacker, uint32_t damage) {
for (auto script : m_SubscribedScripts) { for (auto script : m_SubscribedScripts) {
script.second->NotifyHitOrHealResult(m_Parent, attacker, damage); script.second->NotifyHitOrHealResult(m_OwningEntity, attacker, damage);
} }
} }
@ -696,7 +696,7 @@ void DestroyableComponent::Smash(const LWOOBJID source, const eKillType killType
SetArmor(0); SetArmor(0);
SetHealth(0); SetHealth(0);
EntityManager::Instance()->SerializeEntity(m_Parent); EntityManager::Instance()->SerializeEntity(m_OwningEntity);
} }
m_KillerID = source; m_KillerID = source;
@ -708,12 +708,12 @@ void DestroyableComponent::Smash(const LWOOBJID source, const eKillType killType
auto* team = TeamManager::Instance()->GetTeam(owner->GetObjectID()); auto* team = TeamManager::Instance()->GetTeam(owner->GetObjectID());
const auto isEnemy = m_Parent->GetComponent<BaseCombatAIComponent>() != nullptr; const auto isEnemy = m_OwningEntity->GetComponent<BaseCombatAIComponent>() != nullptr;
auto* inventoryComponent = owner->GetComponent<InventoryComponent>(); auto* inventoryComponent = owner->GetComponent<InventoryComponent>();
if (inventoryComponent != nullptr && isEnemy) { if (inventoryComponent != nullptr && isEnemy) {
inventoryComponent->TriggerPassiveAbility(PassiveAbilityTrigger::EnemySmashed, m_Parent); inventoryComponent->TriggerPassiveAbility(PassiveAbilityTrigger::EnemySmashed, m_OwningEntity);
} }
auto* missions = owner->GetComponent<MissionComponent>(); auto* missions = owner->GetComponent<MissionComponent>();
@ -729,28 +729,28 @@ void DestroyableComponent::Smash(const LWOOBJID source, const eKillType killType
if (memberMissions == nullptr) continue; if (memberMissions == nullptr) continue;
memberMissions->Progress(eMissionTaskType::SMASH, m_Parent->GetLOT()); memberMissions->Progress(eMissionTaskType::SMASH, m_OwningEntity->GetLOT());
memberMissions->Progress(eMissionTaskType::USE_SKILL, m_Parent->GetLOT(), skillID); memberMissions->Progress(eMissionTaskType::USE_SKILL, m_OwningEntity->GetLOT(), skillID);
} }
} else { } else {
missions->Progress(eMissionTaskType::SMASH, m_Parent->GetLOT()); missions->Progress(eMissionTaskType::SMASH, m_OwningEntity->GetLOT());
missions->Progress(eMissionTaskType::USE_SKILL, m_Parent->GetLOT(), skillID); missions->Progress(eMissionTaskType::USE_SKILL, m_OwningEntity->GetLOT(), skillID);
} }
} }
} }
const auto isPlayer = m_Parent->IsPlayer(); const auto isPlayer = m_OwningEntity->IsPlayer();
GameMessages::SendDie(m_Parent, source, source, true, killType, deathType, 0, 0, 0, isPlayer, false, 1); GameMessages::SendDie(m_OwningEntity, source, source, true, killType, deathType, 0, 0, 0, isPlayer, false, 1);
//NANI?! //NANI?!
if (!isPlayer) { if (!isPlayer) {
if (owner != nullptr) { if (owner != nullptr) {
auto* team = TeamManager::Instance()->GetTeam(owner->GetObjectID()); auto* team = TeamManager::Instance()->GetTeam(owner->GetObjectID());
if (team != nullptr && m_Parent->GetComponent<BaseCombatAIComponent>() != nullptr) { if (team != nullptr && m_OwningEntity->GetComponent<BaseCombatAIComponent>() != nullptr) {
LWOOBJID specificOwner = LWOOBJID_EMPTY; LWOOBJID specificOwner = LWOOBJID_EMPTY;
auto* scriptedActivityComponent = m_Parent->GetComponent<ScriptedActivityComponent>(); auto* scriptedActivityComponent = m_OwningEntity->GetComponent<ScriptedActivityComponent>();
uint32_t teamSize = team->members.size(); uint32_t teamSize = team->members.size();
uint32_t lootMatrixId = GetLootMatrixID(); uint32_t lootMatrixId = GetLootMatrixID();
@ -763,24 +763,24 @@ void DestroyableComponent::Smash(const LWOOBJID source, const eKillType killType
auto* member = EntityManager::Instance()->GetEntity(specificOwner); auto* member = EntityManager::Instance()->GetEntity(specificOwner);
if (member) LootGenerator::Instance().DropLoot(member, m_Parent, lootMatrixId, GetMinCoins(), GetMaxCoins()); if (member) LootGenerator::Instance().DropLoot(member, m_OwningEntity, lootMatrixId, GetMinCoins(), GetMaxCoins());
} else { } else {
for (const auto memberId : team->members) { // Free for all for (const auto memberId : team->members) { // Free for all
auto* member = EntityManager::Instance()->GetEntity(memberId); auto* member = EntityManager::Instance()->GetEntity(memberId);
if (member == nullptr) continue; if (member == nullptr) continue;
LootGenerator::Instance().DropLoot(member, m_Parent, lootMatrixId, GetMinCoins(), GetMaxCoins()); LootGenerator::Instance().DropLoot(member, m_OwningEntity, lootMatrixId, GetMinCoins(), GetMaxCoins());
} }
} }
} else { // drop loot for non team user } else { // drop loot for non team user
LootGenerator::Instance().DropLoot(owner, m_Parent, GetLootMatrixID(), GetMinCoins(), GetMaxCoins()); LootGenerator::Instance().DropLoot(owner, m_OwningEntity, GetLootMatrixID(), GetMinCoins(), GetMaxCoins());
} }
} }
} else { } else {
//Check if this zone allows coin drops //Check if this zone allows coin drops
if (dZoneManager::Instance()->GetPlayerLoseCoinOnDeath()) { if (dZoneManager::Instance()->GetPlayerLoseCoinOnDeath()) {
auto* character = m_Parent->GetCharacter(); auto* character = m_OwningEntity->GetCharacter();
uint64_t coinsTotal = character->GetCoins(); uint64_t coinsTotal = character->GetCoins();
const uint64_t minCoinsToLose = dZoneManager::Instance()->GetWorldConfig()->coinsLostOnDeathMin; const uint64_t minCoinsToLose = dZoneManager::Instance()->GetWorldConfig()->coinsLostOnDeathMin;
if (coinsTotal >= minCoinsToLose) { if (coinsTotal >= minCoinsToLose) {
@ -792,27 +792,27 @@ void DestroyableComponent::Smash(const LWOOBJID source, const eKillType killType
coinsTotal -= coinsToLose; coinsTotal -= coinsToLose;
LootGenerator::Instance().DropLoot(m_Parent, m_Parent, -1, coinsToLose, coinsToLose); LootGenerator::Instance().DropLoot(m_OwningEntity, m_OwningEntity, -1, coinsToLose, coinsToLose);
character->SetCoins(coinsTotal, eLootSourceType::PICKUP); character->SetCoins(coinsTotal, eLootSourceType::PICKUP);
} }
} }
Entity* zoneControl = EntityManager::Instance()->GetZoneControlEntity(); Entity* zoneControl = EntityManager::Instance()->GetZoneControlEntity();
for (CppScripts::Script* script : CppScripts::GetEntityScripts(zoneControl)) { for (CppScripts::Script* script : CppScripts::GetEntityScripts(zoneControl)) {
script->OnPlayerDied(zoneControl, m_Parent); script->OnPlayerDied(zoneControl, m_OwningEntity);
} }
std::vector<Entity*> scriptedActs = EntityManager::Instance()->GetEntitiesByComponent(eReplicaComponentType::SCRIPTED_ACTIVITY); std::vector<Entity*> scriptedActs = EntityManager::Instance()->GetEntitiesByComponent(eReplicaComponentType::SCRIPTED_ACTIVITY);
for (Entity* scriptEntity : scriptedActs) { for (Entity* scriptEntity : scriptedActs) {
if (scriptEntity->GetObjectID() != zoneControl->GetObjectID()) { // Don't want to trigger twice on instance worlds if (scriptEntity->GetObjectID() != zoneControl->GetObjectID()) { // Don't want to trigger twice on instance worlds
for (CppScripts::Script* script : CppScripts::GetEntityScripts(scriptEntity)) { for (CppScripts::Script* script : CppScripts::GetEntityScripts(scriptEntity)) {
script->OnPlayerDied(scriptEntity, m_Parent); script->OnPlayerDied(scriptEntity, m_OwningEntity);
} }
} }
} }
} }
m_Parent->Kill(owner); m_OwningEntity->Kill(owner);
} }
void DestroyableComponent::SetFaction(int32_t factionID, bool ignoreChecks) { void DestroyableComponent::SetFaction(int32_t factionID, bool ignoreChecks) {
@ -858,7 +858,7 @@ void DestroyableComponent::SetStatusImmunity(
} }
GameMessages::SendSetStatusImmunity( GameMessages::SendSetStatusImmunity(
m_Parent->GetObjectID(), state, m_Parent->GetSystemAddress(), m_OwningEntity->GetObjectID(), state, m_OwningEntity->GetSystemAddress(),
bImmuneToBasicAttack, bImmuneToBasicAttack,
bImmuneToDamageOverTime, bImmuneToDamageOverTime,
bImmuneToKnockback, bImmuneToKnockback,
@ -872,7 +872,7 @@ void DestroyableComponent::SetStatusImmunity(
} }
void DestroyableComponent::FixStats() { void DestroyableComponent::FixStats() {
auto* entity = GetParent(); auto* entity = GetOwningEntity();
if (entity == nullptr) return; if (entity == nullptr) return;
@ -974,19 +974,19 @@ void DestroyableComponent::AddOnHitCallback(const std::function<void(Entity*)>&
void DestroyableComponent::DoHardcoreModeDrops(const LWOOBJID source){ void DestroyableComponent::DoHardcoreModeDrops(const LWOOBJID source){
//check if this is a player: //check if this is a player:
if (m_Parent->IsPlayer()) { if (m_OwningEntity->IsPlayer()) {
//remove hardcore_lose_uscore_on_death_percent from the player's uscore: //remove hardcore_lose_uscore_on_death_percent from the player's uscore:
auto* character = m_Parent->GetComponent<CharacterComponent>(); auto* character = m_OwningEntity->GetComponent<CharacterComponent>();
auto uscore = character->GetUScore(); auto uscore = character->GetUScore();
auto uscoreToLose = uscore * (EntityManager::Instance()->GetHardcoreLoseUscoreOnDeathPercent() / 100); auto uscoreToLose = uscore * (EntityManager::Instance()->GetHardcoreLoseUscoreOnDeathPercent() / 100);
character->SetUScore(uscore - uscoreToLose); character->SetUScore(uscore - uscoreToLose);
GameMessages::SendModifyLEGOScore(m_Parent, m_Parent->GetSystemAddress(), -uscoreToLose, eLootSourceType::MISSION); GameMessages::SendModifyLEGOScore(m_OwningEntity, m_OwningEntity->GetSystemAddress(), -uscoreToLose, eLootSourceType::MISSION);
if (EntityManager::Instance()->GetHardcoreDropinventoryOnDeath()) { if (EntityManager::Instance()->GetHardcoreDropinventoryOnDeath()) {
//drop all items from inventory: //drop all items from inventory:
auto* inventory = m_Parent->GetComponent<InventoryComponent>(); auto* inventory = m_OwningEntity->GetComponent<InventoryComponent>();
if (inventory) { if (inventory) {
//get the items inventory: //get the items inventory:
auto items = inventory->GetInventory(eInventoryType::ITEMS); auto items = inventory->GetInventory(eInventoryType::ITEMS);
@ -998,17 +998,17 @@ void DestroyableComponent::DoHardcoreModeDrops(const LWOOBJID source){
if (!item.second) continue; if (!item.second) continue;
// don't drop the thinkng cap // don't drop the thinkng cap
if (item.second->GetLot() == 6086) continue; if (item.second->GetLot() == 6086) continue;
GameMessages::SendDropClientLoot(m_Parent, source, item.second->GetLot(), 0, m_Parent->GetPosition(), item.second->GetCount()); GameMessages::SendDropClientLoot(m_OwningEntity, source, item.second->GetLot(), 0, m_OwningEntity->GetPosition(), item.second->GetCount());
item.second->SetCount(0, false, false); item.second->SetCount(0, false, false);
} }
EntityManager::Instance()->SerializeEntity(m_Parent); EntityManager::Instance()->SerializeEntity(m_OwningEntity);
} }
} }
} }
} }
//get character: //get character:
auto* chars = m_Parent->GetCharacter(); auto* chars = m_OwningEntity->GetCharacter();
if (chars) { if (chars) {
auto coins = chars->GetCoins(); auto coins = chars->GetCoins();
@ -1016,13 +1016,13 @@ void DestroyableComponent::DoHardcoreModeDrops(const LWOOBJID source){
chars->SetCoins(0, eLootSourceType::NONE); chars->SetCoins(0, eLootSourceType::NONE);
//drop all coins: //drop all coins:
GameMessages::SendDropClientLoot(m_Parent, source, LOT_NULL, coins, m_Parent->GetPosition()); GameMessages::SendDropClientLoot(m_OwningEntity, source, LOT_NULL, coins, m_OwningEntity->GetPosition());
} }
// Reload the player since we can't normally reduce uscore from the server and we want the UI to update // Reload the player since we can't normally reduce uscore from the server and we want the UI to update
// do this last so we don't get killed.... again // do this last so we don't get killed.... again
EntityManager::Instance()->DestructEntity(m_Parent); EntityManager::Instance()->DestructEntity(m_OwningEntity);
EntityManager::Instance()->ConstructEntity(m_Parent); EntityManager::Instance()->ConstructEntity(m_OwningEntity);
return; return;
} }
@ -1039,7 +1039,7 @@ void DestroyableComponent::DoHardcoreModeDrops(const LWOOBJID source){
playerStats->SetUScore(playerStats->GetUScore() + uscore); playerStats->SetUScore(playerStats->GetUScore() + uscore);
GameMessages::SendModifyLEGOScore(player, player->GetSystemAddress(), uscore, eLootSourceType::MISSION); GameMessages::SendModifyLEGOScore(player, player->GetSystemAddress(), uscore, eLootSourceType::MISSION);
EntityManager::Instance()->SerializeEntity(m_Parent); EntityManager::Instance()->SerializeEntity(m_OwningEntity);
} }
} }
} }

View File

@ -189,7 +189,7 @@ void InventoryComponent::AddItem(
inventoryType = Inventory::FindInventoryTypeForLot(lot); inventoryType = Inventory::FindInventoryTypeForLot(lot);
} }
auto* missions = static_cast<MissionComponent*>(this->m_Parent->GetComponent(eReplicaComponentType::MISSION)); auto* missions = static_cast<MissionComponent*>(this->m_OwningEntity->GetComponent(eReplicaComponentType::MISSION));
auto* inventory = GetInventory(inventoryType); auto* inventory = GetInventory(inventoryType);
@ -261,7 +261,7 @@ void InventoryComponent::AddItem(
} }
if (slot == -1) { if (slot == -1) {
auto* player = dynamic_cast<Player*>(GetParent()); auto* player = dynamic_cast<Player*>(GetOwningEntity());
if (player == nullptr) { if (player == nullptr) {
return; return;
@ -276,7 +276,7 @@ void InventoryComponent::AddItem(
case 1: case 1:
for (size_t i = 0; i < size; i++) { for (size_t i = 0; i < size; i++) {
GameMessages::SendDropClientLoot(this->m_Parent, this->m_Parent->GetObjectID(), lot, 0, this->m_Parent->GetPosition(), 1); GameMessages::SendDropClientLoot(this->m_OwningEntity, this->m_OwningEntity->GetObjectID(), lot, 0, this->m_OwningEntity->GetPosition(), 1);
} }
break; break;
@ -378,7 +378,7 @@ void InventoryComponent::MoveItemToInventory(Item* item, const eInventoryType in
item->SetCount(item->GetCount() - delta, false, false); item->SetCount(item->GetCount() - delta, false, false);
} }
auto* missionComponent = m_Parent->GetComponent<MissionComponent>(); auto* missionComponent = m_OwningEntity->GetComponent<MissionComponent>();
if (missionComponent != nullptr) { if (missionComponent != nullptr) {
if (IsTransferInventory(inventory)) { if (IsTransferInventory(inventory)) {
@ -479,7 +479,7 @@ bool InventoryComponent::HasSpaceForLoot(const std::unordered_map<LOT, int32_t>&
} }
if (slotsNeeded > 0) { if (slotsNeeded > 0) {
GameMessages::SendNotifyNotEnoughInvSpace(m_Parent->GetObjectID(), slotsNeeded, ITEMS, m_Parent->GetSystemAddress()); GameMessages::SendNotifyNotEnoughInvSpace(m_OwningEntity->GetObjectID(), slotsNeeded, ITEMS, m_OwningEntity->GetSystemAddress());
return false; return false;
} }
@ -687,7 +687,7 @@ void InventoryComponent::UpdateXml(tinyxml2::XMLDocument* document) {
itemElement->SetAttribute("sk", item->GetSubKey()); itemElement->SetAttribute("sk", item->GetSubKey());
// Begin custom xml // Begin custom xml
itemElement->SetAttribute("parent", item->GetParent()); itemElement->SetAttribute("parent", item->GetOwningEntity());
// End custom xml // End custom xml
for (auto* data : item->GetConfig()) { for (auto* data : item->GetConfig()) {
@ -821,23 +821,23 @@ void InventoryComponent::EquipItem(Item* item, const bool skipChecks) {
return; return;
} }
auto* character = m_Parent->GetCharacter(); auto* character = m_OwningEntity->GetCharacter();
if (character != nullptr && !skipChecks) { if (character != nullptr && !skipChecks) {
// Hacky proximity rocket // Hacky proximity rocket
if (item->GetLot() == 6416) { if (item->GetLot() == 6416) {
const auto rocketLauchPads = EntityManager::Instance()->GetEntitiesByComponent(eReplicaComponentType::ROCKET_LAUNCH); const auto rocketLauchPads = EntityManager::Instance()->GetEntitiesByComponent(eReplicaComponentType::ROCKET_LAUNCH);
const auto position = m_Parent->GetPosition(); const auto position = m_OwningEntity->GetPosition();
for (auto* lauchPad : rocketLauchPads) { for (auto* lauchPad : rocketLauchPads) {
if (Vector3::DistanceSquared(lauchPad->GetPosition(), position) > 13 * 13) continue; if (Vector3::DistanceSquared(lauchPad->GetPosition(), position) > 13 * 13) continue;
auto* characterComponent = m_Parent->GetComponent<CharacterComponent>(); auto* characterComponent = m_OwningEntity->GetComponent<CharacterComponent>();
if (characterComponent != nullptr) characterComponent->SetLastRocketItemID(item->GetId()); if (characterComponent != nullptr) characterComponent->SetLastRocketItemID(item->GetId());
lauchPad->OnUse(m_Parent); lauchPad->OnUse(m_OwningEntity);
break; break;
} }
@ -853,7 +853,7 @@ void InventoryComponent::EquipItem(Item* item, const bool skipChecks) {
if (!building && (item->GetLot() == 6086 || type == eItemType::LOOT_MODEL || type == eItemType::VEHICLE)) return; if (!building && (item->GetLot() == 6086 || type == eItemType::LOOT_MODEL || type == eItemType::VEHICLE)) return;
if (type != eItemType::LOOT_MODEL && type != eItemType::MODEL) { if (type != eItemType::LOOT_MODEL && type != eItemType::MODEL) {
if (!item->GetBound() && !item->GetPreconditionExpression()->Check(m_Parent)) { if (!item->GetBound() && !item->GetPreconditionExpression()->Check(m_OwningEntity)) {
return; return;
} }
} }
@ -879,7 +879,7 @@ void InventoryComponent::EquipItem(Item* item, const bool skipChecks) {
EquipScripts(item); EquipScripts(item);
EntityManager::Instance()->SerializeEntity(m_Parent); EntityManager::Instance()->SerializeEntity(m_OwningEntity);
} }
void InventoryComponent::UnEquipItem(Item* item) { void InventoryComponent::UnEquipItem(Item* item) {
@ -909,12 +909,12 @@ void InventoryComponent::UnEquipItem(Item* item) {
UnequipScripts(item); UnequipScripts(item);
EntityManager::Instance()->SerializeEntity(m_Parent); EntityManager::Instance()->SerializeEntity(m_OwningEntity);
// Trigger property event // Trigger property event
if (PropertyManagementComponent::Instance() != nullptr && item->GetCount() > 0 && Inventory::FindInventoryTypeForLot(item->GetLot()) == MODELS) { if (PropertyManagementComponent::Instance() != nullptr && item->GetCount() > 0 && Inventory::FindInventoryTypeForLot(item->GetLot()) == MODELS) {
PropertyManagementComponent::Instance()->GetParent()->OnZonePropertyModelRemovedWhileEquipped(m_Parent); PropertyManagementComponent::Instance()->GetOwningEntity()->OnZonePropertyModelRemovedWhileEquipped(m_OwningEntity);
dZoneManager::Instance()->GetZoneControlObject()->OnZonePropertyModelRemovedWhileEquipped(m_Parent); dZoneManager::Instance()->GetZoneControlObject()->OnZonePropertyModelRemovedWhileEquipped(m_OwningEntity);
} }
} }
@ -926,11 +926,11 @@ void InventoryComponent::EquipScripts(Item* equippedItem) {
if (scriptComponentID > -1) { if (scriptComponentID > -1) {
CDScriptComponentTable* scriptCompTable = CDClientManager::Instance().GetTable<CDScriptComponentTable>(); CDScriptComponentTable* scriptCompTable = CDClientManager::Instance().GetTable<CDScriptComponentTable>();
CDScriptComponent scriptCompData = scriptCompTable->GetByID(scriptComponentID); CDScriptComponent scriptCompData = scriptCompTable->GetByID(scriptComponentID);
auto* itemScript = CppScripts::GetScript(m_Parent, scriptCompData.script_name); auto* itemScript = CppScripts::GetScript(m_OwningEntity, scriptCompData.script_name);
if (!itemScript) { if (!itemScript) {
Game::logger->Log("InventoryComponent", "null script?"); Game::logger->Log("InventoryComponent", "null script?");
} }
itemScript->OnFactionTriggerItemEquipped(m_Parent, equippedItem->GetId()); itemScript->OnFactionTriggerItemEquipped(m_OwningEntity, equippedItem->GetId());
} }
} }
@ -941,19 +941,19 @@ void InventoryComponent::UnequipScripts(Item* unequippedItem) {
if (scriptComponentID > -1) { if (scriptComponentID > -1) {
CDScriptComponentTable* scriptCompTable = CDClientManager::Instance().GetTable<CDScriptComponentTable>(); CDScriptComponentTable* scriptCompTable = CDClientManager::Instance().GetTable<CDScriptComponentTable>();
CDScriptComponent scriptCompData = scriptCompTable->GetByID(scriptComponentID); CDScriptComponent scriptCompData = scriptCompTable->GetByID(scriptComponentID);
auto* itemScript = CppScripts::GetScript(m_Parent, scriptCompData.script_name); auto* itemScript = CppScripts::GetScript(m_OwningEntity, scriptCompData.script_name);
if (!itemScript) { if (!itemScript) {
Game::logger->Log("InventoryComponent", "null script?"); Game::logger->Log("InventoryComponent", "null script?");
} }
itemScript->OnFactionTriggerItemUnequipped(m_Parent, unequippedItem->GetId()); itemScript->OnFactionTriggerItemUnequipped(m_OwningEntity, unequippedItem->GetId());
} }
} }
void InventoryComponent::HandlePossession(Item* item) { void InventoryComponent::HandlePossession(Item* item) {
auto* characterComponent = m_Parent->GetComponent<CharacterComponent>(); auto* characterComponent = m_OwningEntity->GetComponent<CharacterComponent>();
if (!characterComponent) return; if (!characterComponent) return;
auto* possessorComponent = m_Parent->GetComponent<PossessorComponent>(); auto* possessorComponent = m_OwningEntity->GetComponent<PossessorComponent>();
if (!possessorComponent) return; if (!possessorComponent) return;
// Don't do anything if we are busy dismounting // Don't do anything if we are busy dismounting
@ -968,22 +968,22 @@ void InventoryComponent::HandlePossession(Item* item) {
return; return;
} }
GameMessages::SendSetStunned(m_Parent->GetObjectID(), eStateChangeType::PUSH, m_Parent->GetSystemAddress(), LWOOBJID_EMPTY, true, false, true, false, false, false, false, true, true, true, true, true, true, true, true, true); GameMessages::SendSetStunned(m_OwningEntity->GetObjectID(), eStateChangeType::PUSH, m_OwningEntity->GetSystemAddress(), LWOOBJID_EMPTY, true, false, true, false, false, false, false, true, true, true, true, true, true, true, true, true);
// Set the mount Item ID so that we know what were handling // Set the mount Item ID so that we know what were handling
possessorComponent->SetMountItemID(item->GetId()); possessorComponent->SetMountItemID(item->GetId());
GameMessages::SendSetMountInventoryID(m_Parent, item->GetId(), UNASSIGNED_SYSTEM_ADDRESS); GameMessages::SendSetMountInventoryID(m_OwningEntity, item->GetId(), UNASSIGNED_SYSTEM_ADDRESS);
// Create entity to mount // Create entity to mount
auto startRotation = m_Parent->GetRotation(); auto startRotation = m_OwningEntity->GetRotation();
EntityInfo info{}; EntityInfo info{};
info.lot = item->GetLot(); info.lot = item->GetLot();
info.pos = m_Parent->GetPosition(); info.pos = m_OwningEntity->GetPosition();
info.rot = startRotation; info.rot = startRotation;
info.spawnerID = m_Parent->GetObjectID(); info.spawnerID = m_OwningEntity->GetObjectID();
auto* mount = EntityManager::Instance()->CreateEntity(info, nullptr, m_Parent); auto* mount = EntityManager::Instance()->CreateEntity(info, nullptr, m_OwningEntity);
// Check to see if the mount is a vehicle, if so, flip it // Check to see if the mount is a vehicle, if so, flip it
auto* vehicleComponent = mount->GetComponent<VehiclePhysicsComponent>(); auto* vehicleComponent = mount->GetComponent<VehiclePhysicsComponent>();
@ -1010,29 +1010,29 @@ void InventoryComponent::HandlePossession(Item* item) {
auto* possessableComponent = mount->GetComponent<PossessableComponent>(); auto* possessableComponent = mount->GetComponent<PossessableComponent>();
if (possessableComponent) { if (possessableComponent) {
possessableComponent->SetIsItemSpawned(true); possessableComponent->SetIsItemSpawned(true);
possessableComponent->SetPossessor(m_Parent->GetObjectID()); possessableComponent->SetPossessor(m_OwningEntity->GetObjectID());
// Possess it // Possess it
possessorComponent->SetPossessable(mount->GetObjectID()); possessorComponent->SetPossessable(mount->GetObjectID());
possessorComponent->SetPossessableType(possessableComponent->GetPossessionType()); possessorComponent->SetPossessableType(possessableComponent->GetPossessionType());
} }
GameMessages::SendSetJetPackMode(m_Parent, false); GameMessages::SendSetJetPackMode(m_OwningEntity, false);
// Make it go to the client // Make it go to the client
EntityManager::Instance()->ConstructEntity(mount); EntityManager::Instance()->ConstructEntity(mount);
// Update the possessor // Update the possessor
EntityManager::Instance()->SerializeEntity(m_Parent); EntityManager::Instance()->SerializeEntity(m_OwningEntity);
// have to unlock the input so it vehicle can be driven // have to unlock the input so it vehicle can be driven
if (vehicleComponent) GameMessages::SendVehicleUnlockInput(mount->GetObjectID(), false, m_Parent->GetSystemAddress()); if (vehicleComponent) GameMessages::SendVehicleUnlockInput(mount->GetObjectID(), false, m_OwningEntity->GetSystemAddress());
GameMessages::SendMarkInventoryItemAsActive(m_Parent->GetObjectID(), true, eUnequippableActiveType::MOUNT, item->GetId(), m_Parent->GetSystemAddress()); GameMessages::SendMarkInventoryItemAsActive(m_OwningEntity->GetObjectID(), true, eUnequippableActiveType::MOUNT, item->GetId(), m_OwningEntity->GetSystemAddress());
} }
void InventoryComponent::ApplyBuff(Item* item) const { void InventoryComponent::ApplyBuff(Item* item) const {
const auto buffs = FindBuffs(item, true); const auto buffs = FindBuffs(item, true);
for (const auto buff : buffs) { for (const auto buff : buffs) {
SkillComponent::HandleUnmanaged(buff, m_Parent->GetObjectID()); SkillComponent::HandleUnmanaged(buff, m_OwningEntity->GetObjectID());
} }
} }
@ -1041,7 +1041,7 @@ void InventoryComponent::RemoveBuff(Item* item) const {
const auto buffs = FindBuffs(item, false); const auto buffs = FindBuffs(item, false);
for (const auto buff : buffs) { for (const auto buff : buffs) {
SkillComponent::HandleUnCast(buff, m_Parent->GetObjectID()); SkillComponent::HandleUnCast(buff, m_OwningEntity->GetObjectID());
} }
} }
@ -1076,14 +1076,14 @@ void InventoryComponent::PopEquippedItems() {
m_Pushed.clear(); m_Pushed.clear();
auto destroyableComponent = m_Parent->GetComponent<DestroyableComponent>(); auto destroyableComponent = m_OwningEntity->GetComponent<DestroyableComponent>();
// Reset stats to full // Reset stats to full
if (destroyableComponent) { if (destroyableComponent) {
destroyableComponent->SetHealth(static_cast<int32_t>(destroyableComponent->GetMaxHealth())); destroyableComponent->SetHealth(static_cast<int32_t>(destroyableComponent->GetMaxHealth()));
destroyableComponent->SetArmor(static_cast<int32_t>(destroyableComponent->GetMaxArmor())); destroyableComponent->SetArmor(static_cast<int32_t>(destroyableComponent->GetMaxArmor()));
destroyableComponent->SetImagination(static_cast<int32_t>(destroyableComponent->GetMaxImagination())); destroyableComponent->SetImagination(static_cast<int32_t>(destroyableComponent->GetMaxImagination()));
EntityManager::Instance()->SerializeEntity(m_Parent); EntityManager::Instance()->SerializeEntity(m_OwningEntity);
} }
m_Dirty = true; m_Dirty = true;
@ -1169,10 +1169,10 @@ void InventoryComponent::AddItemSkills(const LOT lot) {
if (index != m_Skills.end()) { if (index != m_Skills.end()) {
const auto old = index->second; const auto old = index->second;
GameMessages::SendRemoveSkill(m_Parent, old); GameMessages::SendRemoveSkill(m_OwningEntity, old);
} }
GameMessages::SendAddSkill(m_Parent, skill, static_cast<int>(slot)); GameMessages::SendAddSkill(m_OwningEntity, skill, static_cast<int>(slot));
m_Skills.insert_or_assign(slot, skill); m_Skills.insert_or_assign(slot, skill);
} }
@ -1194,14 +1194,14 @@ void InventoryComponent::RemoveItemSkills(const LOT lot) {
const auto old = index->second; const auto old = index->second;
GameMessages::SendRemoveSkill(m_Parent, old); GameMessages::SendRemoveSkill(m_OwningEntity, old);
m_Skills.erase(slot); m_Skills.erase(slot);
if (slot == BehaviorSlot::Primary) { if (slot == BehaviorSlot::Primary) {
m_Skills.insert_or_assign(BehaviorSlot::Primary, 1); m_Skills.insert_or_assign(BehaviorSlot::Primary, 1);
GameMessages::SendAddSkill(m_Parent, 1, static_cast<int>(BehaviorSlot::Primary)); GameMessages::SendAddSkill(m_OwningEntity, 1, static_cast<int>(BehaviorSlot::Primary));
} }
} }
@ -1227,7 +1227,7 @@ bool InventoryComponent::HasAnyPassive(const std::vector<eItemSetPassiveAbilityI
} }
void InventoryComponent::DespawnPet() { void InventoryComponent::DespawnPet() {
auto* current = PetComponent::GetActivePet(m_Parent->GetObjectID()); auto* current = PetComponent::GetActivePet(m_OwningEntity->GetObjectID());
if (current != nullptr) { if (current != nullptr) {
current->Deactivate(); current->Deactivate();
@ -1235,7 +1235,7 @@ void InventoryComponent::DespawnPet() {
} }
void InventoryComponent::SpawnPet(Item* item) { void InventoryComponent::SpawnPet(Item* item) {
auto* current = PetComponent::GetActivePet(m_Parent->GetObjectID()); auto* current = PetComponent::GetActivePet(m_OwningEntity->GetObjectID());
if (current != nullptr) { if (current != nullptr) {
current->Deactivate(); current->Deactivate();
@ -1246,18 +1246,18 @@ void InventoryComponent::SpawnPet(Item* item) {
} }
// First check if we can summon the pet. You need 1 imagination to do so. // First check if we can summon the pet. You need 1 imagination to do so.
auto destroyableComponent = m_Parent->GetComponent<DestroyableComponent>(); auto destroyableComponent = m_OwningEntity->GetComponent<DestroyableComponent>();
if (Game::config->GetValue("pets_take_imagination") == "1" && destroyableComponent && destroyableComponent->GetImagination() <= 0) { if (Game::config->GetValue("pets_take_imagination") == "1" && destroyableComponent && destroyableComponent->GetImagination() <= 0) {
GameMessages::SendUseItemRequirementsResponse(m_Parent->GetObjectID(), m_Parent->GetSystemAddress(), eUseItemResponse::NoImaginationForPet); GameMessages::SendUseItemRequirementsResponse(m_OwningEntity->GetObjectID(), m_OwningEntity->GetSystemAddress(), eUseItemResponse::NoImaginationForPet);
return; return;
} }
EntityInfo info{}; EntityInfo info{};
info.lot = item->GetLot(); info.lot = item->GetLot();
info.pos = m_Parent->GetPosition(); info.pos = m_OwningEntity->GetPosition();
info.rot = NiQuaternion::IDENTITY; info.rot = NiQuaternion::IDENTITY;
info.spawnerID = m_Parent->GetObjectID(); info.spawnerID = m_OwningEntity->GetObjectID();
auto* pet = EntityManager::Instance()->CreateEntity(info); auto* pet = EntityManager::Instance()->CreateEntity(info);
@ -1339,7 +1339,7 @@ std::vector<uint32_t> InventoryComponent::FindBuffs(Item* item, bool castOnEquip
return entry.objectTemplate == static_cast<unsigned int>(item->GetLot()); return entry.objectTemplate == static_cast<unsigned int>(item->GetLot());
}); });
auto* missions = static_cast<MissionComponent*>(m_Parent->GetComponent(eReplicaComponentType::MISSION)); auto* missions = static_cast<MissionComponent*>(m_OwningEntity->GetComponent(eReplicaComponentType::MISSION));
for (const auto& result : results) { for (const auto& result : results) {
if (result.castOnType == 1) { if (result.castOnType == 1) {
@ -1356,7 +1356,7 @@ std::vector<uint32_t> InventoryComponent::FindBuffs(Item* item, bool castOnEquip
} }
// If item is not a proxy, add its buff to the added buffs. // If item is not a proxy, add its buff to the added buffs.
if (item->GetParent() == LWOOBJID_EMPTY) buffs.push_back(static_cast<uint32_t>(entry.behaviorID)); if (item->GetOwningEntity() == LWOOBJID_EMPTY) buffs.push_back(static_cast<uint32_t>(entry.behaviorID));
} }
} }
@ -1376,7 +1376,7 @@ void InventoryComponent::SetNPCItems(const std::vector<LOT>& items) {
UpdateSlot(info.equipLocation, { id, static_cast<LOT>(item), 1, slot++ }, true); UpdateSlot(info.equipLocation, { id, static_cast<LOT>(item), 1, slot++ }, true);
} }
EntityManager::Instance()->SerializeEntity(m_Parent); EntityManager::Instance()->SerializeEntity(m_OwningEntity);
} }
InventoryComponent::~InventoryComponent() { InventoryComponent::~InventoryComponent() {
@ -1442,7 +1442,7 @@ std::vector<Item*> InventoryComponent::FindProxies(const LWOOBJID parent) {
for (const auto& pair : inventory->GetItems()) { for (const auto& pair : inventory->GetItems()) {
auto* item = pair.second; auto* item = pair.second;
if (item->GetParent() == parent) { if (item->GetOwningEntity() == parent) {
proxies.push_back(item); proxies.push_back(item);
} }
} }
@ -1479,7 +1479,7 @@ bool InventoryComponent::IsParentValid(Item* root) {
for (const auto& candidate : items) { for (const auto& candidate : items) {
auto* item = candidate.second; auto* item = candidate.second;
if (item->GetParent() == id) { if (item->GetOwningEntity() == id) {
return true; return true;
} }
} }
@ -1497,7 +1497,7 @@ void InventoryComponent::CheckProxyIntegrity() {
for (const auto& candidate : items) { for (const auto& candidate : items) {
auto* item = candidate.second; auto* item = candidate.second;
const auto parent = item->GetParent(); const auto parent = item->GetOwningEntity();
if (parent == LWOOBJID_EMPTY) { if (parent == LWOOBJID_EMPTY) {
continue; continue;
@ -1526,7 +1526,7 @@ void InventoryComponent::CheckProxyIntegrity() {
{ {
auto* item = candidate.second; auto* item = candidate.second;
const auto parent = item->GetParent(); const auto parent = item->GetOwningEntity();
if (parent != LWOOBJID_EMPTY) if (parent != LWOOBJID_EMPTY)
{ {
@ -1555,7 +1555,7 @@ void InventoryComponent::CheckProxyIntegrity() {
} }
void InventoryComponent::PurgeProxies(Item* item) { void InventoryComponent::PurgeProxies(Item* item) {
const auto root = item->GetParent(); const auto root = item->GetOwningEntity();
if (root != LWOOBJID_EMPTY) { if (root != LWOOBJID_EMPTY) {
item = FindItemById(root); item = FindItemById(root);

View File

@ -35,7 +35,7 @@ void LUPExhibitComponent::NextExhibit() {
m_Exhibit = m_Exhibits[m_ExhibitIndex]; m_Exhibit = m_Exhibits[m_ExhibitIndex];
EntityManager::Instance()->SerializeEntity(m_Parent); EntityManager::Instance()->SerializeEntity(m_OwningEntity);
} }
void LUPExhibitComponent::Serialize(RakNet::BitStream* outBitStream, bool bIsInitialUpdate, uint32_t& flags) { void LUPExhibitComponent::Serialize(RakNet::BitStream* outBitStream, bool bIsInitialUpdate, uint32_t& flags) {

View File

@ -7,7 +7,7 @@
#include "CDRewardsTable.h" #include "CDRewardsTable.h"
LevelProgressionComponent::LevelProgressionComponent(Entity* parent) : Component(parent) { LevelProgressionComponent::LevelProgressionComponent(Entity* parent) : Component(parent) {
m_Parent = parent; m_OwningEntity = parent;
m_Level = 1; m_Level = 1;
m_SpeedBase = 500.0f; m_SpeedBase = 500.0f;
m_CharacterVersion = eCharacterVersion::LIVE; m_CharacterVersion = eCharacterVersion::LIVE;
@ -49,12 +49,12 @@ void LevelProgressionComponent::HandleLevelUp() {
const auto& rewards = rewardsTable->GetByLevelID(m_Level); const auto& rewards = rewardsTable->GetByLevelID(m_Level);
bool rewardingItem = rewards.size() > 0; bool rewardingItem = rewards.size() > 0;
auto* inventoryComponent = m_Parent->GetComponent<InventoryComponent>(); auto* inventoryComponent = m_OwningEntity->GetComponent<InventoryComponent>();
auto* controllablePhysicsComponent = m_Parent->GetComponent<ControllablePhysicsComponent>(); auto* controllablePhysicsComponent = m_OwningEntity->GetComponent<ControllablePhysicsComponent>();
if (!inventoryComponent || !controllablePhysicsComponent) return; if (!inventoryComponent || !controllablePhysicsComponent) return;
// Tell the client we beginning to send level rewards. // Tell the client we beginning to send level rewards.
if (rewardingItem) GameMessages::NotifyLevelRewards(m_Parent->GetObjectID(), m_Parent->GetSystemAddress(), m_Level, rewardingItem); if (rewardingItem) GameMessages::NotifyLevelRewards(m_OwningEntity->GetObjectID(), m_OwningEntity->GetSystemAddress(), m_Level, rewardingItem);
for (auto* reward : rewards) { for (auto* reward : rewards) {
switch (reward->rewardType) { switch (reward->rewardType) {
@ -79,11 +79,11 @@ void LevelProgressionComponent::HandleLevelUp() {
} }
} }
// Tell the client we have finished sending level rewards. // Tell the client we have finished sending level rewards.
if (rewardingItem) GameMessages::NotifyLevelRewards(m_Parent->GetObjectID(), m_Parent->GetSystemAddress(), m_Level, !rewardingItem); if (rewardingItem) GameMessages::NotifyLevelRewards(m_OwningEntity->GetObjectID(), m_OwningEntity->GetSystemAddress(), m_Level, !rewardingItem);
} }
void LevelProgressionComponent::SetRetroactiveBaseSpeed(){ void LevelProgressionComponent::SetRetroactiveBaseSpeed(){
if (m_Level >= 20) m_SpeedBase = 525.0f; if (m_Level >= 20) m_SpeedBase = 525.0f;
auto* controllablePhysicsComponent = m_Parent->GetComponent<ControllablePhysicsComponent>(); auto* controllablePhysicsComponent = m_OwningEntity->GetComponent<ControllablePhysicsComponent>();
if (controllablePhysicsComponent) controllablePhysicsComponent->SetSpeedMultiplier(m_SpeedBase / 500.0f); if (controllablePhysicsComponent) controllablePhysicsComponent->SetSpeedMultiplier(m_SpeedBase / 500.0f);
} }

View File

@ -103,9 +103,9 @@ void MissionComponent::AcceptMission(const uint32_t missionId, const bool skipCh
if (missionId == 1728) { if (missionId == 1728) {
//Needs to send a mail //Needs to send a mail
auto address = m_Parent->GetSystemAddress(); auto address = m_OwningEntity->GetSystemAddress();
Mail::HandleNotificationRequest(address, m_Parent->GetObjectID()); Mail::HandleNotificationRequest(address, m_OwningEntity->GetObjectID());
} }
} }

View File

@ -109,14 +109,14 @@ void MissionOfferComponent::OfferMissions(Entity* entity, const uint32_t specifi
if (mission != nullptr) { if (mission != nullptr) {
if (specifiedMissionId <= 0) { if (specifiedMissionId <= 0) {
// Handles the odd case where the offer object should not display the mission again // Handles the odd case where the offer object should not display the mission again
if (!mission->IsComplete() && mission->GetClientInfo().offer_objectID == m_Parent->GetLOT() && mission->GetClientInfo().target_objectID != m_Parent->GetLOT() && mission->IsFetchMission()) { if (!mission->IsComplete() && mission->GetClientInfo().offer_objectID == m_OwningEntity->GetLOT() && mission->GetClientInfo().target_objectID != m_OwningEntity->GetLOT() && mission->IsFetchMission()) {
continue; continue;
} }
} }
// We have the mission, if it is not complete, offer it // We have the mission, if it is not complete, offer it
if (mission->IsActive() || mission->IsReadyToComplete()) { if (mission->IsActive() || mission->IsReadyToComplete()) {
GameMessages::SendOfferMission(entity->GetObjectID(), entity->GetSystemAddress(), missionId, m_Parent->GetObjectID()); GameMessages::SendOfferMission(entity->GetObjectID(), entity->GetSystemAddress(), missionId, m_OwningEntity->GetObjectID());
offered.push_back(missionId); offered.push_back(missionId);
@ -162,7 +162,7 @@ void MissionOfferComponent::OfferMissions(Entity* entity, const uint32_t specifi
const auto& iter = std::find(randomMissionPool.begin(), randomMissionPool.end(), specifiedMissionId); const auto& iter = std::find(randomMissionPool.begin(), randomMissionPool.end(), specifiedMissionId);
if (iter != randomMissionPool.end() && MissionPrerequisites::CanAccept(specifiedMissionId, missionComponent->GetMissions())) { if (iter != randomMissionPool.end() && MissionPrerequisites::CanAccept(specifiedMissionId, missionComponent->GetMissions())) {
GameMessages::SendOfferMission(entity->GetObjectID(), entity->GetSystemAddress(), specifiedMissionId, m_Parent->GetObjectID()); GameMessages::SendOfferMission(entity->GetObjectID(), entity->GetSystemAddress(), specifiedMissionId, m_OwningEntity->GetObjectID());
return; return;
} }
@ -184,7 +184,7 @@ void MissionOfferComponent::OfferMissions(Entity* entity, const uint32_t specifi
continue; continue;
} }
GameMessages::SendOfferMission(entity->GetObjectID(), entity->GetSystemAddress(), sample, m_Parent->GetObjectID()); GameMessages::SendOfferMission(entity->GetObjectID(), entity->GetSystemAddress(), sample, m_OwningEntity->GetObjectID());
canAcceptPool.clear(); canAcceptPool.clear();
@ -202,9 +202,9 @@ void MissionOfferComponent::OfferMissions(Entity* entity, const uint32_t specifi
const auto selected = canAcceptPool[GeneralUtils::GenerateRandomNumber<int>(0, canAcceptPool.size() - 1)]; const auto selected = canAcceptPool[GeneralUtils::GenerateRandomNumber<int>(0, canAcceptPool.size() - 1)];
GameMessages::SendOfferMission(entity->GetObjectID(), entity->GetSystemAddress(), selected, m_Parent->GetObjectID()); GameMessages::SendOfferMission(entity->GetObjectID(), entity->GetSystemAddress(), selected, m_OwningEntity->GetObjectID());
} else if (std::find(offered.begin(), offered.end(), missionId) == offered.end() && offeredMission->GetOfferMission()) { } else if (std::find(offered.begin(), offered.end(), missionId) == offered.end() && offeredMission->GetOfferMission()) {
GameMessages::SendOfferMission(entity->GetObjectID(), entity->GetSystemAddress(), missionId, m_Parent->GetObjectID()); GameMessages::SendOfferMission(entity->GetObjectID(), entity->GetSystemAddress(), missionId, m_OwningEntity->GetObjectID());
} }
} }
} }

View File

@ -2,17 +2,17 @@
#include "Entity.h" #include "Entity.h"
ModelComponent::ModelComponent(Entity* parent) : Component(parent) { ModelComponent::ModelComponent(Entity* parent) : Component(parent) {
m_OriginalPosition = m_Parent->GetDefaultPosition(); m_OriginalPosition = m_OwningEntity->GetDefaultPosition();
m_OriginalRotation = m_Parent->GetDefaultRotation(); m_OriginalRotation = m_OwningEntity->GetDefaultRotation();
m_userModelID = m_Parent->GetVarAs<LWOOBJID>(u"userModelID"); m_userModelID = m_OwningEntity->GetVarAs<LWOOBJID>(u"userModelID");
} }
void ModelComponent::Serialize(RakNet::BitStream* outBitStream, bool bIsInitialUpdate, unsigned int& flags) { void ModelComponent::Serialize(RakNet::BitStream* outBitStream, bool bIsInitialUpdate, unsigned int& flags) {
// ItemComponent Serialization. Pets do not get this serialization. // ItemComponent Serialization. Pets do not get this serialization.
if (!m_Parent->HasComponent(eReplicaComponentType::PET)) { if (!m_OwningEntity->HasComponent(eReplicaComponentType::PET)) {
outBitStream->Write1(); outBitStream->Write1();
outBitStream->Write<LWOOBJID>(m_userModelID != LWOOBJID_EMPTY ? m_userModelID : m_Parent->GetObjectID()); outBitStream->Write<LWOOBJID>(m_userModelID != LWOOBJID_EMPTY ? m_userModelID : m_OwningEntity->GetObjectID());
outBitStream->Write<int>(0); outBitStream->Write<int>(0);
outBitStream->Write0(); outBitStream->Write0();
} }

View File

@ -22,14 +22,14 @@ MovementAIComponent::MovementAIComponent(Entity* parent, MovementAIInfo info) :
m_BaseCombatAI = nullptr; m_BaseCombatAI = nullptr;
m_BaseCombatAI = reinterpret_cast<BaseCombatAIComponent*>(m_Parent->GetComponent(eReplicaComponentType::BASE_COMBAT_AI)); m_BaseCombatAI = reinterpret_cast<BaseCombatAIComponent*>(m_OwningEntity->GetComponent(eReplicaComponentType::BASE_COMBAT_AI));
//Try and fix the insane values: //Try and fix the insane values:
if (m_Info.wanderRadius > 5.0f) m_Info.wanderRadius = m_Info.wanderRadius * 0.5f; if (m_Info.wanderRadius > 5.0f) m_Info.wanderRadius = m_Info.wanderRadius * 0.5f;
if (m_Info.wanderRadius > 8.0f) m_Info.wanderRadius = 8.0f; if (m_Info.wanderRadius > 8.0f) m_Info.wanderRadius = 8.0f;
if (m_Info.wanderSpeed > 0.5f) m_Info.wanderSpeed = m_Info.wanderSpeed * 0.5f; if (m_Info.wanderSpeed > 0.5f) m_Info.wanderSpeed = m_Info.wanderSpeed * 0.5f;
m_BaseSpeed = GetBaseSpeed(m_Parent->GetLOT()); m_BaseSpeed = GetBaseSpeed(m_OwningEntity->GetLOT());
m_NextWaypoint = GetCurrentPosition(); m_NextWaypoint = GetCurrentPosition();
m_Acceleration = 0.4f; m_Acceleration = 0.4f;
@ -149,7 +149,7 @@ nextAction:
SetVelocity(velocity); SetVelocity(velocity);
EntityManager::Instance()->SerializeEntity(m_Parent); EntityManager::Instance()->SerializeEntity(m_OwningEntity);
} }
const MovementAIInfo& MovementAIComponent::GetInfo() const { const MovementAIInfo& MovementAIComponent::GetInfo() const {
@ -179,7 +179,7 @@ NiPoint3 MovementAIComponent::GetNextWaypoint() const {
} }
NiPoint3 MovementAIComponent::GetCurrentPosition() const { NiPoint3 MovementAIComponent::GetCurrentPosition() const {
return m_Parent->GetPosition(); return m_OwningEntity->GetPosition();
} }
NiPoint3 MovementAIComponent::ApproximateLocation() const { NiPoint3 MovementAIComponent::ApproximateLocation() const {
@ -221,7 +221,7 @@ bool MovementAIComponent::Warp(const NiPoint3& point) {
SetPosition(destination); SetPosition(destination);
EntityManager::Instance()->SerializeEntity(m_Parent); EntityManager::Instance()->SerializeEntity(m_OwningEntity);
return true; return true;
} }
@ -253,7 +253,7 @@ void MovementAIComponent::Stop() {
m_CurrentSpeed = 0; m_CurrentSpeed = 0;
EntityManager::Instance()->SerializeEntity(m_Parent); EntityManager::Instance()->SerializeEntity(m_OwningEntity);
} }
void MovementAIComponent::PullToPoint(const NiPoint3& point) { void MovementAIComponent::PullToPoint(const NiPoint3& point) {
@ -322,7 +322,7 @@ foundComponent:
} }
void MovementAIComponent::SetPosition(const NiPoint3& value) { void MovementAIComponent::SetPosition(const NiPoint3& value) {
auto* controllablePhysicsComponent = m_Parent->GetComponent<ControllablePhysicsComponent>(); auto* controllablePhysicsComponent = m_OwningEntity->GetComponent<ControllablePhysicsComponent>();
if (controllablePhysicsComponent != nullptr) { if (controllablePhysicsComponent != nullptr) {
controllablePhysicsComponent->SetPosition(value); controllablePhysicsComponent->SetPosition(value);
@ -330,7 +330,7 @@ void MovementAIComponent::SetPosition(const NiPoint3& value) {
return; return;
} }
auto* simplePhysicsComponent = m_Parent->GetComponent<SimplePhysicsComponent>(); auto* simplePhysicsComponent = m_OwningEntity->GetComponent<SimplePhysicsComponent>();
if (simplePhysicsComponent != nullptr) { if (simplePhysicsComponent != nullptr) {
simplePhysicsComponent->SetPosition(value); simplePhysicsComponent->SetPosition(value);
@ -342,7 +342,7 @@ void MovementAIComponent::SetRotation(const NiQuaternion& value) {
return; return;
} }
auto* controllablePhysicsComponent = m_Parent->GetComponent<ControllablePhysicsComponent>(); auto* controllablePhysicsComponent = m_OwningEntity->GetComponent<ControllablePhysicsComponent>();
if (controllablePhysicsComponent != nullptr) { if (controllablePhysicsComponent != nullptr) {
controllablePhysicsComponent->SetRotation(value); controllablePhysicsComponent->SetRotation(value);
@ -350,7 +350,7 @@ void MovementAIComponent::SetRotation(const NiQuaternion& value) {
return; return;
} }
auto* simplePhysicsComponent = m_Parent->GetComponent<SimplePhysicsComponent>(); auto* simplePhysicsComponent = m_OwningEntity->GetComponent<SimplePhysicsComponent>();
if (simplePhysicsComponent != nullptr) { if (simplePhysicsComponent != nullptr) {
simplePhysicsComponent->SetRotation(value); simplePhysicsComponent->SetRotation(value);
@ -358,7 +358,7 @@ void MovementAIComponent::SetRotation(const NiQuaternion& value) {
} }
void MovementAIComponent::SetVelocity(const NiPoint3& value) { void MovementAIComponent::SetVelocity(const NiPoint3& value) {
auto* controllablePhysicsComponent = m_Parent->GetComponent<ControllablePhysicsComponent>(); auto* controllablePhysicsComponent = m_OwningEntity->GetComponent<ControllablePhysicsComponent>();
if (controllablePhysicsComponent != nullptr) { if (controllablePhysicsComponent != nullptr) {
controllablePhysicsComponent->SetVelocity(value); controllablePhysicsComponent->SetVelocity(value);
@ -366,7 +366,7 @@ void MovementAIComponent::SetVelocity(const NiPoint3& value) {
return; return;
} }
auto* simplePhysicsComponent = m_Parent->GetComponent<SimplePhysicsComponent>(); auto* simplePhysicsComponent = m_OwningEntity->GetComponent<SimplePhysicsComponent>();
if (simplePhysicsComponent != nullptr) { if (simplePhysicsComponent != nullptr) {
simplePhysicsComponent->SetVelocity(value); simplePhysicsComponent->SetVelocity(value);

View File

@ -57,7 +57,7 @@ void MoverSubComponent::Serialize(RakNet::BitStream* outBitStream, bool bIsIniti
MovingPlatformComponent::MovingPlatformComponent(Entity* parent, const std::string& pathName) : Component(parent) { MovingPlatformComponent::MovingPlatformComponent(Entity* parent, const std::string& pathName) : Component(parent) {
m_MoverSubComponentType = eMoverSubComponentType::mover; m_MoverSubComponentType = eMoverSubComponentType::mover;
m_MoverSubComponent = new MoverSubComponent(m_Parent->GetDefaultPosition()); m_MoverSubComponent = new MoverSubComponent(m_OwningEntity->GetDefaultPosition());
m_PathName = GeneralUtils::ASCIIToUTF16(pathName); m_PathName = GeneralUtils::ASCIIToUTF16(pathName);
m_Path = dZoneManager::Instance()->GetZone()->GetPath(pathName); m_Path = dZoneManager::Instance()->GetZone()->GetPath(pathName);
m_NoAutoStart = false; m_NoAutoStart = false;
@ -133,7 +133,7 @@ void MovingPlatformComponent::SetMovementState(eMovementPlatformState value) {
subComponent->mState = value; subComponent->mState = value;
EntityManager::Instance()->SerializeEntity(m_Parent); EntityManager::Instance()->SerializeEntity(m_OwningEntity);
} }
void MovingPlatformComponent::GotoWaypoint(uint32_t index, bool stopAtWaypoint) { void MovingPlatformComponent::GotoWaypoint(uint32_t index, bool stopAtWaypoint) {
@ -147,7 +147,7 @@ void MovingPlatformComponent::GotoWaypoint(uint32_t index, bool stopAtWaypoint)
} }
void MovingPlatformComponent::StartPathing() { void MovingPlatformComponent::StartPathing() {
//GameMessages::SendStartPathing(m_Parent); //GameMessages::SendStartPathing(m_OwningEntity);
m_PathingStopped = false; m_PathingStopped = false;
auto* subComponent = static_cast<MoverSubComponent*>(m_MoverSubComponent); auto* subComponent = static_cast<MoverSubComponent*>(m_MoverSubComponent);
@ -167,14 +167,14 @@ void MovingPlatformComponent::StartPathing() {
targetPosition = nextWaypoint.position; targetPosition = nextWaypoint.position;
} else { } else {
subComponent->mPosition = m_Parent->GetPosition(); subComponent->mPosition = m_OwningEntity->GetPosition();
subComponent->mSpeed = 1.0f; subComponent->mSpeed = 1.0f;
subComponent->mWaitTime = 2.0f; subComponent->mWaitTime = 2.0f;
targetPosition = m_Parent->GetPosition() + NiPoint3(0.0f, 10.0f, 0.0f); targetPosition = m_OwningEntity->GetPosition() + NiPoint3(0.0f, 10.0f, 0.0f);
} }
m_Parent->AddCallbackTimer(subComponent->mWaitTime, [this] { m_OwningEntity->AddCallbackTimer(subComponent->mWaitTime, [this] {
SetMovementState(eMovementPlatformState::Moving); SetMovementState(eMovementPlatformState::Moving);
}); });
@ -182,19 +182,19 @@ void MovingPlatformComponent::StartPathing() {
const auto travelNext = subComponent->mWaitTime + travelTime; const auto travelNext = subComponent->mWaitTime + travelTime;
m_Parent->AddCallbackTimer(travelTime, [subComponent, this] { m_OwningEntity->AddCallbackTimer(travelTime, [subComponent, this] {
for (CppScripts::Script* script : CppScripts::GetEntityScripts(m_Parent)) { for (CppScripts::Script* script : CppScripts::GetEntityScripts(m_OwningEntity)) {
script->OnWaypointReached(m_Parent, subComponent->mNextWaypointIndex); script->OnWaypointReached(m_OwningEntity, subComponent->mNextWaypointIndex);
} }
}); });
m_Parent->AddCallbackTimer(travelNext, [this] { m_OwningEntity->AddCallbackTimer(travelNext, [this] {
ContinuePathing(); ContinuePathing();
}); });
//GameMessages::SendPlatformResync(m_Parent, UNASSIGNED_SYSTEM_ADDRESS); //GameMessages::SendPlatformResync(m_OwningEntity, UNASSIGNED_SYSTEM_ADDRESS);
EntityManager::Instance()->SerializeEntity(m_Parent); EntityManager::Instance()->SerializeEntity(m_OwningEntity);
} }
void MovingPlatformComponent::ContinuePathing() { void MovingPlatformComponent::ContinuePathing() {
@ -222,17 +222,17 @@ void MovingPlatformComponent::ContinuePathing() {
targetPosition = nextWaypoint.position; targetPosition = nextWaypoint.position;
} else { } else {
subComponent->mPosition = m_Parent->GetPosition(); subComponent->mPosition = m_OwningEntity->GetPosition();
subComponent->mSpeed = 1.0f; subComponent->mSpeed = 1.0f;
subComponent->mWaitTime = 2.0f; subComponent->mWaitTime = 2.0f;
targetPosition = m_Parent->GetPosition() + NiPoint3(0.0f, 10.0f, 0.0f); targetPosition = m_OwningEntity->GetPosition() + NiPoint3(0.0f, 10.0f, 0.0f);
pathSize = 1; pathSize = 1;
behavior = PathBehavior::Loop; behavior = PathBehavior::Loop;
} }
if (m_Parent->GetLOT() == 9483) { if (m_OwningEntity->GetLOT() == 9483) {
behavior = PathBehavior::Bounce; behavior = PathBehavior::Bounce;
} else { } else {
return; return;
@ -242,7 +242,7 @@ void MovingPlatformComponent::ContinuePathing() {
subComponent->mCurrentWaypointIndex = pathSize; subComponent->mCurrentWaypointIndex = pathSize;
switch (behavior) { switch (behavior) {
case PathBehavior::Once: case PathBehavior::Once:
EntityManager::Instance()->SerializeEntity(m_Parent); EntityManager::Instance()->SerializeEntity(m_OwningEntity);
return; return;
case PathBehavior::Bounce: case PathBehavior::Bounce:
@ -271,7 +271,7 @@ void MovingPlatformComponent::ContinuePathing() {
subComponent->mCurrentWaypointIndex = 1; subComponent->mCurrentWaypointIndex = 1;
*/ */
//GameMessages::SendPlatformResync(m_Parent, UNASSIGNED_SYSTEM_ADDRESS); //GameMessages::SendPlatformResync(m_OwningEntity, UNASSIGNED_SYSTEM_ADDRESS);
if (subComponent->mCurrentWaypointIndex == subComponent->mDesiredWaypointIndex) { if (subComponent->mCurrentWaypointIndex == subComponent->mDesiredWaypointIndex) {
// TODO: Send event? // TODO: Send event?
@ -280,35 +280,35 @@ void MovingPlatformComponent::ContinuePathing() {
return; return;
} }
m_Parent->CancelCallbackTimers(); m_OwningEntity->CancelCallbackTimers();
m_Parent->AddCallbackTimer(subComponent->mWaitTime, [this] { m_OwningEntity->AddCallbackTimer(subComponent->mWaitTime, [this] {
SetMovementState(eMovementPlatformState::Moving); SetMovementState(eMovementPlatformState::Moving);
}); });
auto travelTime = Vector3::Distance(targetPosition, subComponent->mPosition) / subComponent->mSpeed + 1.5; auto travelTime = Vector3::Distance(targetPosition, subComponent->mPosition) / subComponent->mSpeed + 1.5;
if (m_Parent->GetLOT() == 9483) { if (m_OwningEntity->GetLOT() == 9483) {
travelTime += 20; travelTime += 20;
} }
const auto travelNext = subComponent->mWaitTime + travelTime; const auto travelNext = subComponent->mWaitTime + travelTime;
m_Parent->AddCallbackTimer(travelTime, [subComponent, this] { m_OwningEntity->AddCallbackTimer(travelTime, [subComponent, this] {
for (CppScripts::Script* script : CppScripts::GetEntityScripts(m_Parent)) { for (CppScripts::Script* script : CppScripts::GetEntityScripts(m_OwningEntity)) {
script->OnWaypointReached(m_Parent, subComponent->mNextWaypointIndex); script->OnWaypointReached(m_OwningEntity, subComponent->mNextWaypointIndex);
} }
}); });
m_Parent->AddCallbackTimer(travelNext, [this] { m_OwningEntity->AddCallbackTimer(travelNext, [this] {
ContinuePathing(); ContinuePathing();
}); });
EntityManager::Instance()->SerializeEntity(m_Parent); EntityManager::Instance()->SerializeEntity(m_OwningEntity);
} }
void MovingPlatformComponent::StopPathing() { void MovingPlatformComponent::StopPathing() {
//m_Parent->CancelCallbackTimers(); //m_OwningEntity->CancelCallbackTimers();
auto* subComponent = static_cast<MoverSubComponent*>(m_MoverSubComponent); auto* subComponent = static_cast<MoverSubComponent*>(m_MoverSubComponent);
@ -318,9 +318,9 @@ void MovingPlatformComponent::StopPathing() {
subComponent->mDesiredWaypointIndex = -1; subComponent->mDesiredWaypointIndex = -1;
subComponent->mShouldStopAtDesiredWaypoint = false; subComponent->mShouldStopAtDesiredWaypoint = false;
EntityManager::Instance()->SerializeEntity(m_Parent); EntityManager::Instance()->SerializeEntity(m_OwningEntity);
//GameMessages::SendPlatformResync(m_Parent, UNASSIGNED_SYSTEM_ADDRESS); //GameMessages::SendPlatformResync(m_OwningEntity, UNASSIGNED_SYSTEM_ADDRESS);
} }
void MovingPlatformComponent::SetSerialized(bool value) { void MovingPlatformComponent::SetSerialized(bool value) {
@ -338,10 +338,10 @@ void MovingPlatformComponent::SetNoAutoStart(const bool value) {
void MovingPlatformComponent::WarpToWaypoint(size_t index) { void MovingPlatformComponent::WarpToWaypoint(size_t index) {
const auto& waypoint = m_Path->pathWaypoints[index]; const auto& waypoint = m_Path->pathWaypoints[index];
m_Parent->SetPosition(waypoint.position); m_OwningEntity->SetPosition(waypoint.position);
m_Parent->SetRotation(waypoint.rotation); m_OwningEntity->SetRotation(waypoint.rotation);
EntityManager::Instance()->SerializeEntity(m_Parent); EntityManager::Instance()->SerializeEntity(m_OwningEntity);
} }
size_t MovingPlatformComponent::GetLastWaypointIndex() const { size_t MovingPlatformComponent::GetLastWaypointIndex() const {

View File

@ -173,7 +173,7 @@ void PetComponent::OnUse(Entity* originator) {
return; return;
} }
auto* movementAIComponent = m_Parent->GetComponent<MovementAIComponent>(); auto* movementAIComponent = m_OwningEntity->GetComponent<MovementAIComponent>();
if (movementAIComponent != nullptr) { if (movementAIComponent != nullptr) {
movementAIComponent->Stop(); movementAIComponent->Stop();
@ -181,7 +181,7 @@ void PetComponent::OnUse(Entity* originator) {
inventoryComponent->DespawnPet(); inventoryComponent->DespawnPet();
const auto& cached = buildCache.find(m_Parent->GetLOT()); const auto& cached = buildCache.find(m_OwningEntity->GetLOT());
int32_t imaginationCost = 0; int32_t imaginationCost = 0;
std::string buildFile; std::string buildFile;
@ -189,7 +189,7 @@ void PetComponent::OnUse(Entity* originator) {
if (cached == buildCache.end()) { if (cached == buildCache.end()) {
auto query = CDClientDatabase::CreatePreppedStmt( auto query = CDClientDatabase::CreatePreppedStmt(
"SELECT ValidPiecesLXF, PuzzleModelLot, Timelimit, NumValidPieces, imagCostPerBuild FROM TamingBuildPuzzles WHERE NPCLot = ?;"); "SELECT ValidPiecesLXF, PuzzleModelLot, Timelimit, NumValidPieces, imagCostPerBuild FROM TamingBuildPuzzles WHERE NPCLot = ?;");
query.bind(1, (int)m_Parent->GetLOT()); query.bind(1, (int)m_OwningEntity->GetLOT());
auto result = query.execQuery(); auto result = query.execQuery();
@ -216,7 +216,7 @@ void PetComponent::OnUse(Entity* originator) {
if (data.timeLimit <= 0) data.timeLimit = 60; if (data.timeLimit <= 0) data.timeLimit = 60;
imaginationCost = data.imaginationCost; imaginationCost = data.imaginationCost;
buildCache[m_Parent->GetLOT()] = data; buildCache[m_OwningEntity->GetLOT()] = data;
result.finalize(); result.finalize();
} else { } else {
@ -245,13 +245,13 @@ void PetComponent::OnUse(Entity* originator) {
return; return;
} }
auto petPosition = m_Parent->GetPosition(); auto petPosition = m_OwningEntity->GetPosition();
auto originatorPosition = originator->GetPosition(); auto originatorPosition = originator->GetPosition();
m_Parent->SetRotation(NiQuaternion::LookAt(petPosition, originatorPosition)); m_OwningEntity->SetRotation(NiQuaternion::LookAt(petPosition, originatorPosition));
float interactionDistance = m_Parent->GetVar<float>(u"interaction_distance"); float interactionDistance = m_OwningEntity->GetVar<float>(u"interaction_distance");
if (interactionDistance <= 0) { if (interactionDistance <= 0) {
interactionDistance = 15; interactionDistance = 15;
@ -259,7 +259,7 @@ void PetComponent::OnUse(Entity* originator) {
auto position = originatorPosition; auto position = originatorPosition;
NiPoint3 forward = NiQuaternion::LookAt(m_Parent->GetPosition(), originator->GetPosition()).GetForwardVector(); NiPoint3 forward = NiQuaternion::LookAt(m_OwningEntity->GetPosition(), originator->GetPosition()).GetForwardVector();
forward.y = 0; forward.y = 0;
if (dpWorld::Instance().IsLoaded()) { if (dpWorld::Instance().IsLoaded()) {
@ -268,7 +268,7 @@ void PetComponent::OnUse(Entity* originator) {
float y = dpWorld::Instance().GetNavMesh()->GetHeightAtPoint(attempt); float y = dpWorld::Instance().GetNavMesh()->GetHeightAtPoint(attempt);
while (std::abs(y - petPosition.y) > 4 && interactionDistance > 10) { while (std::abs(y - petPosition.y) > 4 && interactionDistance > 10) {
const NiPoint3 forward = m_Parent->GetRotation().GetForwardVector(); const NiPoint3 forward = m_OwningEntity->GetRotation().GetForwardVector();
attempt = originatorPosition + forward * interactionDistance; attempt = originatorPosition + forward * interactionDistance;
@ -287,7 +287,7 @@ void PetComponent::OnUse(Entity* originator) {
GameMessages::SendNotifyPetTamingMinigame( GameMessages::SendNotifyPetTamingMinigame(
originator->GetObjectID(), originator->GetObjectID(),
m_Parent->GetObjectID(), m_OwningEntity->GetObjectID(),
LWOOBJID_EMPTY, LWOOBJID_EMPTY,
true, true,
ePetTamingNotifyType::BEGIN, ePetTamingNotifyType::BEGIN,
@ -298,7 +298,7 @@ void PetComponent::OnUse(Entity* originator) {
); );
GameMessages::SendNotifyPetTamingMinigame( GameMessages::SendNotifyPetTamingMinigame(
m_Parent->GetObjectID(), m_OwningEntity->GetObjectID(),
LWOOBJID_EMPTY, LWOOBJID_EMPTY,
originator->GetObjectID(), originator->GetObjectID(),
true, true,
@ -314,17 +314,17 @@ void PetComponent::OnUse(Entity* originator) {
m_Tamer = originator->GetObjectID(); m_Tamer = originator->GetObjectID();
SetStatus(5); SetStatus(5);
currentActivities.insert_or_assign(m_Tamer, m_Parent->GetObjectID()); currentActivities.insert_or_assign(m_Tamer, m_OwningEntity->GetObjectID());
// Notify the start of a pet taming minigame // Notify the start of a pet taming minigame
for (CppScripts::Script* script : CppScripts::GetEntityScripts(m_Parent)) { for (CppScripts::Script* script : CppScripts::GetEntityScripts(m_OwningEntity)) {
script->OnNotifyPetTamingMinigame(m_Parent, originator, ePetTamingNotifyType::BEGIN); script->OnNotifyPetTamingMinigame(m_OwningEntity, originator, ePetTamingNotifyType::BEGIN);
} }
} }
void PetComponent::Update(float deltaTime) { void PetComponent::Update(float deltaTime) {
if (m_StartPosition == NiPoint3::ZERO) { if (m_StartPosition == NiPoint3::ZERO) {
m_StartPosition = m_Parent->GetPosition(); m_StartPosition = m_OwningEntity->GetPosition();
} }
if (m_Owner == LWOOBJID_EMPTY) { if (m_Owner == LWOOBJID_EMPTY) {
@ -344,7 +344,7 @@ void PetComponent::Update(float deltaTime) {
if (m_Timer <= 0) { if (m_Timer <= 0) {
Wander(); Wander();
EntityManager::Instance()->SerializeEntity(m_Parent); EntityManager::Instance()->SerializeEntity(m_OwningEntity);
} }
} else { } else {
m_Timer = 5; m_Timer = 5;
@ -357,12 +357,12 @@ void PetComponent::Update(float deltaTime) {
auto* owner = GetOwner(); auto* owner = GetOwner();
if (owner == nullptr) { if (owner == nullptr) {
m_Parent->Kill(); m_OwningEntity->Kill();
return; return;
} }
m_MovementAI = m_Parent->GetComponent<MovementAIComponent>(); m_MovementAI = m_OwningEntity->GetComponent<MovementAIComponent>();
if (m_MovementAI == nullptr) { if (m_MovementAI == nullptr) {
return; return;
@ -382,9 +382,9 @@ void PetComponent::Update(float deltaTime) {
m_MovementAI->Stop(); m_MovementAI->Stop();
if (m_TresureTime <= 0) { if (m_TresureTime <= 0) {
m_Parent->SetOwnerOverride(m_Owner); m_OwningEntity->SetOwnerOverride(m_Owner);
tresure->Smash(m_Parent->GetObjectID()); tresure->Smash(m_OwningEntity->GetObjectID());
m_Interaction = LWOOBJID_EMPTY; m_Interaction = LWOOBJID_EMPTY;
@ -430,7 +430,7 @@ void PetComponent::Update(float deltaTime) {
float distance = Vector3::DistanceSquared(position, switchPosition); float distance = Vector3::DistanceSquared(position, switchPosition);
if (distance < 3 * 3) { if (distance < 3 * 3) {
m_Interaction = closestSwitch->GetParentEntity()->GetObjectID(); m_Interaction = closestSwitch->GetParentEntity()->GetObjectID();
closestSwitch->EntityEnter(m_Parent); closestSwitch->EntityEnter(m_OwningEntity);
} else if (distance < 20 * 20) { } else if (distance < 20 * 20) {
haltDistance = 1; haltDistance = 1;
@ -443,7 +443,7 @@ void PetComponent::Update(float deltaTime) {
if (closestTresure != nullptr) { if (closestTresure != nullptr) {
// Skeleton Dragon Pat special case for bone digging // Skeleton Dragon Pat special case for bone digging
if (closestTresure->GetLOT() == 12192 && m_Parent->GetLOT() != 13067) { if (closestTresure->GetLOT() == 12192 && m_OwningEntity->GetLOT() != 13067) {
goto skipTresure; goto skipTresure;
} }
@ -484,7 +484,7 @@ void PetComponent::TryBuild(uint32_t numBricks, bool clientFailed) {
return; return;
} }
const auto& cached = buildCache.find(m_Parent->GetLOT()); const auto& cached = buildCache.find(m_OwningEntity->GetLOT());
if (cached == buildCache.end()) return; if (cached == buildCache.end()) return;
@ -524,7 +524,7 @@ void PetComponent::NotifyTamingBuildSuccess(NiPoint3 position) {
return; return;
} }
const auto& cached = buildCache.find(m_Parent->GetLOT()); const auto& cached = buildCache.find(m_OwningEntity->GetLOT());
if (cached == buildCache.end()) { if (cached == buildCache.end()) {
return; return;
@ -547,7 +547,7 @@ void PetComponent::NotifyTamingBuildSuccess(NiPoint3 position) {
GameMessages::SendNotifyTamingModelLoadedOnServer(m_Tamer, tamer->GetSystemAddress()); GameMessages::SendNotifyTamingModelLoadedOnServer(m_Tamer, tamer->GetSystemAddress());
GameMessages::SendPetResponse(m_Tamer, m_Parent->GetObjectID(), 0, 10, 0, tamer->GetSystemAddress()); GameMessages::SendPetResponse(m_Tamer, m_OwningEntity->GetObjectID(), 0, 10, 0, tamer->GetSystemAddress());
auto* inventoryComponent = tamer->GetComponent<InventoryComponent>(); auto* inventoryComponent = tamer->GetComponent<InventoryComponent>();
@ -565,13 +565,13 @@ void PetComponent::NotifyTamingBuildSuccess(NiPoint3 position) {
std::string petName = tamer->GetCharacter()->GetName(); std::string petName = tamer->GetCharacter()->GetName();
petName += "'s Pet"; petName += "'s Pet";
GameMessages::SendAddPetToPlayer(m_Tamer, 0, GeneralUtils::UTF8ToUTF16(petName), petSubKey, m_Parent->GetLOT(), tamer->GetSystemAddress()); GameMessages::SendAddPetToPlayer(m_Tamer, 0, GeneralUtils::UTF8ToUTF16(petName), petSubKey, m_OwningEntity->GetLOT(), tamer->GetSystemAddress());
GameMessages::SendRegisterPetID(m_Tamer, m_Parent->GetObjectID(), tamer->GetSystemAddress()); GameMessages::SendRegisterPetID(m_Tamer, m_OwningEntity->GetObjectID(), tamer->GetSystemAddress());
GameMessages::SendRegisterPetDBID(m_Tamer, petSubKey, tamer->GetSystemAddress()); GameMessages::SendRegisterPetDBID(m_Tamer, petSubKey, tamer->GetSystemAddress());
inventoryComponent->AddItem(m_Parent->GetLOT(), 1, eLootSourceType::ACTIVITY, eInventoryType::MODELS, {}, LWOOBJID_EMPTY, true, false, petSubKey); inventoryComponent->AddItem(m_OwningEntity->GetLOT(), 1, eLootSourceType::ACTIVITY, eInventoryType::MODELS, {}, LWOOBJID_EMPTY, true, false, petSubKey);
auto* item = inventoryComponent->FindItemBySubKey(petSubKey, MODELS); auto* item = inventoryComponent->FindItemBySubKey(petSubKey, MODELS);
if (item == nullptr) { if (item == nullptr) {
@ -580,7 +580,7 @@ void PetComponent::NotifyTamingBuildSuccess(NiPoint3 position) {
DatabasePet databasePet{}; DatabasePet databasePet{};
databasePet.lot = m_Parent->GetLOT(); databasePet.lot = m_OwningEntity->GetLOT();
databasePet.moderationState = 1; databasePet.moderationState = 1;
databasePet.name = petName; databasePet.name = petName;
@ -603,14 +603,14 @@ void PetComponent::NotifyTamingBuildSuccess(NiPoint3 position) {
); );
// Triggers the catch a pet missions // Triggers the catch a pet missions
if (petFlags.find(m_Parent->GetLOT()) != petFlags.end()) { if (petFlags.find(m_OwningEntity->GetLOT()) != petFlags.end()) {
tamer->GetCharacter()->SetPlayerFlag(petFlags.at(m_Parent->GetLOT()), true); tamer->GetCharacter()->SetPlayerFlag(petFlags.at(m_OwningEntity->GetLOT()), true);
} }
auto* missionComponent = tamer->GetComponent<MissionComponent>(); auto* missionComponent = tamer->GetComponent<MissionComponent>();
if (missionComponent != nullptr) { if (missionComponent != nullptr) {
missionComponent->Progress(eMissionTaskType::PET_TAMING, m_Parent->GetLOT()); missionComponent->Progress(eMissionTaskType::PET_TAMING, m_OwningEntity->GetLOT());
} }
SetStatus(1); SetStatus(1);
@ -661,18 +661,18 @@ void PetComponent::RequestSetPetName(std::u16string name) {
//Save our pet's new name to the db: //Save our pet's new name to the db:
SetPetNameForModeration(GeneralUtils::UTF16ToWTF8(name)); SetPetNameForModeration(GeneralUtils::UTF16ToWTF8(name));
EntityManager::Instance()->SerializeEntity(m_Parent); EntityManager::Instance()->SerializeEntity(m_OwningEntity);
std::u16string u16name = GeneralUtils::UTF8ToUTF16(m_Name); std::u16string u16name = GeneralUtils::UTF8ToUTF16(m_Name);
std::u16string u16ownerName = GeneralUtils::UTF8ToUTF16(m_OwnerName); std::u16string u16ownerName = GeneralUtils::UTF8ToUTF16(m_OwnerName);
GameMessages::SendSetPetName(m_Tamer, u16name, m_DatabaseId, tamer->GetSystemAddress()); GameMessages::SendSetPetName(m_Tamer, u16name, m_DatabaseId, tamer->GetSystemAddress());
GameMessages::SendSetPetName(m_Tamer, u16name, LWOOBJID_EMPTY, tamer->GetSystemAddress()); GameMessages::SendSetPetName(m_Tamer, u16name, LWOOBJID_EMPTY, tamer->GetSystemAddress());
GameMessages::SendPetNameChanged(m_Parent->GetObjectID(), m_ModerationStatus, u16name, u16ownerName, UNASSIGNED_SYSTEM_ADDRESS); GameMessages::SendPetNameChanged(m_OwningEntity->GetObjectID(), m_ModerationStatus, u16name, u16ownerName, UNASSIGNED_SYSTEM_ADDRESS);
GameMessages::SendSetPetNameModerated(m_Tamer, m_DatabaseId, m_ModerationStatus, tamer->GetSystemAddress()); GameMessages::SendSetPetNameModerated(m_Tamer, m_DatabaseId, m_ModerationStatus, tamer->GetSystemAddress());
GameMessages::SendNotifyPetTamingMinigame( GameMessages::SendNotifyPetTamingMinigame(
m_Tamer, m_Tamer,
m_Parent->GetObjectID(), m_OwningEntity->GetObjectID(),
m_Tamer, m_Tamer,
false, false,
ePetTamingNotifyType::SUCCESS, ePetTamingNotifyType::SUCCESS,
@ -682,7 +682,7 @@ void PetComponent::RequestSetPetName(std::u16string name) {
UNASSIGNED_SYSTEM_ADDRESS UNASSIGNED_SYSTEM_ADDRESS
); );
GameMessages::SendTerminateInteraction(m_Tamer, eTerminateType::FROM_INTERACTION, m_Parent->GetObjectID()); GameMessages::SendTerminateInteraction(m_Tamer, eTerminateType::FROM_INTERACTION, m_OwningEntity->GetObjectID());
auto* modelEntity = EntityManager::Instance()->GetEntity(m_ModelId); auto* modelEntity = EntityManager::Instance()->GetEntity(m_ModelId);
@ -695,8 +695,8 @@ void PetComponent::RequestSetPetName(std::u16string name) {
m_Tamer = LWOOBJID_EMPTY; m_Tamer = LWOOBJID_EMPTY;
// Notify the end of a pet taming minigame // Notify the end of a pet taming minigame
for (CppScripts::Script* script : CppScripts::GetEntityScripts(m_Parent)) { for (CppScripts::Script* script : CppScripts::GetEntityScripts(m_OwningEntity)) {
script->OnNotifyPetTamingMinigame(m_Parent, tamer, ePetTamingNotifyType::SUCCESS); script->OnNotifyPetTamingMinigame(m_OwningEntity, tamer, ePetTamingNotifyType::SUCCESS);
} }
} }
@ -713,7 +713,7 @@ void PetComponent::ClientExitTamingMinigame(bool voluntaryExit) {
GameMessages::SendNotifyPetTamingMinigame( GameMessages::SendNotifyPetTamingMinigame(
m_Tamer, m_Tamer,
m_Parent->GetObjectID(), m_OwningEntity->GetObjectID(),
m_Tamer, m_Tamer,
false, false,
ePetTamingNotifyType::QUIT, ePetTamingNotifyType::QUIT,
@ -725,7 +725,7 @@ void PetComponent::ClientExitTamingMinigame(bool voluntaryExit) {
GameMessages::SendNotifyTamingModelLoadedOnServer(m_Tamer, tamer->GetSystemAddress()); GameMessages::SendNotifyTamingModelLoadedOnServer(m_Tamer, tamer->GetSystemAddress());
GameMessages::SendTerminateInteraction(m_Tamer, eTerminateType::FROM_INTERACTION, m_Parent->GetObjectID()); GameMessages::SendTerminateInteraction(m_Tamer, eTerminateType::FROM_INTERACTION, m_OwningEntity->GetObjectID());
currentActivities.erase(m_Tamer); currentActivities.erase(m_Tamer);
@ -733,16 +733,16 @@ void PetComponent::ClientExitTamingMinigame(bool voluntaryExit) {
m_Tamer = LWOOBJID_EMPTY; m_Tamer = LWOOBJID_EMPTY;
m_Timer = 0; m_Timer = 0;
EntityManager::Instance()->SerializeEntity(m_Parent); EntityManager::Instance()->SerializeEntity(m_OwningEntity);
// Notify the end of a pet taming minigame // Notify the end of a pet taming minigame
for (CppScripts::Script* script : CppScripts::GetEntityScripts(m_Parent)) { for (CppScripts::Script* script : CppScripts::GetEntityScripts(m_OwningEntity)) {
script->OnNotifyPetTamingMinigame(m_Parent, tamer, ePetTamingNotifyType::QUIT); script->OnNotifyPetTamingMinigame(m_OwningEntity, tamer, ePetTamingNotifyType::QUIT);
} }
} }
void PetComponent::StartTimer() { void PetComponent::StartTimer() {
const auto& cached = buildCache.find(m_Parent->GetLOT()); const auto& cached = buildCache.find(m_OwningEntity->GetLOT());
if (cached == buildCache.end()) { if (cached == buildCache.end()) {
return; return;
@ -764,7 +764,7 @@ void PetComponent::ClientFailTamingMinigame() {
GameMessages::SendNotifyPetTamingMinigame( GameMessages::SendNotifyPetTamingMinigame(
m_Tamer, m_Tamer,
m_Parent->GetObjectID(), m_OwningEntity->GetObjectID(),
m_Tamer, m_Tamer,
false, false,
ePetTamingNotifyType::FAILED, ePetTamingNotifyType::FAILED,
@ -776,7 +776,7 @@ void PetComponent::ClientFailTamingMinigame() {
GameMessages::SendNotifyTamingModelLoadedOnServer(m_Tamer, tamer->GetSystemAddress()); GameMessages::SendNotifyTamingModelLoadedOnServer(m_Tamer, tamer->GetSystemAddress());
GameMessages::SendTerminateInteraction(m_Tamer, eTerminateType::FROM_INTERACTION, m_Parent->GetObjectID()); GameMessages::SendTerminateInteraction(m_Tamer, eTerminateType::FROM_INTERACTION, m_OwningEntity->GetObjectID());
currentActivities.erase(m_Tamer); currentActivities.erase(m_Tamer);
@ -784,16 +784,16 @@ void PetComponent::ClientFailTamingMinigame() {
m_Tamer = LWOOBJID_EMPTY; m_Tamer = LWOOBJID_EMPTY;
m_Timer = 0; m_Timer = 0;
EntityManager::Instance()->SerializeEntity(m_Parent); EntityManager::Instance()->SerializeEntity(m_OwningEntity);
// Notify the end of a pet taming minigame // Notify the end of a pet taming minigame
for (CppScripts::Script* script : CppScripts::GetEntityScripts(m_Parent)) { for (CppScripts::Script* script : CppScripts::GetEntityScripts(m_OwningEntity)) {
script->OnNotifyPetTamingMinigame(m_Parent, tamer, ePetTamingNotifyType::FAILED); script->OnNotifyPetTamingMinigame(m_OwningEntity, tamer, ePetTamingNotifyType::FAILED);
} }
} }
void PetComponent::Wander() { void PetComponent::Wander() {
m_MovementAI = m_Parent->GetComponent<MovementAIComponent>(); m_MovementAI = m_OwningEntity->GetComponent<MovementAIComponent>();
if (m_MovementAI == nullptr || !m_MovementAI->AtFinalWaypoint()) { if (m_MovementAI == nullptr || !m_MovementAI->AtFinalWaypoint()) {
return; return;
@ -847,7 +847,7 @@ void PetComponent::Activate(Item* item, bool registerPet, bool fromTaming) {
inventoryComponent->DespawnPet(); inventoryComponent->DespawnPet();
m_Owner = inventoryComponent->GetParent()->GetObjectID(); m_Owner = inventoryComponent->GetOwningEntity()->GetObjectID();
auto* owner = GetOwner(); auto* owner = GetOwner();
@ -883,18 +883,18 @@ void PetComponent::Activate(Item* item, bool registerPet, bool fromTaming) {
GameMessages::SendMarkInventoryItemAsActive(m_Owner, true, eUnequippableActiveType::PET, m_ItemId, GetOwner()->GetSystemAddress()); GameMessages::SendMarkInventoryItemAsActive(m_Owner, true, eUnequippableActiveType::PET, m_ItemId, GetOwner()->GetSystemAddress());
activePets[m_Owner] = m_Parent->GetObjectID(); activePets[m_Owner] = m_OwningEntity->GetObjectID();
m_Timer = 3; m_Timer = 3;
EntityManager::Instance()->SerializeEntity(m_Parent); EntityManager::Instance()->SerializeEntity(m_OwningEntity);
owner->GetCharacter()->SetPlayerFlag(ePlayerFlag::FIRST_MANUAL_PET_HIBERNATE, true); owner->GetCharacter()->SetPlayerFlag(ePlayerFlag::FIRST_MANUAL_PET_HIBERNATE, true);
if (registerPet) { if (registerPet) {
GameMessages::SendAddPetToPlayer(m_Owner, 0, GeneralUtils::UTF8ToUTF16(m_Name), m_DatabaseId, m_Parent->GetLOT(), owner->GetSystemAddress()); GameMessages::SendAddPetToPlayer(m_Owner, 0, GeneralUtils::UTF8ToUTF16(m_Name), m_DatabaseId, m_OwningEntity->GetLOT(), owner->GetSystemAddress());
GameMessages::SendRegisterPetID(m_Owner, m_Parent->GetObjectID(), owner->GetSystemAddress()); GameMessages::SendRegisterPetID(m_Owner, m_OwningEntity->GetObjectID(), owner->GetSystemAddress());
GameMessages::SendRegisterPetDBID(m_Owner, m_DatabaseId, owner->GetSystemAddress()); GameMessages::SendRegisterPetDBID(m_Owner, m_DatabaseId, owner->GetSystemAddress());
} }
@ -911,7 +911,7 @@ void PetComponent::AddDrainImaginationTimer(Item* item, bool fromTaming) {
auto playerInventoryComponent = playerInventory->GetComponent(); auto playerInventoryComponent = playerInventory->GetComponent();
if (!playerInventoryComponent) return; if (!playerInventoryComponent) return;
auto playerEntity = playerInventoryComponent->GetParent(); auto playerEntity = playerInventoryComponent->GetOwningEntity();
if (!playerEntity) return; if (!playerEntity) return;
auto playerDestroyableComponent = playerEntity->GetComponent<DestroyableComponent>(); auto playerDestroyableComponent = playerEntity->GetComponent<DestroyableComponent>();
@ -921,7 +921,7 @@ void PetComponent::AddDrainImaginationTimer(Item* item, bool fromTaming) {
if (!fromTaming) playerDestroyableComponent->Imagine(-1); if (!fromTaming) playerDestroyableComponent->Imagine(-1);
// Set this to a variable so when this is called back from the player the timer doesn't fire off. // Set this to a variable so when this is called back from the player the timer doesn't fire off.
m_Parent->AddCallbackTimer(imaginationDrainRate, [playerDestroyableComponent, this, item]() { m_OwningEntity->AddCallbackTimer(imaginationDrainRate, [playerDestroyableComponent, this, item]() {
if (!playerDestroyableComponent) { if (!playerDestroyableComponent) {
Game::logger->Log("PetComponent", "No petComponent and/or no playerDestroyableComponent"); Game::logger->Log("PetComponent", "No petComponent and/or no playerDestroyableComponent");
return; return;
@ -930,7 +930,7 @@ void PetComponent::AddDrainImaginationTimer(Item* item, bool fromTaming) {
// If we are out of imagination despawn the pet. // If we are out of imagination despawn the pet.
if (playerDestroyableComponent->GetImagination() == 0) { if (playerDestroyableComponent->GetImagination() == 0) {
this->Deactivate(); this->Deactivate();
auto playerEntity = playerDestroyableComponent->GetParent(); auto playerEntity = playerDestroyableComponent->GetOwningEntity();
if (!playerEntity) return; if (!playerEntity) return;
GameMessages::SendUseItemRequirementsResponse(playerEntity->GetObjectID(), playerEntity->GetSystemAddress(), eUseItemResponse::NoImaginationForPet); GameMessages::SendUseItemRequirementsResponse(playerEntity->GetObjectID(), playerEntity->GetSystemAddress(), eUseItemResponse::NoImaginationForPet);
@ -941,13 +941,13 @@ void PetComponent::AddDrainImaginationTimer(Item* item, bool fromTaming) {
} }
void PetComponent::Deactivate() { void PetComponent::Deactivate() {
GameMessages::SendPlayFXEffect(m_Parent->GetObjectID(), -1, u"despawn", "", LWOOBJID_EMPTY, 1, 1, true); GameMessages::SendPlayFXEffect(m_OwningEntity->GetObjectID(), -1, u"despawn", "", LWOOBJID_EMPTY, 1, 1, true);
GameMessages::SendMarkInventoryItemAsActive(m_Owner, false, eUnequippableActiveType::PET, m_ItemId, GetOwner()->GetSystemAddress()); GameMessages::SendMarkInventoryItemAsActive(m_Owner, false, eUnequippableActiveType::PET, m_ItemId, GetOwner()->GetSystemAddress());
activePets.erase(m_Owner); activePets.erase(m_Owner);
m_Parent->Kill(); m_OwningEntity->Kill();
auto* owner = GetOwner(); auto* owner = GetOwner();
@ -987,7 +987,7 @@ void PetComponent::Command(NiPoint3 position, LWOOBJID source, int32_t commandTy
if (commandType == 1) { if (commandType == 1) {
// Emotes // Emotes
GameMessages::SendPlayEmote(m_Parent->GetObjectID(), typeId, owner->GetObjectID(), UNASSIGNED_SYSTEM_ADDRESS); GameMessages::SendPlayEmote(m_OwningEntity->GetObjectID(), typeId, owner->GetObjectID(), UNASSIGNED_SYSTEM_ADDRESS);
} else if (commandType == 3) { } else if (commandType == 3) {
// Follow me, ??? // Follow me, ???
} else if (commandType == 6) { } else if (commandType == 6) {
@ -1076,7 +1076,7 @@ PetComponent* PetComponent::GetActivePet(LWOOBJID owner) {
} }
Entity* PetComponent::GetParentEntity() const { Entity* PetComponent::GetParentEntity() const {
return m_Parent; return m_OwningEntity;
} }
PetComponent::~PetComponent() { PetComponent::~PetComponent() {

View File

@ -28,9 +28,9 @@
#include "dpShapeSphere.h" #include "dpShapeSphere.h"
PhantomPhysicsComponent::PhantomPhysicsComponent(Entity* parent) : Component(parent) { PhantomPhysicsComponent::PhantomPhysicsComponent(Entity* parent) : Component(parent) {
m_Position = m_Parent->GetDefaultPosition(); m_Position = m_OwningEntity->GetDefaultPosition();
m_Rotation = m_Parent->GetDefaultRotation(); m_Rotation = m_OwningEntity->GetDefaultRotation();
m_Scale = m_Parent->GetDefaultScale(); m_Scale = m_OwningEntity->GetDefaultScale();
m_dpEntity = nullptr; m_dpEntity = nullptr;
m_EffectInfoDirty = false; m_EffectInfoDirty = false;
@ -47,17 +47,17 @@ PhantomPhysicsComponent::PhantomPhysicsComponent(Entity* parent) : Component(par
m_IsDirectional = false; m_IsDirectional = false;
m_Direction = NiPoint3(); // * m_DirectionalMultiplier m_Direction = NiPoint3(); // * m_DirectionalMultiplier
if (m_Parent->GetVar<bool>(u"create_physics")) { if (m_OwningEntity->GetVar<bool>(u"create_physics")) {
CreatePhysics(); CreatePhysics();
} }
if (m_Parent->GetVar<bool>(u"respawnVol")) { if (m_OwningEntity->GetVar<bool>(u"respawnVol")) {
m_IsRespawnVolume = true; m_IsRespawnVolume = true;
} }
if (m_IsRespawnVolume) { if (m_IsRespawnVolume) {
{ {
auto respawnString = std::stringstream(m_Parent->GetVarAsString(u"rspPos")); auto respawnString = std::stringstream(m_OwningEntity->GetVarAsString(u"rspPos"));
std::string segment; std::string segment;
std::vector<std::string> seglist; std::vector<std::string> seglist;
@ -70,7 +70,7 @@ PhantomPhysicsComponent::PhantomPhysicsComponent(Entity* parent) : Component(par
} }
{ {
auto respawnString = std::stringstream(m_Parent->GetVarAsString(u"rspRot")); auto respawnString = std::stringstream(m_OwningEntity->GetVarAsString(u"rspRot"));
std::string segment; std::string segment;
std::vector<std::string> seglist; std::vector<std::string> seglist;
@ -84,7 +84,7 @@ PhantomPhysicsComponent::PhantomPhysicsComponent(Entity* parent) : Component(par
} }
// HF - RespawnPoints. Legacy respawn entity. // HF - RespawnPoints. Legacy respawn entity.
if (m_Parent->GetLOT() == 4945) { if (m_OwningEntity->GetLOT() == 4945) {
m_IsRespawnVolume = true; m_IsRespawnVolume = true;
m_RespawnPos = m_Position; m_RespawnPos = m_Position;
m_RespawnRot = m_Rotation; m_RespawnRot = m_Rotation;
@ -133,7 +133,7 @@ PhantomPhysicsComponent::PhantomPhysicsComponent(Entity* parent) : Component(par
} }
} }
if (m_Parent->GetLOT() == 4945) // HF - RespawnPoints if (m_OwningEntity->GetLOT() == 4945) // HF - RespawnPoints
{ {
m_IsRespawnVolume = true; m_IsRespawnVolume = true;
m_RespawnPos = m_Position; m_RespawnPos = m_Position;
@ -145,7 +145,7 @@ PhantomPhysicsComponent::PhantomPhysicsComponent(Entity* parent) : Component(par
if (!m_HasCreatedPhysics) { if (!m_HasCreatedPhysics) {
CDComponentsRegistryTable* compRegistryTable = CDClientManager::Instance().GetTable<CDComponentsRegistryTable>(); CDComponentsRegistryTable* compRegistryTable = CDClientManager::Instance().GetTable<CDComponentsRegistryTable>();
auto componentID = compRegistryTable->GetByIDAndType(m_Parent->GetLOT(), eReplicaComponentType::PHANTOM_PHYSICS); auto componentID = compRegistryTable->GetByIDAndType(m_OwningEntity->GetLOT(), eReplicaComponentType::PHANTOM_PHYSICS);
CDPhysicsComponentTable* physComp = CDClientManager::Instance().GetTable<CDPhysicsComponentTable>(); CDPhysicsComponentTable* physComp = CDClientManager::Instance().GetTable<CDPhysicsComponentTable>();
@ -156,7 +156,7 @@ PhantomPhysicsComponent::PhantomPhysicsComponent(Entity* parent) : Component(par
//temp test //temp test
if (info->physicsAsset == "miscellaneous\\misc_phys_10x1x5.hkx") { if (info->physicsAsset == "miscellaneous\\misc_phys_10x1x5.hkx") {
m_dpEntity = new dpEntity(m_Parent->GetObjectID(), 10.0f, 5.0f, 1.0f); m_dpEntity = new dpEntity(m_OwningEntity->GetObjectID(), 10.0f, 5.0f, 1.0f);
m_dpEntity->SetScale(m_Scale); m_dpEntity->SetScale(m_Scale);
m_dpEntity->SetRotation(m_Rotation); m_dpEntity->SetRotation(m_Rotation);
@ -167,7 +167,7 @@ PhantomPhysicsComponent::PhantomPhysicsComponent(Entity* parent) : Component(par
// Move this down by 13.521004 units so it is still effectively at the same height as before // Move this down by 13.521004 units so it is still effectively at the same height as before
m_Position = m_Position - NiPoint3::UNIT_Y * 13.521004f; m_Position = m_Position - NiPoint3::UNIT_Y * 13.521004f;
// TODO Fix physics simulation to do simulation at high velocities due to bullet through paper problem... // TODO Fix physics simulation to do simulation at high velocities due to bullet through paper problem...
m_dpEntity = new dpEntity(m_Parent->GetObjectID(), 1638.4f, 13.521004f * 2.0f, 1638.4f); m_dpEntity = new dpEntity(m_OwningEntity->GetObjectID(), 1638.4f, 13.521004f * 2.0f, 1638.4f);
m_dpEntity->SetScale(m_Scale); m_dpEntity->SetScale(m_Scale);
m_dpEntity->SetRotation(m_Rotation); m_dpEntity->SetRotation(m_Rotation);
@ -175,49 +175,49 @@ PhantomPhysicsComponent::PhantomPhysicsComponent(Entity* parent) : Component(par
dpWorld::Instance().AddEntity(m_dpEntity); dpWorld::Instance().AddEntity(m_dpEntity);
} else if (info->physicsAsset == "env\\trigger_wall_tall.hkx") { } else if (info->physicsAsset == "env\\trigger_wall_tall.hkx") {
m_dpEntity = new dpEntity(m_Parent->GetObjectID(), 10.0f, 25.0f, 1.0f); m_dpEntity = new dpEntity(m_OwningEntity->GetObjectID(), 10.0f, 25.0f, 1.0f);
m_dpEntity->SetScale(m_Scale); m_dpEntity->SetScale(m_Scale);
m_dpEntity->SetRotation(m_Rotation); m_dpEntity->SetRotation(m_Rotation);
m_dpEntity->SetPosition(m_Position); m_dpEntity->SetPosition(m_Position);
dpWorld::Instance().AddEntity(m_dpEntity); dpWorld::Instance().AddEntity(m_dpEntity);
} else if (info->physicsAsset == "env\\env_gen_placeholderphysics.hkx") { } else if (info->physicsAsset == "env\\env_gen_placeholderphysics.hkx") {
m_dpEntity = new dpEntity(m_Parent->GetObjectID(), 20.0f, 20.0f, 20.0f); m_dpEntity = new dpEntity(m_OwningEntity->GetObjectID(), 20.0f, 20.0f, 20.0f);
m_dpEntity->SetScale(m_Scale); m_dpEntity->SetScale(m_Scale);
m_dpEntity->SetRotation(m_Rotation); m_dpEntity->SetRotation(m_Rotation);
m_dpEntity->SetPosition(m_Position); m_dpEntity->SetPosition(m_Position);
dpWorld::Instance().AddEntity(m_dpEntity); dpWorld::Instance().AddEntity(m_dpEntity);
} else if (info->physicsAsset == "env\\POI_trigger_wall.hkx") { } else if (info->physicsAsset == "env\\POI_trigger_wall.hkx") {
m_dpEntity = new dpEntity(m_Parent->GetObjectID(), 1.0f, 12.5f, 20.0f); // Not sure what the real size is m_dpEntity = new dpEntity(m_OwningEntity->GetObjectID(), 1.0f, 12.5f, 20.0f); // Not sure what the real size is
m_dpEntity->SetScale(m_Scale); m_dpEntity->SetScale(m_Scale);
m_dpEntity->SetRotation(m_Rotation); m_dpEntity->SetRotation(m_Rotation);
m_dpEntity->SetPosition(m_Position); m_dpEntity->SetPosition(m_Position);
dpWorld::Instance().AddEntity(m_dpEntity); dpWorld::Instance().AddEntity(m_dpEntity);
} else if (info->physicsAsset == "env\\NG_NinjaGo\\env_ng_gen_gate_chamber_puzzle_ceiling_tile_falling_phantom.hkx") { } else if (info->physicsAsset == "env\\NG_NinjaGo\\env_ng_gen_gate_chamber_puzzle_ceiling_tile_falling_phantom.hkx") {
m_dpEntity = new dpEntity(m_Parent->GetObjectID(), 18.0f, 5.0f, 15.0f); m_dpEntity = new dpEntity(m_OwningEntity->GetObjectID(), 18.0f, 5.0f, 15.0f);
m_dpEntity->SetScale(m_Scale); m_dpEntity->SetScale(m_Scale);
m_dpEntity->SetRotation(m_Rotation); m_dpEntity->SetRotation(m_Rotation);
m_dpEntity->SetPosition(m_Position + m_Rotation.GetForwardVector() * 7.5f); m_dpEntity->SetPosition(m_Position + m_Rotation.GetForwardVector() * 7.5f);
dpWorld::Instance().AddEntity(m_dpEntity); dpWorld::Instance().AddEntity(m_dpEntity);
} else if (info->physicsAsset == "env\\NG_NinjaGo\\ng_flamejet_brick_phantom.HKX") { } else if (info->physicsAsset == "env\\NG_NinjaGo\\ng_flamejet_brick_phantom.HKX") {
m_dpEntity = new dpEntity(m_Parent->GetObjectID(), 1.0f, 1.0f, 12.0f); m_dpEntity = new dpEntity(m_OwningEntity->GetObjectID(), 1.0f, 1.0f, 12.0f);
m_dpEntity->SetScale(m_Scale); m_dpEntity->SetScale(m_Scale);
m_dpEntity->SetRotation(m_Rotation); m_dpEntity->SetRotation(m_Rotation);
m_dpEntity->SetPosition(m_Position + m_Rotation.GetForwardVector() * 6.0f); m_dpEntity->SetPosition(m_Position + m_Rotation.GetForwardVector() * 6.0f);
dpWorld::Instance().AddEntity(m_dpEntity); dpWorld::Instance().AddEntity(m_dpEntity);
} else if (info->physicsAsset == "env\\Ring_Trigger.hkx") { } else if (info->physicsAsset == "env\\Ring_Trigger.hkx") {
m_dpEntity = new dpEntity(m_Parent->GetObjectID(), 6.0f, 6.0f, 6.0f); m_dpEntity = new dpEntity(m_OwningEntity->GetObjectID(), 6.0f, 6.0f, 6.0f);
m_dpEntity->SetScale(m_Scale); m_dpEntity->SetScale(m_Scale);
m_dpEntity->SetRotation(m_Rotation); m_dpEntity->SetRotation(m_Rotation);
m_dpEntity->SetPosition(m_Position); m_dpEntity->SetPosition(m_Position);
dpWorld::Instance().AddEntity(m_dpEntity); dpWorld::Instance().AddEntity(m_dpEntity);
} else if (info->physicsAsset == "env\\vfx_propertyImaginationBall.hkx") { } else if (info->physicsAsset == "env\\vfx_propertyImaginationBall.hkx") {
m_dpEntity = new dpEntity(m_Parent->GetObjectID(), 4.5f); m_dpEntity = new dpEntity(m_OwningEntity->GetObjectID(), 4.5f);
m_dpEntity->SetScale(m_Scale); m_dpEntity->SetScale(m_Scale);
m_dpEntity->SetRotation(m_Rotation); m_dpEntity->SetRotation(m_Rotation);
m_dpEntity->SetPosition(m_Position); m_dpEntity->SetPosition(m_Position);
dpWorld::Instance().AddEntity(m_dpEntity); dpWorld::Instance().AddEntity(m_dpEntity);
} else if (info->physicsAsset == "env\\env_won_fv_gas-blocking-volume.hkx"){ } else if (info->physicsAsset == "env\\env_won_fv_gas-blocking-volume.hkx"){
m_dpEntity = new dpEntity(m_Parent->GetObjectID(), 390.496826f, 111.467964f, 600.821534f, true); m_dpEntity = new dpEntity(m_OwningEntity->GetObjectID(), 390.496826f, 111.467964f, 600.821534f, true);
m_dpEntity->SetScale(m_Scale); m_dpEntity->SetScale(m_Scale);
m_dpEntity->SetRotation(m_Rotation); m_dpEntity->SetRotation(m_Rotation);
m_Position.y -= (111.467964f * m_Scale) / 2; m_Position.y -= (111.467964f * m_Scale) / 2;
@ -227,7 +227,7 @@ PhantomPhysicsComponent::PhantomPhysicsComponent(Entity* parent) : Component(par
//Game::logger->Log("PhantomPhysicsComponent", "This one is supposed to have %s", info->physicsAsset.c_str()); //Game::logger->Log("PhantomPhysicsComponent", "This one is supposed to have %s", info->physicsAsset.c_str());
//add fallback cube: //add fallback cube:
m_dpEntity = new dpEntity(m_Parent->GetObjectID(), 2.0f, 2.0f, 2.0f); m_dpEntity = new dpEntity(m_OwningEntity->GetObjectID(), 2.0f, 2.0f, 2.0f);
m_dpEntity->SetScale(m_Scale); m_dpEntity->SetScale(m_Scale);
m_dpEntity->SetRotation(m_Rotation); m_dpEntity->SetRotation(m_Rotation);
m_dpEntity->SetPosition(m_Position); m_dpEntity->SetPosition(m_Position);
@ -255,14 +255,14 @@ void PhantomPhysicsComponent::CreatePhysics() {
float width = 0.0f; //aka "radius" float width = 0.0f; //aka "radius"
float height = 0.0f; float height = 0.0f;
if (m_Parent->HasVar(u"primitiveModelType")) { if (m_OwningEntity->HasVar(u"primitiveModelType")) {
type = m_Parent->GetVar<int32_t>(u"primitiveModelType"); type = m_OwningEntity->GetVar<int32_t>(u"primitiveModelType");
x = m_Parent->GetVar<float>(u"primitiveModelValueX"); x = m_OwningEntity->GetVar<float>(u"primitiveModelValueX");
y = m_Parent->GetVar<float>(u"primitiveModelValueY"); y = m_OwningEntity->GetVar<float>(u"primitiveModelValueY");
z = m_Parent->GetVar<float>(u"primitiveModelValueZ"); z = m_OwningEntity->GetVar<float>(u"primitiveModelValueZ");
} else { } else {
CDComponentsRegistryTable* compRegistryTable = CDClientManager::Instance().GetTable<CDComponentsRegistryTable>(); CDComponentsRegistryTable* compRegistryTable = CDClientManager::Instance().GetTable<CDComponentsRegistryTable>();
auto componentID = compRegistryTable->GetByIDAndType(m_Parent->GetLOT(), eReplicaComponentType::PHANTOM_PHYSICS); auto componentID = compRegistryTable->GetByIDAndType(m_OwningEntity->GetLOT(), eReplicaComponentType::PHANTOM_PHYSICS);
CDPhysicsComponentTable* physComp = CDClientManager::Instance().GetTable<CDPhysicsComponentTable>(); CDPhysicsComponentTable* physComp = CDClientManager::Instance().GetTable<CDPhysicsComponentTable>();
@ -292,7 +292,7 @@ void PhantomPhysicsComponent::CreatePhysics() {
boxSize = NiPoint3(width, height, width); boxSize = NiPoint3(width, height, width);
} }
m_dpEntity = new dpEntity(m_Parent->GetObjectID(), boxSize); m_dpEntity = new dpEntity(m_OwningEntity->GetObjectID(), boxSize);
break; break;
} }
} }
@ -358,7 +358,7 @@ void PhantomPhysicsComponent::Update(float deltaTime) {
//Process enter events //Process enter events
for (auto en : m_dpEntity->GetNewObjects()) { for (auto en : m_dpEntity->GetNewObjects()) {
m_Parent->OnCollisionPhantom(en->GetObjectID()); m_OwningEntity->OnCollisionPhantom(en->GetObjectID());
//If we are a respawn volume, inform the client: //If we are a respawn volume, inform the client:
if (m_IsRespawnVolume) { if (m_IsRespawnVolume) {
@ -374,7 +374,7 @@ void PhantomPhysicsComponent::Update(float deltaTime) {
//Process exit events //Process exit events
for (auto en : m_dpEntity->GetRemovedObjects()) { for (auto en : m_dpEntity->GetRemovedObjects()) {
m_Parent->OnCollisionLeavePhantom(en->GetObjectID()); m_OwningEntity->OnCollisionLeavePhantom(en->GetObjectID());
} }
} }
@ -391,7 +391,7 @@ void PhantomPhysicsComponent::SetDirection(const NiPoint3& pos) {
void PhantomPhysicsComponent::SpawnVertices() { void PhantomPhysicsComponent::SpawnVertices() {
if (!m_dpEntity) return; if (!m_dpEntity) return;
std::cout << m_Parent->GetObjectID() << std::endl; std::cout << m_OwningEntity->GetObjectID() << std::endl;
auto box = static_cast<dpShapeBox*>(m_dpEntity->GetShape()); auto box = static_cast<dpShapeBox*>(m_dpEntity->GetShape());
for (auto vert : box->GetVertices()) { for (auto vert : box->GetVertices()) {
std::cout << vert.x << ", " << vert.y << ", " << vert.z << std::endl; std::cout << vert.x << ", " << vert.y << ", " << vert.z << std::endl;
@ -400,7 +400,7 @@ void PhantomPhysicsComponent::SpawnVertices() {
info.lot = 33; info.lot = 33;
info.pos = vert; info.pos = vert;
info.spawner = nullptr; info.spawner = nullptr;
info.spawnerID = m_Parent->GetObjectID(); info.spawnerID = m_OwningEntity->GetObjectID();
info.spawnerNodeID = 0; info.spawnerNodeID = 0;
Entity* newEntity = EntityManager::Instance()->CreateEntity(info, nullptr); Entity* newEntity = EntityManager::Instance()->CreateEntity(info, nullptr);

View File

@ -1,7 +1,7 @@
#include "PlayerForcedMovementComponent.h" #include "PlayerForcedMovementComponent.h"
PlayerForcedMovementComponent::PlayerForcedMovementComponent(Entity* parent) : Component(parent) { PlayerForcedMovementComponent::PlayerForcedMovementComponent(Entity* parent) : Component(parent) {
m_Parent = parent; m_OwningEntity = parent;
} }
PlayerForcedMovementComponent::~PlayerForcedMovementComponent() {} PlayerForcedMovementComponent::~PlayerForcedMovementComponent() {}

View File

@ -6,7 +6,7 @@
PossessableComponent::PossessableComponent(Entity* parent, uint32_t componentId) : Component(parent) { PossessableComponent::PossessableComponent(Entity* parent, uint32_t componentId) : Component(parent) {
m_Possessor = LWOOBJID_EMPTY; m_Possessor = LWOOBJID_EMPTY;
CDItemComponent item = Inventory::FindItemComponent(m_Parent->GetLOT()); CDItemComponent item = Inventory::FindItemComponent(m_OwningEntity->GetLOT());
m_AnimationFlag = static_cast<eAnimationFlags>(item.animationFlag); m_AnimationFlag = static_cast<eAnimationFlags>(item.animationFlag);
// Get the possession Type from the CDClient // Get the possession Type from the CDClient
@ -44,12 +44,12 @@ void PossessableComponent::Serialize(RakNet::BitStream* outBitStream, bool bIsIn
void PossessableComponent::Dismount() { void PossessableComponent::Dismount() {
SetPossessor(LWOOBJID_EMPTY); SetPossessor(LWOOBJID_EMPTY);
if (m_ItemSpawned) m_Parent->ScheduleKillAfterUpdate(); if (m_ItemSpawned) m_OwningEntity->ScheduleKillAfterUpdate();
} }
void PossessableComponent::OnUse(Entity* originator) { void PossessableComponent::OnUse(Entity* originator) {
auto* possessor = originator->GetComponent<PossessorComponent>(); auto* possessor = originator->GetComponent<PossessorComponent>();
if (possessor) { if (possessor) {
possessor->Mount(m_Parent); possessor->Mount(m_OwningEntity);
} }
} }

View File

@ -18,7 +18,7 @@ PossessorComponent::~PossessorComponent() {
auto* possessable = mount->GetComponent<PossessableComponent>(); auto* possessable = mount->GetComponent<PossessableComponent>();
if (possessable) { if (possessable) {
if (possessable->GetIsItemSpawned()) { if (possessable->GetIsItemSpawned()) {
GameMessages::SendMarkInventoryItemAsActive(m_Parent->GetObjectID(), false, eUnequippableActiveType::MOUNT, GetMountItemID(), m_Parent->GetSystemAddress()); GameMessages::SendMarkInventoryItemAsActive(m_OwningEntity->GetObjectID(), false, eUnequippableActiveType::MOUNT, GetMountItemID(), m_OwningEntity->GetSystemAddress());
} }
possessable->Dismount(); possessable->Dismount();
} }
@ -42,23 +42,23 @@ void PossessorComponent::Mount(Entity* mount) {
// Don't do anything if we are busy dismounting // Don't do anything if we are busy dismounting
if (GetIsDismounting() || !mount) return; if (GetIsDismounting() || !mount) return;
GameMessages::SendSetMountInventoryID(m_Parent, mount->GetObjectID(), UNASSIGNED_SYSTEM_ADDRESS); GameMessages::SendSetMountInventoryID(m_OwningEntity, mount->GetObjectID(), UNASSIGNED_SYSTEM_ADDRESS);
auto* possessableComponent = mount->GetComponent<PossessableComponent>(); auto* possessableComponent = mount->GetComponent<PossessableComponent>();
if (possessableComponent) { if (possessableComponent) {
possessableComponent->SetPossessor(m_Parent->GetObjectID()); possessableComponent->SetPossessor(m_OwningEntity->GetObjectID());
SetPossessable(mount->GetObjectID()); SetPossessable(mount->GetObjectID());
SetPossessableType(possessableComponent->GetPossessionType()); SetPossessableType(possessableComponent->GetPossessionType());
} }
auto characterComponent = m_Parent->GetComponent<CharacterComponent>(); auto characterComponent = m_OwningEntity->GetComponent<CharacterComponent>();
if (characterComponent) characterComponent->SetIsRacing(true); if (characterComponent) characterComponent->SetIsRacing(true);
// GM's to send // GM's to send
GameMessages::SendSetJetPackMode(m_Parent, false); GameMessages::SendSetJetPackMode(m_OwningEntity, false);
GameMessages::SendVehicleUnlockInput(mount->GetObjectID(), false, m_Parent->GetSystemAddress()); GameMessages::SendVehicleUnlockInput(mount->GetObjectID(), false, m_OwningEntity->GetSystemAddress());
GameMessages::SendSetStunned(m_Parent->GetObjectID(), eStateChangeType::PUSH, m_Parent->GetSystemAddress(), LWOOBJID_EMPTY, true, false, true, false, false, false, false, true, true, true, true, true, true, true, true, true); GameMessages::SendSetStunned(m_OwningEntity->GetObjectID(), eStateChangeType::PUSH, m_OwningEntity->GetSystemAddress(), LWOOBJID_EMPTY, true, false, true, false, false, false, false, true, true, true, true, true, true, true, true, true);
EntityManager::Instance()->SerializeEntity(m_Parent); EntityManager::Instance()->SerializeEntity(m_OwningEntity);
EntityManager::Instance()->SerializeEntity(mount); EntityManager::Instance()->SerializeEntity(mount);
} }
@ -73,12 +73,12 @@ void PossessorComponent::Dismount(Entity* mount, bool forceDismount) {
possessableComponent->SetPossessor(LWOOBJID_EMPTY); possessableComponent->SetPossessor(LWOOBJID_EMPTY);
if (forceDismount) possessableComponent->ForceDepossess(); if (forceDismount) possessableComponent->ForceDepossess();
} }
EntityManager::Instance()->SerializeEntity(m_Parent); EntityManager::Instance()->SerializeEntity(m_OwningEntity);
EntityManager::Instance()->SerializeEntity(mount); EntityManager::Instance()->SerializeEntity(mount);
auto characterComponent = m_Parent->GetComponent<CharacterComponent>(); auto characterComponent = m_OwningEntity->GetComponent<CharacterComponent>();
if (characterComponent) characterComponent->SetIsRacing(false); if (characterComponent) characterComponent->SetIsRacing(false);
} }
// Make sure we don't have wacky controls // Make sure we don't have wacky controls
GameMessages::SendSetPlayerControlScheme(m_Parent, eControlScheme::SCHEME_A); GameMessages::SendSetPlayerControlScheme(m_OwningEntity, eControlScheme::SCHEME_A);
} }

View File

@ -32,7 +32,7 @@ void PropertyEntranceComponent::OnUse(Entity* entity) {
auto* rocket = entity->GetComponent<CharacterComponent>()->RocketEquip(entity); auto* rocket = entity->GetComponent<CharacterComponent>()->RocketEquip(entity);
if (!rocket) return; if (!rocket) return;
GameMessages::SendPropertyEntranceBegin(m_Parent->GetObjectID(), entity->GetSystemAddress()); GameMessages::SendPropertyEntranceBegin(m_OwningEntity->GetObjectID(), entity->GetSystemAddress());
AMFArrayValue args; AMFArrayValue args;
@ -63,7 +63,7 @@ void PropertyEntranceComponent::OnEnterProperty(Entity* entity, uint32_t index,
cloneId = query[index].CloneId; cloneId = query[index].CloneId;
} }
auto* launcher = m_Parent->GetComponent<RocketLaunchpadControlComponent>(); auto* launcher = m_OwningEntity->GetComponent<RocketLaunchpadControlComponent>();
if (launcher == nullptr) { if (launcher == nullptr) {
return; return;
@ -330,5 +330,5 @@ void PropertyEntranceComponent::OnPropertyEntranceSync(Entity* entity, bool incl
delete propertiesLeft; delete propertiesLeft;
propertiesLeft = nullptr; propertiesLeft = nullptr;
GameMessages::SendPropertySelectQuery(m_Parent->GetObjectID(), startIndex, numberOfProperties - (startIndex + numResults) > 0, character->GetPropertyCloneID(), false, true, entries, sysAddr); GameMessages::SendPropertySelectQuery(m_OwningEntity->GetObjectID(), startIndex, numberOfProperties - (startIndex + numResults) > 0, character->GetPropertyCloneID(), false, true, entries, sysAddr);
} }

View File

@ -206,7 +206,7 @@ bool PropertyManagementComponent::Claim(const LWOOBJID playerId) {
std::string name = zone->GetZoneName(); std::string name = zone->GetZoneName();
std::string description = ""; std::string description = "";
auto prop_path = zone->GetPath(m_Parent->GetVarAsString(u"propertyName")); auto prop_path = zone->GetPath(m_OwningEntity->GetVarAsString(u"propertyName"));
if (prop_path){ if (prop_path){
if (!prop_path->property.displayName.empty()) name = prop_path->property.displayName; if (!prop_path->property.displayName.empty()) name = prop_path->property.displayName;
@ -395,7 +395,7 @@ void PropertyManagementComponent::UpdateModelPosition(const LWOOBJID id, const N
models.insert_or_assign(model->GetObjectID(), spawnerId); models.insert_or_assign(model->GetObjectID(), spawnerId);
GameMessages::SendPlaceModelResponse(entity->GetObjectID(), entity->GetSystemAddress(), position, m_Parent->GetObjectID(), 14, originalRotation); GameMessages::SendPlaceModelResponse(entity->GetObjectID(), entity->GetSystemAddress(), position, m_OwningEntity->GetObjectID(), 14, originalRotation);
GameMessages::SendUGCEquipPreCreateBasedOnEditMode(entity->GetObjectID(), entity->GetSystemAddress(), 0, spawnerId); GameMessages::SendUGCEquipPreCreateBasedOnEditMode(entity->GetObjectID(), entity->GetSystemAddress(), 0, spawnerId);
@ -783,7 +783,7 @@ PropertyManagementComponent* PropertyManagementComponent::Instance() {
void PropertyManagementComponent::OnQueryPropertyData(Entity* originator, const SystemAddress& sysAddr, LWOOBJID author) { void PropertyManagementComponent::OnQueryPropertyData(Entity* originator, const SystemAddress& sysAddr, LWOOBJID author) {
if (author == LWOOBJID_EMPTY) { if (author == LWOOBJID_EMPTY) {
author = m_Parent->GetObjectID(); author = m_OwningEntity->GetObjectID();
} }
const auto& worldId = dZoneManager::Instance()->GetZone()->GetZoneID(); const auto& worldId = dZoneManager::Instance()->GetZone()->GetZoneID();
@ -861,7 +861,7 @@ void PropertyManagementComponent::OnQueryPropertyData(Entity* originator, const
void PropertyManagementComponent::OnUse(Entity* originator) { void PropertyManagementComponent::OnUse(Entity* originator) {
OnQueryPropertyData(originator, UNASSIGNED_SYSTEM_ADDRESS); OnQueryPropertyData(originator, UNASSIGNED_SYSTEM_ADDRESS);
GameMessages::SendOpenPropertyManagment(m_Parent->GetObjectID(), originator->GetSystemAddress()); GameMessages::SendOpenPropertyManagment(m_OwningEntity->GetObjectID(), originator->GetSystemAddress());
} }
void PropertyManagementComponent::SetOwnerId(const LWOOBJID value) { void PropertyManagementComponent::SetOwnerId(const LWOOBJID value) {

View File

@ -21,7 +21,7 @@ void PropertyVendorComponent::OnUse(Entity* originator) {
if (PropertyManagementComponent::Instance()->GetOwnerId() == LWOOBJID_EMPTY) { if (PropertyManagementComponent::Instance()->GetOwnerId() == LWOOBJID_EMPTY) {
Game::logger->Log("PropertyVendorComponent", "Property vendor opening!"); Game::logger->Log("PropertyVendorComponent", "Property vendor opening!");
GameMessages::SendOpenPropertyVendor(m_Parent->GetObjectID(), originator->GetSystemAddress()); GameMessages::SendOpenPropertyVendor(m_OwningEntity->GetObjectID(), originator->GetSystemAddress());
return; return;
} }
@ -30,7 +30,7 @@ void PropertyVendorComponent::OnUse(Entity* originator) {
void PropertyVendorComponent::OnQueryPropertyData(Entity* originator, const SystemAddress& sysAddr) { void PropertyVendorComponent::OnQueryPropertyData(Entity* originator, const SystemAddress& sysAddr) {
if (PropertyManagementComponent::Instance() == nullptr) return; if (PropertyManagementComponent::Instance() == nullptr) return;
PropertyManagementComponent::Instance()->OnQueryPropertyData(originator, sysAddr, m_Parent->GetObjectID()); PropertyManagementComponent::Instance()->OnQueryPropertyData(originator, sysAddr, m_OwningEntity->GetObjectID());
} }
void PropertyVendorComponent::OnBuyFromVendor(Entity* originator, const bool confirmed, const LOT lot, const uint32_t count) { void PropertyVendorComponent::OnBuyFromVendor(Entity* originator, const bool confirmed, const LOT lot, const uint32_t count) {
@ -41,11 +41,11 @@ void PropertyVendorComponent::OnBuyFromVendor(Entity* originator, const bool con
return; return;
} }
GameMessages::SendPropertyRentalResponse(m_Parent->GetObjectID(), 0, 0, 0, 0, originator->GetSystemAddress()); GameMessages::SendPropertyRentalResponse(m_OwningEntity->GetObjectID(), 0, 0, 0, 0, originator->GetSystemAddress());
auto* controller = dZoneManager::Instance()->GetZoneControlObject(); auto* controller = dZoneManager::Instance()->GetZoneControlObject();
controller->OnFireEventServerSide(m_Parent, "propertyRented"); controller->OnFireEventServerSide(m_OwningEntity, "propertyRented");
PropertyManagementComponent::Instance()->SetOwner(originator); PropertyManagementComponent::Instance()->SetOwner(originator);

View File

@ -25,8 +25,8 @@ ProximityMonitorComponent::~ProximityMonitorComponent() {
} }
void ProximityMonitorComponent::SetProximityRadius(float proxRadius, const std::string& name) { void ProximityMonitorComponent::SetProximityRadius(float proxRadius, const std::string& name) {
dpEntity* en = new dpEntity(m_Parent->GetObjectID(), proxRadius); dpEntity* en = new dpEntity(m_OwningEntity->GetObjectID(), proxRadius);
en->SetPosition(m_Parent->GetPosition()); en->SetPosition(m_OwningEntity->GetPosition());
dpWorld::Instance().AddEntity(en); dpWorld::Instance().AddEntity(en);
m_ProximitiesData.insert(std::make_pair(name, en)); m_ProximitiesData.insert(std::make_pair(name, en));
@ -34,7 +34,7 @@ void ProximityMonitorComponent::SetProximityRadius(float proxRadius, const std::
void ProximityMonitorComponent::SetProximityRadius(dpEntity* entity, const std::string& name) { void ProximityMonitorComponent::SetProximityRadius(dpEntity* entity, const std::string& name) {
dpWorld::Instance().AddEntity(entity); dpWorld::Instance().AddEntity(entity);
entity->SetPosition(m_Parent->GetPosition()); entity->SetPosition(m_OwningEntity->GetPosition());
m_ProximitiesData.insert(std::make_pair(name, entity)); m_ProximitiesData.insert(std::make_pair(name, entity));
} }
@ -66,12 +66,12 @@ void ProximityMonitorComponent::Update(float deltaTime) {
//Process enter events //Process enter events
for (auto* en : prox.second->GetNewObjects()) { for (auto* en : prox.second->GetNewObjects()) {
m_Parent->OnCollisionProximity(en->GetObjectID(), prox.first, "ENTER"); m_OwningEntity->OnCollisionProximity(en->GetObjectID(), prox.first, "ENTER");
} }
//Process exit events //Process exit events
for (auto* en : prox.second->GetRemovedObjects()) { for (auto* en : prox.second->GetRemovedObjects()) {
m_Parent->OnCollisionProximity(en->GetObjectID(), prox.first, "LEAVE"); m_OwningEntity->OnCollisionProximity(en->GetObjectID(), prox.first, "LEAVE");
} }
} }
} }

View File

@ -133,13 +133,13 @@ void RacingControlComponent::LoadPlayerVehicle(Entity* player,
info.lot = 8092; info.lot = 8092;
info.pos = startPosition; info.pos = startPosition;
info.rot = startRotation; info.rot = startRotation;
info.spawnerID = m_Parent->GetObjectID(); info.spawnerID = m_OwningEntity->GetObjectID();
auto* carEntity = auto* carEntity =
EntityManager::Instance()->CreateEntity(info, nullptr, m_Parent); EntityManager::Instance()->CreateEntity(info, nullptr, m_OwningEntity);
// Make the vehicle a child of the racing controller. // Make the vehicle a child of the racing controller.
m_Parent->AddChild(carEntity); m_OwningEntity->AddChild(carEntity);
auto* destroyableComponent = auto* destroyableComponent =
carEntity->GetComponent<DestroyableComponent>(); carEntity->GetComponent<DestroyableComponent>();
@ -209,17 +209,17 @@ void RacingControlComponent::LoadPlayerVehicle(Entity* player,
EntityManager::Instance()->ConstructEntity(carEntity); EntityManager::Instance()->ConstructEntity(carEntity);
EntityManager::Instance()->SerializeEntity(player); EntityManager::Instance()->SerializeEntity(player);
EntityManager::Instance()->SerializeEntity(m_Parent); EntityManager::Instance()->SerializeEntity(m_OwningEntity);
GameMessages::SendRacingSetPlayerResetInfo( GameMessages::SendRacingSetPlayerResetInfo(
m_Parent->GetObjectID(), 0, 0, player->GetObjectID(), startPosition, 1, m_OwningEntity->GetObjectID(), 0, 0, player->GetObjectID(), startPosition, 1,
UNASSIGNED_SYSTEM_ADDRESS); UNASSIGNED_SYSTEM_ADDRESS);
const auto playerID = player->GetObjectID(); const auto playerID = player->GetObjectID();
// Reset the player to the start position during downtime, in case something // Reset the player to the start position during downtime, in case something
// went wrong. // went wrong.
m_Parent->AddCallbackTimer(1, [this, playerID]() { m_OwningEntity->AddCallbackTimer(1, [this, playerID]() {
auto* player = EntityManager::Instance()->GetEntity(playerID); auto* player = EntityManager::Instance()->GetEntity(playerID);
if (player == nullptr) { if (player == nullptr) {
@ -227,14 +227,14 @@ void RacingControlComponent::LoadPlayerVehicle(Entity* player,
} }
GameMessages::SendRacingResetPlayerToLastReset( GameMessages::SendRacingResetPlayerToLastReset(
m_Parent->GetObjectID(), playerID, UNASSIGNED_SYSTEM_ADDRESS); m_OwningEntity->GetObjectID(), playerID, UNASSIGNED_SYSTEM_ADDRESS);
}); });
GameMessages::SendSetJetPackMode(player, false); GameMessages::SendSetJetPackMode(player, false);
// Set the vehicle's state. // Set the vehicle's state.
GameMessages::SendNotifyVehicleOfRacingObject(carEntity->GetObjectID(), GameMessages::SendNotifyVehicleOfRacingObject(carEntity->GetObjectID(),
m_Parent->GetObjectID(), m_OwningEntity->GetObjectID(),
UNASSIGNED_SYSTEM_ADDRESS); UNASSIGNED_SYSTEM_ADDRESS);
GameMessages::SendVehicleSetWheelLockState(carEntity->GetObjectID(), false, GameMessages::SendVehicleSetWheelLockState(carEntity->GetObjectID(), false,
@ -257,7 +257,7 @@ void RacingControlComponent::OnRacingClientReady(Entity* player) {
if (racingPlayer.playerID != player->GetObjectID()) { if (racingPlayer.playerID != player->GetObjectID()) {
if (racingPlayer.playerLoaded) { if (racingPlayer.playerLoaded) {
GameMessages::SendRacingPlayerLoaded( GameMessages::SendRacingPlayerLoaded(
m_Parent->GetObjectID(), racingPlayer.playerID, m_OwningEntity->GetObjectID(), racingPlayer.playerID,
racingPlayer.vehicleID, UNASSIGNED_SYSTEM_ADDRESS); racingPlayer.vehicleID, UNASSIGNED_SYSTEM_ADDRESS);
} }
@ -267,11 +267,11 @@ void RacingControlComponent::OnRacingClientReady(Entity* player) {
racingPlayer.playerLoaded = true; racingPlayer.playerLoaded = true;
GameMessages::SendRacingPlayerLoaded( GameMessages::SendRacingPlayerLoaded(
m_Parent->GetObjectID(), racingPlayer.playerID, m_OwningEntity->GetObjectID(), racingPlayer.playerID,
racingPlayer.vehicleID, UNASSIGNED_SYSTEM_ADDRESS); racingPlayer.vehicleID, UNASSIGNED_SYSTEM_ADDRESS);
} }
EntityManager::Instance()->SerializeEntity(m_Parent); EntityManager::Instance()->SerializeEntity(m_OwningEntity);
} }
void RacingControlComponent::OnRequestDie(Entity* player) { void RacingControlComponent::OnRequestDie(Entity* player) {
@ -304,15 +304,15 @@ void RacingControlComponent::OnRequestDie(Entity* player) {
// Respawn the player in 2 seconds, as was done in live. Not sure if this value is in a setting somewhere else... // Respawn the player in 2 seconds, as was done in live. Not sure if this value is in a setting somewhere else...
vehicle->AddCallbackTimer(2.0f, [=]() { vehicle->AddCallbackTimer(2.0f, [=]() {
if (!vehicle || !this->m_Parent) return; if (!vehicle || !this->m_OwningEntity) return;
GameMessages::SendRacingResetPlayerToLastReset( GameMessages::SendRacingResetPlayerToLastReset(
m_Parent->GetObjectID(), racingPlayer.playerID, m_OwningEntity->GetObjectID(), racingPlayer.playerID,
UNASSIGNED_SYSTEM_ADDRESS); UNASSIGNED_SYSTEM_ADDRESS);
GameMessages::SendVehicleStopBoost(vehicle, player->GetSystemAddress(), true); GameMessages::SendVehicleStopBoost(vehicle, player->GetSystemAddress(), true);
GameMessages::SendRacingSetPlayerResetInfo( GameMessages::SendRacingSetPlayerResetInfo(
m_Parent->GetObjectID(), racingPlayer.lap, m_OwningEntity->GetObjectID(), racingPlayer.lap,
racingPlayer.respawnIndex, player->GetObjectID(), racingPlayer.respawnIndex, player->GetObjectID(),
racingPlayer.respawnPosition, racingPlayer.respawnIndex + 1, racingPlayer.respawnPosition, racingPlayer.respawnIndex + 1,
UNASSIGNED_SYSTEM_ADDRESS); UNASSIGNED_SYSTEM_ADDRESS);
@ -330,12 +330,12 @@ void RacingControlComponent::OnRequestDie(Entity* player) {
} }
} else { } else {
GameMessages::SendRacingSetPlayerResetInfo( GameMessages::SendRacingSetPlayerResetInfo(
m_Parent->GetObjectID(), racingPlayer.lap, m_OwningEntity->GetObjectID(), racingPlayer.lap,
racingPlayer.respawnIndex, player->GetObjectID(), racingPlayer.respawnIndex, player->GetObjectID(),
racingPlayer.respawnPosition, racingPlayer.respawnIndex + 1, racingPlayer.respawnPosition, racingPlayer.respawnIndex + 1,
UNASSIGNED_SYSTEM_ADDRESS); UNASSIGNED_SYSTEM_ADDRESS);
GameMessages::SendRacingResetPlayerToLastReset( GameMessages::SendRacingResetPlayerToLastReset(
m_Parent->GetObjectID(), racingPlayer.playerID, m_OwningEntity->GetObjectID(), racingPlayer.playerID,
UNASSIGNED_SYSTEM_ADDRESS); UNASSIGNED_SYSTEM_ADDRESS);
} }
} }
@ -379,11 +379,11 @@ void RacingControlComponent::HandleMessageBoxResponse(Entity* player, int32_t bu
// Calculate the score, different loot depending on player count // Calculate the score, different loot depending on player count
const auto score = m_LoadedPlayers * 10 + data->finished; const auto score = m_LoadedPlayers * 10 + data->finished;
LootGenerator::Instance().GiveActivityLoot(player, m_Parent, m_ActivityID, score); LootGenerator::Instance().GiveActivityLoot(player, m_OwningEntity, m_ActivityID, score);
// Giving rewards // Giving rewards
GameMessages::SendNotifyRacingClient( GameMessages::SendNotifyRacingClient(
m_Parent->GetObjectID(), 2, 0, LWOOBJID_EMPTY, u"", m_OwningEntity->GetObjectID(), 2, 0, LWOOBJID_EMPTY, u"",
player->GetObjectID(), UNASSIGNED_SYSTEM_ADDRESS); player->GetObjectID(), UNASSIGNED_SYSTEM_ADDRESS);
auto* missionComponent = player->GetComponent<MissionComponent>(); auto* missionComponent = player->GetComponent<MissionComponent>();
@ -413,7 +413,7 @@ void RacingControlComponent::HandleMessageBoxResponse(Entity* player, int32_t bu
// Exiting race // Exiting race
GameMessages::SendNotifyRacingClient( GameMessages::SendNotifyRacingClient(
m_Parent->GetObjectID(), 3, 0, LWOOBJID_EMPTY, u"", m_OwningEntity->GetObjectID(), 3, 0, LWOOBJID_EMPTY, u"",
player->GetObjectID(), UNASSIGNED_SYSTEM_ADDRESS); player->GetObjectID(), UNASSIGNED_SYSTEM_ADDRESS);
auto* playerInstance = dynamic_cast<Player*>(player); auto* playerInstance = dynamic_cast<Player*>(player);
@ -621,7 +621,7 @@ void RacingControlComponent::Update(float deltaTime) {
// Setup for racing // Setup for racing
if (m_StartTimer == 0) { if (m_StartTimer == 0) {
GameMessages::SendNotifyRacingClient( GameMessages::SendNotifyRacingClient(
m_Parent->GetObjectID(), 1, 0, LWOOBJID_EMPTY, u"", m_OwningEntity->GetObjectID(), 1, 0, LWOOBJID_EMPTY, u"",
LWOOBJID_EMPTY, UNASSIGNED_SYSTEM_ADDRESS); LWOOBJID_EMPTY, UNASSIGNED_SYSTEM_ADDRESS);
for (const auto& player : m_RacingPlayers) { for (const auto& player : m_RacingPlayers) {
@ -705,14 +705,14 @@ void RacingControlComponent::Update(float deltaTime) {
} }
// Start the race // Start the race
GameMessages::SendActivityStart(m_Parent->GetObjectID(), GameMessages::SendActivityStart(m_OwningEntity->GetObjectID(),
UNASSIGNED_SYSTEM_ADDRESS); UNASSIGNED_SYSTEM_ADDRESS);
m_Started = true; m_Started = true;
Game::logger->Log("RacingControlComponent", "Starting race"); Game::logger->Log("RacingControlComponent", "Starting race");
EntityManager::Instance()->SerializeEntity(m_Parent); EntityManager::Instance()->SerializeEntity(m_OwningEntity);
m_StartTime = std::time(nullptr); m_StartTime = std::time(nullptr);
} }
@ -743,7 +743,7 @@ void RacingControlComponent::Update(float deltaTime) {
// If the player is this far below the map, safe to assume they should // If the player is this far below the map, safe to assume they should
// be smashed by death plane // be smashed by death plane
if (vehiclePosition.y < -500) { if (vehiclePosition.y < -500) {
GameMessages::SendDie(vehicle, m_Parent->GetObjectID(), GameMessages::SendDie(vehicle, m_OwningEntity->GetObjectID(),
LWOOBJID_EMPTY, true, eKillType::VIOLENT, u"", 0, 0, 0, LWOOBJID_EMPTY, true, eKillType::VIOLENT, u"", 0, 0, 0,
true, false, 0); true, false, 0);

View File

@ -43,7 +43,7 @@ RailActivatorComponent::RailActivatorComponent(Entity* parent, int32_t component
RailActivatorComponent::~RailActivatorComponent() = default; RailActivatorComponent::~RailActivatorComponent() = default;
void RailActivatorComponent::OnUse(Entity* originator) { void RailActivatorComponent::OnUse(Entity* originator) {
auto* rebuildComponent = m_Parent->GetComponent<RebuildComponent>(); auto* rebuildComponent = m_OwningEntity->GetComponent<RebuildComponent>();
if (rebuildComponent != nullptr && rebuildComponent->GetState() != eRebuildState::COMPLETED) if (rebuildComponent != nullptr && rebuildComponent->GetState() != eRebuildState::COMPLETED)
return; return;
@ -67,7 +67,7 @@ void RailActivatorComponent::OnUse(Entity* originator) {
const auto originatorID = originator->GetObjectID(); const auto originatorID = originator->GetObjectID();
m_Parent->AddCallbackTimer(animationLength, [originatorID, this]() { m_OwningEntity->AddCallbackTimer(animationLength, [originatorID, this]() {
auto* originator = EntityManager::Instance()->GetEntity(originatorID); auto* originator = EntityManager::Instance()->GetEntity(originatorID);
if (originator == nullptr) { if (originator == nullptr) {
@ -78,7 +78,7 @@ void RailActivatorComponent::OnUse(Entity* originator) {
m_loopSound, m_StopSound, originator->GetSystemAddress(), m_loopSound, m_StopSound, originator->GetSystemAddress(),
m_PathStart, m_PathDirection, m_DamageImmune, m_NoAggro, m_NotifyArrived, m_PathStart, m_PathDirection, m_DamageImmune, m_NoAggro, m_NotifyArrived,
m_ShowNameBillboard, m_CameraLocked, m_CollisionEnabled, m_UseDB, m_ComponentID, m_ShowNameBillboard, m_CameraLocked, m_CollisionEnabled, m_UseDB, m_ComponentID,
m_Parent->GetObjectID()); m_OwningEntity->GetObjectID());
}); });
} }
@ -106,7 +106,7 @@ void RailActivatorComponent::OnRailMovementReady(Entity* originator) const {
GameMessages::SendSetRailMovement(originator->GetObjectID(), m_PathDirection, m_Path, m_PathStart, GameMessages::SendSetRailMovement(originator->GetObjectID(), m_PathDirection, m_Path, m_PathStart,
originator->GetSystemAddress(), m_ComponentID, originator->GetSystemAddress(), m_ComponentID,
m_Parent->GetObjectID()); m_OwningEntity->GetObjectID());
} }
} }
@ -116,7 +116,7 @@ void RailActivatorComponent::OnCancelRailMovement(Entity* originator) {
true, true, true, true, true, true, true true, true, true, true, true, true, true
); );
auto* rebuildComponent = m_Parent->GetComponent<RebuildComponent>(); auto* rebuildComponent = m_OwningEntity->GetComponent<RebuildComponent>();
if (rebuildComponent != nullptr) { if (rebuildComponent != nullptr) {
// Set back reset time // Set back reset time

View File

@ -33,14 +33,14 @@ RebuildComponent::RebuildComponent(Entity* entity) : Component(entity) {
// 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_OwningEntity->GetVarAsString(u"rebuild_activators"), 0x1F);
if (positionAsVector.size() == 3 && if (positionAsVector.size() == 3 &&
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 { } else {
Game::logger->Log("RebuildComponent", "Failed to find activator position for lot %i. Defaulting to parents position.", m_Parent->GetLOT()); Game::logger->Log("RebuildComponent", "Failed to find activator position for lot %i. Defaulting to parents position.", m_OwningEntity->GetLOT());
m_ActivatorPosition = m_Parent->GetPosition(); m_ActivatorPosition = m_OwningEntity->GetPosition();
} }
SpawnActivator(); SpawnActivator();
@ -58,7 +58,7 @@ RebuildComponent::~RebuildComponent() {
} }
void RebuildComponent::Serialize(RakNet::BitStream* outBitStream, bool bIsInitialUpdate, unsigned int& flags) { void RebuildComponent::Serialize(RakNet::BitStream* outBitStream, bool bIsInitialUpdate, unsigned int& flags) {
if (m_Parent->GetComponent(eReplicaComponentType::DESTROYABLE) == nullptr) { if (m_OwningEntity->GetComponent(eReplicaComponentType::DESTROYABLE) == nullptr) {
if (bIsInitialUpdate) { if (bIsInitialUpdate) {
outBitStream->Write(false); outBitStream->Write(false);
} }
@ -120,7 +120,7 @@ void RebuildComponent::Update(float deltaTime) {
else { else {
m_SoftTimer = 5.0f; m_SoftTimer = 5.0f;
EntityManager::Instance()->SerializeEntity(m_Parent); EntityManager::Instance()->SerializeEntity(m_OwningEntity);
}*/ }*/
switch (m_State) { switch (m_State) {
@ -128,7 +128,7 @@ void RebuildComponent::Update(float deltaTime) {
SpawnActivator(); SpawnActivator();
m_TimeBeforeDrain = 0; m_TimeBeforeDrain = 0;
auto* spawner = m_Parent->GetSpawner(); auto* spawner = m_OwningEntity->GetSpawner();
const bool isSmashGroup = spawner != nullptr ? spawner->GetIsSpawnSmashGroup() : false; const bool isSmashGroup = spawner != nullptr ? spawner->GetIsSpawnSmashGroup() : false;
if (isSmashGroup) { if (isSmashGroup) {
@ -139,13 +139,13 @@ void RebuildComponent::Update(float deltaTime) {
if (m_TimerIncomplete >= m_TimeBeforeSmash - 4.0f) { if (m_TimerIncomplete >= m_TimeBeforeSmash - 4.0f) {
m_ShowResetEffect = true; m_ShowResetEffect = true;
EntityManager::Instance()->SerializeEntity(m_Parent); EntityManager::Instance()->SerializeEntity(m_OwningEntity);
} }
if (m_TimerIncomplete >= m_TimeBeforeSmash) { if (m_TimerIncomplete >= m_TimeBeforeSmash) {
m_Builder = LWOOBJID_EMPTY; m_Builder = LWOOBJID_EMPTY;
GameMessages::SendDieNoImplCode(m_Parent, LWOOBJID_EMPTY, LWOOBJID_EMPTY, eKillType::VIOLENT, u"", 0.0f, 0.0f, 0.0f, false, true); GameMessages::SendDieNoImplCode(m_OwningEntity, LWOOBJID_EMPTY, LWOOBJID_EMPTY, eKillType::VIOLENT, u"", 0.0f, 0.0f, 0.0f, false, true);
ResetRebuild(false); ResetRebuild(false);
} }
@ -163,13 +163,13 @@ void RebuildComponent::Update(float deltaTime) {
if (!m_ShowResetEffect) { if (!m_ShowResetEffect) {
m_ShowResetEffect = true; m_ShowResetEffect = true;
EntityManager::Instance()->SerializeEntity(m_Parent); EntityManager::Instance()->SerializeEntity(m_OwningEntity);
} }
} }
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::SendDieNoImplCode(m_OwningEntity, LWOOBJID_EMPTY, LWOOBJID_EMPTY, eKillType::VIOLENT, u"", 0.0f, 0.0f, 0.0f, false, true);
ResetRebuild(false); ResetRebuild(false);
} }
@ -225,13 +225,13 @@ void RebuildComponent::Update(float deltaTime) {
if (m_TimerIncomplete >= m_TimeBeforeSmash - 4.0f) { if (m_TimerIncomplete >= m_TimeBeforeSmash - 4.0f) {
m_ShowResetEffect = true; m_ShowResetEffect = true;
EntityManager::Instance()->SerializeEntity(m_Parent); EntityManager::Instance()->SerializeEntity(m_OwningEntity);
} }
if (m_TimerIncomplete >= m_TimeBeforeSmash) { if (m_TimerIncomplete >= m_TimeBeforeSmash) {
m_Builder = LWOOBJID_EMPTY; m_Builder = LWOOBJID_EMPTY;
GameMessages::SendDieNoImplCode(m_Parent, LWOOBJID_EMPTY, LWOOBJID_EMPTY, eKillType::VIOLENT, u"", 0.0f, 0.0f, 0.0f, false, true); GameMessages::SendDieNoImplCode(m_OwningEntity, LWOOBJID_EMPTY, LWOOBJID_EMPTY, eKillType::VIOLENT, u"", 0.0f, 0.0f, 0.0f, false, true);
ResetRebuild(false); ResetRebuild(false);
} }
@ -260,16 +260,16 @@ void RebuildComponent::SpawnActivator() {
EntityInfo info; EntityInfo info;
info.lot = 6604; info.lot = 6604;
info.spawnerID = m_Parent->GetObjectID(); info.spawnerID = m_OwningEntity->GetObjectID();
info.pos = m_ActivatorPosition == NiPoint3::ZERO ? m_Parent->GetPosition() : m_ActivatorPosition; info.pos = m_ActivatorPosition == NiPoint3::ZERO ? m_OwningEntity->GetPosition() : m_ActivatorPosition;
m_Activator = EntityManager::Instance()->CreateEntity(info, nullptr, m_Parent); m_Activator = EntityManager::Instance()->CreateEntity(info, nullptr, m_OwningEntity);
if (m_Activator) { if (m_Activator) {
m_ActivatorId = m_Activator->GetObjectID(); m_ActivatorId = m_Activator->GetObjectID();
EntityManager::Instance()->ConstructEntity(m_Activator); EntityManager::Instance()->ConstructEntity(m_Activator);
} }
EntityManager::Instance()->SerializeEntity(m_Parent); EntityManager::Instance()->SerializeEntity(m_OwningEntity);
} }
} }
} }
@ -405,25 +405,25 @@ void RebuildComponent::StartRebuild(Entity* user) {
EntityManager::Instance()->SerializeEntity(user); EntityManager::Instance()->SerializeEntity(user);
GameMessages::SendRebuildNotifyState(m_Parent, m_State, eRebuildState::BUILDING, user->GetObjectID()); GameMessages::SendRebuildNotifyState(m_OwningEntity, m_State, eRebuildState::BUILDING, user->GetObjectID());
GameMessages::SendEnableRebuild(m_Parent, true, false, false, eQuickBuildFailReason::NOT_GIVEN, 0.0f, user->GetObjectID()); GameMessages::SendEnableRebuild(m_OwningEntity, true, false, false, eQuickBuildFailReason::NOT_GIVEN, 0.0f, user->GetObjectID());
m_State = eRebuildState::BUILDING; m_State = eRebuildState::BUILDING;
m_StateDirty = true; m_StateDirty = true;
EntityManager::Instance()->SerializeEntity(m_Parent); EntityManager::Instance()->SerializeEntity(m_OwningEntity);
auto* movingPlatform = m_Parent->GetComponent<MovingPlatformComponent>(); auto* movingPlatform = m_OwningEntity->GetComponent<MovingPlatformComponent>();
if (movingPlatform != nullptr) { if (movingPlatform != nullptr) {
movingPlatform->OnRebuildInitilized(); movingPlatform->OnRebuildInitilized();
} }
for (auto* script : CppScripts::GetEntityScripts(m_Parent)) { for (auto* script : CppScripts::GetEntityScripts(m_OwningEntity)) {
script->OnRebuildStart(m_Parent, user); script->OnRebuildStart(m_OwningEntity, user);
} }
// Notify scripts and possible subscribers // Notify scripts and possible subscribers
for (auto* script : CppScripts::GetEntityScripts(m_Parent)) for (auto* script : CppScripts::GetEntityScripts(m_OwningEntity))
script->OnRebuildNotifyState(m_Parent, m_State); script->OnRebuildNotifyState(m_OwningEntity, m_State);
for (const auto& cb : m_RebuildStateCallbacks) for (const auto& cb : m_RebuildStateCallbacks)
cb(m_State); cb(m_State);
} }
@ -445,10 +445,10 @@ void RebuildComponent::CompleteRebuild(Entity* user) {
EntityManager::Instance()->SerializeEntity(user); EntityManager::Instance()->SerializeEntity(user);
GameMessages::SendRebuildNotifyState(m_Parent, m_State, eRebuildState::COMPLETED, user->GetObjectID()); GameMessages::SendRebuildNotifyState(m_OwningEntity, m_State, eRebuildState::COMPLETED, user->GetObjectID());
GameMessages::SendPlayFXEffect(m_Parent, 507, u"create", "BrickFadeUpVisCompleteEffect", LWOOBJID_EMPTY, 0.4f, 1.0f, true); GameMessages::SendPlayFXEffect(m_OwningEntity, 507, u"create", "BrickFadeUpVisCompleteEffect", LWOOBJID_EMPTY, 0.4f, 1.0f, true);
GameMessages::SendEnableRebuild(m_Parent, false, false, true, eQuickBuildFailReason::NOT_GIVEN, m_ResetTime, user->GetObjectID()); GameMessages::SendEnableRebuild(m_OwningEntity, false, false, true, eQuickBuildFailReason::NOT_GIVEN, m_ResetTime, user->GetObjectID());
GameMessages::SendTerminateInteraction(user->GetObjectID(), eTerminateType::FROM_INTERACTION, m_Parent->GetObjectID()); GameMessages::SendTerminateInteraction(user->GetObjectID(), eTerminateType::FROM_INTERACTION, m_OwningEntity->GetObjectID());
m_State = eRebuildState::COMPLETED; m_State = eRebuildState::COMPLETED;
@ -456,7 +456,7 @@ void RebuildComponent::CompleteRebuild(Entity* user) {
m_Timer = 0.0f; m_Timer = 0.0f;
m_DrainedImagination = 0; m_DrainedImagination = 0;
EntityManager::Instance()->SerializeEntity(m_Parent); EntityManager::Instance()->SerializeEntity(m_OwningEntity);
// Removes extra item requirements, isn't live accurate. // Removes extra item requirements, isn't live accurate.
// In live, all items were removed at the start of the quickbuild, then returned if it was cancelled. // In live, all items were removed at the start of the quickbuild, then returned if it was cancelled.
@ -468,7 +468,7 @@ void RebuildComponent::CompleteRebuild(Entity* user) {
DespawnActivator(); DespawnActivator();
// Set owner override so that entities smashed by this quickbuild will result in the builder getting rewards. // Set owner override so that entities smashed by this quickbuild will result in the builder getting rewards.
m_Parent->SetOwnerOverride(user->GetObjectID()); m_OwningEntity->SetOwnerOverride(user->GetObjectID());
auto* builder = GetBuilder(); auto* builder = GetBuilder();
@ -486,13 +486,13 @@ void RebuildComponent::CompleteRebuild(Entity* user) {
auto* missionComponent = builder->GetComponent<MissionComponent>(); auto* missionComponent = builder->GetComponent<MissionComponent>();
if (missionComponent) missionComponent->Progress(eMissionTaskType::ACTIVITY, m_ActivityId); if (missionComponent) missionComponent->Progress(eMissionTaskType::ACTIVITY, m_ActivityId);
} }
LootGenerator::Instance().DropActivityLoot(builder, m_Parent, m_ActivityId, 1); LootGenerator::Instance().DropActivityLoot(builder, m_OwningEntity, m_ActivityId, 1);
} }
// Notify scripts // Notify scripts
for (auto* script : CppScripts::GetEntityScripts(m_Parent)) { for (auto* script : CppScripts::GetEntityScripts(m_OwningEntity)) {
script->OnRebuildComplete(m_Parent, user); script->OnRebuildComplete(m_OwningEntity, user);
script->OnRebuildNotifyState(m_Parent, m_State); script->OnRebuildNotifyState(m_OwningEntity, m_State);
} }
// Notify subscribers // Notify subscribers
@ -501,9 +501,9 @@ void RebuildComponent::CompleteRebuild(Entity* user) {
for (const auto& callback : m_RebuildCompleteCallbacks) for (const auto& callback : m_RebuildCompleteCallbacks)
callback(user); callback(user);
m_Parent->TriggerEvent(eTriggerEventType::REBUILD_COMPLETE, user); m_OwningEntity->TriggerEvent(eTriggerEventType::REBUILD_COMPLETE, user);
auto* movingPlatform = m_Parent->GetComponent<MovingPlatformComponent>(); auto* movingPlatform = m_OwningEntity->GetComponent<MovingPlatformComponent>();
if (movingPlatform != nullptr) { if (movingPlatform != nullptr) {
movingPlatform->OnCompleteRebuild(); movingPlatform->OnCompleteRebuild();
} }
@ -512,7 +512,7 @@ void RebuildComponent::CompleteRebuild(Entity* user) {
auto* character = user->GetCharacter(); auto* character = user->GetCharacter();
if (character != nullptr) { if (character != nullptr) {
const auto flagNumber = m_Parent->GetVar<int32_t>(u"quickbuild_single_build_player_flag"); const auto flagNumber = m_OwningEntity->GetVar<int32_t>(u"quickbuild_single_build_player_flag");
if (flagNumber != 0) { if (flagNumber != 0) {
character->SetPlayerFlag(flagNumber, true); character->SetPlayerFlag(flagNumber, true);
@ -525,14 +525,14 @@ void RebuildComponent::ResetRebuild(bool failed) {
Entity* builder = GetBuilder(); Entity* builder = GetBuilder();
if (m_State == eRebuildState::BUILDING && builder) { if (m_State == eRebuildState::BUILDING && builder) {
GameMessages::SendEnableRebuild(m_Parent, false, false, failed, eQuickBuildFailReason::NOT_GIVEN, m_ResetTime, builder->GetObjectID()); GameMessages::SendEnableRebuild(m_OwningEntity, false, false, failed, eQuickBuildFailReason::NOT_GIVEN, m_ResetTime, builder->GetObjectID());
if (failed) { if (failed) {
RenderComponent::PlayAnimation(builder, u"rebuild-fail"); RenderComponent::PlayAnimation(builder, u"rebuild-fail");
} }
} }
GameMessages::SendRebuildNotifyState(m_Parent, m_State, eRebuildState::RESETTING, LWOOBJID_EMPTY); GameMessages::SendRebuildNotifyState(m_OwningEntity, m_State, eRebuildState::RESETTING, LWOOBJID_EMPTY);
m_State = eRebuildState::RESETTING; m_State = eRebuildState::RESETTING;
m_StateDirty = true; m_StateDirty = true;
@ -541,15 +541,15 @@ void RebuildComponent::ResetRebuild(bool failed) {
m_ShowResetEffect = false; m_ShowResetEffect = false;
m_DrainedImagination = 0; m_DrainedImagination = 0;
EntityManager::Instance()->SerializeEntity(m_Parent); EntityManager::Instance()->SerializeEntity(m_OwningEntity);
// Notify scripts and possible subscribers // Notify scripts and possible subscribers
for (auto* script : CppScripts::GetEntityScripts(m_Parent)) for (auto* script : CppScripts::GetEntityScripts(m_OwningEntity))
script->OnRebuildNotifyState(m_Parent, m_State); script->OnRebuildNotifyState(m_OwningEntity, m_State);
for (const auto& cb : m_RebuildStateCallbacks) for (const auto& cb : m_RebuildStateCallbacks)
cb(m_State); cb(m_State);
m_Parent->ScheduleKillAfterUpdate(); m_OwningEntity->ScheduleKillAfterUpdate();
if (m_Activator) { if (m_Activator) {
m_Activator->ScheduleKillAfterUpdate(); m_Activator->ScheduleKillAfterUpdate();
@ -564,24 +564,24 @@ void RebuildComponent::CancelRebuild(Entity* entity, eQuickBuildFailReason failR
const auto entityID = entity != nullptr ? entity->GetObjectID() : LWOOBJID_EMPTY; const auto entityID = entity != nullptr ? entity->GetObjectID() : LWOOBJID_EMPTY;
// Notify the client that a state has changed // Notify the client that a state has changed
GameMessages::SendRebuildNotifyState(m_Parent, m_State, eRebuildState::INCOMPLETE, entityID); GameMessages::SendRebuildNotifyState(m_OwningEntity, m_State, eRebuildState::INCOMPLETE, entityID);
GameMessages::SendEnableRebuild(m_Parent, false, true, false, failReason, m_Timer, entityID); GameMessages::SendEnableRebuild(m_OwningEntity, false, true, false, failReason, m_Timer, entityID);
// Now terminate any interaction with the rebuild // Now terminate any interaction with the rebuild
GameMessages::SendTerminateInteraction(entityID, eTerminateType::FROM_INTERACTION, m_Parent->GetObjectID()); GameMessages::SendTerminateInteraction(entityID, eTerminateType::FROM_INTERACTION, m_OwningEntity->GetObjectID());
GameMessages::SendTerminateInteraction(m_Parent->GetObjectID(), eTerminateType::FROM_INTERACTION, m_Parent->GetObjectID()); GameMessages::SendTerminateInteraction(m_OwningEntity->GetObjectID(), eTerminateType::FROM_INTERACTION, m_OwningEntity->GetObjectID());
// Now update the component itself // Now update the component itself
m_State = eRebuildState::INCOMPLETE; m_State = eRebuildState::INCOMPLETE;
m_StateDirty = true; m_StateDirty = true;
// Notify scripts and possible subscribers // Notify scripts and possible subscribers
for (auto* script : CppScripts::GetEntityScripts(m_Parent)) for (auto* script : CppScripts::GetEntityScripts(m_OwningEntity))
script->OnRebuildNotifyState(m_Parent, m_State); script->OnRebuildNotifyState(m_OwningEntity, m_State);
for (const auto& cb : m_RebuildStateCallbacks) for (const auto& cb : m_RebuildStateCallbacks)
cb(m_State); cb(m_State);
EntityManager::Instance()->SerializeEntity(m_Parent); EntityManager::Instance()->SerializeEntity(m_OwningEntity);
} }
if (entity == nullptr) { if (entity == nullptr) {

View File

@ -141,7 +141,7 @@ void RenderComponent::Update(const float deltaTime) {
void RenderComponent::PlayEffect(const int32_t effectId, const std::u16string& effectType, const std::string& name, const LWOOBJID secondary, const float priority, const float scale, const bool serialize) { void RenderComponent::PlayEffect(const int32_t effectId, const std::u16string& effectType, const std::string& name, const LWOOBJID secondary, const float priority, const float scale, const bool serialize) {
RemoveEffect(name); RemoveEffect(name);
GameMessages::SendPlayFXEffect(m_Parent, effectId, effectType, name, secondary, priority, scale, serialize); GameMessages::SendPlayFXEffect(m_OwningEntity, effectId, effectType, name, secondary, priority, scale, serialize);
auto* effect = AddEffect(effectId, name, effectType); auto* effect = AddEffect(effectId, name, effectType);
@ -180,7 +180,7 @@ void RenderComponent::PlayEffect(const int32_t effectId, const std::u16string& e
} }
void RenderComponent::StopEffect(const std::string& name, const bool killImmediate) { void RenderComponent::StopEffect(const std::string& name, const bool killImmediate) {
GameMessages::SendStopFXEffect(m_Parent, killImmediate, name); GameMessages::SendStopFXEffect(m_OwningEntity, killImmediate, name);
RemoveEffect(name); RemoveEffect(name);
} }

View File

@ -7,8 +7,8 @@
#include "Entity.h" #include "Entity.h"
RigidbodyPhantomPhysicsComponent::RigidbodyPhantomPhysicsComponent(Entity* parent) : Component(parent) { RigidbodyPhantomPhysicsComponent::RigidbodyPhantomPhysicsComponent(Entity* parent) : Component(parent) {
m_Position = m_Parent->GetDefaultPosition(); m_Position = m_OwningEntity->GetDefaultPosition();
m_Rotation = m_Parent->GetDefaultRotation(); m_Rotation = m_OwningEntity->GetDefaultRotation();
m_IsDirty = true; m_IsDirty = true;
} }

View File

@ -4,8 +4,8 @@
#include "CharacterComponent.h" #include "CharacterComponent.h"
RocketLaunchLupComponent::RocketLaunchLupComponent(Entity* parent) : Component(parent) { RocketLaunchLupComponent::RocketLaunchLupComponent(Entity* parent) : Component(parent) {
m_Parent = parent; m_OwningEntity = parent;
std::string zoneString = GeneralUtils::UTF16ToWTF8(m_Parent->GetVar<std::u16string>(u"MultiZoneIDs")); std::string zoneString = GeneralUtils::UTF16ToWTF8(m_OwningEntity->GetVar<std::u16string>(u"MultiZoneIDs"));
std::stringstream ss(zoneString); std::stringstream ss(zoneString);
for (int i; ss >> i;) { for (int i; ss >> i;) {
m_LUPWorlds.push_back(i); m_LUPWorlds.push_back(i);
@ -21,11 +21,11 @@ void RocketLaunchLupComponent::OnUse(Entity* originator) {
if (!rocket) return; if (!rocket) return;
// the LUP world menu is just the property menu, the client knows how to handle it // the LUP world menu is just the property menu, the client knows how to handle it
GameMessages::SendPropertyEntranceBegin(m_Parent->GetObjectID(), m_Parent->GetSystemAddress()); GameMessages::SendPropertyEntranceBegin(m_OwningEntity->GetObjectID(), m_OwningEntity->GetSystemAddress());
} }
void RocketLaunchLupComponent::OnSelectWorld(Entity* originator, uint32_t index) { void RocketLaunchLupComponent::OnSelectWorld(Entity* originator, uint32_t index) {
auto* rocketLaunchpadControlComponent = m_Parent->GetComponent<RocketLaunchpadControlComponent>(); auto* rocketLaunchpadControlComponent = m_OwningEntity->GetComponent<RocketLaunchpadControlComponent>();
if (!rocketLaunchpadControlComponent) return; if (!rocketLaunchpadControlComponent) return;
rocketLaunchpadControlComponent->Launch(originator, m_LUPWorlds[index], 0); rocketLaunchpadControlComponent->Launch(originator, m_LUPWorlds[index], 0);

View File

@ -77,7 +77,7 @@ void RocketLaunchpadControlComponent::Launch(Entity* originator, LWOMAPID mapId,
SetSelectedMapId(originator->GetObjectID(), zone); SetSelectedMapId(originator->GetObjectID(), zone);
GameMessages::SendFireEventClientSide(m_Parent->GetObjectID(), originator->GetSystemAddress(), u"RocketEquipped", rocket->GetId(), cloneId, -1, originator->GetObjectID()); GameMessages::SendFireEventClientSide(m_OwningEntity->GetObjectID(), originator->GetSystemAddress(), u"RocketEquipped", rocket->GetId(), cloneId, -1, originator->GetObjectID());
GameMessages::SendChangeObjectWorldState(rocket->GetId(), eObjectWorldState::ATTACHED, UNASSIGNED_SYSTEM_ADDRESS); GameMessages::SendChangeObjectWorldState(rocket->GetId(), eObjectWorldState::ATTACHED, UNASSIGNED_SYSTEM_ADDRESS);
@ -89,12 +89,12 @@ void RocketLaunchpadControlComponent::OnUse(Entity* originator) {
// instead we let their OnUse handlers do their things // instead we let their OnUse handlers do their things
// which components of an Object have their OnUse called when using them // which components of an Object have their OnUse called when using them
// so we don't need to call it here // so we don't need to call it here
auto* propertyEntrance = m_Parent->GetComponent<PropertyEntranceComponent>(); auto* propertyEntrance = m_OwningEntity->GetComponent<PropertyEntranceComponent>();
if (propertyEntrance) { if (propertyEntrance) {
return; return;
} }
auto* rocketLaunchLUP = m_Parent->GetComponent<RocketLaunchLupComponent>(); auto* rocketLaunchLUP = m_OwningEntity->GetComponent<RocketLaunchLupComponent>();
if (rocketLaunchLUP) { if (rocketLaunchLUP) {
return; return;
} }

View File

@ -53,7 +53,7 @@ ScriptedActivityComponent::ScriptedActivityComponent(Entity* parent, int activit
} }
} }
auto* destroyableComponent = m_Parent->GetComponent<DestroyableComponent>(); auto* destroyableComponent = m_OwningEntity->GetComponent<DestroyableComponent>();
if (destroyableComponent) { if (destroyableComponent) {
// check for LMIs and set the loot LMIs // check for LMIs and set the loot LMIs
@ -137,11 +137,11 @@ void ScriptedActivityComponent::PlayerJoin(Entity* player) {
instance->AddParticipant(player); instance->AddParticipant(player);
} }
EntityManager::Instance()->SerializeEntity(m_Parent); EntityManager::Instance()->SerializeEntity(m_OwningEntity);
} }
void ScriptedActivityComponent::PlayerJoinLobby(Entity* player) { void ScriptedActivityComponent::PlayerJoinLobby(Entity* player) {
if (!m_Parent->HasComponent(eReplicaComponentType::QUICK_BUILD)) if (!m_OwningEntity->HasComponent(eReplicaComponentType::QUICK_BUILD))
GameMessages::SendMatchResponse(player, player->GetSystemAddress(), 0); // tell the client they joined a lobby GameMessages::SendMatchResponse(player, player->GetSystemAddress(), 0); // tell the client they joined a lobby
LobbyPlayer* newLobbyPlayer = new LobbyPlayer(); LobbyPlayer* newLobbyPlayer = new LobbyPlayer();
newLobbyPlayer->entityID = player->GetObjectID(); newLobbyPlayer->entityID = player->GetObjectID();
@ -304,7 +304,7 @@ bool ScriptedActivityComponent::HasLobby() const {
bool ScriptedActivityComponent::IsValidActivity(Entity* player) { bool ScriptedActivityComponent::IsValidActivity(Entity* player) {
// Makes it so that scripted activities with an unimplemented map cannot be joined // Makes it so that scripted activities with an unimplemented map cannot be joined
/*if (player->GetGMLevel() < eGameMasterLevel::DEVELOPER && (m_ActivityInfo.instanceMapID == 1302 || m_ActivityInfo.instanceMapID == 1301)) { /*if (player->GetGMLevel() < eGameMasterLevel::DEVELOPER && (m_ActivityInfo.instanceMapID == 1302 || m_ActivityInfo.instanceMapID == 1301)) {
if (m_Parent->GetLOT() == 4860) { if (m_OwningEntity->GetLOT() == 4860) {
auto* missionComponent = player->GetComponent<MissionComponent>(); auto* missionComponent = player->GetComponent<MissionComponent>();
missionComponent->CompleteMission(229); missionComponent->CompleteMission(229);
} }
@ -390,7 +390,7 @@ void ScriptedActivityComponent::PlayerReady(Entity* player, bool bReady) {
} }
ActivityInstance* ScriptedActivityComponent::NewInstance() { ActivityInstance* ScriptedActivityComponent::NewInstance() {
auto* instance = new ActivityInstance(m_Parent, m_ActivityInfo); auto* instance = new ActivityInstance(m_OwningEntity, m_ActivityInfo);
m_Instances.push_back(instance); m_Instances.push_back(instance);
return instance; return instance;
} }
@ -445,7 +445,7 @@ void ScriptedActivityComponent::RemoveActivityPlayerData(LWOOBJID playerID) {
m_ActivityPlayers[i] = nullptr; m_ActivityPlayers[i] = nullptr;
m_ActivityPlayers.erase(m_ActivityPlayers.begin() + i); m_ActivityPlayers.erase(m_ActivityPlayers.begin() + i);
EntityManager::Instance()->SerializeEntity(m_Parent); EntityManager::Instance()->SerializeEntity(m_OwningEntity);
return; return;
} }
@ -458,7 +458,7 @@ ActivityPlayer* ScriptedActivityComponent::AddActivityPlayerData(LWOOBJID player
return data; return data;
m_ActivityPlayers.push_back(new ActivityPlayer{ playerID, {} }); m_ActivityPlayers.push_back(new ActivityPlayer{ playerID, {} });
EntityManager::Instance()->SerializeEntity(m_Parent); EntityManager::Instance()->SerializeEntity(m_OwningEntity);
return GetActivityPlayerData(playerID); return GetActivityPlayerData(playerID);
} }
@ -480,7 +480,7 @@ void ScriptedActivityComponent::SetActivityValue(LWOOBJID playerID, uint32_t ind
data->values[std::min(index, (uint32_t)9)] = value; data->values[std::min(index, (uint32_t)9)] = value;
} }
EntityManager::Instance()->SerializeEntity(m_Parent); EntityManager::Instance()->SerializeEntity(m_OwningEntity);
} }
void ScriptedActivityComponent::PlayerRemove(LWOOBJID playerID) { void ScriptedActivityComponent::PlayerRemove(LWOOBJID playerID) {
@ -576,7 +576,7 @@ void ActivityInstance::RewardParticipant(Entity* participant) {
maxCoins = currencyTable[0].maxvalue; maxCoins = currencyTable[0].maxvalue;
} }
LootGenerator::Instance().DropLoot(participant, m_Parent, activityRewards[0].LootMatrixIndex, minCoins, maxCoins); LootGenerator::Instance().DropLoot(participant, m_OwningEntity, activityRewards[0].LootMatrixIndex, minCoins, maxCoins);
} }
} }

View File

@ -20,7 +20,7 @@
*/ */
class ActivityInstance { class ActivityInstance {
public: public:
ActivityInstance(Entity* parent, CDActivities activityInfo) { m_Parent = parent; m_ActivityInfo = activityInfo; }; ActivityInstance(Entity* parent, CDActivities activityInfo) { m_OwningEntity = parent; m_ActivityInfo = activityInfo; };
//~ActivityInstance(); //~ActivityInstance();
/** /**
@ -86,7 +86,7 @@ private:
/** /**
* The entity that owns this activity (the entity that has the ScriptedActivityComponent) * The entity that owns this activity (the entity that has the ScriptedActivityComponent)
*/ */
Entity* m_Parent; Entity* m_OwningEntity;
/** /**
* All the participants of this activity * All the participants of this activity

View File

@ -14,7 +14,7 @@ void ShootingGalleryComponent::SetStaticParams(const StaticShootingGalleryParams
void ShootingGalleryComponent::SetDynamicParams(const DynamicShootingGalleryParams& params) { void ShootingGalleryComponent::SetDynamicParams(const DynamicShootingGalleryParams& params) {
m_DynamicParams = params; m_DynamicParams = params;
m_Dirty = true; m_Dirty = true;
EntityManager::Instance()->SerializeEntity(m_Parent); EntityManager::Instance()->SerializeEntity(m_OwningEntity);
} }
void ShootingGalleryComponent::Serialize(RakNet::BitStream* outBitStream, bool isInitialUpdate, uint32_t& flags) const { void ShootingGalleryComponent::Serialize(RakNet::BitStream* outBitStream, bool isInitialUpdate, uint32_t& flags) const {

View File

@ -14,11 +14,11 @@
#include "Entity.h" #include "Entity.h"
SimplePhysicsComponent::SimplePhysicsComponent(uint32_t componentID, Entity* parent) : Component(parent) { SimplePhysicsComponent::SimplePhysicsComponent(uint32_t componentID, Entity* parent) : Component(parent) {
m_Position = m_Parent->GetDefaultPosition(); m_Position = m_OwningEntity->GetDefaultPosition();
m_Rotation = m_Parent->GetDefaultRotation(); m_Rotation = m_OwningEntity->GetDefaultRotation();
m_IsDirty = true; m_IsDirty = true;
const auto& climbable_type = m_Parent->GetVar<std::u16string>(u"climbable"); const auto& climbable_type = m_OwningEntity->GetVar<std::u16string>(u"climbable");
if (climbable_type == u"wall") { if (climbable_type == u"wall") {
SetClimbableType(eClimbableType::CLIMBABLE_TYPE_WALL); SetClimbableType(eClimbableType::CLIMBABLE_TYPE_WALL);
} else if (climbable_type == u"ladder") { } else if (climbable_type == u"ladder") {

View File

@ -32,9 +32,9 @@ ProjectileSyncEntry::ProjectileSyncEntry() {
std::unordered_map<uint32_t, uint32_t> SkillComponent::m_skillBehaviorCache = {}; std::unordered_map<uint32_t, uint32_t> SkillComponent::m_skillBehaviorCache = {};
bool SkillComponent::CastPlayerSkill(const uint32_t behaviorId, const uint32_t skillUid, RakNet::BitStream* bitStream, const LWOOBJID target, uint32_t skillID) { bool SkillComponent::CastPlayerSkill(const uint32_t behaviorId, const uint32_t skillUid, RakNet::BitStream* bitStream, const LWOOBJID target, uint32_t skillID) {
auto* context = new BehaviorContext(this->m_Parent->GetObjectID()); auto* context = new BehaviorContext(this->m_OwningEntity->GetObjectID());
context->caster = m_Parent->GetObjectID(); context->caster = m_OwningEntity->GetObjectID();
context->skillID = skillID; context->skillID = skillID;
@ -130,11 +130,11 @@ void SkillComponent::RegisterPlayerProjectile(const LWOOBJID projectileId, Behav
} }
void SkillComponent::Update(const float deltaTime) { void SkillComponent::Update(const float deltaTime) {
if (!m_Parent->HasComponent(eReplicaComponentType::BASE_COMBAT_AI) && m_Parent->GetLOT() != 1) { if (!m_OwningEntity->HasComponent(eReplicaComponentType::BASE_COMBAT_AI) && m_OwningEntity->GetLOT() != 1) {
CalculateUpdate(deltaTime); CalculateUpdate(deltaTime);
} }
if (m_Parent->IsPlayer()) { if (m_OwningEntity->IsPlayer()) {
for (const auto& pair : this->m_managedBehaviors) pair.second->UpdatePlayerSyncs(deltaTime); for (const auto& pair : this->m_managedBehaviors) pair.second->UpdatePlayerSyncs(deltaTime);
} }
@ -193,7 +193,7 @@ void SkillComponent::Reset() {
void SkillComponent::Interrupt() { void SkillComponent::Interrupt() {
// TODO: need to check immunities on the destroyable component, but they aren't implemented // TODO: need to check immunities on the destroyable component, but they aren't implemented
auto* combat = m_Parent->GetComponent<BaseCombatAIComponent>(); auto* combat = m_OwningEntity->GetComponent<BaseCombatAIComponent>();
if (combat != nullptr && combat->GetStunImmune()) return; if (combat != nullptr && combat->GetStunImmune()) return;
for (const auto& behavior : this->m_managedBehaviors) { for (const auto& behavior : this->m_managedBehaviors) {
@ -201,7 +201,7 @@ void SkillComponent::Interrupt() {
behaviorEndEntry.behavior->End(behavior.second, behaviorEndEntry.branchContext, behaviorEndEntry.second); behaviorEndEntry.behavior->End(behavior.second, behaviorEndEntry.branchContext, behaviorEndEntry.second);
} }
behavior.second->endEntries.clear(); behavior.second->endEntries.clear();
if (m_Parent->IsPlayer()) continue; if (m_OwningEntity->IsPlayer()) continue;
behavior.second->Interrupt(); behavior.second->Interrupt();
} }
@ -256,9 +256,9 @@ SkillExecutionResult SkillComponent::CalculateBehavior(const uint32_t skillId, c
auto* behavior = Behavior::CreateBehavior(behaviorId); auto* behavior = Behavior::CreateBehavior(behaviorId);
auto* context = new BehaviorContext(originatorOverride != LWOOBJID_EMPTY ? originatorOverride : this->m_Parent->GetObjectID(), true); auto* context = new BehaviorContext(originatorOverride != LWOOBJID_EMPTY ? originatorOverride : this->m_OwningEntity->GetObjectID(), true);
context->caster = m_Parent->GetObjectID(); context->caster = m_OwningEntity->GetObjectID();
context->skillID = skillId; context->skillID = skillId;
@ -268,8 +268,8 @@ SkillExecutionResult SkillComponent::CalculateBehavior(const uint32_t skillId, c
behavior->Calculate(context, bitStream, { target, 0 }); behavior->Calculate(context, bitStream, { target, 0 });
for (auto* script : CppScripts::GetEntityScripts(m_Parent)) { for (auto* script : CppScripts::GetEntityScripts(m_OwningEntity)) {
script->OnSkillCast(m_Parent, skillId); script->OnSkillCast(m_OwningEntity, skillId);
} }
if (!context->foundTarget) { if (!context->foundTarget) {
@ -305,7 +305,7 @@ SkillExecutionResult SkillComponent::CalculateBehavior(const uint32_t skillId, c
RakNet::BitStream message; RakNet::BitStream message;
PacketUtils::WriteHeader(message, eConnectionType::CLIENT, eClientMessageType::GAME_MSG); PacketUtils::WriteHeader(message, eConnectionType::CLIENT, eClientMessageType::GAME_MSG);
message.Write(this->m_Parent->GetObjectID()); message.Write(this->m_OwningEntity->GetObjectID());
start.Serialize(&message); start.Serialize(&message);
Game::server->Send(&message, UNASSIGNED_SYSTEM_ADDRESS, true); Game::server->Send(&message, UNASSIGNED_SYSTEM_ADDRESS, true);
@ -431,14 +431,14 @@ void SkillComponent::SyncProjectileCalculation(const ProjectileSyncEntry& entry)
DoClientProjectileImpact projectileImpact; DoClientProjectileImpact projectileImpact;
projectileImpact.sBitStream.assign((char*)bitStream->GetData(), bitStream->GetNumberOfBytesUsed()); projectileImpact.sBitStream.assign((char*)bitStream->GetData(), bitStream->GetNumberOfBytesUsed());
projectileImpact.i64OwnerID = this->m_Parent->GetObjectID(); projectileImpact.i64OwnerID = this->m_OwningEntity->GetObjectID();
projectileImpact.i64OrgID = entry.id; projectileImpact.i64OrgID = entry.id;
projectileImpact.i64TargetID = entry.branchContext.target; projectileImpact.i64TargetID = entry.branchContext.target;
RakNet::BitStream message; RakNet::BitStream message;
PacketUtils::WriteHeader(message, eConnectionType::CLIENT, eClientMessageType::GAME_MSG); PacketUtils::WriteHeader(message, eConnectionType::CLIENT, eClientMessageType::GAME_MSG);
message.Write(this->m_Parent->GetObjectID()); message.Write(this->m_OwningEntity->GetObjectID());
projectileImpact.Serialize(&message); projectileImpact.Serialize(&message);
Game::server->Send(&message, UNASSIGNED_SYSTEM_ADDRESS, true); Game::server->Send(&message, UNASSIGNED_SYSTEM_ADDRESS, true);

View File

@ -76,7 +76,7 @@ void SoundTriggerComponent::ActivateMusicCue(const std::string& name) {
-1.0f -1.0f
}); });
dirty = true; dirty = true;
EntityManager::Instance()->SerializeEntity(m_Parent); EntityManager::Instance()->SerializeEntity(m_OwningEntity);
} }
} }
@ -88,6 +88,6 @@ void SoundTriggerComponent::DeactivateMusicCue(const std::string& name) {
if (musicCue != this->musicCues.end()) { if (musicCue != this->musicCues.end()) {
this->musicCues.erase(musicCue); this->musicCues.erase(musicCue);
dirty = true; dirty = true;
EntityManager::Instance()->SerializeEntity(m_Parent); EntityManager::Instance()->SerializeEntity(m_OwningEntity);
} }
} }

View File

@ -8,9 +8,9 @@ std::vector<SwitchComponent*> SwitchComponent::petSwitches;
SwitchComponent::SwitchComponent(Entity* parent) : Component(parent) { SwitchComponent::SwitchComponent(Entity* parent) : Component(parent) {
m_Active = false; m_Active = false;
m_ResetTime = m_Parent->GetVarAs<int32_t>(u"switch_reset_time"); m_ResetTime = m_OwningEntity->GetVarAs<int32_t>(u"switch_reset_time");
m_Rebuild = m_Parent->GetComponent<RebuildComponent>(); m_Rebuild = m_OwningEntity->GetComponent<RebuildComponent>();
} }
SwitchComponent::~SwitchComponent() { SwitchComponent::~SwitchComponent() {
@ -43,10 +43,10 @@ void SwitchComponent::EntityEnter(Entity* entity) {
if (m_Rebuild->GetState() != eRebuildState::COMPLETED) return; if (m_Rebuild->GetState() != eRebuildState::COMPLETED) return;
} }
m_Active = true; m_Active = true;
if (!m_Parent) return; if (!m_OwningEntity) return;
m_Parent->TriggerEvent(eTriggerEventType::ACTIVATED, entity); m_OwningEntity->TriggerEvent(eTriggerEventType::ACTIVATED, entity);
const auto grpName = m_Parent->GetVarAsString(u"grp_name"); const auto grpName = m_OwningEntity->GetVarAsString(u"grp_name");
if (!grpName.empty()) { if (!grpName.empty()) {
const auto entities = EntityManager::Instance()->GetEntitiesInGroup(grpName); const auto entities = EntityManager::Instance()->GetEntitiesInGroup(grpName);
@ -59,11 +59,11 @@ void SwitchComponent::EntityEnter(Entity* entity) {
m_Timer = m_ResetTime; m_Timer = m_ResetTime;
if (m_PetBouncer != nullptr) { if (m_PetBouncer != nullptr) {
GameMessages::SendPlayFXEffect(m_Parent->GetObjectID(), 2602, u"pettriggeractive", "BounceEffect", LWOOBJID_EMPTY, 1, 1, true); GameMessages::SendPlayFXEffect(m_OwningEntity->GetObjectID(), 2602, u"pettriggeractive", "BounceEffect", LWOOBJID_EMPTY, 1, 1, true);
RenderComponent::PlayAnimation(m_Parent, u"engaged"); RenderComponent::PlayAnimation(m_OwningEntity, u"engaged");
m_PetBouncer->SetPetBouncerEnabled(true); m_PetBouncer->SetPetBouncerEnabled(true);
} else { } else {
EntityManager::Instance()->SerializeEntity(m_Parent); EntityManager::Instance()->SerializeEntity(m_OwningEntity);
} }
} }
@ -79,10 +79,10 @@ void SwitchComponent::Update(float deltaTime) {
if (m_Timer <= 0.0f) { if (m_Timer <= 0.0f) {
m_Active = false; m_Active = false;
if (!m_Parent) return; if (!m_OwningEntity) return;
m_Parent->TriggerEvent(eTriggerEventType::DEACTIVATED, m_Parent); m_OwningEntity->TriggerEvent(eTriggerEventType::DEACTIVATED, m_OwningEntity);
const auto grpName = m_Parent->GetVarAsString(u"grp_name"); const auto grpName = m_OwningEntity->GetVarAsString(u"grp_name");
if (!grpName.empty()) { if (!grpName.empty()) {
const auto entities = EntityManager::Instance()->GetEntitiesInGroup(grpName); const auto entities = EntityManager::Instance()->GetEntitiesInGroup(grpName);
@ -95,14 +95,14 @@ void SwitchComponent::Update(float deltaTime) {
if (m_PetBouncer != nullptr) { if (m_PetBouncer != nullptr) {
m_PetBouncer->SetPetBouncerEnabled(false); m_PetBouncer->SetPetBouncerEnabled(false);
} else { } else {
EntityManager::Instance()->SerializeEntity(m_Parent); EntityManager::Instance()->SerializeEntity(m_OwningEntity);
} }
} }
} }
} }
Entity* SwitchComponent::GetParentEntity() const { Entity* SwitchComponent::GetParentEntity() const {
return m_Parent; return m_OwningEntity;
} }
SwitchComponent* SwitchComponent::GetClosestSwitch(NiPoint3 position) { SwitchComponent* SwitchComponent::GetClosestSwitch(NiPoint3 position) {
@ -110,7 +110,7 @@ SwitchComponent* SwitchComponent::GetClosestSwitch(NiPoint3 position) {
SwitchComponent* closest = nullptr; SwitchComponent* closest = nullptr;
for (SwitchComponent* petSwitch : petSwitches) { for (SwitchComponent* petSwitch : petSwitches) {
float distance = Vector3::DistanceSquared(petSwitch->m_Parent->GetPosition(), position); float distance = Vector3::DistanceSquared(petSwitch->m_OwningEntity->GetPosition(), position);
if (closest == nullptr || distance < closestDistance) { if (closest == nullptr || distance < closestDistance) {
closestDistance = distance; closestDistance = distance;

View File

@ -16,7 +16,7 @@
TriggerComponent::TriggerComponent(Entity* parent, const std::string triggerInfo): Component(parent) { TriggerComponent::TriggerComponent(Entity* parent, const std::string triggerInfo): Component(parent) {
m_Parent = parent; m_OwningEntity = parent;
m_Trigger = nullptr; m_Trigger = nullptr;
std::vector<std::string> tokens = GeneralUtils::SplitString(triggerInfo, ':'); std::vector<std::string> tokens = GeneralUtils::SplitString(triggerInfo, ':');
@ -116,7 +116,7 @@ void TriggerComponent::HandleTriggerCommand(LUTriggers::Command* command, Entity
HandleCastSkill(targetEntity, command->args); HandleCastSkill(targetEntity, command->args);
break; break;
case eTriggerCommandType::DISPLAY_ZONE_SUMMARY: case eTriggerCommandType::DISPLAY_ZONE_SUMMARY:
GameMessages::SendDisplayZoneSummary(targetEntity->GetObjectID(), targetEntity->GetSystemAddress(), false, command->args == "1", m_Parent->GetObjectID()); GameMessages::SendDisplayZoneSummary(targetEntity->GetObjectID(), targetEntity->GetSystemAddress(), false, command->args == "1", m_OwningEntity->GetObjectID());
break; break;
case eTriggerCommandType::SET_PHYSICS_VOLUME_EFFECT: case eTriggerCommandType::SET_PHYSICS_VOLUME_EFFECT:
HandleSetPhysicsVolumeEffect(targetEntity, argArray); HandleSetPhysicsVolumeEffect(targetEntity, argArray);
@ -164,7 +164,7 @@ void TriggerComponent::HandleTriggerCommand(LUTriggers::Command* command, Entity
std::vector<Entity*> TriggerComponent::GatherTargets(LUTriggers::Command* command, Entity* optionalTarget) { std::vector<Entity*> TriggerComponent::GatherTargets(LUTriggers::Command* command, Entity* optionalTarget) {
std::vector<Entity*> entities = {}; std::vector<Entity*> entities = {};
if (command->target == "self") entities.push_back(m_Parent); if (command->target == "self") entities.push_back(m_OwningEntity);
else if (command->target == "zone") { /*TODO*/ } else if (command->target == "zone") { /*TODO*/ }
else if (command->target == "target" && optionalTarget) entities.push_back(optionalTarget); else if (command->target == "target" && optionalTarget) entities.push_back(optionalTarget);
else if (command->target == "targetTeam" && optionalTarget) { else if (command->target == "targetTeam" && optionalTarget) {
@ -185,14 +185,14 @@ std::vector<Entity*> TriggerComponent::GatherTargets(LUTriggers::Command* comman
void TriggerComponent::HandleFireEvent(Entity* targetEntity, std::string args) { void TriggerComponent::HandleFireEvent(Entity* targetEntity, std::string args) {
for (CppScripts::Script* script : CppScripts::GetEntityScripts(targetEntity)) { for (CppScripts::Script* script : CppScripts::GetEntityScripts(targetEntity)) {
script->OnFireEventServerSide(targetEntity, m_Parent, args, 0, 0, 0); script->OnFireEventServerSide(targetEntity, m_OwningEntity, args, 0, 0, 0);
} }
} }
void TriggerComponent::HandleDestroyObject(Entity* targetEntity, std::string args){ void TriggerComponent::HandleDestroyObject(Entity* targetEntity, std::string args){
uint32_t killType; uint32_t killType;
GeneralUtils::TryParse<uint32_t>(args, killType); GeneralUtils::TryParse<uint32_t>(args, killType);
targetEntity->Smash(m_Parent->GetObjectID(), static_cast<eKillType>(killType)); targetEntity->Smash(m_OwningEntity->GetObjectID(), static_cast<eKillType>(killType));
} }
void TriggerComponent::HandleToggleTrigger(Entity* targetEntity, std::string args){ void TriggerComponent::HandleToggleTrigger(Entity* targetEntity, std::string args){
@ -237,7 +237,7 @@ void TriggerComponent::HandleRotateObject(Entity* targetEntity, std::vector<std:
void TriggerComponent::HandlePushObject(Entity* targetEntity, std::vector<std::string> argArray){ void TriggerComponent::HandlePushObject(Entity* targetEntity, std::vector<std::string> argArray){
if (argArray.size() < 3) return; if (argArray.size() < 3) return;
auto* phantomPhysicsComponent = m_Parent->GetComponent<PhantomPhysicsComponent>(); auto* phantomPhysicsComponent = m_OwningEntity->GetComponent<PhantomPhysicsComponent>();
if (!phantomPhysicsComponent) { if (!phantomPhysicsComponent) {
Game::logger->LogDebug("TriggerComponent::HandlePushObject", "Phantom Physics component not found!"); Game::logger->LogDebug("TriggerComponent::HandlePushObject", "Phantom Physics component not found!");
return; return;
@ -249,12 +249,12 @@ void TriggerComponent::HandlePushObject(Entity* targetEntity, std::vector<std::s
GeneralUtils::TryParse(argArray.at(0), argArray.at(1), argArray.at(2), direction); GeneralUtils::TryParse(argArray.at(0), argArray.at(1), argArray.at(2), direction);
phantomPhysicsComponent->SetDirection(direction); phantomPhysicsComponent->SetDirection(direction);
EntityManager::Instance()->SerializeEntity(m_Parent); EntityManager::Instance()->SerializeEntity(m_OwningEntity);
} }
void TriggerComponent::HandleRepelObject(Entity* targetEntity, std::string args){ void TriggerComponent::HandleRepelObject(Entity* targetEntity, std::string args){
auto* phantomPhysicsComponent = m_Parent->GetComponent<PhantomPhysicsComponent>(); auto* phantomPhysicsComponent = m_OwningEntity->GetComponent<PhantomPhysicsComponent>();
if (!phantomPhysicsComponent) { if (!phantomPhysicsComponent) {
Game::logger->LogDebug("TriggerComponent::HandleRepelObject", "Phantom Physics component not found!"); Game::logger->LogDebug("TriggerComponent::HandleRepelObject", "Phantom Physics component not found!");
return; return;
@ -265,7 +265,7 @@ void TriggerComponent::HandleRepelObject(Entity* targetEntity, std::string args)
phantomPhysicsComponent->SetEffectType(ePhysicsEffectType::REPULSE); phantomPhysicsComponent->SetEffectType(ePhysicsEffectType::REPULSE);
phantomPhysicsComponent->SetDirectionalMultiplier(forceMultiplier); phantomPhysicsComponent->SetDirectionalMultiplier(forceMultiplier);
auto triggerPos = m_Parent->GetPosition(); auto triggerPos = m_OwningEntity->GetPosition();
auto targetPos = targetEntity->GetPosition(); auto targetPos = targetEntity->GetPosition();
// normalize the vectors to get the direction // normalize the vectors to get the direction
@ -274,7 +274,7 @@ void TriggerComponent::HandleRepelObject(Entity* targetEntity, std::string args)
NiPoint3 direction = delta / length; NiPoint3 direction = delta / length;
phantomPhysicsComponent->SetDirection(direction); phantomPhysicsComponent->SetDirection(direction);
EntityManager::Instance()->SerializeEntity(m_Parent); EntityManager::Instance()->SerializeEntity(m_OwningEntity);
} }
void TriggerComponent::HandleSetTimer(Entity* targetEntity, std::vector<std::string> argArray){ void TriggerComponent::HandleSetTimer(Entity* targetEntity, std::vector<std::string> argArray){
@ -284,11 +284,11 @@ void TriggerComponent::HandleSetTimer(Entity* targetEntity, std::vector<std::str
} }
float time = 0.0; float time = 0.0;
GeneralUtils::TryParse<float>(argArray.at(1), time); GeneralUtils::TryParse<float>(argArray.at(1), time);
m_Parent->AddTimer(argArray.at(0), time); m_OwningEntity->AddTimer(argArray.at(0), time);
} }
void TriggerComponent::HandleCancelTimer(Entity* targetEntity, std::string args){ void TriggerComponent::HandleCancelTimer(Entity* targetEntity, std::string args){
m_Parent->CancelTimer(args); m_OwningEntity->CancelTimer(args);
} }
void TriggerComponent::HandlePlayCinematic(Entity* targetEntity, std::vector<std::string> argArray) { void TriggerComponent::HandlePlayCinematic(Entity* targetEntity, std::vector<std::string> argArray) {

View File

@ -103,7 +103,7 @@ void VehiclePhysicsComponent::Serialize(RakNet::BitStream* outBitStream, bool bI
void VehiclePhysicsComponent::Update(float deltaTime) { void VehiclePhysicsComponent::Update(float deltaTime) {
if (m_SoftUpdate > 5) { if (m_SoftUpdate > 5) {
EntityManager::Instance()->SerializeEntity(m_Parent); EntityManager::Instance()->SerializeEntity(m_OwningEntity);
m_SoftUpdate = 0; m_SoftUpdate = 0;
} else { } else {

View File

@ -24,8 +24,8 @@ void VendorComponent::Serialize(RakNet::BitStream* outBitStream, bool bIsInitial
} }
void VendorComponent::OnUse(Entity* originator) { void VendorComponent::OnUse(Entity* originator) {
GameMessages::SendVendorOpenWindow(m_Parent, originator->GetSystemAddress()); GameMessages::SendVendorOpenWindow(m_OwningEntity, originator->GetSystemAddress());
GameMessages::SendVendorStatusUpdate(m_Parent, originator->GetSystemAddress()); GameMessages::SendVendorStatusUpdate(m_OwningEntity, originator->GetSystemAddress());
} }
float VendorComponent::GetBuyScalar() const { float VendorComponent::GetBuyScalar() const {
@ -50,12 +50,12 @@ std::map<LOT, int>& VendorComponent::GetInventory() {
bool VendorComponent::HasCraftingStation() { bool VendorComponent::HasCraftingStation() {
// As far as we know, only Umami has a crafting station // As far as we know, only Umami has a crafting station
return m_Parent->GetLOT() == 13800; return m_OwningEntity->GetLOT() == 13800;
} }
void VendorComponent::RefreshInventory(bool isCreation) { void VendorComponent::RefreshInventory(bool isCreation) {
//Custom code for Max vanity NPC //Custom code for Max vanity NPC
if (m_Parent->GetLOT() == 9749 && Game::server->GetZoneID() == 1201) { if (m_OwningEntity->GetLOT() == 9749 && Game::server->GetZoneID() == 1201) {
if (!isCreation) return; if (!isCreation) return;
m_Inventory.insert({ 11909, 0 }); //Top hat w frog m_Inventory.insert({ 11909, 0 }); //Top hat w frog
m_Inventory.insert({ 7785, 0 }); //Flash bulb m_Inventory.insert({ 7785, 0 }); //Flash bulb
@ -97,7 +97,7 @@ void VendorComponent::RefreshInventory(bool isCreation) {
} }
//Because I want a vendor to sell these cameras //Because I want a vendor to sell these cameras
if (m_Parent->GetLOT() == 13569) { if (m_OwningEntity->GetLOT() == 13569) {
auto randomCamera = GeneralUtils::GenerateRandomNumber<int32_t>(0, 2); auto randomCamera = GeneralUtils::GenerateRandomNumber<int32_t>(0, 2);
switch (randomCamera) { switch (randomCamera) {
@ -116,15 +116,15 @@ void VendorComponent::RefreshInventory(bool isCreation) {
} }
// Callback timer to refresh this inventory. // Callback timer to refresh this inventory.
m_Parent->AddCallbackTimer(m_RefreshTimeSeconds, [this]() { m_OwningEntity->AddCallbackTimer(m_RefreshTimeSeconds, [this]() {
RefreshInventory(); RefreshInventory();
}); });
GameMessages::SendVendorStatusUpdate(m_Parent, UNASSIGNED_SYSTEM_ADDRESS); GameMessages::SendVendorStatusUpdate(m_OwningEntity, UNASSIGNED_SYSTEM_ADDRESS);
} }
void VendorComponent::SetupConstants() { void VendorComponent::SetupConstants() {
auto* compRegistryTable = CDClientManager::Instance().GetTable<CDComponentsRegistryTable>(); auto* compRegistryTable = CDClientManager::Instance().GetTable<CDComponentsRegistryTable>();
int componentID = compRegistryTable->GetByIDAndType(m_Parent->GetLOT(), eReplicaComponentType::VENDOR); int componentID = compRegistryTable->GetByIDAndType(m_OwningEntity->GetLOT(), eReplicaComponentType::VENDOR);
auto* vendorComponentTable = CDClientManager::Instance().GetTable<CDVendorComponentTable>(); auto* vendorComponentTable = CDClientManager::Instance().GetTable<CDVendorComponentTable>();
std::vector<CDVendorComponent> vendorComps = vendorComponentTable->Query([=](CDVendorComponent entry) { return (entry.id == componentID); }); std::vector<CDVendorComponent> vendorComps = vendorComponentTable->Query([=](CDVendorComponent entry) { return (entry.id == componentID); });

View File

@ -1986,7 +1986,7 @@ void GameMessages::SendOpenPropertyManagment(const LWOOBJID objectId, const Syst
CBITSTREAM; CBITSTREAM;
CMSGHEADER; CMSGHEADER;
bitStream.Write(PropertyManagementComponent::Instance()->GetParent()->GetObjectID()); bitStream.Write(PropertyManagementComponent::Instance()->GetOwningEntity()->GetObjectID());
bitStream.Write(eGameMessageType::OPEN_PROPERTY_MANAGEMENT); bitStream.Write(eGameMessageType::OPEN_PROPERTY_MANAGEMENT);
if (sysAddr == UNASSIGNED_SYSTEM_ADDRESS) SEND_PACKET_BROADCAST; if (sysAddr == UNASSIGNED_SYSTEM_ADDRESS) SEND_PACKET_BROADCAST;

View File

@ -76,7 +76,7 @@ void Inventory::SetSize(const uint32_t value) {
size = value; size = value;
GameMessages::SendSetInventorySize(component->GetParent(), type, static_cast<int>(size)); GameMessages::SendSetInventorySize(component->GetOwningEntity(), type, static_cast<int>(size));
} }
int32_t Inventory::FindEmptySlot() { int32_t Inventory::FindEmptySlot() {

View File

@ -92,7 +92,7 @@ Item::Item(
inventory->AddManagedItem(this); inventory->AddManagedItem(this);
auto* entity = inventory->GetComponent()->GetParent(); auto* entity = inventory->GetComponent()->GetOwningEntity();
GameMessages::SendAddItemToInventoryClientSync(entity, entity->GetSystemAddress(), this, id, showFlyingLoot, static_cast<int>(this->count), subKey, lootSourceType); GameMessages::SendAddItemToInventoryClientSync(entity, entity->GetSystemAddress(), this, id, showFlyingLoot, static_cast<int>(this->count), subKey, lootSourceType);
if (isModMoveAndEquip) { if (isModMoveAndEquip) {
@ -100,7 +100,7 @@ Item::Item(
Game::logger->Log("Item", "Move and equipped (%i) from (%i)", this->lot, this->inventory->GetType()); Game::logger->Log("Item", "Move and equipped (%i) from (%i)", this->lot, this->inventory->GetType());
EntityManager::Instance()->SerializeEntity(inventory->GetComponent()->GetParent()); EntityManager::Instance()->SerializeEntity(inventory->GetComponent()->GetOwningEntity());
} }
} }
@ -136,7 +136,7 @@ Inventory* Item::GetInventory() const {
return inventory; return inventory;
} }
LWOOBJID Item::GetParent() const { LWOOBJID Item::GetOwningEntity() const {
return parent; return parent;
} }
@ -166,7 +166,7 @@ void Item::SetCount(const uint32_t value, const bool silent, const bool disassem
} }
if (!silent) { if (!silent) {
auto* entity = inventory->GetComponent()->GetParent(); auto* entity = inventory->GetComponent()->GetOwningEntity();
if (value > count) { if (value > count) {
GameMessages::SendAddItemToInventoryClientSync(entity, entity->GetSystemAddress(), this, id, showFlyingLoot, delta, LWOOBJID_EMPTY, lootSourceType); GameMessages::SendAddItemToInventoryClientSync(entity, entity->GetSystemAddress(), this, id, showFlyingLoot, delta, LWOOBJID_EMPTY, lootSourceType);
@ -262,7 +262,7 @@ bool Item::Consume() {
Game::logger->LogDebug("Item", "Consumed LOT (%i) itemID (%llu). Success=(%d)", lot, id, success); Game::logger->LogDebug("Item", "Consumed LOT (%i) itemID (%llu). Success=(%d)", lot, id, success);
GameMessages::SendUseItemResult(inventory->GetComponent()->GetParent(), lot, success); GameMessages::SendUseItemResult(inventory->GetComponent()->GetOwningEntity(), lot, success);
if (success) { if (success) {
inventory->GetComponent()->RemoveItem(lot, 1); inventory->GetComponent()->RemoveItem(lot, 1);
@ -284,7 +284,7 @@ void Item::UseNonEquip(Item* item) {
return; return;
} }
auto* playerEntity = playerInventoryComponent->GetParent(); auto* playerEntity = playerInventoryComponent->GetOwningEntity();
if (!playerEntity) { if (!playerEntity) {
Game::logger->LogDebug("Item", "no player entity attached to inventory? item id is %llu", this->GetId()); Game::logger->LogDebug("Item", "no player entity attached to inventory? item id is %llu", this->GetId());
return; return;
@ -314,8 +314,8 @@ void Item::UseNonEquip(Item* item) {
auto success = !packages.empty(); auto success = !packages.empty();
if (success) { if (success) {
if (this->GetPreconditionExpression()->Check(playerInventoryComponent->GetParent())) { if (this->GetPreconditionExpression()->Check(playerInventoryComponent->GetOwningEntity())) {
auto* entityParent = playerInventoryComponent->GetParent(); auto* entityParent = playerInventoryComponent->GetOwningEntity();
// Roll the loot for all the packages then see if it all fits. If it fits, give it to the player, otherwise don't. // Roll the loot for all the packages then see if it all fits. If it fits, give it to the player, otherwise don't.
std::unordered_map<LOT, int32_t> rolledLoot{}; std::unordered_map<LOT, int32_t> rolledLoot{};
for (auto& pack : packages) { for (auto& pack : packages) {
@ -331,15 +331,15 @@ void Item::UseNonEquip(Item* item) {
} }
} }
if (playerInventoryComponent->HasSpaceForLoot(rolledLoot)) { if (playerInventoryComponent->HasSpaceForLoot(rolledLoot)) {
LootGenerator::Instance().GiveLoot(playerInventoryComponent->GetParent(), rolledLoot, eLootSourceType::CONSUMPTION); LootGenerator::Instance().GiveLoot(playerInventoryComponent->GetOwningEntity(), rolledLoot, eLootSourceType::CONSUMPTION);
item->SetCount(item->GetCount() - 1); item->SetCount(item->GetCount() - 1);
} else { } else {
success = false; success = false;
} }
} else { } else {
GameMessages::SendUseItemRequirementsResponse( GameMessages::SendUseItemRequirementsResponse(
playerInventoryComponent->GetParent()->GetObjectID(), playerInventoryComponent->GetOwningEntity()->GetObjectID(),
playerInventoryComponent->GetParent()->GetSystemAddress(), playerInventoryComponent->GetOwningEntity()->GetSystemAddress(),
eUseItemResponse::FailedPrecondition eUseItemResponse::FailedPrecondition
); );
success = false; success = false;
@ -347,7 +347,7 @@ void Item::UseNonEquip(Item* item) {
} }
} }
Game::logger->LogDebug("Item", "Player %llu %s used item %i", playerEntity->GetObjectID(), success ? "successfully" : "unsuccessfully", thisLot); Game::logger->LogDebug("Item", "Player %llu %s used item %i", playerEntity->GetObjectID(), success ? "successfully" : "unsuccessfully", thisLot);
GameMessages::SendUseItemResult(playerInventoryComponent->GetParent(), thisLot, success); GameMessages::SendUseItemResult(playerInventoryComponent->GetOwningEntity(), thisLot, success);
} }
} }
@ -360,7 +360,7 @@ void Item::Disassemble(const eInventoryType inventoryType) {
if (GetInventory()) { if (GetInventory()) {
auto inventoryComponent = GetInventory()->GetComponent(); auto inventoryComponent = GetInventory()->GetComponent();
if (inventoryComponent) { if (inventoryComponent) {
auto entity = inventoryComponent->GetParent(); auto entity = inventoryComponent->GetOwningEntity();
if (entity) entity->SetVar<std::string>(u"currentModifiedBuild", modStr); if (entity) entity->SetVar<std::string>(u"currentModifiedBuild", modStr);
} }
} }

View File

@ -150,7 +150,7 @@ public:
* Returns the parent of this item, e.g. for proxy items * Returns the parent of this item, e.g. for proxy items
* @return the parent of this item * @return the parent of this item
*/ */
LWOOBJID GetParent() const; LWOOBJID GetOwningEntity() const;
/** /**
* Sets the subkey for this item, e.g. for pets * Sets the subkey for this item, e.g. for pets

View File

@ -15,7 +15,7 @@ ItemSet::ItemSet(const uint32_t id, InventoryComponent* inventoryComponent) {
this->m_ID = id; this->m_ID = id;
this->m_InventoryComponent = inventoryComponent; this->m_InventoryComponent = inventoryComponent;
this->m_PassiveAbilities = ItemSetPassiveAbility::FindAbilities(id, m_InventoryComponent->GetParent(), this); this->m_PassiveAbilities = ItemSetPassiveAbility::FindAbilities(id, m_InventoryComponent->GetOwningEntity(), this);
auto query = CDClientDatabase::CreatePreppedStmt( auto query = CDClientDatabase::CreatePreppedStmt(
"SELECT skillSetWith2, skillSetWith3, skillSetWith4, skillSetWith5, skillSetWith6, itemIDs FROM ItemSets WHERE setID = ?;"); "SELECT skillSetWith2, skillSetWith3, skillSetWith4, skillSetWith5, skillSetWith6, itemIDs FROM ItemSets WHERE setID = ?;");
@ -125,8 +125,8 @@ void ItemSet::OnEquip(const LOT lot) {
return; return;
} }
auto* skillComponent = m_InventoryComponent->GetParent()->GetComponent<SkillComponent>(); auto* skillComponent = m_InventoryComponent->GetOwningEntity()->GetComponent<SkillComponent>();
auto* missionComponent = m_InventoryComponent->GetParent()->GetComponent<MissionComponent>(); auto* missionComponent = m_InventoryComponent->GetOwningEntity()->GetComponent<MissionComponent>();
for (const auto skill : skillSet) { for (const auto skill : skillSet) {
auto* skillTable = CDClientManager::Instance().GetTable<CDSkillBehaviorTable>(); auto* skillTable = CDClientManager::Instance().GetTable<CDSkillBehaviorTable>();
@ -135,7 +135,7 @@ void ItemSet::OnEquip(const LOT lot) {
missionComponent->Progress(eMissionTaskType::USE_SKILL, skill); missionComponent->Progress(eMissionTaskType::USE_SKILL, skill);
skillComponent->HandleUnmanaged(behaviorId, m_InventoryComponent->GetParent()->GetObjectID()); skillComponent->HandleUnmanaged(behaviorId, m_InventoryComponent->GetOwningEntity()->GetObjectID());
} }
} }
@ -158,14 +158,14 @@ void ItemSet::OnUnEquip(const LOT lot) {
return; return;
} }
const auto& skillComponent = m_InventoryComponent->GetParent()->GetComponent<SkillComponent>(); const auto& skillComponent = m_InventoryComponent->GetOwningEntity()->GetComponent<SkillComponent>();
for (const auto skill : skillSet) { for (const auto skill : skillSet) {
auto* skillTable = CDClientManager::Instance().GetTable<CDSkillBehaviorTable>(); auto* skillTable = CDClientManager::Instance().GetTable<CDSkillBehaviorTable>();
const auto behaviorId = skillTable->GetSkillByID(skill).behaviorID; const auto behaviorId = skillTable->GetSkillByID(skill).behaviorID;
skillComponent->HandleUnCast(behaviorId, m_InventoryComponent->GetParent()->GetObjectID()); skillComponent->HandleUnCast(behaviorId, m_InventoryComponent->GetOwningEntity()->GetObjectID());
} }
} }

View File

@ -204,7 +204,7 @@ bool Mission::IsValidMission(const uint32_t missionId, CDMissions& info) {
} }
Entity* Mission::GetAssociate() const { Entity* Mission::GetAssociate() const {
return m_MissionComponent->GetParent(); return m_MissionComponent->GetOwningEntity();
} }
User* Mission::GetUser() const { User* Mission::GetUser() const {

View File

@ -47,11 +47,11 @@ void ControlBehaviors::RequestUpdatedID(int32_t behaviorID, ModelComponent* mode
// args.InsertValue("behaviorID", behaviorIDString); // args.InsertValue("behaviorID", behaviorIDString);
// AMFStringValue* objectIDAsString = new AMFStringValue(); // AMFStringValue* objectIDAsString = new AMFStringValue();
// objectIDAsString->SetValue(std::to_string(modelComponent->GetParent()->GetObjectID())); // objectIDAsString->SetValue(std::to_string(modelComponent->GetOwningEntity()->GetObjectID()));
// args.InsertValue("objectID", objectIDAsString); // args.InsertValue("objectID", objectIDAsString);
// GameMessages::SendUIMessageServerToSingleClient(modelOwner, sysAddr, "UpdateBehaviorID", &args); // GameMessages::SendUIMessageServerToSingleClient(modelOwner, sysAddr, "UpdateBehaviorID", &args);
// ControlBehaviors::SendBehaviorListToClient(modelComponent->GetParent(), sysAddr, modelOwner); // ControlBehaviors::SendBehaviorListToClient(modelComponent->GetOwningEntity(), sysAddr, modelOwner);
// }); // });
// } // }
} }
@ -74,7 +74,7 @@ void ControlBehaviors::SendBehaviorListToClient(Entity* modelEntity, const Syste
*/ */
behaviorsToSerialize.Insert("behaviors"); behaviorsToSerialize.Insert("behaviors");
behaviorsToSerialize.Insert("objectID", std::to_string(modelComponent->GetParent()->GetObjectID())); behaviorsToSerialize.Insert("objectID", std::to_string(modelComponent->GetOwningEntity()->GetObjectID()));
GameMessages::SendUIMessageServerToSingleClient(modelOwner, sysAddr, "UpdateBehaviorList", behaviorsToSerialize); GameMessages::SendUIMessageServerToSingleClient(modelOwner, sysAddr, "UpdateBehaviorList", behaviorsToSerialize);
} }
@ -197,7 +197,7 @@ void ControlBehaviors::SendBehaviorBlocksToClient(ModelComponent* modelComponent
// uiArray->InsertValue("x", xPosition); // uiArray->InsertValue("x", xPosition);
// thisStrip->InsertValue("ui", uiArray); // thisStrip->InsertValue("ui", uiArray);
// targetObjectID = modelComponent->GetParent()->GetObjectID(); // targetObjectID = modelComponent->GetOwningEntity()->GetObjectID();
// behaviorID = modelBehavior->GetBehaviorID(); // behaviorID = modelBehavior->GetBehaviorID();
// AMFArrayValue* stripSerialize = new AMFArrayValue(); // AMFArrayValue* stripSerialize = new AMFArrayValue();
@ -276,7 +276,7 @@ void ControlBehaviors::MoveToInventory(ModelComponent* modelComponent, const Sys
MoveToInventoryMessage moveToInventoryMessage(arguments); MoveToInventoryMessage moveToInventoryMessage(arguments);
SendBehaviorListToClient(modelComponent->GetParent(), sysAddr, modelOwner); SendBehaviorListToClient(modelComponent->GetOwningEntity(), sysAddr, modelOwner);
} }
void ControlBehaviors::ProcessCommand(Entity* modelEntity, const SystemAddress& sysAddr, AMFArrayValue* arguments, std::string command, Entity* modelOwner) { void ControlBehaviors::ProcessCommand(Entity* modelEntity, const SystemAddress& sysAddr, AMFArrayValue* arguments, std::string command, Entity* modelOwner) {

View File

@ -19,7 +19,7 @@ ScriptComponent::~ScriptComponent() {
void ScriptComponent::Serialize(RakNet::BitStream* outBitStream, bool bIsInitialUpdate, unsigned int& flags) { void ScriptComponent::Serialize(RakNet::BitStream* outBitStream, bool bIsInitialUpdate, unsigned int& flags) {
if (bIsInitialUpdate) { if (bIsInitialUpdate) {
const auto& networkSettings = m_Parent->GetNetworkSettings(); const auto& networkSettings = m_OwningEntity->GetNetworkSettings();
auto hasNetworkSettings = !networkSettings.empty(); auto hasNetworkSettings = !networkSettings.empty();
outBitStream->Write(hasNetworkSettings); outBitStream->Write(hasNetworkSettings);
@ -52,5 +52,5 @@ void ScriptComponent::SetScript(const std::string& scriptName) {
return; return;
}*/ }*/
m_Script = CppScripts::GetScript(m_Parent, scriptName); m_Script = CppScripts::GetScript(m_OwningEntity, scriptName);
} }