1
0

smooth out pathing by not enforcing Y all the time, still need to do something about gaps in objects that cause spawns to fall through :-/

This commit is contained in:
Emagi 2025-01-28 09:52:44 -05:00
parent 79a010e055
commit 782f84e67e
2 changed files with 17 additions and 12 deletions

View File

@ -2112,7 +2112,10 @@ void Spawn::InitializePosPacketData(Player* player, PacketStruct* packet, bool b
{
m_GridMutex.writelock(__FUNCTION__, __LINE__);
std::map<int32,TimedGridData>::iterator itr = established_grid_id.find(version);
if ( itr == established_grid_id.end() || itr->second.npc_save || itr->second.timestamp <= (Timer::GetCurrentTime2()))
if (!EngagedInCombat() && player->GetMap() == GetMap()) {
new_y = GetY();
}
else if ( itr == established_grid_id.end() || itr->second.npc_save || itr->second.timestamp <= (Timer::GetCurrentTime2()))
{
if(itr != established_grid_id.end() && itr->second.x == GetX() && itr->second.z == GetZ() && !itr->second.npc_save) {
itr->second.timestamp = Timer::GetCurrentTime2()+100;
@ -3642,10 +3645,12 @@ bool Spawn::CalculateChange(){
else {
SetX(nx + tar_vx, false);
SetZ(nz + tar_vz, false);
if ( IsWidget() )
if(IsWidget()) {
SetY(ny + tar_vy, false, true);
else
}
else {
SetY(ny + tar_vy, false);
}
}
int32 newGrid = GetLocation();

View File

@ -324,9 +324,9 @@ public:
glm::vec2 ndir = glm::normalize(dir);
double distance_moved = frame_time * current_speed * 0.4f * 1.45f;
mob->SetX(m_move_to_x);
mob->SetZ(m_move_to_z);
mob->SetY(m_move_to_y);
mob->SetX(m_move_to_x, false);
mob->SetZ(m_move_to_z, false);
mob->SetY(m_move_to_y, true, true);
if (distance_moved > len) {
return true;
}
@ -338,9 +338,9 @@ public:
double start_y = m_move_to_y - m_total_v_dist;
double y_at_pos = start_y + (m_total_v_dist * (total_distance_traveled / m_total_h_dist));
mob->SetX(npos.x);
mob->SetZ(npos.y);
mob->SetY(y_at_pos);
mob->SetX(npos.x, false);
mob->SetZ(npos.y, false);
mob->SetY(y_at_pos, true, true);
}
return false;
@ -364,9 +364,9 @@ public:
virtual bool Process(MobMovementManager* mob_movement_manager, Entity* mob)
{
mob->SetX(m_teleport_to_x);
mob->SetZ(m_teleport_to_z);
mob->SetY(m_teleport_to_y);
mob->SetX(m_teleport_to_x, false);
mob->SetZ(m_teleport_to_z, false);
mob->SetY(m_teleport_to_y, true, true);
mob->SetHeading(mob_movement_manager->FixHeading(m_teleport_to_heading));
//mob_movement_manager->SendCommandToClients(mob, 0.0, 0.0, 0.0, 0.0, 0, ClientRangeAny);