diff --git a/server/gameserver/bullet.cc b/server/gameserver/bullet.cc index a99bb36..3a81708 100644 --- a/server/gameserver/bullet.cc +++ b/server/gameserver/bullet.cc @@ -23,7 +23,6 @@ void Bullet::Initialize() { Entity::Initialize(); RecalcSelfCollider(); - skill_meta = MetaMgr::Instance()->GetSkill(skill_id); } void Bullet::Update(int delta_time) @@ -67,7 +66,9 @@ void Bullet::OnHit(std::set& objects) master->stats.damage_amount_out += finaly_dmg; hum->OnHit(); 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()); } } diff --git a/server/gameserver/bullet.h b/server/gameserver/bullet.h index 608791d..4d2b855 100644 --- a/server/gameserver/bullet.h +++ b/server/gameserver/bullet.h @@ -23,7 +23,6 @@ class Bullet : public Entity a8::Vec2 born_dir; float fly_distance = 0.0f; int skill_id = 0; - MetaData::Skill* skill_meta = nullptr; Bullet(); virtual ~Bullet() override; diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 8a8b3a4..539c1c8 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -557,7 +557,7 @@ void Human::DoSkill() std::set target_list; skill_target_pos = hum->pos; 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) { UpdateSkill(); } @@ -1067,46 +1067,48 @@ int Human::GetSkillCd() return skill_meta_ ? skill_meta_->i->skill_cd() * 1000 : 0; } -void Human::TriggerBuff(MetaData::Skill* sender_skill_meta, - std::set& target_list, BuffTriggerType_e trigger_type) +void Human::TriggerOneObjectBuff(Entity* target, BuffTriggerType_e trigger_type) { - auto itr = sender_skill_meta->trigger_type_buffs.find(trigger_type); - if (itr != sender_skill_meta->trigger_type_buffs.end()) { + if (target->entity_type != ET_Player) { + return; + } + 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) { - for (Entity* entity : target_list) { - if (entity->entity_type != ET_Player) { - continue; + switch (buff_meta->i->buff_target()) { + case kBuffTargetSelf: //自己 + { + if (hum == this) { + hum->AddBuff(buff_meta); + } } - Human* hum = (Human*)entity; - switch (buff_meta->i->buff_target()) { - case kBuffTargetSelf: //自己 - { - if (hum == this) { - hum->AddBuff(buff_meta); - } + break; + case kBuffTargetFriendly: //友军 + { + if (hum->team_id == team_id) { + hum->AddBuff(buff_meta); } - break; - case kBuffTargetFriendly: //友军 - { - if (hum->team_id == team_id) { - hum->AddBuff(buff_meta); - } - } - break; - case kBuffTargetEnemy: //敌军 - { - if (sender_skill_meta->i->skill_id() == 41008) { - hum->AddBuff(buff_meta); - } else { - if (hum->team_id != team_id) { - hum->AddBuff(buff_meta); - } - } - } - break; } - }//end for target_list - }//end for buff_list + break; + case kBuffTargetEnemy: //敌军 + { + if (hum->team_id != team_id) { + hum->AddBuff(buff_meta); + } + } + break; + default: + break; + } + } + } +} + +void Human::TriggerBuff(std::set& 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->grid_service.MoveHuman(this); } diff --git a/server/gameserver/human.h b/server/gameserver/human.h index 24b0fdf..b1bd331 100644 --- a/server/gameserver/human.h +++ b/server/gameserver/human.h @@ -175,8 +175,8 @@ class Human : public Entity int TankLv(); int GetSkillLeftTime(); int GetSkillCd(); - void TriggerBuff(MetaData::Skill* sender_skill_meta, - std::set& target_list, BuffTriggerType_e trigger_type); + void TriggerOneObjectBuff(Entity* target, BuffTriggerType_e trigger_type); + void TriggerBuff(std::set& target_list, BuffTriggerType_e trigger_type); void AddBuff(MetaData::Buff* buff_meta); void RemoveBuffById(int buff_id); void RemoveBuffByEffectId(int buff_effect_id);