Add FlagComponent and msg handlers

This commit is contained in:
David Markowitz
2025-01-20 02:53:21 -08:00
parent e4c2eecbc7
commit af2ba5b287
53 changed files with 781 additions and 486 deletions

View File

@@ -1,9 +1,8 @@
#include "AgCagedBricksServer.h"
#include "InventoryComponent.h"
#include "GameMessages.h"
#include "Character.h"
#include "EntityManager.h"
#include "eReplicaComponentType.h"
#include "ePlayerFlag.h"
void AgCagedBricksServer::OnUse(Entity* self, Entity* user) {
@@ -14,14 +13,14 @@ void AgCagedBricksServer::OnUse(Entity* self, Entity* user) {
}
//Set the flag & mission status:
auto character = user->GetCharacter();
if (!character) return;
character->SetPlayerFlag(ePlayerFlag::CAGED_SPIDER, true);
GameMessages::SetFlag setFlag{};
setFlag.target = user->GetObjectID();
setFlag.iFlagId = ePlayerFlag::CAGED_SPIDER;
setFlag.bFlag = true;
SEND_ENTITY_MSG(setFlag);
//Remove the maelstrom cube:
auto inv = static_cast<InventoryComponent*>(user->GetComponent(eReplicaComponentType::INVENTORY));
auto* inv = user->GetComponent<InventoryComponent>();
if (inv) {
inv->RemoveItem(14553, 1);

View File

@@ -1,9 +1,8 @@
#include "RemoveRentalGear.h"
#include "InventoryComponent.h"
#include "Item.h"
#include "eMissionState.h"
#include "Character.h"
#include "eReplicaComponentType.h"
#include "ePlayerFlag.h"
/*
@@ -23,7 +22,7 @@ void RemoveRentalGear::OnMissionDialogueOK(Entity* self, Entity* target, int mis
if (missionID != defaultMission && missionID != 313) return;
if (missionState == eMissionState::COMPLETE || missionState == eMissionState::READY_TO_COMPLETE) {
auto inv = static_cast<InventoryComponent*>(target->GetComponent(eReplicaComponentType::INVENTORY));
auto* inv = target->GetComponent<InventoryComponent>();
if (!inv) return;
//remove the inventory items
@@ -36,7 +35,10 @@ void RemoveRentalGear::OnMissionDialogueOK(Entity* self, Entity* target, int mis
}
//reset the equipment flag
auto character = target->GetCharacter();
if (character) character->SetPlayerFlag(ePlayerFlag::EQUPPED_TRIAL_FACTION_GEAR, false);
GameMessages::SetFlag setFlag{};
setFlag.target = target->GetObjectID();
setFlag.iFlagId = ePlayerFlag::EQUPPED_TRIAL_FACTION_GEAR;
setFlag.bFlag = false;
SEND_ENTITY_MSG(setFlag);
}
}

View File

@@ -2,7 +2,6 @@
#include "SkillComponent.h"
#include "EntityManager.h"
#include "EntityInfo.h"
#include "Character.h"
void AmBlueX::OnUse(Entity* self, Entity* user) {
auto* skillComponent = user->GetComponent<SkillComponent>();
@@ -16,10 +15,11 @@ void AmBlueX::OnSkillEventFired(Entity* self, Entity* caster, const std::string&
self->SetNetworkVar<bool>(m_XUsedVariable, true);
self->SetNetworkVar<bool>(m_StartEffectVariable, true);
auto* character = caster->GetCharacter();
if (character != nullptr) {
character->SetPlayerFlag(self->GetVar<int32_t>(m_FlagVariable), true);
}
GameMessages::SetFlag setFlag{};
setFlag.target = caster->GetObjectID();
setFlag.iFlagId = self->GetVar<int32_t>(m_FlagVariable);
setFlag.bFlag = true;
SEND_ENTITY_MSG(setFlag);
EntityInfo info{};
info.lot = m_FXObject;

View File

@@ -1,15 +1,26 @@
#include "Binoculars.h"
#include "Character.h"
#include "GameMessages.h"
#include "Game.h"
#include "dServer.h"
#include "dZoneManager.h"
void Binoculars::OnUse(Entity* self, Entity* user) {
const auto number = self->GetVarAsString(u"number");
int32_t flag = std::stoi(std::to_string(Game::server->GetZoneID()).substr(0, 2) + number);
if (user->GetCharacter()->GetPlayerFlag(flag) == false) {
user->GetCharacter()->SetPlayerFlag(flag, true);
int32_t flag = std::stoi(std::to_string(Game::zoneManager->GetZoneID().GetMapID()).substr(0, 2) + number);
GameMessages::GetFlag getFlag{};
getFlag.target = user->GetObjectID();
getFlag.iFlagId = flag;
SEND_ENTITY_MSG(getFlag);
if (!getFlag.bFlag) {
GameMessages::SetFlag setFlag{};
setFlag.target = user->GetObjectID();
setFlag.iFlagId = flag;
setFlag.bFlag = true;
SEND_ENTITY_MSG(setFlag);
GameMessages::SendFireEventClientSide(self->GetObjectID(), user->GetSystemAddress(), u"achieve", LWOOBJID_EMPTY, 0, -1, LWOOBJID_EMPTY);
}
}

View File

@@ -1,6 +1,5 @@
#include "NjRailActivatorsServer.h"
#include "QuickBuildComponent.h"
#include "Character.h"
void NjRailActivatorsServer::OnUse(Entity* self, Entity* user) {
const auto flag = self->GetVar<int32_t>(u"RailFlagNum");
@@ -8,9 +7,10 @@ void NjRailActivatorsServer::OnUse(Entity* self, Entity* user) {
// Only allow use if this is not a quick build or the quick build is built
if (quickBuildComponent == nullptr || quickBuildComponent->GetState() == eQuickBuildState::COMPLETED) {
auto* character = user->GetCharacter();
if (character != nullptr) {
character->SetPlayerFlag(flag, true);
}
GameMessages::SetFlag setFlag{};
setFlag.target = user->GetObjectID();
setFlag.iFlagId = flag;
setFlag.bFlag = true;
SEND_ENTITY_MSG(setFlag);
}
}

View File

@@ -1,10 +1,9 @@
#include "dZoneManager.h"
#include "PetDigServer.h"
#include "dZoneManager.h"
#include "MissionComponent.h"
#include "EntityManager.h"
#include "Character.h"
#include "PetComponent.h"
#include "User.h"
#include "eMissionState.h"
std::vector<LWOOBJID> PetDigServer::treasures{};
@@ -110,7 +109,6 @@ void PetDigServer::HandleXBuildDig(const Entity* self, Entity* owner, Entity* pe
if (!playerEntity || !playerEntity->GetCharacter())
return;
auto* player = playerEntity->GetCharacter();
const auto groupID = self->GetVar<std::u16string>(u"groupID");
int32_t playerFlag = 0;
@@ -123,15 +121,22 @@ void PetDigServer::HandleXBuildDig(const Entity* self, Entity* owner, Entity* pe
playerFlag = 63;
}
GameMessages::GetFlag getFlag{};
getFlag.target = playerEntity->GetObjectID();
getFlag.iFlagId = playerFlag;
SEND_ENTITY_MSG(getFlag);
// If the player doesn't have the flag yet
if (playerFlag != 0 && !player->GetPlayerFlag(playerFlag)) {
if (playerFlag != 0 && SEND_ENTITY_MSG(getFlag) && !getFlag.bFlag) {
auto* petComponent = pet->GetComponent<PetComponent>();
if (petComponent != nullptr) {
// TODO: Pet state = 9 ??
}
// Shows the flag object to the player
player->SetPlayerFlag(playerFlag, true);
GameMessages::SetFlag setFlag{};
setFlag.target = playerEntity->GetObjectID();
setFlag.iFlagId = playerFlag;
setFlag.bFlag = true;
SEND_ENTITY_MSG(setFlag);
}
auto* xObject = Game::entityManager->GetEntity(self->GetVar<LWOOBJID>(u"X"));
@@ -173,12 +178,17 @@ void PetDigServer::ProgressPetDigMissions(const Entity* owner, const Entity* che
if (excavatorMissionState == eMissionState::ACTIVE) {
if (chest->HasVar(u"PetDig")) {
int32_t playerFlag = 1260 + chest->GetVarAs<int32_t>(u"PetDig");
Character* player = owner->GetCharacter();
GameMessages::GetFlag getFlag{};
getFlag.target = owner->GetObjectID();
getFlag.iFlagId = playerFlag;
// check if player flag is set
if (!player->GetPlayerFlag(playerFlag)) {
if (SEND_ENTITY_MSG(getFlag) && !getFlag.bFlag) {
missionComponent->ForceProgress(505, 767, 1);
player->SetPlayerFlag(playerFlag, 1);
GameMessages::SetFlag setFlag{};
setFlag.target = owner->GetObjectID();
setFlag.iFlagId = playerFlag;
setFlag.bFlag = true;
SEND_ENTITY_MSG(setFlag);
}
}
}

View File

@@ -1,7 +1,7 @@
#include "StoryBoxInteractServer.h"
#include "Character.h"
#include "GameMessages.h"
#include "dServer.h"
#include "dZoneManager.h"
#include "Amf3.h"
#include "Entity.h"
@@ -36,11 +36,19 @@ void StoryBoxInteractServer::OnUse(Entity* self, Entity* user) {
if(!storyValue) return;
int32_t boxFlag = self->GetVar<int32_t>(u"altFlagID");
if (boxFlag <= 0) {
boxFlag = (10000 + Game::server->GetZoneID() + storyValue.value());
boxFlag = (10000 + Game::zoneManager->GetZoneID().GetMapID() + storyValue.value());
}
if (user->GetCharacter()->GetPlayerFlag(boxFlag) == false) {
user->GetCharacter()->SetPlayerFlag(boxFlag, true);
GameMessages::GetFlag getFlag{};
getFlag.target = user->GetObjectID();
getFlag.iFlagId = boxFlag;
if (SEND_ENTITY_MSG(getFlag) && !getFlag.bFlag) {
GameMessages::SetFlag setFlag{};
setFlag.target = user->GetObjectID();
setFlag.iFlagId = boxFlag;
setFlag.bFlag = true;
SEND_ENTITY_MSG(setFlag);
GameMessages::SendFireEventClientSide(self->GetObjectID(), user->GetSystemAddress(), u"achieve", LWOOBJID_EMPTY, 0, -1, LWOOBJID_EMPTY);
}
}

View File

@@ -1,15 +1,14 @@
#include "TokenConsoleServer.h"
#include "InventoryComponent.h"
#include "GameMessages.h"
#include "Character.h"
#include "eReplicaComponentType.h"
#include "eTerminateType.h"
#include "ePlayerFlag.h"
//2021-05-03 - max - added script, omitted some parts related to inheritance in lua which we don't need
void TokenConsoleServer::OnUse(Entity* self, Entity* user) {
auto* inv = static_cast<InventoryComponent*>(user->GetComponent(eReplicaComponentType::INVENTORY));
auto* inv = user->GetComponent<InventoryComponent>();
//make sure the user has the required amount of infected bricks
if (inv && inv->GetLotCount(6194) >= bricksToTake) {
@@ -22,17 +21,18 @@ void TokenConsoleServer::OnUse(Entity* self, Entity* user) {
}
//figure out which faction the player belongs to:
auto character = user->GetCharacter();
if (!character) return;
// At this point the player has to be in a faction.
GameMessages::GetFlag getFlag{};
getFlag.target = user->GetObjectID();
LOT tokenLOT = 0;
if (character->GetPlayerFlag(ePlayerFlag::VENTURE_FACTION)) //venture
if (getFlag.iFlagId = ePlayerFlag::VENTURE_FACTION, SEND_ENTITY_MSG(getFlag) && getFlag.bFlag) //venture
tokenLOT = 8321;
else if (character->GetPlayerFlag(ePlayerFlag::ASSEMBLY_FACTION)) //assembly
else if (getFlag.iFlagId = ePlayerFlag::ASSEMBLY_FACTION, SEND_ENTITY_MSG(getFlag) && getFlag.bFlag) //assembly
tokenLOT = 8318;
else if (character->GetPlayerFlag(ePlayerFlag::PARADOX_FACTION)) //paradox
else if (getFlag.iFlagId = ePlayerFlag::PARADOX_FACTION, SEND_ENTITY_MSG(getFlag) && getFlag.bFlag) //paradox
tokenLOT = 8320;
else if (character->GetPlayerFlag(ePlayerFlag::SENTINEL_FACTION)) //sentinel
else if (getFlag.iFlagId = ePlayerFlag::SENTINEL_FACTION, SEND_ENTITY_MSG(getFlag) && getFlag.bFlag) //sentinel
tokenLOT = 8319;
inv->AddItem(tokenLOT, tokensToGive, eLootSourceType::NONE);
}

View File

@@ -1,7 +1,6 @@
#include "NsTokenConsoleServer.h"
#include "InventoryComponent.h"
#include "GameMessages.h"
#include "Character.h"
#include "MissionComponent.h"
#include "QuickBuildComponent.h"
#include "eTerminateType.h"
@@ -24,9 +23,8 @@ void NsTokenConsoleServer::OnUse(Entity* self, Entity* user) {
auto* inventoryComponent = user->GetComponent<InventoryComponent>();
auto* missionComponent = user->GetComponent<MissionComponent>();
auto* character = user->GetCharacter();
if (inventoryComponent == nullptr || missionComponent == nullptr || character == nullptr) {
if (inventoryComponent == nullptr || missionComponent == nullptr) {
return;
}
@@ -42,15 +40,18 @@ void NsTokenConsoleServer::OnUse(Entity* self, Entity* user) {
GameMessages::SendPlayNDAudioEmitter(self, user->GetSystemAddress(), useSound);
}
GameMessages::GetFlag getFlag{};
getFlag.target = user->GetObjectID();
// Player must be in faction to interact with this entity.
LOT tokenLOT = 0;
if (character->GetPlayerFlag(ePlayerFlag::VENTURE_FACTION)) //venture
if (getFlag.iFlagId = ePlayerFlag::VENTURE_FACTION, SEND_ENTITY_MSG(getFlag) && getFlag.bFlag) //venture
tokenLOT = 8321;
else if (character->GetPlayerFlag(ePlayerFlag::ASSEMBLY_FACTION)) //assembly
else if (getFlag.iFlagId = ePlayerFlag::ASSEMBLY_FACTION, SEND_ENTITY_MSG(getFlag) && getFlag.bFlag) //assembly
tokenLOT = 8318;
else if (character->GetPlayerFlag(ePlayerFlag::PARADOX_FACTION)) //paradox
else if (getFlag.iFlagId = ePlayerFlag::PARADOX_FACTION, SEND_ENTITY_MSG(getFlag) && getFlag.bFlag) //paradox
tokenLOT = 8320;
else if (character->GetPlayerFlag(ePlayerFlag::SENTINEL_FACTION)) //sentinel
else if (getFlag.iFlagId = ePlayerFlag::SENTINEL_FACTION, SEND_ENTITY_MSG(getFlag) && getFlag.bFlag) //sentinel
tokenLOT = 8319;
inventoryComponent->AddItem(tokenLOT, 5, eLootSourceType::NONE);

View File

@@ -1,15 +1,15 @@
#include "NTPipeVisibilityServer.h"
#include "Entity.h"
#include "Character.h"
void NTPipeVisibilityServer::OnQuickBuildComplete(Entity* self, Entity* target) {
const auto flag = self->GetVar<int32_t>(u"flag");
if (flag == 0) return;
auto* character = target->GetCharacter();
if (!character) return;
character->SetPlayerFlag(flag, true);
GameMessages::SetFlag setFlag{};
setFlag.target = target->GetObjectID();
setFlag.iFlagId = flag;
setFlag.bFlag = true;
SEND_ENTITY_MSG(setFlag);
GameMessages::SendNotifyClientObject(self->GetObjectID(), u"PipeBuilt");
}

View File

@@ -1,12 +1,14 @@
#include "NtImagimeterVisibility.h"
#include "GameMessages.h"
#include "Entity.h"
#include "Character.h"
#include "ePlayerFlag.h"
void NTImagimeterVisibility::OnQuickBuildComplete(Entity* self, Entity* target) {
auto* character = target->GetCharacter();
if (character) character->SetPlayerFlag(ePlayerFlag::NT_PLINTH_REBUILD, true);
GameMessages::SetFlag setFlag{};
setFlag.target = target->GetObjectID();
setFlag.iFlagId = ePlayerFlag::NT_PLINTH_REBUILD;
setFlag.bFlag = true;
SEND_ENTITY_MSG(setFlag);
GameMessages::SendNotifyClientObject(self->GetObjectID(), u"PlinthBuilt", 0, 0, LWOOBJID_EMPTY, "", target->GetSystemAddress());
}

View File

@@ -1,8 +1,8 @@
#include "NtParadoxPanelServer.h"
#include "GameMessages.h"
#include "MissionComponent.h"
#include "EntityManager.h"
#include "Character.h"
#include "eMissionState.h"
#include "RenderComponent.h"
#include "eTerminateType.h"
@@ -32,8 +32,11 @@ void NtParadoxPanelServer::OnUse(Entity* self, Entity* user) {
}
const auto flag = self->GetVar<int32_t>(u"flag");
player->GetCharacter()->SetPlayerFlag(flag, true);
GameMessages::SetFlag setFlag{};
setFlag.target = playerID;
setFlag.iFlagId = flag;
setFlag.bFlag = true;
SEND_ENTITY_MSG(setFlag);
RenderComponent::PlayAnimation(player, u"rebuild-celebrate");

View File

@@ -292,34 +292,45 @@ void ZoneAgProperty::BaseTimerDone(Entity* self, const std::string& timerName) {
void ZoneAgProperty::OnZonePropertyRented(Entity* self, Entity* player) {
BaseZonePropertyRented(self, player);
auto* character = player->GetCharacter();
if (character == nullptr)
return;
character->SetPlayerFlag(108, true);
GameMessages::SetFlag setFlag{};
setFlag.target = player->GetObjectID();
setFlag.iFlagId = 108;
setFlag.bFlag = true;
SEND_ENTITY_MSG(setFlag);
}
void ZoneAgProperty::OnZonePropertyModelPlaced(Entity* self, Entity* player) {
auto* character = player->GetCharacter();
auto* missionComponent = player->GetComponent<MissionComponent>();
if (!missionComponent) return;
if (!character->GetPlayerFlag(101)) {
GameMessages::GetFlag getFlag{};
getFlag.target = player->GetObjectID();
GameMessages::SetFlag setFlag{};
setFlag.target = player->GetObjectID();
setFlag.bFlag = true;
if (getFlag.iFlagId = 101, SEND_ENTITY_MSG(getFlag) && !getFlag.bFlag) {
BaseZonePropertyModelPlaced(self, player);
character->SetPlayerFlag(101, true);
setFlag.iFlagId = 101;
SEND_ENTITY_MSG(setFlag);
if (missionComponent->GetMissionState(871) == eMissionState::ACTIVE) {
self->SetNetworkVar<std::u16string>(u"Tooltip", u"AnotherModel");
}
} else if (!character->GetPlayerFlag(102)) {
character->SetPlayerFlag(102, true);
} else if (getFlag.iFlagId = 102, SEND_ENTITY_MSG(getFlag) && !getFlag.bFlag) {
setFlag.iFlagId = 102;
SEND_ENTITY_MSG(setFlag);
if (missionComponent->GetMissionState(871) == eMissionState::ACTIVE) {
self->SetNetworkVar<std::u16string>(u"Tooltip", u"TwoMoreModels");
}
} else if (!character->GetPlayerFlag(103)) {
character->SetPlayerFlag(103, true);
} else if (!character->GetPlayerFlag(104)) {
character->SetPlayerFlag(104, true);
} else if (getFlag.iFlagId = 103, SEND_ENTITY_MSG(getFlag) && !getFlag.bFlag) {
setFlag.iFlagId = 103;
SEND_ENTITY_MSG(setFlag);
} else if (getFlag.iFlagId = 104, SEND_ENTITY_MSG(getFlag) && !getFlag.bFlag) {
setFlag.iFlagId = 104;
SEND_ENTITY_MSG(setFlag);
self->SetNetworkVar<std::u16string>(u"Tooltip", u"TwoMoreModelsOff");
} else if (self->GetVar<std::string>(u"tutorial") == "place_model") {
self->SetVar<std::string>(u"tutorial", "");
@@ -328,20 +339,34 @@ void ZoneAgProperty::OnZonePropertyModelPlaced(Entity* self, Entity* player) {
}
void ZoneAgProperty::OnZonePropertyModelPickedUp(Entity* self, Entity* player) {
auto* character = player->GetCharacter();
auto* missionComponent = player->GetComponent<MissionComponent>();
if (!missionComponent) return;
if (!character->GetPlayerFlag(109)) {
character->SetPlayerFlag(109, true);
if (missionComponent->GetMissionState(891) == eMissionState::ACTIVE && !character->GetPlayerFlag(110)) {
GameMessages::GetFlag getFlag{};
getFlag.target = player->GetObjectID();
getFlag.iFlagId = 109;
if (SEND_ENTITY_MSG(getFlag) && !getFlag.bFlag) {
GameMessages::SetFlag setFlag{};
setFlag.target = player->GetObjectID();
setFlag.iFlagId = 109;
setFlag.bFlag = true;
SEND_ENTITY_MSG(setFlag);
getFlag.iFlagId = 110;
getFlag.bFlag = false;
if (missionComponent->GetMissionState(891) == eMissionState::ACTIVE && SEND_ENTITY_MSG(getFlag) && !getFlag.bFlag) {
self->SetNetworkVar<std::u16string>(u"Tooltip", u"Rotate");
}
}
}
void ZoneAgProperty::OnZonePropertyModelRemoved(Entity* self, Entity* player) {
auto* character = player->GetCharacter();
character->SetPlayerFlag(111, true);
GameMessages::SetFlag setFlag{};
setFlag.target = player->GetObjectID();
setFlag.iFlagId = 111;
setFlag.bFlag = true;
SEND_ENTITY_MSG(setFlag);
}
void ZoneAgProperty::OnZonePropertyModelRemovedWhileEquipped(Entity* self, Entity* player) {
@@ -349,11 +374,18 @@ void ZoneAgProperty::OnZonePropertyModelRemovedWhileEquipped(Entity* self, Entit
}
void ZoneAgProperty::OnZonePropertyModelRotated(Entity* self, Entity* player) {
auto* character = player->GetCharacter();
auto* missionComponent = player->GetComponent<MissionComponent>();
if (!missionComponent) return;
GameMessages::GetFlag getFlag{};
getFlag.target = player->GetObjectID();
getFlag.iFlagId = 110;
if (!character->GetPlayerFlag(110)) {
character->SetPlayerFlag(110, true);
if (SEND_ENTITY_MSG(getFlag) && !getFlag.bFlag) {
GameMessages::SetFlag setFlag{};
setFlag.target = player->GetObjectID();
setFlag.iFlagId = 110;
setFlag.bFlag = true;
SEND_ENTITY_MSG(setFlag);
if (missionComponent->GetMissionState(891) == eMissionState::ACTIVE) {
self->SetNetworkVar<std::u16string>(u"Tooltip", u"PlaceModel");
@@ -413,7 +445,12 @@ void ZoneAgProperty::BaseOnFireEventServerSide(Entity* self, Entity* sender, std
if (player == nullptr)
return;
player->GetCharacter()->SetPlayerFlag(self->GetVar<int32_t>(defeatedProperyFlag), true);
GameMessages::SetFlag setFlag{};
setFlag.target = player->GetObjectID();
setFlag.iFlagId = self->GetVar<int32_t>(defeatedProperyFlag);
setFlag.bFlag = true;
SEND_ENTITY_MSG(setFlag);
GameMessages::SendNotifyClientObject(self->GetObjectID(), u"PlayCinematic", 0, 0,
LWOOBJID_EMPTY, destroyedCinematic, UNASSIGNED_SYSTEM_ADDRESS);

View File

@@ -1,21 +1,21 @@
#include "VeEpsilonServer.h"
#include "Character.h"
#include "EntityManager.h"
#include "GameMessages.h"
#include "eMissionState.h"
#include "Entity.h"
void VeEpsilonServer::OnMissionDialogueOK(Entity* self, Entity* target, int missionID, eMissionState missionState) {
auto* character = target->GetCharacter();
if (character == nullptr)
return;
// Resets the player flags that track which consoles they've used
if ((missionID == m_ConsoleMissionID || missionID == m_ConsoleRepeatMissionID)
&& (missionState == eMissionState::AVAILABLE || missionState == eMissionState::COMPLETE_AVAILABLE)) {
GameMessages::SetFlag setFlag{};
setFlag.target = target->GetObjectID();
for (auto i = 0; i < 10; i++) {
character->SetPlayerFlag(m_ConsoleBaseFlag + i, false);
setFlag.iFlagId = m_ConsoleBaseFlag + i;
setFlag.bFlag = false;
SEND_ENTITY_MSG(setFlag);
}
}

View File

@@ -1,6 +1,6 @@
#include "VeMissionConsole.h"
#include "InventoryComponent.h"
#include "Character.h"
#include "GameMessages.h"
#include "Loot.h"
#include "eTerminateType.h"
@@ -17,10 +17,11 @@ void VeMissionConsole::OnUse(Entity* self, Entity* user) {
const auto flagNumber = self->GetVar<std::u16string>(m_NumberVariable);
const int32_t flag = std::stoi("101" + GeneralUtils::UTF16ToWTF8(flagNumber));
auto* character = user->GetCharacter();
if (character != nullptr) {
character->SetPlayerFlag(flag, true);
}
GameMessages::SetFlag setFlag{};
setFlag.target = user->GetObjectID();
setFlag.iFlagId = flag;
setFlag.bFlag = true;
SEND_ENTITY_MSG(setFlag);
GameMessages::SendNotifyClientObject(self->GetObjectID(), u"");
GameMessages::SendTerminateInteraction(user->GetObjectID(), eTerminateType::FROM_INTERACTION, self->GetObjectID());

View File

@@ -1,8 +1,8 @@
#include "CavePrisonCage.h"
#include "EntityManager.h"
#include "QuickBuildComponent.h"
#include "GameMessages.h"
#include "Character.h"
#include "dZoneManager.h"
#include "RenderComponent.h"
@@ -161,10 +161,14 @@ void CavePrisonCage::OnTimerDone(Entity* self, std::string timerName) {
return;
}
// Set the flag on the builder character
const auto flagNum = 2020 + self->GetVarAs<int32_t>(u"myNumber");
// Set the flag on the builder character
builder->GetCharacter()->SetPlayerFlag(flagNum, true);
GameMessages::SetFlag setFlag{};
setFlag.target = builder->GetObjectID();
setFlag.iFlagId = flagNum;
setFlag.bFlag = true;
SEND_ENTITY_MSG(setFlag);
// Setup a timer named 'VillagerEscape' to be triggered in 5 seconds
self->AddTimer("VillagerEscape", 5.0f);

View File

@@ -1,16 +1,15 @@
#include "NjDragonEmblemChestServer.h"
#include "Character.h"
#include "EntityInfo.h"
#include "Loot.h"
#include "Entity.h"
#include "DestroyableComponent.h"
#include "ePlayerFlag.h"
void NjDragonEmblemChestServer::OnUse(Entity* self, Entity* user) {
auto* character = user->GetCharacter();
if (character != nullptr) {
character->SetPlayerFlag(ePlayerFlag::NJ_WU_SHOW_DAILY_CHEST, false);
}
GameMessages::SetFlag setFlag{};
setFlag.target = user->GetObjectID();
setFlag.iFlagId = ePlayerFlag::NJ_WU_SHOW_DAILY_CHEST;
setFlag.bFlag = false;
SEND_ENTITY_MSG(setFlag);
auto* destroyable = self->GetComponent<DestroyableComponent>();
if (destroyable != nullptr) {

View File

@@ -1,17 +1,19 @@
#include "NjGarmadonCelebration.h"
#include "Character.h"
#include "GameMessages.h"
#include "ePlayerFlag.h"
void NjGarmadonCelebration::OnCollisionPhantom(Entity* self, Entity* target) {
auto* character = target->GetCharacter();
GameMessages::GetFlag getFlag{};
getFlag.target = target->GetObjectID();
getFlag.iFlagId = ePlayerFlag::NJ_GARMADON_CINEMATIC_SEEN;
if (character == nullptr) {
return;
}
if (!character->GetPlayerFlag(ePlayerFlag::NJ_GARMADON_CINEMATIC_SEEN)) {
character->SetPlayerFlag(ePlayerFlag::NJ_GARMADON_CINEMATIC_SEEN, true);
if (SEND_ENTITY_MSG(getFlag) && !getFlag.bFlag) {
GameMessages::SetFlag setFlag{};
setFlag.target = target->GetObjectID();
setFlag.iFlagId = ePlayerFlag::NJ_GARMADON_CINEMATIC_SEEN;
setFlag.bFlag = true;
SEND_ENTITY_MSG(setFlag);
GameMessages::SendStartCelebrationEffect(target, target->GetSystemAddress(), GarmadonCelebrationID);
}

View File

@@ -1,6 +1,5 @@
#include "NjNPCMissionSpinjitzuServer.h"
#include "Character.h"
#include "EntityManager.h"
#include "eMissionState.h"
void NjNPCMissionSpinjitzuServer::OnMissionDialogueOK(Entity* self, Entity* target, int missionID, eMissionState missionState) {
@@ -12,13 +11,11 @@ void NjNPCMissionSpinjitzuServer::OnMissionDialogueOK(Entity* self, Entity* targ
// Wait for an animation to complete and flag that the player has learned spinjitzu
self->AddCallbackTimer(5.0f, [targetID, element]() {
auto* target = Game::entityManager->GetEntity(targetID);
if (target != nullptr) {
auto* character = target->GetCharacter();
if (character != nullptr) {
character->SetPlayerFlag(ElementFlags.at(element), true);
}
}
GameMessages::SetFlag setFlag{};
setFlag.target = targetID;
setFlag.iFlagId = ElementFlags.at(element);
setFlag.bFlag = true;
SEND_ENTITY_MSG(setFlag);
});
}
}

View File

@@ -1,6 +1,5 @@
#include "NjWuNPC.h"
#include "MissionComponent.h"
#include "Character.h"
#include "EntityManager.h"
#include "GameMessages.h"
#include "eMissionState.h"
@@ -10,10 +9,8 @@ void NjWuNPC::OnMissionDialogueOK(Entity* self, Entity* target, int missionID, e
// The Dragon statue daily mission
if (missionID == m_MainDragonMissionID) {
auto* character = target->GetCharacter();
auto* missionComponent = target->GetComponent<MissionComponent>();
if (character == nullptr || missionComponent == nullptr)
return;
if (!missionComponent) return;
switch (missionState) {
case eMissionState::AVAILABLE:
@@ -24,8 +21,11 @@ void NjWuNPC::OnMissionDialogueOK(Entity* self, Entity* target, int missionID, e
missionComponent->RemoveMission(subMissionID);
missionComponent->AcceptMission(subMissionID);
}
character->SetPlayerFlag(ePlayerFlag::NJ_WU_SHOW_DAILY_CHEST, false);
GameMessages::SetFlag setFlag{};
setFlag.target = target->GetObjectID();
setFlag.iFlagId = ePlayerFlag::NJ_WU_SHOW_DAILY_CHEST;
setFlag.bFlag = false;
SEND_ENTITY_MSG(setFlag);
// Hide the chest
for (auto* chest : Game::entityManager->GetEntitiesInGroup(m_DragonChestGroup)) {
@@ -38,7 +38,11 @@ void NjWuNPC::OnMissionDialogueOK(Entity* self, Entity* target, int missionID, e
case eMissionState::READY_TO_COMPLETE:
case eMissionState::COMPLETE_READY_TO_COMPLETE:
{
character->SetPlayerFlag(ePlayerFlag::NJ_WU_SHOW_DAILY_CHEST, true);
GameMessages::SetFlag setFlag{};
setFlag.target = target->GetObjectID();
setFlag.iFlagId = ePlayerFlag::NJ_WU_SHOW_DAILY_CHEST;
setFlag.bFlag = true;
SEND_ENTITY_MSG(setFlag);
// Show the chest
for (auto* chest : Game::entityManager->GetEntitiesInGroup(m_DragonChestGroup)) {

View File

@@ -127,7 +127,10 @@ void BasePropertyServer::BasePlayerLoaded(Entity* self, Entity* player) {
if (player->GetObjectID() != propertyOwner)
return;
} else {
const auto defeatedFlag = player->GetCharacter()->GetPlayerFlag(self->GetVar<int32_t>(defeatedProperyFlag));
GameMessages::GetFlag getFlag{};
getFlag.target = player->GetObjectID();
getFlag.iFlagId = self->GetVar<int32_t>(defeatedProperyFlag);
const auto defeatedFlag = SEND_ENTITY_MSG(getFlag) && getFlag.bFlag;
self->SetNetworkVar(UnclaimedVariable, true);
self->SetVar<LWOOBJID>(PlayerIDVariable, player->GetObjectID());
@@ -184,8 +187,13 @@ void BasePropertyServer::BaseZonePropertyModelPlaced(Entity* self, Entity* playe
return;
auto flag = self->GetVar<int32_t>(placedModelFlag);
if (flag)
character->SetPlayerFlag(flag, true);
if (flag) {
GameMessages::SetFlag setFlag{};
setFlag.target = player->GetObjectID();
setFlag.iFlagId = flag;
setFlag.bFlag = true;
SEND_ENTITY_MSG(setFlag);
}
}
void BasePropertyServer::KillClouds(Entity* self) {
@@ -462,10 +470,11 @@ void BasePropertyServer::HandleOrbsTimer(Entity* self) {
// Notifies the client that the property has been claimed with a flag, completes missions too
auto* player = Game::entityManager->GetEntity(self->GetVar<LWOOBJID>(PlayerIDVariable));
if (player != nullptr) {
auto* character = player->GetCharacter();
if (character != nullptr) {
character->SetPlayerFlag(self->GetVar<int32_t>(defeatedProperyFlag), true);
}
GameMessages::SetFlag setFlag{};
setFlag.target = player->GetObjectID();
setFlag.iFlagId = self->GetVar<int32_t>(defeatedProperyFlag);
setFlag.bFlag = true;
SEND_ENTITY_MSG(setFlag);
}
self->AddTimer(TornadoOffTimer, 0.5f);

View File

@@ -1,9 +1,9 @@
#include "Darkitect.h"
#include "MissionComponent.h"
#include "DestroyableComponent.h"
#include "EntityManager.h"
#include "GameMessages.h"
#include "Character.h"
#include "eMissionState.h"
void Darkitect::Reveal(Entity* self, Entity* player) {
@@ -18,15 +18,18 @@ void Darkitect::Reveal(Entity* self, Entity* player) {
auto* destroyableComponent = player->GetComponent<DestroyableComponent>();
auto* missionComponent = player->GetComponent<MissionComponent>();
auto* character = player->GetCharacter();
if (destroyableComponent != nullptr && missionComponent != nullptr && character != nullptr) {
if (destroyableComponent != nullptr && missionComponent != nullptr) {
destroyableComponent->SetArmor(0);
destroyableComponent->SetHealth(1);
destroyableComponent->SetImagination(0);
if (missionComponent->GetMissionState(1295) == eMissionState::ACTIVE) {
character->SetPlayerFlag(1911, true);
GameMessages::SetFlag setFlag{};
setFlag.target = player->GetObjectID();
setFlag.iFlagId = 1911;
setFlag.bFlag = true;
SEND_ENTITY_MSG(setFlag);
}
Game::entityManager->SerializeEntity(player);

View File

@@ -1,16 +1,20 @@
#include "TrialFactionArmorServer.h"
#include "Character.h"
#include "ePlayerFlag.h"
#include "GameMessages.h"
#include "EntityManager.h"
#include "DestroyableComponent.h"
void TrialFactionArmorServer::OnFactionTriggerItemEquipped(Entity* itemOwner, LWOOBJID itemObjId) {
auto* character = itemOwner->GetCharacter();
if (!character) return;
GameMessages::GetFlag flag{};
flag.target = itemOwner->GetObjectID();
flag.iFlagId = ePlayerFlag::EQUPPED_TRIAL_FACTION_GEAR;
auto flag = character->GetPlayerFlag(ePlayerFlag::EQUPPED_TRIAL_FACTION_GEAR);
if (!flag) {
character->SetPlayerFlag(ePlayerFlag::EQUPPED_TRIAL_FACTION_GEAR, true);
if (SEND_ENTITY_MSG(flag) && !flag.bFlag) {
GameMessages::SetFlag setFlag{};
setFlag.iFlagId = ePlayerFlag::EQUPPED_TRIAL_FACTION_GEAR;
setFlag.bFlag = true;
SEND_ENTITY_MSG(setFlag);
// technically a TimerWithCancel but our current implementation doesnt support this.
itemOwner->AddCallbackTimer(1.0f, [itemOwner]() {

View File

@@ -1,11 +1,10 @@
#include "NtFactionSpyServer.h"
#include "Character.h"
#include "ProximityMonitorComponent.h"
#include "InventoryComponent.h"
#include "GameMessages.h"
#include "MissionComponent.h"
#include "eMissionState.h"
#include "eReplicaComponentType.h"
#include "eCinematicEvent.h"
#include "ePlayerFlag.h"
@@ -54,12 +53,14 @@ bool NtFactionSpyServer::IsSpy(Entity* self, Entity* possibleSpy) {
auto* missionComponent = possibleSpy->GetComponent<MissionComponent>();
auto* inventoryComponent = possibleSpy->GetComponent<InventoryComponent>();
auto* character = possibleSpy->GetCharacter();
GameMessages::GetFlag getFlag{};
getFlag.target = possibleSpy->GetObjectID();
getFlag.iFlagId = spyData.flagID;
// A player is a spy if they have the spy mission, have the spy equipment equipped and don't have the spy flag set yet
return missionComponent != nullptr && missionComponent->GetMissionState(spyData.missionID) == eMissionState::ACTIVE
&& inventoryComponent != nullptr && inventoryComponent->IsEquipped(spyData.itemID)
&& character != nullptr && !character->GetPlayerFlag(spyData.flagID);
&& SEND_ENTITY_MSG(getFlag) && !getFlag.bFlag;
}
void NtFactionSpyServer::OnCinematicUpdate(Entity* self, Entity* sender, eCinematicEvent event,
@@ -87,10 +88,11 @@ void NtFactionSpyServer::OnCinematicUpdate(Entity* self, Entity* sender, eCinema
} else if (event == eCinematicEvent::ENDED && pathIndex >= dialogueTable.size() - 1) {
auto spyData = self->GetVar<SpyData>(m_SpyDataVariable);
auto* character = sender->GetCharacter();
if (character != nullptr) {
character->SetPlayerFlag(spyData.flagID, true);
}
GameMessages::SetFlag setFlag{};
setFlag.target = sender->GetObjectID();
setFlag.iFlagId = spyData.flagID;
setFlag.bFlag = true;
SEND_ENTITY_MSG(setFlag);
}
}
}

View File

@@ -1,6 +1,6 @@
#include "BaseFootRaceManager.h"
#include "EntityManager.h"
#include "Character.h"
#include "Entity.h"
void BaseFootRaceManager::OnStartup(Entity* self) {
@@ -21,31 +21,31 @@ void BaseFootRaceManager::OnFireEventServerSide(Entity* self, Entity* sender, st
if (eventName == "updatePlayer") {
UpdatePlayer(self, player->GetObjectID());
} else if (IsPlayerInActivity(self, player->GetObjectID())) {
GameMessages::SetFlag setFlag{};
setFlag.target = player->GetObjectID();
setFlag.iFlagId = 115;
if (eventName == "initialActivityScore") {
auto* character = player->GetCharacter();
if (character != nullptr) {
character->SetPlayerFlag(115, true);
}
setFlag.bFlag = true;
SEND_ENTITY_MSG(setFlag);
SetActivityScore(self, player->GetObjectID(), 1);
} else if (eventName == "updatePlayerTrue") {
auto* character = player->GetCharacter();
if (character != nullptr) {
character->SetPlayerFlag(115, false);
}
setFlag.bFlag = false;
SEND_ENTITY_MSG(setFlag);
UpdatePlayer(self, player->GetObjectID(), true);
} else if (eventName == "PlayerWon") {
auto* character = player->GetCharacter();
if (character != nullptr) {
character->SetPlayerFlag(115, false);
if (param2 != -1) // Certain footraces set a flag
character->SetPlayerFlag(param2, true);
setFlag.bFlag = false;
SEND_ENTITY_MSG(setFlag);
if (param2 != -1) {
setFlag.iFlagId = param2;
setFlag.bFlag = true;
SEND_ENTITY_MSG(setFlag);
}
StopActivity(self, player->GetObjectID(), 0, param1);
SaveScore(self, player->GetObjectID(), static_cast<float>(param1), static_cast<float>(param2), static_cast<float>(param3));
}
StopActivity(self, player->GetObjectID(), 0, param1);
SaveScore(self, player->GetObjectID(), static_cast<float>(param1), static_cast<float>(param2), static_cast<float>(param3));
}
}
}

View File

@@ -1,7 +1,9 @@
#include "FvFreeGfNinjas.h"
#include "Character.h"
#include "MissionComponent.h"
#include "eMissionState.h"
#include "Game.h"
#include "EntityManager.h"
void FvFreeGfNinjas::OnMissionDialogueOK(Entity* self, Entity* target, int missionID, eMissionState missionState) {
if (missionID == 705 && missionState == eMissionState::AVAILABLE) {
@@ -14,13 +16,17 @@ void FvFreeGfNinjas::OnMissionDialogueOK(Entity* self, Entity* target, int missi
missionComponent->AcceptMission(703);
missionComponent->AcceptMission(704);
auto* character = target->GetCharacter();
if (character != nullptr)
character->SetPlayerFlag(68, true);
GameMessages::SetFlag setFlag{};
setFlag.target = target->GetObjectID();
setFlag.iFlagId = 68;
setFlag.bFlag = true;
SEND_ENTITY_MSG(setFlag);
} else if (missionID == 786) {
auto* character = target->GetCharacter();
if (character != nullptr)
character->SetPlayerFlag(81, true);
GameMessages::SetFlag setFlag{};
setFlag.target = target->GetObjectID();
setFlag.iFlagId = 81;
setFlag.bFlag = true;
SEND_ENTITY_MSG(setFlag);
}
}
@@ -31,9 +37,11 @@ void FvFreeGfNinjas::OnUse(Entity* self, Entity* user) {
return;
if (missionComponent->GetMissionState(705) == eMissionState::ACTIVE) {
auto* character = user->GetCharacter();
if (character != nullptr)
character->SetPlayerFlag(68, true);
GameMessages::SetFlag setFlag{};
setFlag.target = user->GetObjectID();
setFlag.iFlagId = 68;
setFlag.bFlag = true;
SEND_ENTITY_MSG(setFlag);
missionComponent->AcceptMission(701, true);
missionComponent->AcceptMission(702, true);

View File

@@ -1,6 +1,6 @@
#include "FvPandaServer.h"
#include "PetComponent.h"
#include "Character.h"
#include "ePetTamingNotifyType.h"
void FvPandaServer::OnStartup(Entity* self) {
@@ -19,10 +19,11 @@ void FvPandaServer::OnNotifyPetTamingMinigame(Entity* self, Entity* tamer, ePetT
} else if (type == ePetTamingNotifyType::SUCCESS) {
// TODO: Remove from groups
auto* character = tamer->GetCharacter();
if (character != nullptr) {
character->SetPlayerFlag(82, true);
}
GameMessages::SetFlag setFlag{};
setFlag.target = tamer->GetObjectID();
setFlag.iFlagId = 82;
setFlag.bFlag = true;
SEND_ENTITY_MSG(setFlag);
}
}

View File

@@ -1,13 +1,15 @@
#include "FvPandaSpawnerServer.h"
#include "Character.h"
#include "EntityManager.h"
#include "GameMessages.h"
#include "EntityInfo.h"
#include "ScriptedActivityComponent.h"
void FvPandaSpawnerServer::OnCollisionPhantom(Entity* self, Entity* target) {
auto* character = target->GetCharacter();
if (character != nullptr && character->GetPlayerFlag(81)) {
GameMessages::GetFlag getFlag{};
getFlag.target = target->GetObjectID();
getFlag.iFlagId = 81;
if (SEND_ENTITY_MSG(getFlag) && getFlag.bFlag) {
auto raceObjects = Game::entityManager->GetEntitiesInGroup("PandaRaceObject");
if (raceObjects.empty())

View File

@@ -1,6 +1,6 @@
#include "GfJailkeepMission.h"
#include "MissionComponent.h"
#include "Character.h"
#include "eMissionState.h"
void GfJailkeepMission::OnMissionDialogueOK(Entity* self, Entity* target, int missionID, eMissionState missionState) {
@@ -14,8 +14,11 @@ void GfJailkeepMission::OnMissionDialogueOK(Entity* self, Entity* target, int mi
missionComponent->AcceptMission(388, true);
missionComponent->AcceptMission(390, true);
} else if (missionID == 385 && missionState == eMissionState::COMPLETE_READY_TO_COMPLETE) {
auto* character = target->GetCharacter();
if (character != nullptr && character->GetPlayerFlag(68)) {
GameMessages::GetFlag getFlag{};
getFlag.target = target->GetObjectID();
getFlag.iFlagId = 68;
if (SEND_ENTITY_MSG(getFlag) && getFlag.bFlag) {
missionComponent->AcceptMission(701);
missionComponent->AcceptMission(702);
missionComponent->AcceptMission(703);

View File

@@ -1,14 +1,15 @@
#include "PirateRep.h"
#include "Character.h"
#include "eMissionState.h"
#include "Entity.h"
#include "ePlayerFlag.h"
void PirateRep::OnMissionDialogueOK(Entity* self, Entity* target, int missionID, eMissionState missionState) {
if (missionID == m_PirateRepMissionID && missionState >= eMissionState::READY_TO_COMPLETE) {
auto* character = target->GetCharacter();
if (character) {
character->SetPlayerFlag(ePlayerFlag::GF_PIRATE_REP, true);
}
GameMessages::SetFlag setFlag{};
setFlag.target = target->GetObjectID();
setFlag.iFlagId = ePlayerFlag::GF_PIRATE_REP;
setFlag.bFlag = true;
SEND_ENTITY_MSG(setFlag);
}
}

View File

@@ -1,7 +1,7 @@
#include "NsGetFactionMissionServer.h"
#include "GameMessages.h"
#include "MissionComponent.h"
#include "Character.h"
#include "eReplicaComponentType.h"
#include "ePlayerFlag.h"
@@ -42,11 +42,17 @@ void NsGetFactionMissionServer::OnRespondToMission(Entity* self, int missionID,
}
if (flagID != -1) {
player->GetCharacter()->SetPlayerFlag(ePlayerFlag::JOINED_A_FACTION, true);
player->GetCharacter()->SetPlayerFlag(flagID, true);
GameMessages::SetFlag setFlag{};
setFlag.target = player->GetObjectID();
setFlag.iFlagId = ePlayerFlag::JOINED_A_FACTION;
setFlag.bFlag = true;
SEND_ENTITY_MSG(setFlag);
setFlag.iFlagId = flagID;
setFlag.bFlag = true;
SEND_ENTITY_MSG(setFlag);
}
MissionComponent* mis = static_cast<MissionComponent*>(player->GetComponent(eReplicaComponentType::MISSION));
auto* mis = player->GetComponent<MissionComponent>();
for (int mission : factionMissions) {
mis->AcceptMission(mission);

View File

@@ -1,6 +1,6 @@
#include "AgPropGuard.h"
#include "Entity.h"
#include "Character.h"
#include "EntityManager.h"
#include "InventoryComponent.h"
#include "MissionComponent.h"
@@ -8,13 +8,16 @@
#include "eMissionState.h"
void AgPropGuard::OnMissionDialogueOK(Entity* self, Entity* target, int missionID, eMissionState missionState) {
auto* character = target->GetCharacter();
auto* missionComponent = target->GetComponent<MissionComponent>();
auto* inventoryComponent = target->GetComponent<InventoryComponent>();
if (!missionComponent || !inventoryComponent) return;
const auto state = missionComponent->GetMissionState(320);
if (missionID == 768 && missionState == eMissionState::AVAILABLE) {
if (!character->GetPlayerFlag(71)) {
GameMessages::GetFlag getFlag{};
getFlag.target = target->GetObjectID();
getFlag.iFlagId = 71;
if (SEND_ENTITY_MSG(getFlag) && !getFlag.bFlag) {
// TODO: Cinematic "MissionCam"
}
} else if (missionID == 768 && missionState >= eMissionState::READY_TO_COMPLETE) {
@@ -27,13 +30,12 @@ void AgPropGuard::OnMissionDialogueOK(Entity* self, Entity* target, int missionI
inventoryComponent->RemoveItem(id->GetLot(), id->GetCount());
}
}
} else if (
(missionID == 320 && state == eMissionState::AVAILABLE) /*||
(state == eMissionState::COMPLETE && missionID == 891 && missionState == eMissionState::READY_TO_COMPLETE)*/
) {
//GameMessages::SendNotifyClientObject(Game::entityManager->GetZoneControlEntity()->GetObjectID(), u"GuardChat", target->GetObjectID(), 0, target->GetObjectID(), "", target->GetSystemAddress());
target->GetCharacter()->SetPlayerFlag(113, true);
} else if (missionID == 320 && state == eMissionState::AVAILABLE) {
GameMessages::SetFlag setFlag{};
setFlag.target = target->GetObjectID();
setFlag.iFlagId = 113;
setFlag.bFlag = true;
SEND_ENTITY_MSG(setFlag);
Game::entityManager->GetZoneControlEntity()->AddTimer("GuardFlyAway", 1.0f);
}

View File

@@ -1,21 +1,21 @@
#include "AgPropguards.h"
#include "Character.h"
#include "GameMessages.h"
#include "EntityManager.h"
#include "dZoneManager.h"
#include "eMissionState.h"
void AgPropguards::OnMissionDialogueOK(Entity* self, Entity* target, int missionID, eMissionState missionState) {
auto* character = target->GetCharacter();
if (character == nullptr)
return;
const auto flag = GetFlagForMission(missionID);
if (flag == 0)
return;
GameMessages::GetFlag getFlag{};
getFlag.target = target->GetObjectID();
getFlag.iFlagId = flag;
if ((missionState == eMissionState::AVAILABLE || missionState == eMissionState::ACTIVE)
&& !character->GetPlayerFlag(flag)) {
&& SEND_ENTITY_MSG(getFlag) && !getFlag.bFlag) {
// If the player just started the mission, play a cinematic highlighting the target
GameMessages::SendPlayCinematic(target->GetObjectID(), u"MissionCam", target->GetSystemAddress());
} else if (missionState == eMissionState::READY_TO_COMPLETE) {