TurnCamToX - Функция в дополнение к samp udf-у которая поворачивает камеру на указанные координаты, но только по оси X.
Cпасибо @CleanLegend у которого я успешно почти все просто переписал на другой ЯП.
Upd - TurnCamToY
TurnCamToY - Функция в дополнение к samp udf-у которая поворачивает камеру на указанные координаты, но только по оси Y, в силу моей криворукости угол рассчитывается немного криво так указывайте поправку в функции WriteFloat.
Кста, кто знает почему угол рассчитывается неправильно и нужна поправка?
Upd - TurnCamTo
TurnCamTo - Функция в дополнение к samp udf-у которая поворачивает камеру на указанные координаты, но в силу моей криворукости углы рассчитываются немного не правильно и нужно делать поправки, аргументы EX и EZ за это отвечают,оптимальные значения которые я подобрал это:
EX = 0.04
EZ = 0.103
UPD : Был баг который только сейчас нашел, вообщем была такая ситуация что с первого раза не поворачивала на нужные коор-ы, это было изза того что углы поворота расчитывались относительно камеры, а если расчитывать относительно персонажа это решается
ну и соответственно нужны другие поправки.
поправки которые подобрал я:
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)
}
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
Последнее редактирование: