REQ:
osu!
Visual Studio
osuAutoBot(Coderoffka) or smth without relax
not have a 2 iq
Tutorial:
At first u should open a osuAuto project:
time to tutorial!
we need add only 2 lines to slider move, spinner and cursor move.
Code:
// WARNING: this function has been superseded. u can use SendInput but it simpler :)
mouse_event(MOUSEEVENTF_LEFTDOWN, x, y, 0, 0); // left mouse down,
mouse_event(MOUSEEVENTF_LEFTUP, x, y, 0, 0); // left mouse up
//or
mouse_event(MOUSEEVENTF_RIGHTDOWN, x, y, 0, 0); // right mouse down
mouse_event(MOUSEEVENTF_RIGHTUP, x, y, 0, 0); // right mouse up
At first u should add after includes:
int x;
int y;
at second add click to spinner:
Find SpinerCircleMove and just copy it or add manually..
Code:
void SpinerCircleMove(const HitObject* spiner)
{
vec2f center{
spiner->getStartPosition().x * XMultiplier + OsuWindowX,
spiner->getStartPosition().y * YMultiplier + OsuWindowY
};
auto angle = static_cast<float>((M_PI));
float R = 70.0f;
while (SongTime <= spiner->getEndTime() && songStarted)
{
//angle = normalize_angle(angle);
float r = R * (sqrt2 / GetDelta(angle));
int x = static_cast<int>(r * cos(angle) + center.x);
int y = static_cast<int>(r * sin(angle) + center.y);
mouse_event(MOUSEEVENTF_LEFTDOWN, x, y, 0, 0);
SetCursorPos(x, y);
angle -= 0.056f;
this_thread::sleep_for(chrono::milliseconds(1));
mouse_event(MOUSEEVENTF_LEFTUP, x, y, 0, 0);
}
}
Find SpiralMove and again just copy it or add manually.
Code:
void SpiralMove(HitObject* spiner)
{
vec2f center = vec2f(spiner->getStartPosition().x * XMultiplier + OsuWindowX, spiner->getStartPosition().y * YMultiplier + OsuWindowY);
float angle = static_cast<float>((M_PI));
float R = 0.0f;
while (SongTime <= spiner->getEndTime() && songStarted)
{
int x = static_cast<int>(R * cos(angle) + center.x);
int y = static_cast<int>(R * sin(angle) + center.y);
mouse_event(MOUSEEVENTF_LEFTDOWN, x, y, 0, 0);
SetCursorPos(x, y);
angle -= 0.056f;
R += 0.2f;
this_thread::sleep_for(chrono::milliseconds(1));
mouse_event(MOUSEEVENTF_LEFTUP, x, y, 0, 0);
}
}
At second add a click to slider:
Find a SliderMove and just copy it or add manually.
Code:
void SliderMove(HitObject* slider)
{
SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_TIME_CRITICAL);
while (SongTime <= slider->getEndTime() && songStarted)
{
mouse_event(MOUSEEVENTF_LEFTDOWN, x, y, 0, 0);
auto t = static_cast<float>(SongTime - slider->getStartTime()) / static_cast<float>(slider->getSliderTime());
auto pos = slider->getPointByT(t);
SetCursorPos(static_cast<int>((pos.x - slider->getStack() * StackOffset)* XMultiplier) + OsuWindowX, static_cast<int>((pos.y - slider->getStack() * StackOffset) * YMultiplier) + OsuWindowY);
this_thread::sleep_for(chrono::milliseconds(1));
mouse_event(MOUSEEVENTF_LEFTUP, x, y, 0, 0);
}
}
And final add click to circle:
Just copy or add manually.
Code:
void DancingMoveTo(const HitObject* object)
{
POINT p;
GetCursorPos(&p);
auto p0 = vec2f(static_cast<float>(p.x), static_cast<float>(p.y));
auto p1 = vec2f((object->getStartPosition().x - StackOffset * object->getStack()) * XMultiplier + OsuWindowX, (object->getStartPosition().y - StackOffset * object->getStack()) * YMultiplier + OsuWindowY);
ang = -ang;
auto p2 = rotate(vec2f(p1 - p0) / 2.0f, ang + vectorAngle(p0, p1)) + p0;
//auto p3 = rotate(vec2f(p1 - p0) / 2.0f, ang - vectorAngle(p0, p1)) + p1;
auto dt = static_cast<float>(object->getStartTime() - SongTime);
while (SongTime < object->getStartTime() && songStarted)
{
auto t = (dt - static_cast<float>(object->getStartTime() - SongTime)) / dt;
auto B = bezier(vector<vec2f>{
p0, p2, /*p3,*/ p1
}, t);
SetCursorPos(static_cast<int>(B.x), static_cast<int>(B.y));
this_thread::sleep_for(chrono::milliseconds(1));
}
SetCursorPos(static_cast<int>(p1.x), static_cast<int>(p1.y));
mouse_event(MOUSEEVENTF_LEFTDOWN, x, y, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, x, y, 0, 0);
}
Thanks for read.