diff --git a/server/gameserver/constant.h b/server/gameserver/constant.h index f9bdf7e..33ed6d9 100755 --- a/server/gameserver/constant.h +++ b/server/gameserver/constant.h @@ -161,6 +161,20 @@ enum EntitySubType_e EST_Android = 2, }; +enum SkillTarget_e +{ + ST_All = 0, + + ST_Self = 1, + ST_FriendlyIncludeSelf = 2, + ST_FriendlyExcludeSelf = 3, + + ST_EnemySingle = 6, + ST_EnemyGroup = 7, + ST_EnemyAndObject = 8, + ST_EnemyAndSelf = 9 +}; + enum BuffTriggerType_e { BTT_UseSkill = 1, //技能释放时触发 diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 3210534..a6e8b06 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -641,8 +641,18 @@ bool Human::HasNoDownedTeammate() void Human::DoSkill() { if (skill_meta && GetSkillLeftTime() <= 0) { - TriggerBuff(BTT_UseSkill); + Entity* entity = room->GetEntityByUniId(skill_target_id); + if (entity && entity->entity_type == ET_Player) { + Human* hum = (Human*)entity; + std::set target_list; + SelectSkillTargets(hum->pos, target_list); + TriggerBuff(target_list, BTT_UseSkill); + } } + use_skill = false; + skill_target_id = 0; + skill_dir = a8::Vec2(); + skill_param1 = 0.0f; } void Human::FindLocation() @@ -1287,7 +1297,7 @@ int Human::GetSkillCd() return skill_meta ? skill_meta->i->skill_cd() * 1000 : 0; } -void Human::TriggerBuff(BuffTriggerType_e trigger_type) +void Human::TriggerBuff(std::set& target_list, BuffTriggerType_e trigger_type) { } @@ -1379,3 +1389,8 @@ void Human::Revive() room->OnHumanRevive(this); SyncAroundPlayers(); } + +void Human::SelectSkillTargets(const a8::Vec2& target_pos, std::set& target_list) +{ + +} diff --git a/server/gameserver/human.h b/server/gameserver/human.h index 1ab359c..f4e3a09 100644 --- a/server/gameserver/human.h +++ b/server/gameserver/human.h @@ -114,6 +114,12 @@ class Human : public Entity std::map weapon_configs; std::map skin_configs; + bool use_skill = false; + int curr_skill_phase = 0; + int skill_target_id = 0; + a8::Vec2 skill_dir; + float skill_param1 = 0; + Human(); virtual ~Human() override; virtual void Initialize() override; @@ -192,7 +198,7 @@ class Human : public Entity int SkinLv(); int GetSkillLeftTime(); int GetSkillCd(); - void TriggerBuff(BuffTriggerType_e trigger_type); + void TriggerBuff(std::set& target_list, BuffTriggerType_e trigger_type); protected: void _UpdateMove(int speed); @@ -201,6 +207,7 @@ private: void ClearFrameData(); void DeadDrop(); void Revive(); + void SelectSkillTargets(const a8::Vec2& target_pos, std::set& target_list); protected: long long last_shot_frameno_ = 0; diff --git a/server/gameserver/player.cc b/server/gameserver/player.cc index 3ac17c3..45a63d9 100644 --- a/server/gameserver/player.cc +++ b/server/gameserver/player.cc @@ -242,7 +242,6 @@ void Player::UpdateEmote() void Player::UpdateUseSkill() { DoSkill(); - use_skill = false; } void Player::Shot() diff --git a/server/gameserver/player.h b/server/gameserver/player.h index 51f0bf1..3089342 100644 --- a/server/gameserver/player.h +++ b/server/gameserver/player.h @@ -52,11 +52,6 @@ class Player : public Human bool emote = false; int emote_id = 0; - bool use_skill = false; - int skill_target_id = 0; - a8::Vec2 skill_dir; - float skill_param1 = 0; - ::google::protobuf::RepeatedField< ::google::protobuf::int32 > interaction_objids; Player();