mirror of
				https://github.com/DarkflameUniverse/DarkflameServer.git
				synced 2025-11-04 06:32:00 +00:00 
			
		
		
		
	Merge pull request #558 Implement boom trap
Implement Mine Script for boom trap
This commit is contained in:
		
							
								
								
									
										53
									
								
								dScripts/ActMine.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								dScripts/ActMine.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,53 @@
 | 
			
		||||
#include "ActMine.h"
 | 
			
		||||
#include "SkillComponent.h"
 | 
			
		||||
#include "DestroyableComponent.h"
 | 
			
		||||
#include "RebuildComponent.h"
 | 
			
		||||
 | 
			
		||||
void ActMine::OnStartup(Entity* self) {
 | 
			
		||||
	self->SetVar(u"RebuildComplete", false);
 | 
			
		||||
	self->SetProximityRadius(MINE_RADIUS, "mineRadius");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ActMine::OnRebuildNotifyState(Entity* self, eRebuildState state)
 | 
			
		||||
{
 | 
			
		||||
	if (state == eRebuildState::REBUILD_COMPLETED) {
 | 
			
		||||
		auto* rebuild = self->GetComponent<RebuildComponent>();
 | 
			
		||||
		if (rebuild) {
 | 
			
		||||
			auto* builder = rebuild->GetBuilder();
 | 
			
		||||
			self->SetVar(u"Builder", builder->GetObjectID());
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		self->SetVar(u"RebuildComplete", true);
 | 
			
		||||
		self->SetVar(u"NumWarnings", 0);
 | 
			
		||||
		self->AddToGroup("reset");
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ActMine::OnProximityUpdate(Entity* self, Entity* entering, std::string name, std::string status) {
 | 
			
		||||
	auto* detroyable = self->GetComponent<DestroyableComponent>();
 | 
			
		||||
	if (!detroyable) return;
 | 
			
		||||
	if (status == "ENTER" && self->GetVar<bool>(u"RebuildComplete") == true && detroyable->IsEnemy(entering)) {
 | 
			
		||||
		GameMessages::SendPlayFXEffect(self->GetObjectID(), 242, u"orange", "sirenlight_B");
 | 
			
		||||
		self->AddTimer("Tick", TICK_TIME);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ActMine::OnTimerDone(Entity* self, std::string timerName) {
 | 
			
		||||
	if (timerName == "Tick") {
 | 
			
		||||
		if (self->GetVar<int>(u"NumWarnings") >= MAX_WARNINGS){
 | 
			
		||||
			auto* skill = self->GetComponent<SkillComponent>();
 | 
			
		||||
			if (!skill) return;
 | 
			
		||||
			skill->CalculateBehavior(SKILL_ID, BEHAVIOR_ID, LWOOBJID_EMPTY);
 | 
			
		||||
			self->AddTimer("BlowedUp", BLOWED_UP_TIME);
 | 
			
		||||
		} else {
 | 
			
		||||
			GameMessages::SendPlayFXEffect(self->GetObjectID(), 242, u"orange", "sirenlight_B");
 | 
			
		||||
			self->AddTimer("Tick", TICK_TIME);
 | 
			
		||||
			self->SetVar(u"NumWarnings", self->GetVar<int>(u"NumWarnings") + 1);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (timerName == "BlowedUp") {
 | 
			
		||||
		self->Kill(self);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										18
									
								
								dScripts/ActMine.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								dScripts/ActMine.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
			
		||||
#pragma once
 | 
			
		||||
#include "CppScripts.h"
 | 
			
		||||
 | 
			
		||||
class ActMine : public CppScripts::Script {
 | 
			
		||||
	public:
 | 
			
		||||
		void OnStartup(Entity* self);
 | 
			
		||||
		void OnRebuildNotifyState(Entity* self, eRebuildState state) override;
 | 
			
		||||
		void OnProximityUpdate(Entity* self, Entity* entering, std::string name, std::string status);
 | 
			
		||||
		void OnTimerDone(Entity* self, std::string timerName);
 | 
			
		||||
	private:
 | 
			
		||||
		int MAX_WARNINGS = 3;
 | 
			
		||||
		float MINE_RADIUS = 10.0;
 | 
			
		||||
		float TICK_TIME = 0.25;
 | 
			
		||||
		float BLOWED_UP_TIME = 0.1;
 | 
			
		||||
		uint32_t SKILL_ID = 317;
 | 
			
		||||
		uint32_t BEHAVIOR_ID = 3719;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
@@ -164,6 +164,7 @@
 | 
			
		||||
#include "BaseFootRaceManager.h"
 | 
			
		||||
#include "PropertyPlatform.h"
 | 
			
		||||
#include "MailBoxServer.h"
 | 
			
		||||
#include "ActMine.h"
 | 
			
		||||
 | 
			
		||||
// Racing Scripts
 | 
			
		||||
#include "RaceImagineCrateServer.h"
 | 
			
		||||
@@ -591,6 +592,8 @@ CppScripts::Script* CppScripts::GetScript(Entity* parent, const std::string& scr
 | 
			
		||||
        return new VeBricksampleServer();
 | 
			
		||||
	else if (scriptName == "scripts\\02_server\\Map\\General\\L_MAIL_BOX_SERVER.lua")
 | 
			
		||||
		script = new MailBoxServer();
 | 
			
		||||
	else if (scriptName == "scripts\\ai\\ACT\\L_ACT_MINE.lua")
 | 
			
		||||
		script = new ActMine();
 | 
			
		||||
 | 
			
		||||
	//Racing:
 | 
			
		||||
	else if (scriptName == "scripts\\ai\\RACING\\OBJECTS\\RACE_IMAGINE_CRATE_SERVER.lua")
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user