mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2024-11-21 21:17:25 +00:00
script fixes (#1577)
fixes an issue where the sirens would not be destroyed correctly fixes undefined behavior in buff station ok for real this time actual fix for mermaids and for general death_behavior 0 skill stuff
This commit is contained in:
parent
8837b110ab
commit
35321b22d9
@ -1534,7 +1534,7 @@ void Entity::Kill(Entity* murderer, const eKillType killType) {
|
|||||||
bool waitForDeathAnimation = false;
|
bool waitForDeathAnimation = false;
|
||||||
|
|
||||||
if (destroyableComponent) {
|
if (destroyableComponent) {
|
||||||
waitForDeathAnimation = destroyableComponent->GetDeathBehavior() == 0 && killType != eKillType::SILENT;
|
waitForDeathAnimation = !destroyableComponent->GetIsSmashable() && destroyableComponent->GetDeathBehavior() == 0 && killType != eKillType::SILENT;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Live waited a hard coded 12 seconds for death animations of type 0 before networking destruction!
|
// Live waited a hard coded 12 seconds for death animations of type 0 before networking destruction!
|
||||||
|
@ -224,6 +224,16 @@ bool BehaviorContext::CalculateUpdate(const float deltaTime) {
|
|||||||
for (auto i = 0u; i < this->syncEntries.size(); ++i) {
|
for (auto i = 0u; i < this->syncEntries.size(); ++i) {
|
||||||
auto entry = this->syncEntries.at(i);
|
auto entry = this->syncEntries.at(i);
|
||||||
|
|
||||||
|
if (entry.behavior->m_templateId == BehaviorTemplate::ATTACK_DELAY) {
|
||||||
|
auto* self = Game::entityManager->GetEntity(originator);
|
||||||
|
if (self) {
|
||||||
|
auto* destroyableComponent = self->GetComponent<DestroyableComponent>();
|
||||||
|
if (destroyableComponent && destroyableComponent->GetHealth() <= 0) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (entry.time > 0) {
|
if (entry.time > 0) {
|
||||||
entry.time -= deltaTime;
|
entry.time -= deltaTime;
|
||||||
|
|
||||||
@ -333,7 +343,7 @@ void BehaviorContext::FilterTargets(std::vector<Entity*>& targets, std::forward_
|
|||||||
}
|
}
|
||||||
|
|
||||||
// handle targeting the caster
|
// handle targeting the caster
|
||||||
if (candidate == caster){
|
if (candidate == caster) {
|
||||||
// if we aren't targeting self, erase, otherise increment and continue
|
// if we aren't targeting self, erase, otherise increment and continue
|
||||||
if (!targetSelf) index = targets.erase(index);
|
if (!targetSelf) index = targets.erase(index);
|
||||||
else index++;
|
else index++;
|
||||||
@ -356,24 +366,24 @@ void BehaviorContext::FilterTargets(std::vector<Entity*>& targets, std::forward_
|
|||||||
}
|
}
|
||||||
|
|
||||||
// if they are dead, then earse and continue
|
// if they are dead, then earse and continue
|
||||||
if (candidateDestroyableComponent->GetIsDead()){
|
if (candidateDestroyableComponent->GetIsDead()) {
|
||||||
index = targets.erase(index);
|
index = targets.erase(index);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// if their faction is explicitly included, increment and continue
|
// if their faction is explicitly included, increment and continue
|
||||||
auto candidateFactions = candidateDestroyableComponent->GetFactionIDs();
|
auto candidateFactions = candidateDestroyableComponent->GetFactionIDs();
|
||||||
if (CheckFactionList(includeFactionList, candidateFactions)){
|
if (CheckFactionList(includeFactionList, candidateFactions)) {
|
||||||
index++;
|
index++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// check if they are a team member
|
// check if they are a team member
|
||||||
if (targetTeam){
|
if (targetTeam) {
|
||||||
auto* team = TeamManager::Instance()->GetTeam(this->caster);
|
auto* team = TeamManager::Instance()->GetTeam(this->caster);
|
||||||
if (team){
|
if (team) {
|
||||||
// if we find a team member keep it and continue to skip enemy checks
|
// if we find a team member keep it and continue to skip enemy checks
|
||||||
if(std::find(team->members.begin(), team->members.end(), candidate->GetObjectID()) != team->members.end()){
|
if (std::find(team->members.begin(), team->members.end(), candidate->GetObjectID()) != team->members.end()) {
|
||||||
index++;
|
index++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -419,8 +429,8 @@ bool BehaviorContext::CheckTargetingRequirements(const Entity* target) const {
|
|||||||
// returns true if any of the object factions are in the faction list
|
// returns true if any of the object factions are in the faction list
|
||||||
bool BehaviorContext::CheckFactionList(std::forward_list<int32_t>& factionList, std::vector<int32_t>& objectsFactions) const {
|
bool BehaviorContext::CheckFactionList(std::forward_list<int32_t>& factionList, std::vector<int32_t>& objectsFactions) const {
|
||||||
if (factionList.empty() || objectsFactions.empty()) return false;
|
if (factionList.empty() || objectsFactions.empty()) return false;
|
||||||
for (auto faction : factionList){
|
for (auto faction : factionList) {
|
||||||
if(std::find(objectsFactions.begin(), objectsFactions.end(), faction) != objectsFactions.end()) return true;
|
if (std::find(objectsFactions.begin(), objectsFactions.end(), faction) != objectsFactions.end()) return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -56,10 +56,6 @@ void AgSurvivalBuffStation::OnTimerDone(Entity* self, std::string timerName) {
|
|||||||
auto member = Game::entityManager->GetEntity(memberID);
|
auto member = Game::entityManager->GetEntity(memberID);
|
||||||
if (member != nullptr && !member->GetIsDead()) {
|
if (member != nullptr && !member->GetIsDead()) {
|
||||||
GameMessages::SendDropClientLoot(member, self->GetObjectID(), powerupToDrop, 0, self->GetPosition());
|
GameMessages::SendDropClientLoot(member, self->GetObjectID(), powerupToDrop, 0, self->GetPosition());
|
||||||
} else {
|
|
||||||
// If player left the team or left early erase them from the team variable.
|
|
||||||
team.erase(std::find(team.begin(), team.end(), memberID));
|
|
||||||
self->SetVar<std::vector<LWOOBJID>>(u"BuilderTeam", team);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user