mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2024-12-22 21:43:35 +00:00
15dc5feeb5
* brother * use some better logic * Implement spider boss msg script tested that the message now shows up when hitting the survival spider entrance area * add drag to start race feature
81 lines
2.2 KiB
C++
81 lines
2.2 KiB
C++
#include "AgSpiderBossMessage.h"
|
|
|
|
#include "Entity.h"
|
|
#include "GameMessages.h"
|
|
|
|
#include "RenderComponent.h"
|
|
|
|
Box AgSpiderBossMessage::GetBox(Entity* self) const {
|
|
return self->GetVar<Box>(u"box");
|
|
}
|
|
|
|
void AgSpiderBossMessage::SetBox(Entity* self, const Box& box) const {
|
|
self->SetVar(u"box", box);
|
|
}
|
|
|
|
void AgSpiderBossMessage::MakeBox(Entity* self) const {
|
|
auto box = GetBox(self);
|
|
if (box.boxTarget == LWOOBJID_EMPTY || box.isDisplayed || box.boxSelf == LWOOBJID_EMPTY) return;
|
|
|
|
box.isDisplayed = true;
|
|
SetBox(self, box);
|
|
self->AddTimer("BoxTimer", box.boxTime);
|
|
|
|
const auto* const tgt = Game::entityManager->GetEntity(box.boxTarget);
|
|
if (!tgt) return;
|
|
GameMessages::DisplayTooltip tooltip;
|
|
tooltip.target = tgt->GetObjectID();
|
|
tooltip.show = true;
|
|
tooltip.text = box.boxText;
|
|
tooltip.time = box.boxTime * 1000; // to ms
|
|
tooltip.Send(tgt->GetSystemAddress());
|
|
}
|
|
|
|
void AgSpiderBossMessage::OnCollisionPhantom(Entity* self, Entity* target) {
|
|
if (!target || !target->IsPlayer()) return;
|
|
|
|
auto box = GetBox(self);
|
|
// knockback the target
|
|
auto forward = target->GetRotation().GetForwardVector();
|
|
box.boxTarget = target->GetObjectID();
|
|
GameMessages::SendPlayFXEffect(target->GetObjectID(), 1378, u"create", "pushBack");
|
|
RenderComponent::PlayAnimation(target, "knockback-recovery");
|
|
forward.y += 15;
|
|
forward.x *= 100;
|
|
forward.z *= 100;
|
|
GameMessages::SendKnockback(target->GetObjectID(), self->GetObjectID(), self->GetObjectID(), 0, forward);
|
|
|
|
if (box.isTouch || box.isDisplayed) return;
|
|
box.boxSelf = self->GetObjectID();
|
|
box.isTouch = true;
|
|
box.boxText = u"%[SPIDER_CAVE_MESSAGE]";
|
|
SetBox(self, box);
|
|
self->AddTimer("EventTimer", 0.1f);
|
|
}
|
|
|
|
void AgSpiderBossMessage::OnOffCollisionPhantom(Entity* self, Entity* target) {
|
|
if (!target) return;
|
|
auto box = GetBox(self);
|
|
box.isTouch = false;
|
|
box.Reset();
|
|
SetBox(self, box);
|
|
}
|
|
|
|
void AgSpiderBossMessage::OnTimerDone(Entity* self, std::string timerName) {
|
|
if (timerName == "BoxTimer") {
|
|
auto box = GetBox(self);
|
|
box.isDisplayed = false;
|
|
SetBox(self, box);
|
|
ResetBox(self);
|
|
} else if (timerName == "EventTimer") {
|
|
auto box = GetBox(self);
|
|
MakeBox(self);
|
|
}
|
|
}
|
|
|
|
void AgSpiderBossMessage::ResetBox(Entity* self) const {
|
|
auto box = GetBox(self);
|
|
box.Reset();
|
|
SetBox(self, box);
|
|
}
|