mirror of
				https://github.com/DarkflameUniverse/DarkflameServer.git
				synced 2025-10-31 20:52:01 +00:00 
			
		
		
		
	 15dc5feeb5
			
		
	
	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);
 | |
| }
 |