Files
.github
cmake
dAuthServer
dChatFilter
dChatServer
dCommon
dDatabase
dGame
dMasterServer
dNavigation
dNet
dPhysics
dScripts
02_server
DLU
Enemy
Equipment
Map
AG
AG_Spider_Queen
AM
FV
GF
General
NS
NT
CMakeLists.txt
NTPipeVisibilityServer.cpp
NTPipeVisibilityServer.h
NtAssemblyTubeServer.cpp
NtAssemblyTubeServer.h
NtBcSubmitServer.cpp
NtBcSubmitServer.h
NtBeamImaginationCollectors.cpp
NtBeamImaginationCollectors.h
NtCombatChallengeDummy.cpp
NtCombatChallengeDummy.h
NtCombatChallengeExplodingDummy.cpp
NtCombatChallengeExplodingDummy.h
NtCombatChallengeServer.cpp
NtCombatChallengeServer.h
NtConsoleTeleportServer.cpp
NtConsoleTeleportServer.h
NtDarkitectRevealServer.cpp
NtDarkitectRevealServer.h
NtDirtCloudServer.cpp
NtDirtCloudServer.h
NtDukeServer.cpp
NtDukeServer.h
NtHaelServer.cpp
NtHaelServer.h
NtImagBeamBuffer.cpp
NtImagBeamBuffer.h
NtImagimeterVisibility.cpp
NtImagimeterVisibility.h
NtNaomiBreadcrumbServer.cpp
NtNaomiBreadcrumbServer.h
NtOverbuildServer.cpp
NtOverbuildServer.h
NtParadoxPanelServer.cpp
NtParadoxPanelServer.h
NtParadoxTeleServer.cpp
NtParadoxTeleServer.h
NtSentinelWalkwayServer.cpp
NtSentinelWalkwayServer.h
NtSleepingGuard.cpp
NtSleepingGuard.h
NtVandaServer.cpp
NtVandaServer.h
NtVentureCannonServer.cpp
NtVentureCannonServer.h
NtVentureSpeedPadServer.cpp
NtVentureSpeedPadServer.h
NtXRayServer.cpp
NtXRayServer.h
SpawnSaberCatServer.cpp
SpawnSaberCatServer.h
SpawnShrakeServer.cpp
SpawnShrakeServer.h
SpawnStegoServer.cpp
SpawnStegoServer.h
PR
Property
SS
VE
njhub
CMakeLists.txt
Minigame
Objects
Pets
CMakeLists.txt
EquipmentScripts
EquipmentTriggers
ai
client
zone
ActivityManager.cpp
ActivityManager.h
BaseConsoleTeleportServer.cpp
BaseConsoleTeleportServer.h
BasePropertyServer.cpp
BasePropertyServer.h
BaseRandomServer.cpp
BaseRandomServer.h
BaseSurvivalServer.cpp
BaseSurvivalServer.h
BaseWavesGenericEnemy.cpp
BaseWavesGenericEnemy.h
BaseWavesServer.cpp
BaseWavesServer.h
CMakeLists.txt
ChooseYourDestinationNsToNt.cpp
ChooseYourDestinationNsToNt.h
CppScripts.cpp
CppScripts.h
Darkitect.cpp
Darkitect.h
InvalidScript.cpp
InvalidScript.h
NPCAddRemoveItem.cpp
NPCAddRemoveItem.h
NtFactionSpyServer.cpp
NtFactionSpyServer.h
ScriptedPowerupSpawner.cpp
ScriptedPowerupSpawner.h
SpawnPetBaseServer.cpp
SpawnPetBaseServer.h
dServer
dWorldServer
dZoneManager
docs
migrations
resources
tests
thirdparty
vanity
.dockerignore
.editorconfig
.env.example
.git-blame-ignore-revs
.gitattributes
.gitignore
.gitmodules
CMakeLists.txt
CMakePresets.json
CMakeVariables.txt
CONTRIBUTING.md
Dockerfile
LICENSE
README.md
SECURITY.md
build.sh
docker-compose.yml
entrypoint.sh
logo.png
systemd.example
versions.txt
DarkflameServer/dScripts/02_server/Map/NT/NtParadoxTeleServer.cpp
David Markowitz 455f9470a5 Move EntityManager to Game namespace ()
* Move EntityManager to Game namespace

* move initialization to later

Need to wait for dZoneManager to be initialized.

* Fix bugs

- Cannot delete from a RandomAccessIterator while in a range based for loop.

Touchup zone manager initialize

replace magic numbers with better named constants
replace magic zonecontrol id with a more readable hex alternative
condense stack variables
move initializers closer to their use
initialize entity manager with zone control

change initialize timings

If zone is not zero we expect to initialize the entity manager during zone manager initialization

Add constexpr for zone control LOT

* Add proper error handling

* revert vanity changes

* Update WorldServer.cpp

* Update dZoneManager.cpp
2023-07-15 13:56:33 -07:00

116 lines
3.5 KiB
C++

#include "NtParadoxTeleServer.h"
#include "GameMessages.h"
#include "EntityManager.h"
#include "MissionComponent.h"
#include "eMissionTaskType.h"
#include "RenderComponent.h"
#include "eStateChangeType.h"
void NtParadoxTeleServer::OnStartup(Entity* self) {
self->SetProximityRadius(5, "teleport");
}
void NtParadoxTeleServer::OnPlayerLoaded(Entity* self, Entity* player) {
}
void NtParadoxTeleServer::OnProximityUpdate(Entity* self, Entity* entering, std::string name, std::string status) {
if (status != "ENTER" || !entering->IsPlayer() || name != "teleport") return;
auto* player = entering;
const auto playerID = player->GetObjectID();
const auto iter = m_TeleportingPlayerTable.find(playerID);
if (iter == m_TeleportingPlayerTable.end()) m_TeleportingPlayerTable[playerID] = false;
const auto bPlayerBeingTeleported = m_TeleportingPlayerTable[playerID];
if (player->IsPlayer() && !bPlayerBeingTeleported) {
GameMessages::SendSetStunned(playerID, eStateChangeType::PUSH, player->GetSystemAddress(), LWOOBJID_EMPTY,
true, true, true, true, true, true, true
);
auto animTime = RenderComponent::PlayAnimation(player, u"teledeath", 4.0f);
if (animTime == 0.0f) animTime = 2.0f;
self->AddCallbackTimer(animTime, [this, self, playerID]() {
auto* player = Game::entityManager->GetEntity(playerID);
if (player == nullptr) {
return;
}
TeleportPlayer(self, player);
});
}
auto* missionComponent = player->GetComponent<MissionComponent>();
if (missionComponent != nullptr) {
missionComponent->Progress(eMissionTaskType::SCRIPT, self->GetLOT());
}
}
void NtParadoxTeleServer::TeleportPlayer(Entity* self, Entity* player) {
auto destinationGroup = self->GetVar<std::u16string>(u"teleGroup");
auto* destination = self;
if (!destinationGroup.empty()) {
const auto& groupObjs = Game::entityManager->GetEntitiesInGroup(GeneralUtils::UTF16ToWTF8(destinationGroup));
if (!groupObjs.empty()) {
destination = groupObjs[0];
}
}
const auto destPosition = destination->GetPosition();
const auto destRotation = destination->GetRotation();
auto teleCinematic = self->GetVar<std::u16string>(u"Cinematic");
if (!teleCinematic.empty()) {
const auto teleCinematicUname = teleCinematic;
GameMessages::SendPlayCinematic(player->GetObjectID(), teleCinematicUname, player->GetSystemAddress());
}
GameMessages::SendTeleport(player->GetObjectID(), destPosition, destRotation, player->GetSystemAddress(), true);
RenderComponent::PlayAnimation(player, u"paradox-teleport-in", 4.0f);
const auto animTime = 2;
const auto playerID = player->GetObjectID();
self->AddCallbackTimer(animTime, [this, self, playerID]() {
auto* player = Game::entityManager->GetEntity(playerID);
if (player == nullptr) {
return;
}
UnlockPlayer(self, player);
});
const auto useSound = self->GetVar<std::string>(u"sound1");
if (!useSound.empty()) {
GameMessages::SendPlayNDAudioEmitter(player, player->GetSystemAddress(), useSound);
}
}
void NtParadoxTeleServer::UnlockPlayer(Entity* self, Entity* player) {
const auto playerID = player->GetObjectID();
m_TeleportingPlayerTable[playerID] = false;
GameMessages::SendSetStunned(playerID, eStateChangeType::POP, player->GetSystemAddress(), LWOOBJID_EMPTY,
true, true, true, true, true, true, true
);
auto teleCinematic = self->GetVar<std::u16string>(u"Cinematic");
if (!teleCinematic.empty()) {
const auto teleCinematicUname = teleCinematic;
GameMessages::SendEndCinematic(player->GetObjectID(), teleCinematicUname, player->GetSystemAddress());
}
}