Initial changes.

* Recorder to recall player actions.
* Server precondtions to manage entity visiblity.
This commit is contained in:
wincent
2023-10-22 17:36:08 +02:00
parent 50921cce2d
commit 9e56725cff
18 changed files with 1101 additions and 66 deletions

View File

@@ -1,3 +1,4 @@
set(DSCRIPTS_SOURCES_02_SERVER_DLU
"DLUVanityNPC.cpp"
"DukeDialogueGlowingBrick.cpp"
PARENT_SCOPE)

View File

@@ -0,0 +1,72 @@
#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) {
}

View File

@@ -0,0 +1,11 @@
#pragma once
#include "CppScripts.h"
class DukeDialogueGlowingBrick : public CppScripts::Script
{
public:
void OnStartup(Entity* self) override;
void OnTimerDone(Entity* self, std::string timerName) override;
void OnMissionDialogueOK(Entity* self, Entity* target, int missionID, eMissionState missionState) override;
void OnRespondToMission(Entity* self, int missionID, Entity* player, int reward) override;
};

View File

@@ -212,6 +212,7 @@
// DLU Scripts
#include "DLUVanityNPC.h"
#include "DukeDialogueGlowingBrick.h"
// AM Scripts
#include "AmConsoleTeleportServer.h"
@@ -819,6 +820,8 @@ CppScripts::Script* CppScripts::GetScript(Entity* parent, const std::string& scr
//DLU:
else if (scriptName == "scripts\\02_server\\DLU\\DLUVanityNPC.lua")
script = new DLUVanityNPC();
else if (scriptName == "scripts\\02_server\\DLU\\DukeGlowing.lua")
script = new DukeDialogueGlowingBrick();
// Survival minigame
else if (scriptName == "scripts\\02_server\\Enemy\\Survival\\L_AG_SURVIVAL_STROMBIE.lua")