follow_target ok
This commit is contained in:
parent
77bbf02524
commit
d807207da0
@ -2762,3 +2762,32 @@ void Creature::OnBattleStart(Room* room)
|
|||||||
RemoveBuffByUniId(*itr);
|
RemoveBuffByUniId(*itr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Creature::CanFollow(Creature* follower)
|
||||||
|
{
|
||||||
|
if (follower->GetUniId() == GetUniId()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (!follower->IsPlayer()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (follower->team_id != team_id) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
#if 0
|
||||||
|
if (follower->follow_target.Get()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
if (!follower->HasBuffEffect(kBET_Jump)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!IsPlayer()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (!HasBuffEffect(kBET_Jump)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
@ -238,6 +238,7 @@ class Creature : public MoveableEntity
|
|||||||
void TraverseBuff(std::function<void (Buff*, bool&)> func);
|
void TraverseBuff(std::function<void (Buff*, bool&)> func);
|
||||||
long long GetCollisionTimes() { return collision_times_; };
|
long long GetCollisionTimes() { return collision_times_; };
|
||||||
std::string DebugOutBuffList();
|
std::string DebugOutBuffList();
|
||||||
|
bool CanFollow(Creature* follower);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void OnBuffRemove(Buff& buff);
|
virtual void OnBuffRemove(Buff& buff);
|
||||||
|
@ -398,7 +398,7 @@ long long Human::GetRealDeadFrameNo(Room* room)
|
|||||||
return real_dead_frameno;
|
return real_dead_frameno;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Human::FillMFTeamData(cs::MFTeamData* team_data, bool is_game_over)
|
void Human::FillMFTeamData(Human* hum, cs::MFTeamData* team_data, bool is_game_over)
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
last_sync_teamdata_frameno_ = room->GetFrameNo();
|
last_sync_teamdata_frameno_ = room->GetFrameNo();
|
||||||
@ -447,6 +447,12 @@ void Human::FillMFTeamData(cs::MFTeamData* team_data, bool is_game_over)
|
|||||||
room->GetFrameNo() - room->GetBattleStartFrameNo() < 4) {
|
room->GetFrameNo() - room->GetBattleStartFrameNo() < 4) {
|
||||||
team_data->set_user_data(user_data);
|
team_data->set_user_data(user_data);
|
||||||
}
|
}
|
||||||
|
if (HasBuffEffect(kBET_Jump) && GetTeam()) {
|
||||||
|
bool can_follow = hum->CanFollow(this);
|
||||||
|
if (can_follow) {
|
||||||
|
team_data->set_can_follow(can_follow);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -652,7 +658,7 @@ void Human::FillSMGameOver(cs::SMGameOver& msg)
|
|||||||
[this, &msg] (Human* member) -> bool
|
[this, &msg] (Human* member) -> bool
|
||||||
{
|
{
|
||||||
if (this != member) {
|
if (this != member) {
|
||||||
member->FillMFTeamData(msg.add_team_data(), true);
|
member->FillMFTeamData(this, msg.add_team_data(), true);
|
||||||
cs::MFPlayerStats* p = msg.add_player_stats();
|
cs::MFPlayerStats* p = msg.add_player_stats();
|
||||||
member->FillMFPlayerStats(p);
|
member->FillMFPlayerStats(p);
|
||||||
}
|
}
|
||||||
@ -2429,7 +2435,7 @@ void Human::NotifyObservers(cs::SMUpdate* msg, cs::MFActivePlayerData* active_pl
|
|||||||
[observer, msg] (Human* member) -> bool
|
[observer, msg] (Human* member) -> bool
|
||||||
{
|
{
|
||||||
if (member != observer) {
|
if (member != observer) {
|
||||||
member->FillMFTeamData(msg->add_team_data(), false);
|
member->FillMFTeamData(observer, msg->add_team_data(), false);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
|
@ -180,7 +180,7 @@ class Human : public Creature
|
|||||||
virtual void OnExplosionHit(Explosion* explosion) override;
|
virtual void OnExplosionHit(Explosion* explosion) override;
|
||||||
void FillItemList(::google::protobuf::RepeatedPtrField<::cs::MFPair>* pb_item_list);
|
void FillItemList(::google::protobuf::RepeatedPtrField<::cs::MFPair>* pb_item_list);
|
||||||
long long GetRealDeadFrameNo(Room* room);
|
long long GetRealDeadFrameNo(Room* room);
|
||||||
void FillMFTeamData(cs::MFTeamData* team_data, bool is_game_over);
|
void FillMFTeamData(Human* hum, cs::MFTeamData* team_data, bool is_game_over);
|
||||||
void CarShot(const a8::Vec2& target_dir);
|
void CarShot(const a8::Vec2& target_dir);
|
||||||
virtual void RecalcSelfCollider() override;
|
virtual void RecalcSelfCollider() override;
|
||||||
void FindPathInMapService();
|
void FindPathInMapService();
|
||||||
|
@ -20,6 +20,7 @@
|
|||||||
#include "perfmonitor.h"
|
#include "perfmonitor.h"
|
||||||
#include "jsondatamgr.h"
|
#include "jsondatamgr.h"
|
||||||
#include "skill.h"
|
#include "skill.h"
|
||||||
|
#include "team.h"
|
||||||
|
|
||||||
const int kREVIVE_BUFF_ID = 1005;
|
const int kREVIVE_BUFF_ID = 1005;
|
||||||
|
|
||||||
@ -1230,6 +1231,23 @@ void Player::UpdateAiming()
|
|||||||
|
|
||||||
void Player::UpdateFollow()
|
void Player::UpdateFollow()
|
||||||
{
|
{
|
||||||
|
if (follow == 0){
|
||||||
|
if (follow_target.Get()) {
|
||||||
|
follow_target.Detach();
|
||||||
|
room->frame_event.AddPropChg(GetWeakPtrRef(), kPropFollowTarget, 0, 0, true);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (GetTeam()) {
|
||||||
|
Human* member = GetTeam()->GetMemberByUniId(follow);
|
||||||
|
if (member && member->CanFollow(this)) {
|
||||||
|
if (follow_target.Get()) {
|
||||||
|
follow_target.Detach();
|
||||||
|
}
|
||||||
|
follow_target.Attach(member);
|
||||||
|
room->frame_event.AddPropChg(GetWeakPtrRef(), kPropFollowTarget, 0, follow, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
follow = -1;
|
follow = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -108,3 +108,13 @@ void Team::CombineTeam(Team* b_team)
|
|||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Human* Team::GetMemberByUniId(int member_id)
|
||||||
|
{
|
||||||
|
for (Human* member : members_) {
|
||||||
|
if (member->GetUniId() == member_id) {
|
||||||
|
return member;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
@ -19,6 +19,7 @@ class Team
|
|||||||
bool IsFull();
|
bool IsFull();
|
||||||
void CombineBornPoint();
|
void CombineBornPoint();
|
||||||
void CombineTeam(Team* b_team);
|
void CombineTeam(Team* b_team);
|
||||||
|
Human* GetMemberByUniId(int member_id);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
int team_id_ = 0;
|
int team_id_ = 0;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user