1
This commit is contained in:
parent
e7ca5aad51
commit
1c94dc6148
@ -2733,13 +2733,14 @@ void Creature::ClearEnergyShield()
|
|||||||
true);
|
true);
|
||||||
}
|
}
|
||||||
|
|
||||||
int Creature::AddEffect(int effect_id)
|
std::weak_ptr<Effect> Creature::AddEffect(int effect_id)
|
||||||
{
|
{
|
||||||
auto effect = std::make_shared<Effect>();
|
auto effect = std::make_shared<Effect>();
|
||||||
effect->effect_uniid = ++buff_uniid_;
|
effect->effect_uniid = ++buff_uniid_;
|
||||||
effect->owner = this;
|
effect->owner = this;
|
||||||
effect->effect_id = effect_id;
|
effect->effect_id = effect_id;
|
||||||
effect_hash_[effect->effect_uniid] = effect;
|
effect_hash_[effect->effect_uniid] = effect;
|
||||||
|
return effect;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Creature::RemoveEffect(int effect_uniid)
|
void Creature::RemoveEffect(int effect_uniid)
|
||||||
@ -2747,6 +2748,13 @@ void Creature::RemoveEffect(int effect_uniid)
|
|||||||
effect_hash_.erase(effect_uniid);
|
effect_hash_.erase(effect_uniid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Creature::RemoveEffect(std::weak_ptr<Effect> effect)
|
||||||
|
{
|
||||||
|
if (!effect.expired()) {
|
||||||
|
RemoveEffect(effect.lock()->effect_uniid);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void Creature::RemoveEffects(std::vector<int> effect_uniids)
|
void Creature::RemoveEffects(std::vector<int> effect_uniids)
|
||||||
{
|
{
|
||||||
for (int effect_uniid : effect_uniids) {
|
for (int effect_uniid : effect_uniids) {
|
||||||
|
@ -181,7 +181,8 @@ class Creature : public MoveableEntity
|
|||||||
void UpdatePoisoning();
|
void UpdatePoisoning();
|
||||||
Team* GetTeam() { return team_; }
|
Team* GetTeam() { return team_; }
|
||||||
void SetTeam(Team* team) { team_ = team; }
|
void SetTeam(Team* team) { team_ = team; }
|
||||||
int AddEffect(int effect_id);
|
std::weak_ptr<Effect> AddEffect(int effect_id);
|
||||||
|
void RemoveEffect(std::weak_ptr<Effect> effect);
|
||||||
void RemoveEffect(int effect_uniid);
|
void RemoveEffect(int effect_uniid);
|
||||||
void RemoveEffects(std::vector<int> effect_uniids);
|
void RemoveEffects(std::vector<int> effect_uniids);
|
||||||
void ClearEffect();
|
void ClearEffect();
|
||||||
|
@ -21,6 +21,7 @@ struct GraspBuff
|
|||||||
std::tuple<const mt::GraspBuff*, const mt::GraspBuff*> buffs;
|
std::tuple<const mt::GraspBuff*, const mt::GraspBuff*> buffs;
|
||||||
std::function<void()> on_remove;
|
std::function<void()> on_remove;
|
||||||
a8::Attacher xtimer_attacher;
|
a8::Attacher xtimer_attacher;
|
||||||
|
std::vector<std::tuple<CreatureWeakPtr, std::weak_ptr<Effect>>> effect_list;
|
||||||
|
|
||||||
void ProcSignet(GunGrasp* gun_grasp, int count, Creature* enemy)
|
void ProcSignet(GunGrasp* gun_grasp, int count, Creature* enemy)
|
||||||
{
|
{
|
||||||
@ -88,6 +89,23 @@ private:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ProcEffectList(Creature* target, const mt::GraspBuff* buff, int buff_time, int attr_num)
|
||||||
|
{
|
||||||
|
for (int effect_id : buff->_effect_list) {
|
||||||
|
effect_list.push_back(std::make_tuple(target->GetWeakPtrRef(), target->AddEffect(effect_id)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ClearEffectList()
|
||||||
|
{
|
||||||
|
for (auto& tuple : effect_list) {
|
||||||
|
if (std::get<0>(tuple).Get()) {
|
||||||
|
std::get<0>(tuple).Get()->RemoveEffect(std::get<1>(tuple));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
effect_list.clear();
|
||||||
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
GunGrasp::GunGrasp(Creature* owner)
|
GunGrasp::GunGrasp(Creature* owner)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user