DarkflameServer/dScripts/02_server/DLU/DukeDialogueGlowingBrick.cpp
wincent 9e56725cff Initial changes.
* Recorder to recall player actions.
* Server precondtions to manage entity visiblity.
2023-10-22 17:36:08 +02:00

73 lines
1.6 KiB
C++

#include "DukeDialogueGlowingBrick.h"
#include "eMissionState.h"
#include "Recorder.h"
#include "MissionComponent.h"
#include "InventoryComponent.h"
void DukeDialogueGlowingBrick::OnStartup(Entity* self) {
Game::logger->Log("DukeDialogueGlowingBrick", "OnStartup");
}
void DukeDialogueGlowingBrick::OnTimerDone(Entity* self, std::string timerName) {
}
void DukeDialogueGlowingBrick::OnMissionDialogueOK(Entity* self, Entity* target, int missionID, eMissionState missionState) {
if (missionID != 201453) {
return;
}
if (missionState != eMissionState::AVAILABLE) {
return;
}
auto* recorder = Recording::Recorder::LoadFromFile("DukeGlowing.xml");
if (recorder == nullptr) {
return;
}
auto* actor = recorder->ActFor(self, target);
if (actor == nullptr) {
return;
}
const auto targetID = target->GetObjectID();
const auto actorID = actor->GetObjectID();
self->AddCallbackTimer(3.0f, [targetID] () {
auto* target = Game::entityManager->GetEntity(targetID);
if (target == nullptr) {
return;
}
auto* missionComponent = target->GetComponent<MissionComponent>();
if (missionComponent == nullptr) {
return;
}
missionComponent->CompleteMission(201453);
});
self->AddCallbackTimer(recorder->GetDuration() + 10.0f, [recorder, self, actorID, targetID] () {
auto* target = Game::entityManager->GetEntity(targetID);
auto* actor = Game::entityManager->GetEntity(actorID);
if (target == nullptr || actor == nullptr) {
return;
}
recorder->StopActingFor(actor, self, targetID);
delete recorder;
});
}
void DukeDialogueGlowingBrick::OnRespondToMission(Entity* self, int missionID, Entity* player, int reward) {
}