Начинающий
- Статус
- Оффлайн
- Регистрация
- 10 Апр 2020
- Сообщения
- 21
- Реакции
- 1
всем привет. По совету человека с форума переписал с нуля весь алгоритм скрипта.
Проблема следующая: я не могу понять принцип передвижения мыши, ибо все время у меня дельта околонулевая (0.005) или же меньше нуля.
Конкретно в recoil::Thread, не могу понять каким образом двигать мышь исходя из animtime.
Писал исходя из материалов на uc(noad). При необходимости пришлю recoil.h с обозначением, но пока не вижу смысла в этом.
Проблема следующая: я не могу понять принцип передвижения мыши, ибо все время у меня дельта околонулевая (0.005) или же меньше нуля.
Конкретно в recoil::Thread, не могу понять каким образом двигать мышь исходя из animtime.
Писал исходя из материалов на uc(noad). При необходимости пришлю recoil.h с обозначением, но пока не вижу смысла в этом.
recoil.cpp:
Math::Vector2 last_shot(0.0f, 0.0f);
Math::Vector2 cur_shot(0.0f, 0.0f);
std::string recoil::CurrentWeaponUID() noexcept {
return translation[recoil::CurrentWeaponID];
}
int shot_index = 0;
Math::Vector2 recoil::GetDelta() noexcept
{
if (shot_index >= recoil::coords[recoil::CurrentWeaponUID()].size())
shot_index = 0;
cur_shot = {
recoil::coords[recoil::CurrentWeaponUID()][shot_index].x,
recoil::coords[recoil::CurrentWeaponUID()][shot_index].y
};
Math::Vector2 delta = {
cur_shot.x - last_shot.x,
cur_shot.y - last_shot.y
};
last_shot = cur_shot;
shot_index++;
return delta;
}
int recoil::GetRPM() noexcept {
std::string weaponUID = recoil::CurrentWeaponUID();
auto it = RPM.find(weaponUID);
if (it != RPM.end()) {
return it->second;
}
return 0;
}
float recoil::GetRepeatDelay(int RPM) noexcept {
return 1000.0f / (RPM / 60.0f);
}
float recoil::GetAnimationTime(Math::Vector2 Delta) noexcept {
float animation_time = std::sqrt(Delta.x * Delta.x + Delta.y * Delta.y) / 0.02f;
return animation_time;
}
Math::Vector2 recoil::GetPixel(Math::Vector2 Delta) noexcept {
float mult = -0.03f * (global::Sensitivity * 2.0f) * (global::FOV / 100.0f);
float d_x = Delta.x;
float d_y = Delta.y;
float p_x = (d_x / mult);
float p_y = (d_y / mult);
return Math::Vector2(p_x, p_y);
}
bool recoil::IsHoldingLeft() noexcept {
return GetAsyncKeyState(VK_LBUTTON) & 0x8000;
}
bool recoil::IsHoldingRight() noexcept {
return GetAsyncKeyState(VK_RBUTTON) & 0x8000;
}
bool recoil::IsCrouching() noexcept {
return GetAsyncKeyState(VK_CONTROL) & 0x8000;
}
bool recoil::IsValidWeapon() noexcept {
return recoil::CurrentWeaponID >= 0;
}
void recoil::Thread() noexcept {
while (true) {
if (!recoil::IsValidWeapon()) {
SleepEx(2, false);
continue;
}
if (!recoil::IsHoldingRight() && !recoil::IsHoldingLeft()) {
SleepEx(2, false);
continue;
}
Math::Vector2 delta = recoil::GetDelta();
Math::Vector2 pixel = recoil::GetPixel(delta);
debug::AddLog("Delta: X=" + std::to_string(delta.x) + " Y=" + std::to_string(delta.y));
debug::AddLog("Pixel: X=" + std::to_string(pixel.x) + " Y=" + std::to_string(pixel.y));
int rpm = recoil::GetRPM();
if (rpm <= 0) {
SleepEx(2, false);
continue;
}
float delay = recoil::GetRepeatDelay(rpm);
float anim_time = recoil::GetAnimationTime(delta);
int sleep_anim = static_cast<int>(anim_time * 1000.0f);
if (sleep_anim > 0)
SleepEx(sleep_anim, false);
mouse::SmoothMove(pixel.x, pixel.y, anim_time);
float wait_time = delay - anim_time;
if (wait_time > 0.0f) {
int sleep_ms = static_cast<int>(wait_time * 1000.0f);
if (sleep_ms > 0)
SleepEx(sleep_ms, false);
timer::Timer t2;
while (t2.Elapsed() < (wait_time - sleep_ms / 1000.0f)) {
Sleep(0);
}
}
}
}