PDA

Просмотр полной версии : Бег по координатам


EclipsedFlow
17.03.2021, 16:38
Есть функция бега по координатам ?

frit
17.03.2021, 16:55
Есть функция бега по координатам ?


перепиши с луа, в чем сложность?

EclipsedFlow
17.03.2021, 17:03
перепиши с луа, в чем сложность?


Я переписывал, но не особо получилось как видишь

frit
17.03.2021, 18:01
Я переписывал, но не особо получилось как видишь


что конкретно не получилось?

EclipsedFlow
17.03.2021, 18:11
что конкретно не получилось?


Гта виснет и все, по разному я пробовал.

Оригинал на Lua:

Lua:






function
BeginToPoint
(
x
,
y
,
z
,
radius
,
move_code
,
isSprint
,
isJumping
)
repeat
local
posX
,
posY
,
posZ
=
getCharCoordinates
(
PLAYER_PED
)
setCameraToCoord
(
x
,
y
)
;
MovePlayer
(
move_code
,
isSprint
,
isJumping
)
;
local
dist
=
getDistanceBetweenCoords3d
(
x
,
y
,
z
,
posX
,
posY
,
z
)
;
wait
(
0
)
until
not
bot
.
active
.
v
or
dist
=
9909999
then
isSprint
=
false
setGameKeyState
(
14
,
255
)
;
wait
(
200
)
isSprint
=
true
end
end
end
)
if
isSprint
then
setGameKeyState
(
16
,
255
)
end
end




Переписал на с++ без прыжка:

C++:





[CODE]
void
cameraset
(
float
X
,
float
Y
)
{
CVector mypos
;
CVector enpos
;
CVector vector
;
enpos
.
fX
=
X
;
enpos
.
fY
=
Y
;
CCamera
*
pCamera
=
GAME
->
GetCamera
(
)
;
mypos
=
*
pCamera
->
GetCam
(
pCamera
->
GetActiveCam
(
)
)
->
GetSource
(
)
;
vector
=
mypos
-
enpos
;
float
AngleX
=
atan2f
(
vector
.
fY
,
-
vector
.
fX
)
-
M_PI
/
2
;
*
(
float
*
)
0xB6F258
=
-
(
AngleX
-
M_PI
/
2
)
;
}
void
BeginToPoint
(
float
X
,
float
Y
,
float
radius
,
bool
sprint
,
bool
active
)
{
CVector
*
vect
=
PEDSELF
->
GetPosition
(
)
;
float
dist
=
sqrt
(
(
X
-
vect
->
fX
)
*
(
X
-
vect
->
fX
)
+
(
Y
-
vect
->
fY
)
*
(
Y
-
vect
->
fY
)
)
;
do
{
if
(
active
)
{
cameraset
(
X
,
Y
)
;
if
(
!
sprint
)
SF
->
getGame
(
)
->
emulateGTAKey
(
16
,
255
)
;
// Обычный бег
else
{
SF
->
getGame
(
)
->
emulateGTAKey
(
16
,
255
)
;
// Обычный бег
SF
->
getGame
(
)
->
emulateGTAKey
(
1
,
-
128
)
;
// Спринт
}
}
}
while
(
active
||
dist

frit
17.03.2021, 21:21
[QUOTE="Scar_"]

Гта виснет и все, по разному я пробовал.

Оригинал на Lua:

Lua:






function
BeginToPoint
(
x
,
y
,
z
,
radius
,
move_code
,
isSprint
,
isJumping
)
repeat
local
posX
,
posY
,
posZ
=
getCharCoordinates
(
PLAYER_PED
)
setCameraToCoord
(
x
,
y
)
;
MovePlayer
(
move_code
,
isSprint
,
isJumping
)
;
local
dist
=
getDistanceBetweenCoords3d
(
x
,
y
,
z
,
posX
,
posY
,
z
)
;
wait
(
0
)
until
not
bot
.
active
.
v
or
dist
=
9909999
then
isSprint
=
false
setGameKeyState
(
14
,
255
)
;
wait
(
200
)
isSprint
=
true
end
end
end
)
if
isSprint
then
setGameKeyState
(
16
,
255
)
end
end




Переписал на с++ без прыжка:

C++:





[CODE]
void
cameraset
(
float
X
,
float
Y
)
{
CVector mypos
;
CVector enpos
;
CVector vector
;
enpos
.
fX
=
X
;
enpos
.
fY
=
Y
;
CCamera
*
pCamera
=
GAME
->
GetCamera
(
)
;
mypos
=
*
pCamera
->
GetCam
(
pCamera
->
GetActiveCam
(
)
)
->
GetSource
(
)
;
vector
=
mypos
-
enpos
;
float
AngleX
=
atan2f
(
vector
.
fY
,
-
vector
.
fX
)
-
M_PI
/
2
;
*
(
float
*
)
0xB6F258
=
-
(
AngleX
-
M_PI
/
2
)
;
}
void
BeginToPoint
(
float
X
,
float
Y
,
float
radius
,
bool
sprint
,
bool
active
)
{
CVector
*
vect
=
PEDSELF
->
GetPosition
(
)
;
float
dist
=
sqrt
(
(
X
-
vect
->
fX
)
*
(
X
-
vect
->
fX
)
+
(
Y
-
vect
->
fY
)
*
(
Y
-
vect
->
fY
)
)
;
do
{
if
(
active
)
{
cameraset
(
X
,
Y
)
;
if
(
!
sprint
)
SF
->
getGame
(
)
->
emulateGTAKey
(
16
,
255
)
;
// Обычный бег
else
{
SF
->
getGame
(
)
->
emulateGTAKey
(
16
,
255
)
;
// Обычный бег
SF
->
getGame
(
)
->
emulateGTAKey
(
1
,
-
128
)
;
// Спринт
}
}
}
while
(
active
||
dist

EclipsedFlow
17.03.2021, 21:33
while без задержки - фриз, используй mainloop


Так я и использовал его в mainloop.

Rei
17.03.2021, 21:51
Так я и использовал его в mainloop.


в мэйнзалуп вообще не делай такие циклы

поставь проверку на active и дистанцию. если прибежал, то вырубаешь active, иначе ставишь камеру и жмешь кнопку

EclipsedFlow
17.03.2021, 22:15
в мэйнзалуп вообще не делай такие циклы

поставь проверку на active и дистанцию. если прибежал, то вырубаешь active, иначе ставишь камеру и жмешь кнопку


Я так и думал впринципе