This commit is contained in:
aozhiwei 2019-07-20 15:58:50 +08:00
parent 70b296e21f
commit 06c3a6cd80
4 changed files with 44 additions and 42 deletions

View File

@ -23,7 +23,6 @@ void Bullet::Initialize()
{ {
Entity::Initialize(); Entity::Initialize();
RecalcSelfCollider(); RecalcSelfCollider();
skill_meta = MetaMgr::Instance()->GetSkill(skill_id);
} }
void Bullet::Update(int delta_time) void Bullet::Update(int delta_time)
@ -67,7 +66,9 @@ void Bullet::OnHit(std::set<Entity*>& objects)
master->stats.damage_amount_out += finaly_dmg; master->stats.damage_amount_out += finaly_dmg;
hum->OnHit(); hum->OnHit();
if (!hum->HasBuffEffect(BET_Invincible)) { if (!hum->HasBuffEffect(BET_Invincible)) {
// hum->OnSkillHit(skill_meta); if (skill_id != 0) {
master->TriggerOneObjectBuff(hum, BTT_SkillHit);
}
hum->DecHP(finaly_dmg, master->entity_uniid, master->name, meta->i->id()); hum->DecHP(finaly_dmg, master->entity_uniid, master->name, meta->i->id());
} }
} }

View File

@ -23,7 +23,6 @@ class Bullet : public Entity
a8::Vec2 born_dir; a8::Vec2 born_dir;
float fly_distance = 0.0f; float fly_distance = 0.0f;
int skill_id = 0; int skill_id = 0;
MetaData::Skill* skill_meta = nullptr;
Bullet(); Bullet();
virtual ~Bullet() override; virtual ~Bullet() override;

View File

@ -557,7 +557,7 @@ void Human::DoSkill()
std::set<Entity*> target_list; std::set<Entity*> target_list;
skill_target_pos = hum->pos; skill_target_pos = hum->pos;
SelectSkillTargets(hum->pos, target_list); SelectSkillTargets(hum->pos, target_list);
TriggerBuff(skill_meta_, target_list, BTT_UseSkill); TriggerBuff(target_list, BTT_UseSkill);
if (!skill_meta_->phases.empty() && skill_meta_->phases[0].time_offset <= 0) { if (!skill_meta_->phases.empty() && skill_meta_->phases[0].time_offset <= 0) {
UpdateSkill(); UpdateSkill();
} }
@ -1067,17 +1067,15 @@ int Human::GetSkillCd()
return skill_meta_ ? skill_meta_->i->skill_cd() * 1000 : 0; return skill_meta_ ? skill_meta_->i->skill_cd() * 1000 : 0;
} }
void Human::TriggerBuff(MetaData::Skill* sender_skill_meta, void Human::TriggerOneObjectBuff(Entity* target, BuffTriggerType_e trigger_type)
std::set<Entity*>& target_list, BuffTriggerType_e trigger_type)
{ {
auto itr = sender_skill_meta->trigger_type_buffs.find(trigger_type); if (target->entity_type != ET_Player) {
if (itr != sender_skill_meta->trigger_type_buffs.end()) { return;
for (MetaData::Buff* buff_meta : itr->second) {
for (Entity* entity : target_list) {
if (entity->entity_type != ET_Player) {
continue;
} }
Human* hum = (Human*)entity; Human* hum = (Human*)target;
auto itr = skill_meta_->trigger_type_buffs.find(trigger_type);
if (itr != skill_meta_->trigger_type_buffs.end()) {
for (MetaData::Buff* buff_meta : itr->second) {
switch (buff_meta->i->buff_target()) { switch (buff_meta->i->buff_target()) {
case kBuffTargetSelf: //自己 case kBuffTargetSelf: //自己
{ {
@ -1095,18 +1093,22 @@ void Human::TriggerBuff(MetaData::Skill* sender_skill_meta,
break; break;
case kBuffTargetEnemy: //敌军 case kBuffTargetEnemy: //敌军
{ {
if (sender_skill_meta->i->skill_id() == 41008) {
hum->AddBuff(buff_meta);
} else {
if (hum->team_id != team_id) { if (hum->team_id != team_id) {
hum->AddBuff(buff_meta); hum->AddBuff(buff_meta);
} }
} }
} break;
default:
break; break;
} }
}//end for target_list }
}//end for buff_list }
}
void Human::TriggerBuff(std::set<Entity*>& target_list, BuffTriggerType_e trigger_type)
{
for (Entity* entity : target_list) {
TriggerOneObjectBuff(entity, trigger_type);
} }
} }
@ -1515,7 +1517,7 @@ void Human::_UpdateAssaultMove()
} }
} }
} }
TriggerBuff(skill_meta_, target_list, BTT_SkillHit); TriggerBuff(target_list, BTT_SkillHit);
room->frame_event.AddExplosion(0, pos, 2); room->frame_event.AddExplosion(0, pos, 2);
room->grid_service.MoveHuman(this); room->grid_service.MoveHuman(this);
} }

View File

@ -175,8 +175,8 @@ class Human : public Entity
int TankLv(); int TankLv();
int GetSkillLeftTime(); int GetSkillLeftTime();
int GetSkillCd(); int GetSkillCd();
void TriggerBuff(MetaData::Skill* sender_skill_meta, void TriggerOneObjectBuff(Entity* target, BuffTriggerType_e trigger_type);
std::set<Entity*>& target_list, BuffTriggerType_e trigger_type); void TriggerBuff(std::set<Entity*>& target_list, BuffTriggerType_e trigger_type);
void AddBuff(MetaData::Buff* buff_meta); void AddBuff(MetaData::Buff* buff_meta);
void RemoveBuffById(int buff_id); void RemoveBuffById(int buff_id);
void RemoveBuffByEffectId(int buff_effect_id); void RemoveBuffByEffectId(int buff_effect_id);