mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2024-11-14 12:18:22 +00:00
6aa90ad5b2
* Breakout rest of the enums from dcommonvars so we don't have to deal with merge conflicts ePlayerFlags is not a scoped enum, yet, due to it's complexity * address feedback * make player flag types consistent * fix typo
70 lines
2.5 KiB
C++
70 lines
2.5 KiB
C++
#include "NtParadoxPanelServer.h"
|
|
#include "GameMessages.h"
|
|
#include "MissionComponent.h"
|
|
#include "EntityManager.h"
|
|
#include "Character.h"
|
|
#include "eMissionState.h"
|
|
#include "eTerminateType.h"
|
|
#include "eStateChangeType.h"
|
|
|
|
void NtParadoxPanelServer::OnUse(Entity* self, Entity* user) {
|
|
GameMessages::SendNotifyClientObject(self->GetObjectID(), u"bActive", 1, 0, user->GetObjectID(), "", user->GetSystemAddress());
|
|
|
|
GameMessages::SendTerminateInteraction(user->GetObjectID(), eTerminateType::FROM_INTERACTION, self->GetObjectID());
|
|
|
|
self->SetVar(u"bActive", true);
|
|
|
|
auto* missionComponent = user->GetComponent<MissionComponent>();
|
|
|
|
const auto playerID = user->GetObjectID();
|
|
|
|
for (const auto mission : tPlayerOnMissions) {
|
|
if (missionComponent->GetMissionState(mission) != eMissionState::ACTIVE) {
|
|
continue;
|
|
}
|
|
|
|
self->AddCallbackTimer(2, [this, self, playerID]() {
|
|
auto* player = EntityManager::Instance()->GetEntity(playerID);
|
|
|
|
if (player == nullptr) {
|
|
return;
|
|
}
|
|
|
|
const auto flag = self->GetVar<int32_t>(u"flag");
|
|
|
|
player->GetCharacter()->SetPlayerFlag(flag, true);
|
|
|
|
GameMessages::SendPlayAnimation(player, u"rebuild-celebrate");
|
|
|
|
GameMessages::SendNotifyClientObject(self->GetObjectID(), u"SparkStop", 0, 0, player->GetObjectID(), "", player->GetSystemAddress());
|
|
GameMessages::SendSetStunned(player->GetObjectID(), eStateChangeType::POP, player->GetSystemAddress(), LWOOBJID_EMPTY, false, false, true, false, true, true, false, false, true);
|
|
self->SetVar(u"bActive", false);
|
|
});
|
|
GameMessages::SendPlayAnimation(user, u"nexus-powerpanel", 6.0f);
|
|
GameMessages::SendSetStunned(user->GetObjectID(), eStateChangeType::PUSH, user->GetSystemAddress(), LWOOBJID_EMPTY, false, false, true, false, true, true, false, false, true);
|
|
return;
|
|
}
|
|
|
|
GameMessages::SendPlayAnimation(user, shockAnim);
|
|
|
|
const auto dir = self->GetRotation().GetRightVector();
|
|
|
|
GameMessages::SendKnockback(user->GetObjectID(), self->GetObjectID(), self->GetObjectID(), 0, { dir.x * 15, 5, dir.z * 15 });
|
|
|
|
GameMessages::SendPlayFXEffect(self, 6432, u"create", "console_sparks", LWOOBJID_EMPTY, 1.0, 1.0, true);
|
|
|
|
self->AddCallbackTimer(2, [this, self, playerID]() {
|
|
auto* player = EntityManager::Instance()->GetEntity(playerID);
|
|
|
|
if (player == nullptr) {
|
|
return;
|
|
}
|
|
|
|
GameMessages::SendNotifyClientObject(self->GetObjectID(), u"bActive", 0, 0, player->GetObjectID(), "", player->GetSystemAddress());
|
|
|
|
GameMessages::SendStopFXEffect(self, true, "console_sparks");
|
|
|
|
self->SetVar(u"bActive", false);
|
|
});
|
|
}
|