diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index 08f7231..a8d435b 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -2779,14 +2779,20 @@ bool Creature::CanFollow(Creature* follower) return false; } #endif - if (!follower->HasBuffEffect(kBET_Jump) && room->GetGasData().gas_mode != GasInactive) { + if (follower->HasBuffEffect(kBET_Jump)) { + return false; + } + if (!follower->HasBuffEffect(kBET_Fly) && room->GetGasData().gas_mode != GasInactive) { return false; } if (!IsPlayer()) { return false; } - if (!HasBuffEffect(kBET_Jump) && room->GetGasData().gas_mode != GasInactive) { + if (HasBuffEffect(kBET_Jump)) { + return false; + } + if (!HasBuffEffect(kBET_Fly) && room->GetGasData().gas_mode != GasInactive) { return false; } return true; @@ -2800,12 +2806,12 @@ void Creature::FollowToTarget() #if 1 { #else - if (GetPos().ManhattanDistance(follow_target.Get()->GetPos()) > 20) { + if (GetPos().ManhattanDistance(follow_target.Get()->GetPos()) > 50) { #endif a8::Vec2 dir = a8::Vec2::UP; dir.Rotate(a8::RandAngle()); dir.Normalize(); - a8::Vec2 target_pos = follow_target.Get()->GetPos() + dir * (10 + (rand() % 10)); + a8::Vec2 target_pos = follow_target.Get()->GetPos() + dir * (30 + (rand() % 10)); if (GetPos().ManhattanDistance(target_pos) > 5) { a8::Vec2 move_dir = target_pos - GetPos(); move_dir.Normalize(); diff --git a/server/gameserver/player.cc b/server/gameserver/player.cc index b1698e6..0286071 100644 --- a/server/gameserver/player.cc +++ b/server/gameserver/player.cc @@ -1265,7 +1265,7 @@ void Player::UpdateFollow() room->frame_event.AddPropChg(GetWeakPtrRef(), kPropFollowTarget, 0, follow, true); follow_target_timer_ = room->xtimer.AddRepeatTimerAndAttach ( - FRAME_RATE_MS, + 400 / FRAME_RATE_MS, a8::XParams() .SetSender(this), [] (const a8::XParams& param)