1
This commit is contained in:
parent
3d78d8d1d5
commit
3a665212ca
@ -12,6 +12,7 @@ Creature::~Creature()
|
|||||||
delete pair.second;
|
delete pair.second;
|
||||||
}
|
}
|
||||||
skill_hash_.clear();
|
skill_hash_.clear();
|
||||||
|
ClearPassiveSkill();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Creature::HasBuffEffect(int buff_effect_id)
|
bool Creature::HasBuffEffect(int buff_effect_id)
|
||||||
@ -222,10 +223,15 @@ void Creature::FillBuffList(::google::protobuf::RepeatedPtrField<::cs::MFBuff>*
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Creature::AddPassiveSkill(MetaData::Skill* skill_meta)
|
void Creature::AddPassiveSkill(int skill_id)
|
||||||
{
|
{
|
||||||
if (!HasPassiveSkill(skill_meta)) {
|
MetaData::Skill* skill_meta = MetaMgr::Instance()->GetSkill(skill_id);
|
||||||
xtimer_list* tmp_timer = room->xtimer.AddRepeatTimerAndAttach
|
if (skill_meta && !HasPassiveSkill(skill_meta->i->skill_id())) {
|
||||||
|
Skill* skill = new Skill;
|
||||||
|
skill->owner = this;
|
||||||
|
skill->meta = skill_meta;
|
||||||
|
skill->xtimer_attacher.xtimer = &room->xtimer;
|
||||||
|
room->xtimer.AddRepeatTimerAndAttach
|
||||||
(
|
(
|
||||||
SERVER_FRAME_RATE * skill_meta->i->skill_cd(),
|
SERVER_FRAME_RATE * skill_meta->i->skill_cd(),
|
||||||
a8::XParams()
|
a8::XParams()
|
||||||
@ -238,8 +244,8 @@ void Creature::AddPassiveSkill(MetaData::Skill* skill_meta)
|
|||||||
c->ClearPassiveSkillBuff(skill_meta);
|
c->ClearPassiveSkillBuff(skill_meta);
|
||||||
c->AddPassiveSkillBuff(skill_meta);
|
c->AddPassiveSkillBuff(skill_meta);
|
||||||
},
|
},
|
||||||
&xtimer_attacher.timer_list_);
|
&skill->xtimer_attacher.timer_list_);
|
||||||
passive_skill_metas_[skill_meta] = tmp_timer;
|
passive_skill_hash_[skill_meta->i->skill_id()] = skill;
|
||||||
AddPassiveSkillBuff(skill_meta);
|
AddPassiveSkillBuff(skill_meta);
|
||||||
if (skill_meta->i->skill_cd() > 10000) {
|
if (skill_meta->i->skill_cd() > 10000) {
|
||||||
//永久被动被动技能
|
//永久被动被动技能
|
||||||
@ -248,31 +254,31 @@ void Creature::AddPassiveSkill(MetaData::Skill* skill_meta)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Creature::RemovePassiveSkill(MetaData::Skill* skill_meta)
|
void Creature::RemovePassiveSkill(int skill_id)
|
||||||
{
|
{
|
||||||
auto itr = passive_skill_metas_.find(skill_meta);
|
auto itr = passive_skill_hash_.find(skill_id);
|
||||||
if (itr != passive_skill_metas_.end()) {
|
if (itr != passive_skill_hash_.end()) {
|
||||||
ClearPassiveSkillBuff(skill_meta);
|
ClearPassiveSkillBuff(itr->second->meta);
|
||||||
room->xtimer.DeleteTimer(itr->second);
|
delete itr->second;
|
||||||
passive_skill_metas_.erase(itr);
|
passive_skill_hash_.erase(itr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Creature::ClearPassiveSkill()
|
void Creature::ClearPassiveSkill()
|
||||||
{
|
{
|
||||||
std::vector<MetaData::Skill*> del_skills;
|
std::vector<int> del_skills;
|
||||||
del_skills.reserve(passive_skill_metas_.size());
|
del_skills.reserve(passive_skill_hash_.size());
|
||||||
for (auto& pair : passive_skill_metas_) {
|
for (auto& pair : passive_skill_hash_) {
|
||||||
del_skills.push_back(pair.first);
|
del_skills.push_back(pair.first);
|
||||||
}
|
}
|
||||||
for (MetaData::Skill* skill_meta : del_skills) {
|
for (int skill_id : del_skills) {
|
||||||
RemovePassiveSkill(skill_meta);
|
RemovePassiveSkill(skill_id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Creature::HasPassiveSkill(MetaData::Skill* skill_meta)
|
bool Creature::HasPassiveSkill(int skill_id)
|
||||||
{
|
{
|
||||||
return passive_skill_metas_.find(skill_meta) != passive_skill_metas_.end();
|
return passive_skill_hash_.find(skill_id) != passive_skill_hash_.end();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Creature::ClearPassiveSkillBuff(MetaData::Skill* skill_meta)
|
void Creature::ClearPassiveSkillBuff(MetaData::Skill* skill_meta)
|
||||||
|
@ -46,7 +46,7 @@ class Creature : public MoveableEntity
|
|||||||
Skill* GetSkill(int skill_id);
|
Skill* GetSkill(int skill_id);
|
||||||
void AddSkill(int skill_id);
|
void AddSkill(int skill_id);
|
||||||
void ClearSkill();
|
void ClearSkill();
|
||||||
void AddPassiveSkill(MetaData::Skill* skill_meta);
|
void AddPassiveSkill(int skill_id);
|
||||||
void ClearPassiveSkill();
|
void ClearPassiveSkill();
|
||||||
|
|
||||||
virtual void SelectSkillTargets(Skill* skill,
|
virtual void SelectSkillTargets(Skill* skill,
|
||||||
@ -75,10 +75,10 @@ private:
|
|||||||
void ProcBuffEffect(Creature* caster, Buff* buff);
|
void ProcBuffEffect(Creature* caster, Buff* buff);
|
||||||
void TriggerOneObjectBuff(Skill* skill, Entity* target, BuffTriggerType_e trigger_type);
|
void TriggerOneObjectBuff(Skill* skill, Entity* target, BuffTriggerType_e trigger_type);
|
||||||
|
|
||||||
bool HasPassiveSkill(MetaData::Skill* skill_meta);
|
bool HasPassiveSkill(int skill_id);
|
||||||
|
void RemovePassiveSkill(int skill_id);
|
||||||
void ClearPassiveSkillBuff(MetaData::Skill* skill_meta);
|
void ClearPassiveSkillBuff(MetaData::Skill* skill_meta);
|
||||||
void AddPassiveSkillBuff(MetaData::Skill* skill_meta);
|
void AddPassiveSkillBuff(MetaData::Skill* skill_meta);
|
||||||
void RemovePassiveSkill(MetaData::Skill* skill_meta);
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::array<float, kHAT_End> buff_attr_abs_ = {};
|
std::array<float, kHAT_End> buff_attr_abs_ = {};
|
||||||
@ -93,5 +93,5 @@ private:
|
|||||||
int skill_target_id_ = 0;
|
int skill_target_id_ = 0;
|
||||||
a8::Vec2 skill_target_pos_;
|
a8::Vec2 skill_target_pos_;
|
||||||
std::map<int, Skill*> skill_hash_;
|
std::map<int, Skill*> skill_hash_;
|
||||||
std::map<MetaData::Skill*, xtimer_list*> passive_skill_metas_;
|
std::map<int, Skill*> passive_skill_hash_;
|
||||||
};
|
};
|
||||||
|
@ -3383,11 +3383,8 @@ void Human::OnMetaChange()
|
|||||||
ClearSkill();
|
ClearSkill();
|
||||||
AddSkill(meta->i->active_skill());
|
AddSkill(meta->i->active_skill());
|
||||||
ResetSkill();
|
ResetSkill();
|
||||||
MetaData::Skill* passive_skill_meta = MetaMgr::Instance()->GetSkill(meta->i->passive_skill());
|
|
||||||
ClearPassiveSkill();
|
ClearPassiveSkill();
|
||||||
if (passive_skill_meta) {
|
AddPassiveSkill(meta->i->passive_skill());
|
||||||
AddPassiveSkill(passive_skill_meta);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Human::OnChgToTerminator()
|
void Human::OnChgToTerminator()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user