diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index 5bf19b2b..3f8866e7 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -940,6 +940,9 @@ void Creature::ProcSkillPhase(MetaData::SkillPhase* phase) }); } + if (CurrentSkill()->meta->GetMagicId() == MAGIC_YLZ) { + target_distance = std::max(0.0001f, target_distance); + } if (bullet_meta && target_distance > 0.00001f) { a8::Vec2 old_attack_dir = GetAttackDir(); a8::Vec2 attack_dir = skill_dir_; diff --git a/server/gameserver/skill.cc b/server/gameserver/skill.cc index a9c3741f..9c90fc0e 100644 --- a/server/gameserver/skill.cc +++ b/server/gameserver/skill.cc @@ -11,6 +11,7 @@ #include "buff.h" #include "human.h" #include "bullet.h" +#include "collider.h" void Skill::Initialzie() { @@ -545,18 +546,34 @@ void Skill::ProcCMXD() Buff* hold_shield_buff = owner->GetBuffByEffectId(kBET_HoldShield); if (hold_shield_buff) { MetaData::Skill* skill_meta = hold_shield_buff->skill_meta; + MetaData::Skill* this_skill_meta = meta; + MetaData::Buff* shield_buff_meta = hold_shield_buff->meta; CreatureWeakPtr sender = owner->GetWeakPtrRef(); std::shared_ptr e = EntityFactory::Instance()->MakeExplosion(); e->SetThrough(true); e->SetCustomCheckCb ( - [sender, skill_meta] (const std::vector& params) mutable + [sender, skill_meta, this_skill_meta, shield_buff_meta] (const std::vector& params) mutable { bool* is_hit = std::any_cast(params.at(0)); Entity* e = std::any_cast(params.at(1)); if (sender.Get() && e->IsCreature(sender.Get()->room)) { Creature* c = (Creature*)e; + bool ret = Check2dRotationRectangle + (c->GetPos().x, + c->GetPos().y, + 20, + sender.Get()->GetPos().x, + sender.Get()->GetPos().y, + shield_buff_meta->param4, + SkillHelper::GetCmxdRange(this_skill_meta), + sender.Get()->GetAttackDirRotate() * 180.0f + ); + if (ret) { + *is_hit = true; + } + } } ); diff --git a/server/tools/protobuild/cs_proto.proto b/server/tools/protobuild/cs_proto.proto index c54d3d79..89549c99 100755 --- a/server/tools/protobuild/cs_proto.proto +++ b/server/tools/protobuild/cs_proto.proto @@ -868,6 +868,7 @@ message MFOverRewardItem { optional string obtain_gold = 1 [default = "0"]; //实际获得金币数 optional string gold_limit = 2 [default = "0"]; //今天可获得的金币上限 + optional int32 id = 3; //英雄或者武器id } //结算奖励