diff --git a/dScripts/02_server/Objects/CMakeLists.txt b/dScripts/02_server/Objects/CMakeLists.txt index da7e9b60e..5340e50cc 100644 --- a/dScripts/02_server/Objects/CMakeLists.txt +++ b/dScripts/02_server/Objects/CMakeLists.txt @@ -2,6 +2,7 @@ add_subdirectory(Hatchlings) set(DSCRIPTS_SOURCES_02_SERVER_OBJECTS "AgSurvivalBuffStation.cpp" + "ImmovableTurret.cpp" "StinkyFishTarget.cpp") foreach(file ${DSCRIPTS_SOURCES_02_SERVER_OBJECTS_HATCHLINGS}) diff --git a/dScripts/02_server/Objects/ImmovableTurret.cpp b/dScripts/02_server/Objects/ImmovableTurret.cpp new file mode 100644 index 000000000..1b8eb606b --- /dev/null +++ b/dScripts/02_server/Objects/ImmovableTurret.cpp @@ -0,0 +1,16 @@ +#include "ImmovableTurret.h" + +#include "ControllablePhysicsComponent.h" +#include "DestroyableComponent.h" +#include "Entity.h" +#include "eStateChangeType.h" + +void ImmovableTurret::OnStartup(Entity* self) { + // SetStunImmunity (attack, interrupt) and SetStatusImmunity (pull to point, knockback); DLU keeps interrupt with the status ones + if (auto* controllablePhysics = self->GetComponent()) { + controllablePhysics->SetStunImmunity(eStateChangeType::PUSH, self->GetObjectID(), true, false, false, false, false, false, false); + } + if (auto* destroyable = self->GetComponent()) { + destroyable->SetStatusImmunity(eStateChangeType::PUSH, false, false, true, true, false, false, false, false, true); + } +} diff --git a/dScripts/02_server/Objects/ImmovableTurret.h b/dScripts/02_server/Objects/ImmovableTurret.h new file mode 100644 index 000000000..ac51cecc9 --- /dev/null +++ b/dScripts/02_server/Objects/ImmovableTurret.h @@ -0,0 +1,8 @@ +#pragma once +#include "CppScripts.h" + +// L_TURRET: turret enemies can't be stunned, interrupted, knocked back or pulled +class ImmovableTurret : public CppScripts::Script { +public: + void OnStartup(Entity* self) override; +}; diff --git a/dScripts/CppScripts.cpp b/dScripts/CppScripts.cpp index ce0ae133f..bedf0a6c0 100644 --- a/dScripts/CppScripts.cpp +++ b/dScripts/CppScripts.cpp @@ -76,6 +76,7 @@ #include "NsConcertInstrument.h" #include "NsJohnnyMissionServer.h" #include "StinkyFishTarget.h" +#include "ImmovableTurret.h" #include "ZoneNsProperty.h" #include "ZoneNsMedProperty.h" #include "NsTokenConsoleServer.h" @@ -434,6 +435,7 @@ namespace { {"scripts\\ai\\NS\\L_NS_CONCERT_INSTRUMENT_QB.lua", []() {return new NsConcertInstrument();}}, {"scripts\\ai\\NS\\L_NS_JONNY_FLAG_MISSION_SERVER.lua", []() {return new NsJohnnyMissionServer();}}, {"scripts\\02_server\\Objects\\L_STINKY_FISH_TARGET.lua", []() {return new StinkyFishTarget();}}, + {"scripts\\02_server\\Objects\\L_TURRET.lua", []() {return new ImmovableTurret();}}, {"scripts\\02_server\\Objects\\Hatchlings\\L_HATCHLING_PETS.lua", []() {return new HatchlingPets();}}, {"scripts\\zone\\PROPERTY\\NS\\L_ZONE_NS_PROPERTY.lua", []() {return new ZoneNsProperty();}}, {"scripts\\02_server\\Map\\Property\\NS_Med\\L_ZONE_NS_MED_PROPERTY.lua", []() {return new ZoneNsMedProperty();}},