 |
|

13.05.2018, 18:29
|
|
Участник форума
Регистрация: 06.01.2016
Сообщений: 154
С нами:
5447649
Репутация:
28
|
|
В чем тут проблема?
При нажатии клавиши "1", "2" или "3" должна эмулироватся игровая клавиша под номером "1", которая заставляет игрока бежать вперед/назад.
Писал код на CLEO - все работает безупречно, персонаж бежит.
Писал код на SF API, используя SF->getGame()->emulGTAKey() - персонаж не бежит
Писал код на SF API, используя SF->getCLEO()->callOpcode() - персонаж не бежит
Проверял, что функции SF API вызываются, выводя в чат сообщение перед и после их вызова - сообщения в чат выводились, но игрок так же не бежал.
Код CLEO:
CLEO:
Код:
while
true
wait
0
key_down
49
jf
continue
0B56:
set_game_key
1
state -
128
end
Код SF API:
C++:
Код:
void
CALLBACK
mainloop
(
)
{
static
bool
init
=
false
;
if
(
init
)
{
if
(
SF
->
getGame
(
)
->
isKeyDown
(
50
)
)
SF
->
getGame
(
)
->
emulateGTAKey
(
1
,
-
128
)
;
if
(
SF
->
getGame
(
)
->
isKeyDown
(
51
)
)
SF
->
getCLEO
(
)
->
callOpcode
(
"0B56: set_game_key 1 state -128"
)
;
return
;
}
if
(
!
init
)
{
if
(
GAME
==
nullptr
||
GAME
->
GetSystemState
(
)
!=
eSystemState
::
GS_PLAYING_GAME
||
!
SF
->
getSAMP
(
)
->
IsInitialized
(
)
)
return
;
init
=
true
;
}
}
|
|
|

15.05.2018, 17:55
|
|
Новичок
Регистрация: 01.12.2009
Сообщений: 0
С нами:
8654409
Репутация:
0
|
|
Вопрос, почему зависает при использовании рендера у Windows XP? На 7, 8, 10 всё нормально работает, а на XP - зависание.
|
|
|

15.05.2018, 19:59
|
|
Флудер
Регистрация: 18.03.2013
Сообщений: 4,080
С нами:
6921957
Репутация:
183
|
|
Потому, что ХП - уже мертвая система. Забей на её поддержку.
|
|
|

15.05.2018, 23:34
|
|
Постоянный
Регистрация: 17.02.2014
Сообщений: 611
С нами:
6438231
Репутация:
133
|
|
Есть у кого функция удаления пикапов?
|
|
|

16.05.2018, 16:55
|
|
Участник форума
Регистрация: 06.01.2016
Сообщений: 154
С нами:
5447649
Репутация:
28
|
|
Сообщение от iAmerican
Есть у кого функция удаления пикапов?
Эмулируй RPC_DestroyPickup
|
|
|

16.05.2018, 22:48
|
|
Постоянный
Регистрация: 17.02.2014
Сообщений: 611
С нами:
6438231
Репутация:
133
|
|
Сообщение от _Vine_
Эмулируй RPC_DestroyPickup
Хорошо , скинь мне эмуляцию не на SF.
|
|
|

16.05.2018, 22:54
|
|
Флудер
Регистрация: 26.10.2013
Сообщений: 4,924
С нами:
6603505
Репутация:
183
|
|
Сообщение от iAmerican
Есть у кого функция удаления пикапов?
int __thiscall stPickupPool::RemovePickup(stPickupPool *this, signed int id)
samp.dll+0xFE70
|
|
|

18.05.2018, 19:47
|
|
Новичок
Регистрация: 01.12.2009
Сообщений: 0
С нами:
8654409
Репутация:
0
|
|
Что за дичь? Происходит при запуске потока.
|
|
|

19.05.2018, 01:54
|
|
Постоянный
Регистрация: 17.02.2014
Сообщений: 611
С нами:
6438231
Репутация:
133
|
|
Сообщение от ๖ۣۣۜШурик
Что за дичь? Происходит при запуске потока.
код кривой
|
|
|

19.05.2018, 12:49
|
|
Новичок
Регистрация: 01.12.2009
Сообщений: 0
С нами:
8654409
Репутация:
0
|
|
Сообщение от iAmerican
код кривой
C++:
Код:
bool
IsPlayerOnScreen
(
int
id
)
{
bool
value
;
if
(
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
IsPlayerDefined
(
id
,
true
)
)
{
DWORD dwFunc
=
0x536BC0
;
DWORD dwThis
=
(
DWORD
)
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
id
]
->
pPlayerData
->
pSAMP_Actor
->
pGTAEntity
;
_asm
{
mov ecx
,
dwThis
call dwFunc
mov value
,
al
}
}
return
value
;
}
int
GetVehicleSpeed
(
int
id
)
{
int
speed
;
CVector vector
;
if
(
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
id
]
->
pPlayerData
->
pSAMP_Actor
->
pGTA_Ped
->
state
==
50
)
{
vector
.
fX
-=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
id
]
->
pPlayerData
->
pSAMP_Actor
->
pGTA_Ped
->
vehicle
->
speed
[
0
]
;
vector
.
fY
-=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
id
]
->
pPlayerData
->
pSAMP_Actor
->
pGTA_Ped
->
vehicle
->
speed
[
1
]
;
vector
.
fZ
-=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
id
]
->
pPlayerData
->
pSAMP_Actor
->
pGTA_Ped
->
vehicle
->
speed
[
2
]
;
speed
=
(
int
)
sqrt
(
pow
(
vector
.
fX
,
2
)
+
pow
(
vector
.
fY
,
2
)
+
pow
(
vector
.
fZ
,
2
)
)
*
125
;
}
return
speed
;
}
void
thread_radar
(
int
max
)
{
while
(
access
)
{
if
(
SF
->
getGame
(
)
->
isGTAMenuActive
(
)
)
continue
;
bool
status
=
false
;
for
(
int
id
=
0
;
id
getSAMP
(
)
->
getPlayers
(
)
->
sLocalPlayerID
==
id
)
continue
;
else
if
(
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
iIsListed
[
id
]
!=
1
)
continue
;
else
if
(
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
id
]
==
NULL
)
continue
;
else
if
(
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
id
]
->
pPlayerData
==
NULL
)
continue
;
else
if
(
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
id
]
->
pPlayerData
->
pSAMP_Actor
==
NULL
)
continue
;
else
if
(
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
id
]
->
pPlayerData
->
pSAMP_Actor
->
pGTA_Ped
->
state
!=
50
)
continue
;
else
if
(
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
id
]
->
pPlayerData
->
pSAMP_Actor
->
pGTA_Ped
->
vehicle
->
passengers
[
0
]
!=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
id
]
->
pPlayerData
->
pSAMP_Actor
->
pGTA_Ped
)
continue
;
else
if
(
IsPlayerOnScreen
(
id
)
)
{
int
speed
=
GetVehicleSpeed
(
id
)
;
if
(
speed
>
max
)
{
status
=
true
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
"• {FFA500}[Радиолокатор] {FFFFFF}%s превысил допустимую скорость [%i км/ч]"
,
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
GetPlayerName
(
id
)
,
speed
)
;
}
}
}
Sleep
(
status
?
15000
:
1000
)
;
}
}
access = true;
P.S. Этот поток иногда включается, а иногда делает ту херь
??
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|