Address incorrect stun played by growl speakers (#605)

Add the FireFirstSkillonStartup script to allow for scripts that use this to function.

Add comments

Fix QB Stunner scripts

Use SetVar for variable

Remember that variables for scripts need to be stored in the entity since a script can be used across multiple entities.

Remove unused variable

Specify Unsigned Int

Start skill asap, not next tick
This commit is contained in:
David Markowitz 2022-06-28 23:17:45 -07:00 committed by GitHub
parent 670a2de95b
commit a55162775e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -13,16 +13,32 @@ void QbEnemyStunner::OnRebuildComplete(Entity* self, Entity* target)
destroyable->SetFaction(115);
}
auto* skillComponent = self->GetComponent<SkillComponent>();
auto skillComponent = self->GetComponent<SkillComponent>();
if (!skillComponent) return;
if (skillComponent != nullptr)
{
skillComponent->CalculateBehavior(499, 6095, LWOOBJID_EMPTY);
// Get the skill IDs of this object.
CDObjectSkillsTable* skillsTable = CDClientManager::Instance()->GetTable<CDObjectSkillsTable>("ObjectSkills");
auto skills = skillsTable->Query([=](CDObjectSkills entry) {return (entry.objectTemplate == self->GetLOT()); });
std::map<uint32_t, uint32_t> skillBehaviorMap;
// For each skill, cast it with the associated behavior ID.
for (auto skill : skills) {
CDSkillBehaviorTable* skillBehaviorTable = CDClientManager::Instance()->GetTable<CDSkillBehaviorTable>("SkillBehavior");
CDSkillBehavior behaviorData = skillBehaviorTable->GetSkillByID(skill.skillID);
skillBehaviorMap.insert(std::make_pair(skill.skillID, behaviorData.behaviorID));
}
self->AddTimer("TickTime", 1);
// If there are no skills found, insert a default skill to use.
if (skillBehaviorMap.size() == 0) {
skillBehaviorMap.insert(std::make_pair(499U, 6095U));
}
// Start all skills associated with the object next tick
self->AddTimer("TickTime", 0);
self->AddTimer("PlayEffect", 20);
self->SetVar<std::map<uint32_t, uint32_t>>(u"skillBehaviorMap", skillBehaviorMap);
}
void QbEnemyStunner::OnTimerDone(Entity* self, std::string timerName)
@ -45,9 +61,16 @@ void QbEnemyStunner::OnTimerDone(Entity* self, std::string timerName)
if (skillComponent != nullptr)
{
skillComponent->CalculateBehavior(499, 6095, LWOOBJID_EMPTY);
auto skillBehaviorMap = self->GetVar<std::map<uint32_t, uint32_t>>(u"skillBehaviorMap");
if (skillBehaviorMap.size() == 0) {
// Should no skills have been found, default to the mermaid stunner
skillComponent->CalculateBehavior(499U, 6095U, LWOOBJID_EMPTY);
} else {
for (auto pair : skillBehaviorMap) {
skillComponent->CalculateBehavior(pair.first, pair.second, LWOOBJID_EMPTY);
}
}
}
self->AddTimer("TickTime", 1);
}
}