mirror of
https://github.com/EQEmu/Server.git
synced 2026-05-17 03:08:26 +00:00
Redoing movement to introduce proper rotation
This commit is contained in:
-333
@@ -119,7 +119,6 @@ Client::Client(EQStreamInterface* ieqs)
|
||||
0,
|
||||
0
|
||||
),
|
||||
position_timer(250),
|
||||
hpupdate_timer(2000),
|
||||
camp_timer(29000),
|
||||
process_timer(100),
|
||||
@@ -221,7 +220,6 @@ Client::Client(EQStreamInterface* ieqs)
|
||||
npcflag = false;
|
||||
npclevel = 0;
|
||||
pQueuedSaveWorkID = 0;
|
||||
position_timer_counter = 0;
|
||||
position_update_same_count = 0;
|
||||
fishing_timer.Disable();
|
||||
shield_timer.Disable();
|
||||
@@ -278,14 +276,6 @@ Client::Client(EQStreamInterface* ieqs)
|
||||
XPRate = 100;
|
||||
current_endurance = 0;
|
||||
|
||||
m_TimeSinceLastPositionCheck = 0;
|
||||
m_DistanceSinceLastPositionCheck = 0.0f;
|
||||
m_ShadowStepExemption = 0;
|
||||
m_KnockBackExemption = 0;
|
||||
m_PortExemption = 0;
|
||||
m_SenseExemption = 0;
|
||||
m_AssistExemption = 0;
|
||||
m_CheatDetectMoved = false;
|
||||
CanUseReport = true;
|
||||
aa_los_them_mob = nullptr;
|
||||
los_status = false;
|
||||
@@ -5282,177 +5272,6 @@ void Client::ShowSkillsWindow()
|
||||
this->SendPopupToClient(WindowTitle, WindowText.c_str());
|
||||
}
|
||||
|
||||
void Client::SetShadowStepExemption(bool v)
|
||||
{
|
||||
if(v == true)
|
||||
{
|
||||
uint32 cur_time = Timer::GetCurrentTime();
|
||||
if((cur_time - m_TimeSinceLastPositionCheck) > 1000)
|
||||
{
|
||||
float speed = (m_DistanceSinceLastPositionCheck * 100) / (float)(cur_time - m_TimeSinceLastPositionCheck);
|
||||
int runs = GetRunspeed();
|
||||
if(speed > (runs * RuleR(Zone, MQWarpDetectionDistanceFactor)))
|
||||
{
|
||||
printf("%s %i moving too fast! moved: %.2f in %ims, speed %.2f\n", __FILE__, __LINE__,
|
||||
m_DistanceSinceLastPositionCheck, (cur_time - m_TimeSinceLastPositionCheck), speed);
|
||||
if(!GetGMSpeed() && (runs >= GetBaseRunspeed() || (speed > (GetBaseRunspeed() * RuleR(Zone, MQWarpDetectionDistanceFactor)))))
|
||||
{
|
||||
if(IsShadowStepExempted())
|
||||
{
|
||||
if(m_DistanceSinceLastPositionCheck > 800)
|
||||
{
|
||||
CheatDetected(MQWarpShadowStep, GetX(), GetY(), GetZ());
|
||||
}
|
||||
}
|
||||
else if(IsKnockBackExempted())
|
||||
{
|
||||
//still potential to trigger this if you're knocked back off a
|
||||
//HUGE fall that takes > 2.5 seconds
|
||||
if(speed > 30.0f)
|
||||
{
|
||||
CheatDetected(MQWarpKnockBack, GetX(), GetY(), GetZ());
|
||||
}
|
||||
}
|
||||
else if(!IsPortExempted())
|
||||
{
|
||||
if(!IsMQExemptedArea(zone->GetZoneID(), GetX(), GetY(), GetZ()))
|
||||
{
|
||||
if(speed > (runs * 2 * RuleR(Zone, MQWarpDetectionDistanceFactor)))
|
||||
{
|
||||
CheatDetected(MQWarp, GetX(), GetY(), GetZ());
|
||||
m_TimeSinceLastPositionCheck = cur_time;
|
||||
m_DistanceSinceLastPositionCheck = 0.0f;
|
||||
//Death(this, 10000000, SPELL_UNKNOWN, _1H_BLUNT);
|
||||
}
|
||||
else
|
||||
{
|
||||
CheatDetected(MQWarpLight, GetX(), GetY(), GetZ());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
m_TimeSinceLastPositionCheck = cur_time;
|
||||
m_DistanceSinceLastPositionCheck = 0.0f;
|
||||
}
|
||||
m_ShadowStepExemption = v;
|
||||
}
|
||||
|
||||
void Client::SetKnockBackExemption(bool v)
|
||||
{
|
||||
if(v == true)
|
||||
{
|
||||
uint32 cur_time = Timer::GetCurrentTime();
|
||||
if((cur_time - m_TimeSinceLastPositionCheck) > 1000)
|
||||
{
|
||||
float speed = (m_DistanceSinceLastPositionCheck * 100) / (float)(cur_time - m_TimeSinceLastPositionCheck);
|
||||
int runs = GetRunspeed();
|
||||
if(speed > (runs * RuleR(Zone, MQWarpDetectionDistanceFactor)))
|
||||
{
|
||||
if(!GetGMSpeed() && (runs >= GetBaseRunspeed() || (speed > (GetBaseRunspeed() * RuleR(Zone, MQWarpDetectionDistanceFactor)))))
|
||||
{
|
||||
printf("%s %i moving too fast! moved: %.2f in %ims, speed %.2f\n", __FILE__, __LINE__,
|
||||
m_DistanceSinceLastPositionCheck, (cur_time - m_TimeSinceLastPositionCheck), speed);
|
||||
if(IsShadowStepExempted())
|
||||
{
|
||||
if(m_DistanceSinceLastPositionCheck > 800)
|
||||
{
|
||||
CheatDetected(MQWarpShadowStep, GetX(), GetY(), GetZ());
|
||||
}
|
||||
}
|
||||
else if(IsKnockBackExempted())
|
||||
{
|
||||
//still potential to trigger this if you're knocked back off a
|
||||
//HUGE fall that takes > 2.5 seconds
|
||||
if(speed > 30.0f)
|
||||
{
|
||||
CheatDetected(MQWarpKnockBack, GetX(), GetY(), GetZ());
|
||||
}
|
||||
}
|
||||
else if(!IsPortExempted())
|
||||
{
|
||||
if(!IsMQExemptedArea(zone->GetZoneID(), GetX(), GetY(), GetZ()))
|
||||
{
|
||||
if(speed > (runs * 2 * RuleR(Zone, MQWarpDetectionDistanceFactor)))
|
||||
{
|
||||
m_TimeSinceLastPositionCheck = cur_time;
|
||||
m_DistanceSinceLastPositionCheck = 0.0f;
|
||||
CheatDetected(MQWarp, GetX(), GetY(), GetZ());
|
||||
//Death(this, 10000000, SPELL_UNKNOWN, _1H_BLUNT);
|
||||
}
|
||||
else
|
||||
{
|
||||
CheatDetected(MQWarpLight, GetX(), GetY(), GetZ());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
m_TimeSinceLastPositionCheck = cur_time;
|
||||
m_DistanceSinceLastPositionCheck = 0.0f;
|
||||
}
|
||||
m_KnockBackExemption = v;
|
||||
}
|
||||
|
||||
void Client::SetPortExemption(bool v)
|
||||
{
|
||||
if(v == true)
|
||||
{
|
||||
uint32 cur_time = Timer::GetCurrentTime();
|
||||
if((cur_time - m_TimeSinceLastPositionCheck) > 1000)
|
||||
{
|
||||
float speed = (m_DistanceSinceLastPositionCheck * 100) / (float)(cur_time - m_TimeSinceLastPositionCheck);
|
||||
int runs = GetRunspeed();
|
||||
if(speed > (runs * RuleR(Zone, MQWarpDetectionDistanceFactor)))
|
||||
{
|
||||
if(!GetGMSpeed() && (runs >= GetBaseRunspeed() || (speed > (GetBaseRunspeed() * RuleR(Zone, MQWarpDetectionDistanceFactor)))))
|
||||
{
|
||||
printf("%s %i moving too fast! moved: %.2f in %ims, speed %.2f\n", __FILE__, __LINE__,
|
||||
m_DistanceSinceLastPositionCheck, (cur_time - m_TimeSinceLastPositionCheck), speed);
|
||||
if(IsShadowStepExempted())
|
||||
{
|
||||
if(m_DistanceSinceLastPositionCheck > 800)
|
||||
{
|
||||
CheatDetected(MQWarpShadowStep, GetX(), GetY(), GetZ());
|
||||
}
|
||||
}
|
||||
else if(IsKnockBackExempted())
|
||||
{
|
||||
//still potential to trigger this if you're knocked back off a
|
||||
//HUGE fall that takes > 2.5 seconds
|
||||
if(speed > 30.0f)
|
||||
{
|
||||
CheatDetected(MQWarpKnockBack, GetX(), GetY(), GetZ());
|
||||
}
|
||||
}
|
||||
else if(!IsPortExempted())
|
||||
{
|
||||
if(!IsMQExemptedArea(zone->GetZoneID(), GetX(), GetY(), GetZ()))
|
||||
{
|
||||
if(speed > (runs * 2 * RuleR(Zone, MQWarpDetectionDistanceFactor)))
|
||||
{
|
||||
m_TimeSinceLastPositionCheck = cur_time;
|
||||
m_DistanceSinceLastPositionCheck = 0.0f;
|
||||
CheatDetected(MQWarp, GetX(), GetY(), GetZ());
|
||||
//Death(this, 10000000, SPELL_UNKNOWN, _1H_BLUNT);
|
||||
}
|
||||
else
|
||||
{
|
||||
CheatDetected(MQWarpLight, GetX(), GetY(), GetZ());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
m_TimeSinceLastPositionCheck = cur_time;
|
||||
m_DistanceSinceLastPositionCheck = 0.0f;
|
||||
}
|
||||
m_PortExemption = v;
|
||||
}
|
||||
|
||||
void Client::Signal(uint32 data)
|
||||
{
|
||||
char buf[32];
|
||||
@@ -5461,158 +5280,6 @@ void Client::Signal(uint32 data)
|
||||
parse->EventPlayer(EVENT_SIGNAL, this, buf, 0);
|
||||
}
|
||||
|
||||
const bool Client::IsMQExemptedArea(uint32 zoneID, float x, float y, float z) const
|
||||
{
|
||||
float max_dist = 90000;
|
||||
switch(zoneID)
|
||||
{
|
||||
case 2:
|
||||
{
|
||||
float delta = (x-(-713.6));
|
||||
delta *= delta;
|
||||
float distance = delta;
|
||||
delta = (y-(-160.2));
|
||||
delta *= delta;
|
||||
distance += delta;
|
||||
delta = (z-(-12.8));
|
||||
delta *= delta;
|
||||
distance += delta;
|
||||
|
||||
if(distance < max_dist)
|
||||
return true;
|
||||
|
||||
delta = (x-(-153.8));
|
||||
delta *= delta;
|
||||
distance = delta;
|
||||
delta = (y-(-30.3));
|
||||
delta *= delta;
|
||||
distance += delta;
|
||||
delta = (z-(8.2));
|
||||
delta *= delta;
|
||||
distance += delta;
|
||||
|
||||
if(distance < max_dist)
|
||||
return true;
|
||||
|
||||
break;
|
||||
}
|
||||
case 9:
|
||||
{
|
||||
float delta = (x-(-682.5));
|
||||
delta *= delta;
|
||||
float distance = delta;
|
||||
delta = (y-(147.0));
|
||||
delta *= delta;
|
||||
distance += delta;
|
||||
delta = (z-(-9.9));
|
||||
delta *= delta;
|
||||
distance += delta;
|
||||
|
||||
if(distance < max_dist)
|
||||
return true;
|
||||
|
||||
delta = (x-(-655.4));
|
||||
delta *= delta;
|
||||
distance = delta;
|
||||
delta = (y-(10.5));
|
||||
delta *= delta;
|
||||
distance += delta;
|
||||
delta = (z-(-51.8));
|
||||
delta *= delta;
|
||||
distance += delta;
|
||||
|
||||
if(distance < max_dist)
|
||||
return true;
|
||||
|
||||
break;
|
||||
}
|
||||
case 62:
|
||||
case 75:
|
||||
case 114:
|
||||
case 209:
|
||||
{
|
||||
//The portals are so common in paineel/felwitheb that checking
|
||||
//distances wouldn't be worth it cause unless you're porting to the
|
||||
//start field you're going to be triggering this and that's a level of
|
||||
//accuracy I'm willing to sacrifice
|
||||
return true;
|
||||
break;
|
||||
}
|
||||
|
||||
case 24:
|
||||
{
|
||||
float delta = (x-(-183.0));
|
||||
delta *= delta;
|
||||
float distance = delta;
|
||||
delta = (y-(-773.3));
|
||||
delta *= delta;
|
||||
distance += delta;
|
||||
delta = (z-(54.1));
|
||||
delta *= delta;
|
||||
distance += delta;
|
||||
|
||||
if(distance < max_dist)
|
||||
return true;
|
||||
|
||||
delta = (x-(-8.8));
|
||||
delta *= delta;
|
||||
distance = delta;
|
||||
delta = (y-(-394.1));
|
||||
delta *= delta;
|
||||
distance += delta;
|
||||
delta = (z-(41.1));
|
||||
delta *= delta;
|
||||
distance += delta;
|
||||
|
||||
if(distance < max_dist)
|
||||
return true;
|
||||
|
||||
delta = (x-(-310.3));
|
||||
delta *= delta;
|
||||
distance = delta;
|
||||
delta = (y-(-1411.6));
|
||||
delta *= delta;
|
||||
distance += delta;
|
||||
delta = (z-(-42.8));
|
||||
delta *= delta;
|
||||
distance += delta;
|
||||
|
||||
if(distance < max_dist)
|
||||
return true;
|
||||
|
||||
delta = (x-(-183.1));
|
||||
delta *= delta;
|
||||
distance = delta;
|
||||
delta = (y-(-1409.8));
|
||||
delta *= delta;
|
||||
distance += delta;
|
||||
delta = (z-(37.1));
|
||||
delta *= delta;
|
||||
distance += delta;
|
||||
|
||||
if(distance < max_dist)
|
||||
return true;
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case 110:
|
||||
case 34:
|
||||
case 96:
|
||||
case 93:
|
||||
case 68:
|
||||
case 84:
|
||||
{
|
||||
if(GetBoatID() != 0)
|
||||
return true;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void Client::SendRewards()
|
||||
{
|
||||
std::vector<ClientReward> rewards;
|
||||
|
||||
Reference in New Issue
Block a user