diff --git a/dScripts/CppScripts.cpp b/dScripts/CppScripts.cpp index 9e402a21..26bde33e 100644 --- a/dScripts/CppScripts.cpp +++ b/dScripts/CppScripts.cpp @@ -165,6 +165,7 @@ #include "PropertyPlatform.h" #include "MailBoxServer.h" #include "ActMine.h" +#include "FireFirstSkillonStartup.h" // Racing Scripts #include "RaceImagineCrateServer.h" @@ -804,7 +805,8 @@ CppScripts::Script* CppScripts::GetScript(Entity* parent, const std::string& scr script = new LegoDieRoll(); else if (scriptName == "scripts\\EquipmentScripts\\BuccaneerValiantShip.lua") script = new BuccaneerValiantShip(); - + else if (scriptName == "scripts\\EquipmentScripts\\FireFirstSkillonStartup.lua") + script = new FireFirstSkillonStartup(); // FB else if (scriptName == "scripts\\ai\\NS\\WH\\L_ROCKHYDRANT_BROKEN.lua") script = new RockHydrantBroken(); diff --git a/dScripts/FireFirstSkillonStartup.cpp b/dScripts/FireFirstSkillonStartup.cpp new file mode 100644 index 00000000..da1b420e --- /dev/null +++ b/dScripts/FireFirstSkillonStartup.cpp @@ -0,0 +1,24 @@ +#include "FireFirstSkillonStartup.h" +#include "Entity.h" +#include "SkillComponent.h" +#include "CDClientDatabase.h" +#include "CDObjectSkillsTable.h" + +void FireFirstSkillonStartup::OnStartup(Entity* self) { + auto skillComponent = self->GetComponent(); + if (!skillComponent) return; + + // Get the skill IDs of this object. + CDObjectSkillsTable* skillsTable = CDClientManager::Instance()->GetTable("ObjectSkills"); + std::vector skills = skillsTable->Query([=](CDObjectSkills entry) {return (entry.objectTemplate == self->GetLOT()); }); + + // For each skill, cast it with the associated behavior ID. + for (auto skill : skills) { + CDSkillBehaviorTable* skillBehaviorTable = CDClientManager::Instance()->GetTable("SkillBehavior"); + CDSkillBehavior behaviorData = skillBehaviorTable->GetSkillByID(skill.skillID); + + // Should parent entity be null, make the originator self. + const auto target = self->GetParentEntity() ? self->GetParentEntity()->GetObjectID() : self->GetObjectID(); + skillComponent->CalculateBehavior(skill.skillID, behaviorData.behaviorID, LWOOBJID_EMPTY, false, false, target); + } +} \ No newline at end of file diff --git a/dScripts/FireFirstSkillonStartup.h b/dScripts/FireFirstSkillonStartup.h new file mode 100644 index 00000000..ad182e70 --- /dev/null +++ b/dScripts/FireFirstSkillonStartup.h @@ -0,0 +1,12 @@ +#pragma once +#ifndef __FIREFIRSTSKILLONSTARTUP__H__ +#define __FIREFIRSTSKILLONSTARTUP__H__ + +#include "CppScripts.h" + +class FireFirstSkillonStartup : public CppScripts::Script { + public: + void OnStartup(Entity* self) override; +}; + +#endif //!__FIREFIRSTSKILLONSTARTUP__H__