Исходник TurnCamTo - поворачиваем камеру на указ. координаты

Smer4

Известный
Автор темы
425
51
TurnCamToX - Функция в дополнение к samp udf-у которая поворачивает камеру на указанные координаты, но только по оси X.
TurnCamToX:
global CAM_X := 0xB6F258

atan2(x, y) {
   return DllCall("msvcrt\atan2", "Double", y, "Double", x, "CDECL Double")
}

TurnCamToX(X,Y,Z)
{
    Cam := getCameraCoordinates()
    VectorX := X - Cam[1]
    VectorY := Y - Cam[2]
    VectorZ := Z - Cam[3]
    Angle := atan2(VectorY, -VectorX) - 3.14 / 2
    WriteFloat(hGTA, CAM_X, Angle + 0.04)
}
Cпасибо @CleanLegend у которого я успешно почти все просто переписал на другой ЯП.

Upd - TurnCamToY

TurnCamToY - Функция в дополнение к samp udf-у которая поворачивает камеру на указанные координаты, но только по оси Y, в силу моей криворукости угол рассчитывается немного криво так указывайте поправку в функции WriteFloat.
TurnCamToY:
global CAM_Y := 0xB6F248 ; Спасибо CleanLegend за аддрес

atan2(x, y) {
   return DllCall("msvcrt\atan2", "Double", y, "Double", x, "CDECL Double")
}

TurnCamToY(X,Y,Z)
{
    Cam := getCameraCoordinates()
    VectorX := X - Cam[1]
    VectorY := Y - Cam[2]
    VectorZ := Z - Cam[3]
    dist := Sqrt(VectorX * VectorX + VectorY * VectorY)
    AngleZ := Atan2(dist, VectorZ)
    WriteFloat(hGTA, CAM_Y, AngleZ - 0.103)
}
Кста, кто знает почему угол рассчитывается неправильно и нужна поправка?

Upd - TurnCamTo

TurnCamTo - Функция в дополнение к samp udf-у которая поворачивает камеру на указанные координаты, но в силу моей криворукости углы рассчитываются немного не правильно и нужно делать поправки, аргументы EX и EZ за это отвечают,оптимальные значения которые я подобрал это:
EX = 0.04
EZ = 0.103
TurnCamTo:
global CAM_Y := 0xB6F248
global CAM_X := 0xB6F258

atan2(x, y) {
   return DllCall("msvcrt\atan2", "Double", y, "Double", x, "CDECL Double")
}
EZ := 0.103 ; Поправка для оси Y, ибо угол в силу моей криворукости рассчитывается не правильно
EX := 0.04  ; Поправка для оси X

TurnCamToCoord(X,Y,Z,EX, EZ)
{
    Cam := getCameraCoordinates()
    VectorX := X - Cam[1]
    VectorY := Y - Cam[2]
    VectorZ := Z - Cam[3]
    dist := Sqrt(VectorX * VectorX + VectorY * VectorY)
    AngleX := atan2(VectorY, -VectorX) - 3.14 / 2 + EX
    AngleZ := atan2(dist, VectorZ) - EZ
    WriteFloat(hGTA, CAM_X, AngleX) ; Меняем угол X
    WriteFloat(hGTA, CAM_Y, AngleZ) ; Меняем угол Y

}

UPD : Был баг который только сейчас нашел, вообщем была такая ситуация что с первого раза не поворачивала на нужные коор-ы, это было изза того что углы поворота расчитывались относительно камеры, а если расчитывать относительно персонажа это решается
AutoHotKey:
Cam := getCoordinates() ; получает координаты перс - а, а не камеры
ну и соответственно нужны другие поправки.
поправки которые подобрал я:
AutoHotKey:
EX := 0.06
EZ := 0.103
 
Последнее редактирование:

Ninthmoon

Известный
464
129
Можно объяснения для личинок, как я, как это должно работать
Upd Как и где?)
 

Smer4

Известный
Автор темы
425
51
Можно объяснения для личинок, как я, как это должно работать
Upd Как и где?)
В аргументах функции указываешь координаты куда повернуть камеру. Сначала по оси X, затем Y, затем Z координаты.
Можешь какого нибудь бота сделать с поворотом камеры, можешь сделать аимбот. Я изначально эту функцию сделал когда делал(пытался сделать) аимбот.
 

kovshik

Известный
108
60
В аргументах функции указываешь координаты куда повернуть камеру. Сначала по оси X, затем Y, затем Z координаты.
Можешь какого нибудь бота сделать с поворотом камеры, можешь сделать аимбот. Я изначально эту функцию сделал когда делал(пытался сделать) аимбот.
Как успехи в аим боте?
 

NOOBPAndA

Участник
101
12
Но какой то он не точный, с первого раза не поворачивает на нужные кординаты
 

Smer4

Известный
Автор темы
425
51
Но какой то он не точный, с первого раза не поворачивает на нужные кординаты
Функция работает четко если указать точные координаты, а если ты про то что когда по таргету получаешь координаты другого игрока и указываешь их в функцию то это баг не функции ибо по точным координатам то она работает четко.. Я когда аим делал просто функцию в цикл пихал (loop, 3) и все, костыль ну да пох.)