Просмотр полной версии : SAMPFUNCS | API C++
Страницы :
1
2
3
[
4]
5
6
7
8
Ребят скажите где находятся h файлы в DirectX SDK. Мне нужен файл d3dx9.h для настройки компилятора.
Просто установи его и подключи все к проекту. В настройках проекта
А вообще, есть такая вещь, как поиск по файлам и папкам)
Gabriel__
08.01.2016, 21:14
Просто установи его и подключи все к проекту. В настройках проекта
А вообще, есть такая вещь, как поиск по файлам и папкам)
Я хочу скомпилировать в devcpp там в ручную в каталогах нужно указывать include файлы. А в поиске файлов не нашлось ((((
Woofing Giraffe
09.01.2016, 10:53
Возможно ли в режиме наблюдения активировать радар?
Возможно ли в режиме наблюдения активировать радар?
Немного не понял вопрос, но отобразить радар можно так:
*(PBYTE)0xBAA3FB = 1;
kemperrr
09.01.2016, 12:42
Разобрался кто нить с эмуляцией клавиш? Help me pls
Woofing Giraffe
09.01.2016, 15:14
Немного не понял вопрос, но отобразить радар можно так:
*(PBYTE)0xBAA3FB = 1;
Не, я имею ввиду когда сервер даёт тебе RPC_ScrTogglePlayerSpectating или например просто коннектишся к серверу то худ вырубается
Gabriel__
09.01.2016, 15:31
Как записать значение по адресу памяти игры ?
Woofing Giraffe
09.01.2016, 15:33
Как записать значение по адресу памяти игры ?
*(тип*)адрес = значение;
Gabriel__
09.01.2016, 15:36
*(тип*)адрес = значение;
не понял как приведи пример так что ли *(bool*)0x335FF = 1;
Woofing Giraffe
09.01.2016, 15:45
не понял как приведи пример так что ли *(bool*)0x335FF = 1;
Адрес чёт странный, а так да
Gabriel__
09.01.2016, 15:54
Возможно ли в режиме наблюдения активировать радар?
SF->getCLEO()->callOpcode("0581: enable_radar 1"); - зациклить или адрес памяти юзнуть.
Подскажите как использовать проверку что игрок в транспорте (как опкод 00DF в клео)
Woofing Giraffe
09.01.2016, 16:00
SF->getCLEO()->callOpcode("0581: enable_radar 1"); - зациклить или адрес памяти юзнуть.
Не-а. Крч мне нужен ноп Keep GTA Hud turned on
Как можно отправить урон с кулака?
Gabriel__
09.01.2016, 17:42
Как можно отправить урон с кулака?
Отправить через givetake damage и Raklogger в помощь.
Woofing Giraffe
09.01.2016, 18:21
Не-а. Крч мне нужен ноп Keep GTA Hud turned on
Как его вызвать? А то я что-то вообще хз
Gabriel__
09.01.2016, 18:47
Как его вызвать? А то я что-то вообще хз
Я не нашел этот ноп в собейте и в списке ( . Хотя точно помню что такой есть в собейте. Открой исходник собейта в поиске поищи что то подобное.
Woofing Giraffe
09.01.2016, 18:48
Я не нашел этот ноп в собейте и в списке ( . Хотя точно помню что такой есть в собейте. Открой исходник собейта в поиске поищи что то подобное.
В том то и дело что в исходнике не нашёл
Gabriel__
09.01.2016, 18:50
В том то и дело что в исходнике не нашёл
Попробуй в raklogger вычислить этот RPC. Можно в pawn отправлять его.
Woofing Giraffe
09.01.2016, 18:52
Попробуй в raklogger вычислить этот RPC. Можно в pawn отправлять его.
Я в идах пакетов и РПЦ копался, так и не нашёл
Gabriel__
09.01.2016, 18:56
Я в идах пакетов и РПЦ копался, так и не нашёл
У тебя есть pawno ?
Woofing Giraffe
09.01.2016, 18:56
У тебя есть pawno ?
Есть
Gabriel__
09.01.2016, 18:58
Есть
Ну тогда поищи функцию которая отключает худ или радар. И в raklogger поймай rpc
Woofing Giraffe
09.01.2016, 19:01
Ну тогда поищи функцию которая отключает худ или радар. И в raklogger поймай rpc
Через павно нельзя это вроде...
Gabriel__
09.01.2016, 19:04
Через павно нельзя это вроде...
Ну если это нельзя то и rpc такого не существует и сервер не может отключить худ и радар.
P.S Клиент наверно сам отключает худ и радар когда подключаешься и следишь.
Woofing Giraffe
09.01.2016, 19:07
Ну если это нельзя то и rpc такого не существует и сервер не может отключить худ и радар.
P.S Клиент наверно сам отключает худ и радар когда подключаешься и следишь.
Ну ёпт, в собе если это занопить то худ и радар не будет отключаться вообще
Разобрался кто нить с эмуляцией клавиш? Help me pls
Функция к сожалению не рабочая
помогите сделать такую штуку в виде плагина
PHP:
{
$CLEO
}
{
$INCLUDE
SF
}
0000
:
15
@
=
1
wait
3000
0
BE4
:
raknet setup_incoming_packet_hook @bhop
while
true
wait
0
if
15
@
==
0
then
wait
5000
15
@
=
1
end
end
:
bhop
0
BE5
:
raknet
0
@
=
get_hook_param
PARAM_BITSTREAM
0
BE5
:
raknet
1
@
=
get_hook_param
PARAM_PACKETID
if
1
@
==
PACKET_BULLET_SYNC
then
0
BF3
:
raknet
5
@
=
bit_stream
0
@ get_data_ptr
0
C0C
:
7
@
=
struct
5
@ offset
30
size
4
0
C0C
:
8
@
=
struct
5
@ offset
34
size
4
0
C0C
:
9
@
=
struct
5
@ offset
38
size
4
0
C0C
:
10
@
=
struct
5
@ offset
1
size
2
0
C0C
:
11
@
=
struct
5
@ offset
3
size
1
0
C0C
:
12
@
=
struct
5
@ offset
4
size
2
0
B2B
:
samp
13
@
=
get_player_id_by_actor_handle
$PLAYER_ACTOR
0
B20
:
samp
14
@
=
actor_handle_by_samp_player_id
10
@
if
and
15
@
==
1
11
@
==
1
7
@
==
0.0
8
@
==
0.0
9
@
==
0.5
then
0
B2B
:
samp
13
@
=
get_player_id_by_actor_handle
$PLAYER_ACTOR
0
B20
:
samp
14
@
=
actor_handle_by_samp_player_id
10
@
0
B37
:
samp
27
@
=
get_player_color
10
@
0
B36
:
samp
30
@
=
get_player_nickname
10
@
0
AF8
:
samp add_message_to_chat
" %s[%d]: Возможно Damager"
color
27
@
30
@
10
@
15
@
=
0
end
end
0
BE0
:
raknet hook_ret
true
nikita_cheater
11.01.2016, 03:00
помогите сделать такую штуку в виде плагина
PHP:
{
$CLEO
}
{
$INCLUDE
SF
}
0000
:
15
@
=
1
wait
3000
0
BE4
:
raknet setup_incoming_packet_hook @bhop
while
true
wait
0
if
15
@
==
0
then
wait
5000
15
@
=
1
end
end
:
bhop
0
BE5
:
raknet
0
@
=
get_hook_param
PARAM_BITSTREAM
0
BE5
:
raknet
1
@
=
get_hook_param
PARAM_PACKETID
if
1
@
==
PACKET_BULLET_SYNC
then
0
BF3
:
raknet
5
@
=
bit_stream
0
@ get_data_ptr
0
C0C
:
7
@
=
struct
5
@ offset
30
size
4
0
C0C
:
8
@
=
struct
5
@ offset
34
size
4
0
C0C
:
9
@
=
struct
5
@ offset
38
size
4
0
C0C
:
10
@
=
struct
5
@ offset
1
size
2
0
C0C
:
11
@
=
struct
5
@ offset
3
size
1
0
C0C
:
12
@
=
struct
5
@ offset
4
size
2
0
B2B
:
samp
13
@
=
get_player_id_by_actor_handle
$PLAYER_ACTOR
0
B20
:
samp
14
@
=
actor_handle_by_samp_player_id
10
@
if
and
15
@
==
1
11
@
==
1
7
@
==
0.0
8
@
==
0.0
9
@
==
0.5
then
0
B2B
:
samp
13
@
=
get_player_id_by_actor_handle
$PLAYER_ACTOR
0
B20
:
samp
14
@
=
actor_handle_by_samp_player_id
10
@
0
B37
:
samp
27
@
=
get_player_color
10
@
0
B36
:
samp
30
@
=
get_player_nickname
10
@
0
AF8
:
samp add_message_to_chat
" %s[%d]: Возможно Damager"
color
27
@
30
@
10
@
15
@
=
0
end
end
0
BE0
:
raknet hook_ret
true
https://www.blast.hk/wiki/tutorials:api_lesson_raknet
https://www.blast.hk/wiki/tutorials:api_lesson_raknet
как это записать в сф или собейте?
PHP:
0
B2B
:
samp
13
@
=
get_player_id_by_actor_handle
$PLAYER_ACTOR
0
B20
:
samp
14
@
=
actor_handle_by_samp_player_id
10
@
как определить, что есть что?
PHP:
0
C0C
:
7
@
=
struct
5
@ offset
30
size
4
0
C0C
:
8
@
=
struct
5
@ offset
34
size
4
0
C0C
:
9
@
=
struct
5
@ offset
38
size
4
0
C0C
:
10
@
=
struct
5
@ offset
1
size
2
0
C0C
:
11
@
=
struct
5
@ offset
3
size
1
0
C0C
:
12
@
=
struct
5
@ offset
4
size
2
uint8_t byteType
;
uint16_t sTargetID
;
float fOrigin
[
3
]
;
float fTarget
[
3
]
;
float fCenter
[
3
]
;
uint8_t byteWeaponID
;
помогите сделать такую штуку в виде плагина
PHP:
{
$CLEO
}
{
$INCLUDE
SF
}
0000
:
15
@
=
1
wait
3000
0
BE4
:
raknet setup_incoming_packet_hook @bhop
while
true
wait
0
if
15
@
==
0
then
wait
5000
15
@
=
1
end
end
:
bhop
0
BE5
:
raknet
0
@
=
get_hook_param
PARAM_BITSTREAM
0
BE5
:
raknet
1
@
=
get_hook_param
PARAM_PACKETID
if
1
@
==
PACKET_BULLET_SYNC
then
0
BF3
:
raknet
5
@
=
bit_stream
0
@ get_data_ptr
0
C0C
:
7
@
=
struct
5
@ offset
30
size
4
0
C0C
:
8
@
=
struct
5
@ offset
34
size
4
0
C0C
:
9
@
=
struct
5
@ offset
38
size
4
0
C0C
:
10
@
=
struct
5
@ offset
1
size
2
0
C0C
:
11
@
=
struct
5
@ offset
3
size
1
0
C0C
:
12
@
=
struct
5
@ offset
4
size
2
0
B2B
:
samp
13
@
=
get_player_id_by_actor_handle
$PLAYER_ACTOR
0
B20
:
samp
14
@
=
actor_handle_by_samp_player_id
10
@
if
and
15
@
==
1
11
@
==
1
7
@
==
0.0
8
@
==
0.0
9
@
==
0.5
then
0
B2B
:
samp
13
@
=
get_player_id_by_actor_handle
$PLAYER_ACTOR
0
B20
:
samp
14
@
=
actor_handle_by_samp_player_id
10
@
0
B37
:
samp
27
@
=
get_player_color
10
@
0
B36
:
samp
30
@
=
get_player_nickname
10
@
0
AF8
:
samp add_message_to_chat
" %s[%d]: Возможно Damager"
color
27
@
30
@
10
@
15
@
=
0
end
end
0
BE0
:
raknet hook_ret
true
7@-9@ это fCenter[3]
10@ это sTargetID
11@ это byteType
7@-9@ это fCenter[3]
10@ это sTargetID
11@ это byteType
как это записать в сф или собейте?
PHP:
0
B2B
:
samp
13
@
=
get_player_id_by_actor_handle
$PLAYER_ACTOR
0
B20
:
samp
14
@
=
actor_handle_by_samp_player_id
10
@
Dark_Knight
11.01.2016, 17:26
Код:
WORD id = 1;
DWORD handle = SF->getSAMP()->getPlayers()->GetActorHandleFromSAMPPlayerID(id);
id = SF->getSAMP()->getPlayers()->GetSAMPPlayerIDFromGTAHandle(handle);
как это записать в сф или собейте?
PHP:
0
B2B
:
samp
13
@
=
get_player_id_by_actor_handle
$PLAYER_ACTOR
0
B20
:
samp
14
@
=
actor_handle_by_samp_player_id
10
@
SF:
int myid=SF->getSAMP()->getPlayers()->sLocalPlayerID;
int handle=SF->getSAMP()->getPlayers()->GetActorHandleFromSAMPPlayerID(sTargetID);
Sob:
g_Players->sLocalPlayerID;
getGTAPedFromSAMPPlayerID(sTargetID);
Gabriel__
11.01.2016, 17:56
Подскажите как проверить что игрок или актер водит транспорт ?
Подскажите как проверить что игрок или актер водит транспорт ?
if (SF->getSAMP()->getPlayers()->pLocalPlayer->pSAMP_Actor->pGTA_Ped->state==ACTOR_STATE_DRIVING)
По аналогии делается и для других игроков
Как узнать или игрок в зоне прорисовки?
Как узнать или игрок в зоне прорисовки?
if (SF->getSAMP()->getPlayers()->IsPlayerDefined(id, true))
Dark_Knight
12.01.2016, 22:31
как сделать чтобы пули летели дальше и попадали в игрока
Может за тебя еще и посрать?
Может за тебя еще и посрать?
что? я просто спросил возможно ли?
Dark_Knight
12.01.2016, 23:12
что? я просто спросил возможно ли?
Сначала ты спросил как, потом уже исправил на возможно. да возможно
Сначала ты спросил как, потом уже исправил на возможно. да возможно
Извиняюсь, а вот мне нужно буллет дату хукать?
Dark_Knight
12.01.2016, 23:33
от сервера еще зависит
kemperrr
14.01.2016, 21:11
Нашел как эмулировать нажатие игровых клавиш, только вот нужно мне что бы сразу после нажатия клавиши она с эмулировалась еще раз, в mainloop сделал так
Код:
stOnFootData sync; // объявляем объект структуры stOnFootData, в которой хранятся данные.
memset(&sync, 0, sizeof(stOnFootData)); // обнуляем.
sync = SF->getSAMP()->getPlayers()->pLocalPlayer->onFootData;
sync.byteCurrentWeapon = 64;
BitStream bsActorSync;
bsActorSync.Write((BYTE)ID_PLAYER_SYNC);
bsActorSync.Write((PCHAR)&sync, sizeof(stOnFootData));
SF->getRakNet()->SendPacket(&bsActorSync);
Подскажите как сделать что бы клавиша нажималась несколько раз подряд
Можно ли увеличить дальность пули?
Dark_Knight
15.01.2016, 23:53
Тебе уже говорили, что да.
Тебе уже говорили, что да.
Я имел виду как именно, что нужно отправлять?
Dark_Knight
16.01.2016, 01:09
Я имел виду как именно, что нужно отправлять?
Думай сам уже. У тебя же есть мозги.
kemperrr
17.01.2016, 19:25
Спрошу еще раз, нашел как отправить на сервер пакет о нажатии клавиши, но беда, нажимается только один раз (код находится в mainloop), пытаясь отправить пакет о том что клавиша не нажата так же нажимается 1 раз + теряется соединение с сервером, дак вот более опытные подскажите как сделать что бы не отправлялось столько пакетов(во избежания дисконнектов) и сделать цикличное нажатие одной и той же клавиши дапустим Y ( Y - 64(0x40) , когда не нажата - 0(0x0) )
Код:
stOnFootData sync;
memset(&sync, 0, sizeof(stOnFootData));
sync = SF->getSAMP()->getPlayers()->pLocalPlayer->onFootData;
sync.byteCurrentWeapon = 64; // Y
BitStream bsActorSync;
bsActorSync.Write((BYTE)ID_PLAYER_SYNC);
bsActorSync.Write((PCHAR)&sync, sizeof(stOnFootData));
SF->getRakNet()->SendPacket(&bsActorSync);
как мышкой изменять координаты текста на экране?
ну, курсор отобразить я могу, но как управлять текст им?
Dark_Knight
18.01.2016, 20:33
Юзай std::vector и std::find для поиска или циклом фор авто пробегайся по вектору.
nikita_cheater
18.01.2016, 23:39
Спрошу еще раз, нашел как отправить на сервер пакет о нажатии клавиши, но беда, нажимается только один раз (код находится в mainloop), пытаясь отправить пакет о том что клавиша не нажата так же нажимается 1 раз + теряется соединение с сервером, дак вот более опытные подскажите как сделать что бы не отправлялось столько пакетов(во избежания дисконнектов) и сделать цикличное нажатие одной и той же клавиши дапустим Y ( Y - 64(0x40) , когда не нажата - 0(0x0) )
Код:
stOnFootData sync;
memset(&sync, 0, sizeof(stOnFootData));
sync = SF->getSAMP()->getPlayers()->pLocalPlayer->onFootData;
sync.byteCurrentWeapon = 64; // Y
BitStream bsActorSync;
bsActorSync.Write((BYTE)ID_PLAYER_SYNC);
bsActorSync.Write((PCHAR)&sync, sizeof(stOnFootData));
SF->getRakNet()->SendPacket(&bsActorSync);
byteCurrentWeapon - оружие в руке, а не нажатая клавиша
kemperrr
19.01.2016, 13:22
byteCurrentWeapon - оружие в руке, а не нажатая клавиша
RakLogger пиздеть не будет + я же говорю что он 1 раз нажимается
nikita_cheater
19.01.2016, 20:48
RakLogger пиздеть не будет + я же говорю что он 1 раз нажимается
Значит в твоем случае пиздит
kemperrr
19.01.2016, 21:48
Значит в твоем случае пиздит
Говорю еще раз - он 1 раз нажимает клавишу второй раз не хочет, а если после этой клавиши будет другая дапустим N потом Y и так поочередно то работает спокойно, но если же N надо нажать два раза то нажимается 1 раз вместо 2, 3 и так далее
Woofing Giraffe
19.01.2016, 22:18
Где ты взял что Y это 64?
Woofing Giraffe
19.01.2016, 22:56
Говорю еще раз - он 1 раз нажимает клавишу второй раз не хочет, а если после этой клавиши будет другая дапустим N потом Y и так поочередно то работает спокойно, но если же N надо нажать два раза то нажимается 1 раз вместо 2, 3 и так далее
C++:
void
EmulKey
(
int
KeyId
)
{
stOnFootData sync
;
memset
(
&
sync
,
0
,
sizeof
(
stOnFootData
)
)
;
sync
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
onFootData
;
sync
.
byteCurrentWeapon
=
KeyId
;
BitStream bsActorSync
;
bsActorSync
.
Write
(
(
BYTE
)
ID_PLAYER_SYNC
)
;
bsActorSync
.
Write
(
(
PCHAR
)
&
sync
,
sizeof
(
stOnFootData
)
)
;
SF
->
getRakNet
(
)
->
SendPacket
(
&
bsActorSync
)
;
memset
(
&
bsActorSync
,
0
,
sizeof
(
BitStream
)
)
;
sync
.
byteCurrentWeapon
=
0
;
bsActorSync
.
Write
(
(
BYTE
)
ID_PLAYER_SYNC
)
;
bsActorSync
.
Write
(
(
PCHAR
)
&
sync
,
sizeof
(
stOnFootData
)
)
;
SF
->
getRakNet
(
)
->
SendPacket
(
&
bsActorSync
)
;
}
И в мэин
C++:
[CODE]
for
(
int
i
=
0
;
i
kemperrr
20.01.2016, 10:29
[QUOTE="Woofing Giraffe"]
C++:
void
EmulKey
(
int
KeyId
)
{
stOnFootData sync
;
memset
(
&
sync
,
0
,
sizeof
(
stOnFootData
)
)
;
sync
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
onFootData
;
sync
.
byteCurrentWeapon
=
KeyId
;
BitStream bsActorSync
;
bsActorSync
.
Write
(
(
BYTE
)
ID_PLAYER_SYNC
)
;
bsActorSync
.
Write
(
(
PCHAR
)
&
sync
,
sizeof
(
stOnFootData
)
)
;
SF
->
getRakNet
(
)
->
SendPacket
(
&
bsActorSync
)
;
memset
(
&
bsActorSync
,
0
,
sizeof
(
BitStream
)
)
;
sync
.
byteCurrentWeapon
=
0
;
bsActorSync
.
Write
(
(
BYTE
)
ID_PLAYER_SYNC
)
;
bsActorSync
.
Write
(
(
PCHAR
)
&
sync
,
sizeof
(
stOnFootData
)
)
;
SF
->
getRakNet
(
)
->
SendPacket
(
&
bsActorSync
)
;
}
И в мэин
C++:
[CODE]
for
(
int
i
=
0
;
i
Dark_Knight
20.01.2016, 12:18
Зачем это ты используешь?
Код:
memset(&bsActorSync, 0, sizeof(BitStream));
sync.byteCurrentWeapon = 0;
bsActorSync.Write((BYTE)ID_PLAYER_SYNC);
bsActorSync.Write((PCHAR)&sync, sizeof(stOnFootData));
SF->getRakNet()->SendPacket(&bsActorSync);
Woofing Giraffe
20.01.2016, 12:22
Обнулить клавишу, оно без этого почему то 2 и более раз 1 и ту же клавишу не отправит
есть ли функция конвектора из 3D в 2D
itsLegend
21.01.2016, 22:12
есть ли функция конвектора из 3D в 2D
Ищи в классе SFGame: SF->getGame()
Ищи в классе SFGame: SF->getGame()
там только 3D
itsLegend
21.01.2016, 22:15
там только 3D
есть ли функция конвектора из3D в 2D
void convert3DCoordsToScreen( float fX, float fY, float fZ, float *fScreenX, float *fScreenY );
далее: void convertWindowCoordsToGame( float fWX, float fWY, float *fGX, float *fGY );
Какими способами можно осуществить написание текста рядом с головой персонажа?
И по определенным никам ...
itsLegend
27.01.2016, 03:09
Какими способами можно осуществить написание текста рядом с головой персонажа?
И по определенным никам ...
Рендером?
Рендером?
если не ошибаюсь то да, рендером
By_Surse
27.01.2016, 13:18
как в SF получить ID оружия, который сейчас находится в руке?
itsLegend
27.01.2016, 14:14
как в SF получить ID оружия, который сейчас находится в руке?
C++:
eWeaponSlot slot
=
PEDSELF
->
GetCurrentWeaponSlot
(
)
;
if
(
slot
!=
eWeaponSlot
::
WEAPONSLOT_TYPE_UNARMED
)
{
CWeapon
*
weapon
=
PEDSELF
->
GetWeapon
(
slot
)
;
}
Как можно получить свой ID?
itsLegend
27.01.2016, 15:58
SF->getSAMP()->getPlayers()->sLocalPlayerID
By_Surse
27.01.2016, 17:27
C++:
eWeaponSlot slot
=
PEDSELF
->
GetCurrentWeaponSlot
(
)
;
if
(
slot
!=
eWeaponSlot
::
WEAPONSLOT_TYPE_UNARMED
)
{
CWeapon
*
weapon
=
PEDSELF
->
GetWeapon
(
slot
)
;
}
weapon это ID?
Dark_Knight
27.01.2016, 18:03
weapon это ID?
Это класс, в нем уже можно вытащить ид.
By_Surse
28.01.2016, 11:59
как загрузить библиотеку сампа?
Woofing Giraffe
28.01.2016, 15:34
как загрузить библиотеку сампа?
Она по дефолту загружена
By_Surse
28.01.2016, 16:39
Она по дефолту загружена
Я имел ввиду чем можно заменить этот опкод? 0AA2: 30@ = load_library "samp.dll"
Woofing Giraffe
28.01.2016, 16:41
Я имел ввиду чем можно заменить этот опкод? 0AA2: 30@ = load_library "samp.dll"
А что тебе именно надо? Какая функция?
itsLegend
28.01.2016, 20:47
SF->getSAMP()->getSAMPAddr()
Спрошу еще раз, может знает кто как над своим персонажем в SAMP вывести 3D текст который будет обновлять позицию если изменяются координаты игрока?
itsLegend
29.01.2016, 00:39
Спрошу еще раз, может знает кто как над своим персонажем в SAMP вывести 3D текст который будет обновлять позицию если изменяются координаты игрока?
Рисуешь рендером.
Получаешь позицию своего педа, рисуешь с помощью созданного шрифта(stFontInfo*). Всё.
Рисуешь рендером.
Получаешь позицию своего педа, рисуешь с помощью созданного шрифта(stFontInfo*). Всё.
Вроде как получил координаты, определил шрифт. Все равно работает
Код:
C++:
bool
CALLBACK
Present
(
CONST RECT
*
pSourceRect
,
CONST RECT
*
pDestRect
,
HWND hDestWindowOverride
,
CONST RGNDATA
*
pDirtyRegion
)
{
if
(
SUCCEEDED
(
SF
->
getRender
(
)
->
BeginRender
(
)
)
)
// если девайс готов к рисованию
{
float
fPos
[
]
=
{
PEDSELF
->
GetPosition
(
)
->
fX
,
PEDSELF
->
GetPosition
(
)
->
fY
,
PEDSELF
->
GetPosition
(
)
->
fZ
,
}
;
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pText3D
->
Create3DText
(
100
,
"3D text"
,
D3DCOLOR_ARGB
(
0xFF
,
0xFF
,
0xFF
,
00
)
,
fPos
,
100.0f
,
true
,
-
1
,
-
1
)
;
SF
->
getRender
(
)
->
EndRender
(
)
;
// завершаем рисование
}
;
return
true
;
// возвращаем положительный результат
}
;
И вот вывод:
C++:
pFont
=
SF
->
getRender
(
)
->
CreateNewFont
(
"Tahoma"
,
11
,
FCR_BORDER
)
;
SF
->
getRender
(
)
->
registerD3DCallback
(
eDirect3DDeviceMethods
::
D3DMETHOD_PRESENT
,
HUD
)
;
Строку stFontInfo *pFont; прописал после инклудов
itsLegend
29.01.2016, 01:19
Божечки.
Стирай это всё.
Создай 3д текст.
В цикле просто SF->getSAMP()->getInfo()->pPools->pText3D->textLabel[100]->fPosition[0] = ...
Dark_Knight
29.01.2016, 01:22
В мейнлупе, а не коллбеке рендера.
Божечки.
Стирай это всё.
Создай 3д текст.
В цикле просто SF->getSAMP()->getInfo()->pPools->pText3D->textLabel[100]->fPosition[0] = ...
что-то не так ...
C++:
char
textLabel
[
100
]
=
"Yeah!"
;
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pText3D
->
textLabel
[
100
]
->
fPosition
[
0
]
=
PEDSELF
->
GetPosition
(
)
->
fX
;
просто не пережевывает...
Dark_Knight
29.01.2016, 01:47
Всмысле??
В мейнлупе, а не коллбеке рендера.
на начало (SF) все время ругается куда не поставь. Вот что я забыл поставить?
C++:
char
textLabel
[
]
=
"Yeah!"
;
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pText3D
->
textLabel
[
100
]
->
fPosition
[
0
]
=
PEDSELF
->
GetPosition
(
)
->
fX
;
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pText3D
->
textLabel
[
100
]
->
fPosition
[
1
]
=
PEDSELF
->
GetPosition
(
)
->
fY
;
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pText3D
->
textLabel
[
100
]
->
fPosition
[
2
]
=
PEDSELF
->
GetPosition
(
)
->
fZ
;
Не могу сообразить..
Dark_Knight
29.01.2016, 02:08
Проверяешь существует ли определенный 3д текст. Если нет - создаешь, иначе редактируешь.
Проверяешь существует ли определенный 3д текст. Если нет - создаешь, иначе редактируешь.
попробую проверку завтра написать
Проверяешь существует ли определенный 3д текст. Если нет - создаешь, иначе редактируешь.
не подскажешь какого типа должны быть строки в mainloop
C++:
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pText3D
->
textLabel
[
100
]
->
fPosition
[
0
]
=
PEDSELF
->
GetPosition
(
)
->
fX
;
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pText3D
->
textLabel
[
100
]
->
fPosition
[
1
]
=
PEDSELF
->
GetPosition
(
)
->
fY
;
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pText3D
->
textLabel
[
100
]
->
fPosition
[
2
]
=
PEDSELF
->
GetPosition
(
)
->
fZ
;
By_Surse
29.01.2016, 09:52
C++:
eWeaponSlot slot
=
PEDSELF
->
GetCurrentWeaponSlot
(
)
;
if
(
slot
!=
eWeaponSlot
::
WEAPONSLOT_TYPE_UNARMED
)
{
CWeapon
*
weapon
=
PEDSELF
->
GetWeapon
(
slot
)
;
}
Это класс, в нем уже можно вытащить ид.
как?
как?
вообще вроде как я вот таким способом доставал ID:
C++:
int
WeaponID
=
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pLocalPlayer
->
byteCurrentWeapon
;
By_Surse
29.01.2016, 12:38
как проверить игрок видим или нет?
Dark_Knight
29.01.2016, 14:41
IsPlayerDefined ищи
IsPlayerDefined ищи
какого типа должны быть эти строки?
C++:
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pText3D
->
textLabel
[
100
]
->
fPosition
[
0
]
=
PEDSELF
->
GetPosition
(
)
->
fX
;
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pText3D
->
textLabel
[
100
]
->
fPosition
[
1
]
=
PEDSELF
->
GetPosition
(
)
->
fY
;
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pText3D
->
textLabel
[
100
]
->
fPosition
[
2
]
=
PEDSELF
->
GetPosition
(
)
->
fZ
;
Dark_Knight
29.01.2016, 15:54
Тебе компилятор говорит, что за ошибка. Бери и разберись.
By_Surse
30.01.2016, 15:42
как определить находится игрок в зоне стрима или нет?
Dark_Knight
30.01.2016, 15:53
IsPlayerDefined ищи
By_Surse
30.01.2016, 15:58
Код:
float ppos1 = pPlayer->pPlayerData->fOnFootPos[0];
float ppos2 = pPlayer->pPlayerData->fOnFootPos[1];
float ppos3 = pPlayer->pPlayerData->fOnFootPos[2];
if(ppos1 == 0.0,ppos2 == 0.0,ppos3 == 0.0)
{
SF->Log("Игрок вне зоны стрима" );
return;
}
Так можно?
By_Surse
30.01.2016, 16:10
streamed 0 или 1?
Woofing Giraffe
30.01.2016, 16:11
streamed 0 или 1?
0 - в зоне стрима, 1 - проверка есть ли такой на сервере
Woofing Giraffe
30.01.2016, 16:23
Ой бля, наоборот
Dark_Knight
30.01.2016, 17:14
isPlayerDefined проверет игрока в зоне стрима, если второй параметр истина. Если же ложь, то на сервере игрок.
kemperrr
04.02.2016, 12:44
Как отправить пакет на сервер только 1 раз в mainloop, но при этом если нужно еще он отправится опять 1 раз, например если на проверке текста из чата из определенного текста отправляется пакет, и если 2 раза сразу этот текст в чате пакет отправится 2 раза, надеюсь понятно изяснисля
Woofing Giraffe
04.02.2016, 12:59
Как отправить пакет на сервер только 1 раз в mainloop, но при этом если нужно еще он отправится опять 1 раз, например если на проверке текста из чата из определенного текста отправляется пакет, и если 2 раза сразу этот текст в чате пакет отправится 2 раза, надеюсь понятно изяснисля
Не понял
kemperrr
04.02.2016, 18:10
Не понял
Ну дапустим у меня проверка на текст "Привет", когда в чате появляется это слово отправляется пакет 1 раз ( в калбеке mainloop ), что бы не флудил крч, и если два раза подряд отправят слово "Привет" то пакет отправится только 2 раза, опять же чтобы не флудил
Dark_Knight
04.02.2016, 18:40
Блять, выучи граматику сначала, а так делай через перехват RPC ClientMessage
kemperrr
04.02.2016, 19:52
Блять, выучи граматику сначала, а так делай через перехват RPC ClientMessage
Ты меня не понял, я уже сделал проверку на слово "привет", и отправляю пакет RPC ID_PLAYER_SYNC, так как он в mainloop, он флудит, мне же нужно что бы он отправил 1 раз на каждое слово "привет", 1 "привет" - 1 отправка пакета, 3 "привет" - 3 пакета
Ты меня не понял, я уже сделал проверку на слово "привет", и отправляю пакет RPC ID_PLAYER_SYNC, так как он в mainloop, он флудит, мне же нужно что бы он отправил 1 раз на каждое слово "привет", 1 "привет" - 1 отправка пакета, 3 "привет" - 3 пакета
Зачем тебе отправка в mainloop, если есть понятие функций. В общем, нужен код.
Dark_Knight
04.02.2016, 21:02
Ты меня не понял, я уже сделал проверку на слово "привет", и отправляю пакет RPC ID_PLAYER_SYNC, так как он в mainloop, он флудит, мне же нужно что бы он отправил 1 раз на каждое слово "привет", 1 "привет" - 1 отправка пакета, 3 "привет" - 3 пакета
Это ты меня не понял. Засунь свой код в меинлупе в жопу, проверни его там 3 раза и "оставь его там до конца жизни". Делай через хук входящих РПЦ.
kemperrr
04.02.2016, 21:43
Это ты меня не понял. Засунь свой код в меинлупе в жопу, проверни его там 3 раза и "оставь его там до конца жизни". Делай через хук входящих РПЦ.
Вот я олень, сябки
kemperrr
04.02.2016, 22:20
Где мне найти структуру RPC_ScrTextDrawSetString ?
By_Surse
06.02.2016, 14:37
Как получить ID игрока на которого я целюсь?
Как работать с памятью игры? Как например считать и записать значение по адресу 0xC81320?
Как работать с .ini файлами? Небольшой примерчик бы.
Как получить ID игрока на которого я целюсь?
SF->getSAMP()->getPlayers()->pLocalPlayer->sTargetPlayerID;
Либо через память
Dark_Knight
06.02.2016, 23:17
Как работать с памятью игры? Как например считать и записать значение по адресу 0xC81320?
Как работать с .ini файлами? Небольшой примерчик бы.
С ини могу дать класс, хотя лучше буст юзать(без опыта в буст и не суйся). На счет чтения с памяти гдето в темке от меня пример был.
С ини могу дать класс, хотя лучше буст юзать(без опыта в буст и не суйся). На счет чтения с памяти гдето в темке от меня пример был.
Мне настройки нужно считать с .ini. Если не сложно, дай класс, сам мб что-то попробую.
Dark_Knight
06.02.2016, 23:32
Мне настройки нужно считать с .ini. Если не сложно, дай класс, сам мб что-то попробую.
http://pastebin.com/aXjfnqgQ (https://www.blast.hk/redirect/aHR0cDovL3Bhc3RlYmluLmNvbS9hWGpmbnFnUQ)
1. Как получить хп и броню моего игрока? (Решено: PEDSELF->GetHealth and PEDSELF->GetArmor)
2. Когда регистрирую каллбэк, квадрат рисуется постоянно. Как остановить рендер? На примере ниже, пожалуйста.
C++:
bool
CALLBACK HealthBar
(
CONST RECT
*
pSourceRect
,
CONST RECT
*
pDestRect
,
HWND hDestWindowOverride
,
CONST RGNDATA
*
pDirtyRegion
)
{
if
(
SUCCEEDED
(
SF
->
getRender
(
)
->
BeginRender
(
)
)
)
{
SF
->
getRender
(
)
->
DrawBox
(
500
,
500
,
25
,
25
,
D3DCOLOR_ARGB
(
255
,
85
,
170
,
85
)
)
;
SF
->
getRender
(
)
->
EndRender
(
)
;
}
return
true
;
}
void
CALLBACK
mainloop
(
)
{
static
bool
init
=
false
;
if
(
!
init
)
{
if
(
GAME
==
nullptr
)
return
;
if
(
GAME
->
GetSystemState
(
)
!=
eSystemState
::
GS_PLAYING_GAME
)
return
;
if
(
!
SF
->
getSAMP
(
)
->
IsInitialized
(
)
)
return
;
SF
->
getRender
(
)
->
registerD3DCallback
(
eDirect3DDeviceMethods
::
D3DMETHOD_PRESENT
,
HealthBar
)
;
init
=
true
;
}
int
&
ChatMode
=
SF
->
getSAMP
(
)
->
getChat
(
)
->
iChatWindowMode
;
if
(
ChatMode
==
0
)
;
// Останавливаем рендер.
SF
->
getRender
(
)
->
SetRenderState
(
?
?
?
)
;
else
// Продолжаем рендер.
SF
->
getRender
(
)
->
SetRenderState
(
?
?
?
)
;
}
Dark_Knight
07.02.2016, 00:42
if(SUCCEEDED(SF->getRender()->BeginRender()) && boolVar)
{
SF->getRender()->DrawBox(500, 500, 25, 25, D3DCOLOR_ARGB(255, 85, 170, 85));
SF->getRender()->EndRender();
}
Dark_Knight
07.02.2016, 00:43
Если булвар тру, то рисует и иначе не рисует. Меняешь её с меинлупа.
Если булвар тру, то рисует и иначе не рисует. Меняешь её с меинлупа.
Понял, спасибо. Поставил бы реп+, но сук не могу((
Dark_Knight
07.02.2016, 00:50
Понял, спасибо. Поставил бы реп+, но сук не могу((
Это на СМе так. Такого тут нет. Мы за ней не гонимся. Мы и так лучшие.
С GetPrivateProfileInt разобрался, а вот как считать с .ini файла float - нет. Что в запишется в переменную a, а что будет в переменной fRadarBarX?
C++:
char
fRadarBarX
[
15
]
;
int
a
=
GetPrivateProfileString
(
"Main"
,
"fRadarBar.X"
,
0
,
fRadarBarX
,
sizeof
(
fRadarBarX
)
,
"sampfuncs\\Head_Up_Display\\Head_Up_Display.ini"
)
;
Dark_Knight
07.02.2016, 02:45
С GetPrivateProfileInt разобрался, а вот как считать с .ini файла float - нет. Что в запишется в переменную a, а что будет в переменной fRadarBarX?
C++:
char
fRadarBarX
[
15
]
;
int
a
=
GetPrivateProfileString
(
"Main"
,
"fRadarBar.X"
,
0
,
fRadarBarX
,
sizeof
(
fRadarBarX
)
,
"sampfuncs\\Head_Up_Display\\Head_Up_Display.ini"
)
;
http://pastebin.com/kq3usPGu (https://www.blast.hk/redirect/aHR0cDovL3Bhc3RlYmluLmNvbS9rcTN1c1BHdQ)
Dark_Knight
07.02.2016, 16:09
А обязательно функцию размещать выше mainloop?
Как удобно. Но лучше их разгрузить и изать их.
Как использовать эту функцию? Так компилятор ругается.
C++:
int
a
[
2
]
=
SF
->
getGame
(
)
->
convertGameCoordsToWindow
(
fRadarBarX
,
fRadarBarY
)
;
itsLegend
07.02.2016, 17:58
int a[2];
(..., &a[0], &a[1]);
Тольк по моему там не int, а float
int a[2];
(..., &a[0], &a[1]);
Тольк по моему там не int, а float
Да, там float, но почему float, если это экранные координаты, они вроде идут в int? Но скрипт работает, спасибо!
Здравствуйте.
1.Ваш вопрос :Как можно включить и выключить Ноп 'SendClientMessage',через Asi?
И как сделать запрос,о открытия северного диалога и нажатие на определённую кнопку?
И если вас не затруднит,скиньте пример код.
Woofing Giraffe
07.02.2016, 21:59
Здравствуйте.
1.Ваш вопрос :Как можно включить и выключить Ноп 'SendClientMessage',через Asi?
И как сделать запрос,о открытия северного диалога и нажатие на определённую кнопку?
И если вас не затруднит,скиньте пример код.
Запрос об открытии серверного диалога ты никак не сделаешь. Можно только создать диалог такой же как на сервере, либо, если он например вызывается при поднятии пикапа попробовать отправить фейк данные о положении игрока на сервере. На серверах с хорошим античитом такое не прокатит
Как это будет выглядеть в C++? Особенно интересует первая строка.
Cleo:
CLEO:
0AC6:
0@
= label
@font_size
offset
0A8C:
write_memory
0x718D14
size
4
value
0@
virtual_protect
1
0A8C:
write_memory
0x858A10
size
4
value
32.0
virtual_protect
1
0A8C:
write_memory
0x866B70
size
4
value
53.0
virtual_protect
1
0A8C:
write_memory
0x866B78
size
4
value
76.0
virtual_protect
1
0A8C:
write_memory
0x866B74
size
4
value
49.0
virtual_protect
1
:font_size
hex
00
00
20
42
end
C++:
C++:
float
some
=
?
?
*
(
float
*
)
0x718D14
=
some
*
(
float
*
)
0x858A10
=
32.0
*
(
float
*
)
0x866B70
=
53.0
*
(
float
*
)
0x866B78
=
76.0
*
(
float
*
)
0x866B74
=
49.0
Dark_Knight
08.02.2016, 19:08
Так же как и все остальные. В :font_size у тебя храниться цифровое значение во флоате. Узнай его и записывай его указатель.
By_Surse
08.02.2016, 19:31
0A8C: write_memory Ad size 4 value 0x5051FF15 virtual_protect 1
Ad - адрес
как это будет в SF? (size 4)
0A8C: write_memory Ad size 4 value 0x5051FF15 virtual_protect 1
Ad - адрес
как это будет в SF? (size 4)
Пример выше, тоже самое, только адрес записываешь туда, ну и тип 0x5051FF15 соответствующий
Как это будет выглядеть в C++? Особенно интересует первая строка.
Cleo:
CLEO:
0AC6:
0@
= label
@font_size
offset
0A8C:
write_memory
0x718D14
size
4
value
0@
virtual_protect
1
0A8C:
write_memory
0x858A10
size
4
value
32.0
virtual_protect
1
0A8C:
write_memory
0x866B70
size
4
value
53.0
virtual_protect
1
0A8C:
write_memory
0x866B78
size
4
value
76.0
virtual_protect
1
0A8C:
write_memory
0x866B74
size
4
value
49.0
virtual_protect
1
:font_size
hex
00
00
20
42
end
C++:
C++:
float
some
=
?
?
*
(
float
*
)
0x718D14
=
some
*
(
float
*
)
0x858A10
=
32.0
*
(
float
*
)
0x866B70
=
53.0
*
(
float
*
)
0x866B78
=
76.0
*
(
float
*
)
0x866B74
=
49.0
C++:
DWORD some
=
0x00002042
*
(
DWORD
*
)
0x718D14
=
some
*
(
float
*
)
0x858A10
=
32.0
*
(
float
*
)
0x866B70
=
53.0
*
(
float
*
)
0x866B78
=
76.0
*
(
float
*
)
0x866B74
=
49.0
By_Surse
08.02.2016, 20:20
Пример выше, тоже самое, только адрес записываешь туда, ну и тип 0x5051FF15 соответствующий
Size 4 это какой тип данных?
Size 4 это какой тип данных?
float.
float.
Не обязательно, любой тип данных на 4 байта
Size 4 это какой тип данных?
Скорее всего будет DWORD
C++:
DWORD some
=
0x00002042
*
(
DWORD
*
)
0x718D14
=
some
*
(
float
*
)
0x858A10
=
32.0
*
(
float
*
)
0x866B70
=
53.0
*
(
float
*
)
0x866B78
=
76.0
*
(
float
*
)
0x866B74
=
49.0
Не увидел твой ответ. Крашит :(
Не увидел твой ответ. Крашит :(
ну без переменной some на прямуб подставь значение. К тому же, у тебя в клео коде используется virtual_protect 1, а в C++ коде не юзаешь
C++:
DWORD VP
=
0
;
VirtualProtect
(
(
void
*
)
Адрес
,
размер_для_тебя_4_байта
,
0x01
,
&
VP
)
;
//запись в память
VirtualProtect
(
(
void
*
)
Адрес
,
размер
,
VP
,
NULL
)
;
itsLegend
08.02.2016, 21:19
C++:
DWORD some
=
0x00002042
*
(
DWORD
*
)
0x718D14
=
some
*
(
float
*
)
0x858A10
=
32.0
*
(
float
*
)
0x866B70
=
53.0
*
(
float
*
)
0x866B78
=
76.0
*
(
float
*
)
0x866B74
=
49.0
Там, по моему, ещё указатель указывается, а не значение.
Там, по моему, ещё указатель указывается, а не значение.
Да, точно. 0ac6 указатель отдает.
С Vitual Protect крашит еще при загрузке. В остальных случаях текстдравов нет (адрес отвечает за размер текстдравов(?)).
Пробовал так:
C++:
DWORD some
=
0x00002042
;
*
(
PDWORD
*
)
0x718D14
=
&
some
;
И так:
Код:
DWORD some = 0x42200000; // 40.0 = 0x42200000 ?
*(PDWORD*)0x718D14 = &some;
И даже так:
Код:
float some = 40.0;
*(PFLOAT*)0x718D14 = &some;
Вот код Легенд'а: https://www.blast.hk/threads/34/page-153#post-81158
code=cleo]{$CLEO}
{$INCLUDE SF}
0001: wait 0 ms
0662: "by legend2360"
0662: "BlastHack - cheating is art"
0AC6: 0@ = label @font_size offset
0A8C: write_memory 0x0718D14 size 4 value 0@ virtual_protect 1 // записываем новый адрес памяти откуда будет читаться значение
// (gta_sa.exe+318D12 - D8 0D 108A8500 - fmul dword ptr [gta_sa.exe+458A10] | gta_sa.exe+458A10 заменяем на адрес "лейбла")
0A8C: write_memory 0x0858A10 size 4 value 100.0 virtual_protect 1 // Меняем позицию радара
while true
wait 0
end
:font_size // standart
hex
00 00 20 42 // 40.0
end[/code]
[
С Vitual Protect крашит еще при загрузке. В остальных случаях текстдравов нет (адрес отвечает за размер текстдравов(?)).
Пробовал так:
C++:
DWORD some
=
0x00002042
;
*
(
PDWORD
*
)
0x718D14
=
&
some
;
И так:
Код:
DWORD some = 0x42200000; // 40.0 = 0x42200000 ?
*(PDWORD*)0x718D14 = &some;
И даже так:
Код:
float some = 40.0;
*(PFLOAT*)0x718D14 = &some;
Вот код Легенд'а: https://www.blast.hk/threads/34/page-153#post-81158
CLEO:
{$CLEO}
{$INCLUDE SF}
0001:
wait
0
ms
0662:
"by legend2360"
0662:
"BlastHack - cheating is art"
0AC6:
0@
= label
@font_size
offset
0A8C:
write_memory
0x0718D14
size
4
value
0@
virtual_protect
1
// записываем новый адрес памяти откуда будет читаться значение
// (gta_sa.exe+318D12 - D8 0D 108A8500 - fmul dword ptr [gta_sa.exe+458A10] | gta_sa.exe+458A10 заменяем на адрес "лейбла")
0A8C:
write_memory
0x0858A10
size
4
value
100.0
virtual_protect
1
// Меняем позицию радара
while
true
wait
0
end
:font_size
// standart
hex
00
00
20
42
// 40.0
end
По нажатию на нумпад 1 изменяет позиию радара на 100.0
*Внимание на объявление RadarPos.
Код:
#include
#include
#include
#include "SAMPFUNCS_API.h"
#include "game_api\game_api.h"
SAMPFUNCS *SF = new SAMPFUNCS();
float RadarPos = 40.0;
void CALLBACK mainloop()
{
static bool init = false;
if (!init)
{
if (GAME == nullptr)
return;
if (GAME->GetSystemState() != eSystemState::GS_PLAYING_GAME)
return;
if (!SF->getSAMP()->IsInitialized())
return;
init = true;
}
if (SF->getGame()->isKeyPressed(0x61))
{
*(DWORD*)(0x0718D14) = (DWORD)&RadarPos;
*(float*)(0x0858A10) = 100.0;
}
}
BOOL APIENTRY DllMain(HMODULE hModule, DWORD dwReasonForCall, LPVOID lpReserved)
{
switch (dwReasonForCall)
{
case DLL_PROCESS_ATTACH:
SF->initPlugin(mainloop, hModule);
break;
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
itsLegend
08.02.2016, 23:34
С Vitual Protect крашит еще при загрузке. В остальных случаях текстдравов нет (адрес отвечает за размер текстдравов(?)).
Попробуй статическую переменную.
По нажатию на нумпад 1 изменяет позиию радара на 100.0
*Внимание на объявление RadarPos.
Код:
#include
#include
#include
#include "SAMPFUNCS_API.h"
#include "game_api\game_api.h"
SAMPFUNCS *SF = new SAMPFUNCS();
float RadarPos = 40.0;
void CALLBACK mainloop()
{
static bool init = false;
if (!init)
{
if (GAME == nullptr)
return;
if (GAME->GetSystemState() != eSystemState::GS_PLAYING_GAME)
return;
if (!SF->getSAMP()->IsInitialized())
return;
init = true;
}
if (SF->getGame()->isKeyPressed(0x61))
{
*(DWORD*)(0x0718D14) = (DWORD)&RadarPos;
*(float*)(0x0858A10) = 100.0;
}
}
BOOL APIENTRY DllMain(HMODULE hModule, DWORD dwReasonForCall, LPVOID lpReserved)
{
switch (dwReasonForCall)
{
case DLL_PROCESS_ATTACH:
SF->initPlugin(mainloop, hModule);
break;
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
Работает. Спасибо! :)
By_Surse
10.02.2016, 12:32
Как проверить выстрелил игрок или нет
Dark_Knight
10.02.2016, 12:41
Какой именно?
By_Surse
10.02.2016, 12:44
Мой
Dark_Knight
10.02.2016, 12:47
Можешь через буллет синхру сделать.
Таймер возможно сделать? Не 0001: wait 5000, а именно таймер.
Таймер возможно сделать? Не 0001: wait 5000, а именно таймер.
создай новый поток и выполняй код оттуда, тогда сможешь юзать Sleep(задержка); без геймфриза, по моему удобнее.
MISTER_GONWIK
12.02.2016, 02:28
Таймер возможно сделать? Не 0001: wait 5000, а именно таймер.
создай новый поток и выполняй код оттуда, тогда сможешь юзать Sleep(задержка); без геймфриза, по моему удобнее.
GetTickCount же
Чет не понял ничего(
я тож;(
я тож;(
Мне нужен таймер, который будет работать как таймеры в SF. Можешь подробнее рассказать о создании нового потока?
Dark_Knight
12.02.2016, 18:13
Таймер тебе на новом потоке на*** не нужен. Делай через GetTicketCount()
Мне нужен таймер, который будет работать как таймеры в SF. Можешь подробнее рассказать о создании нового потока?
это уже матчасть С++
Как нанести удар с кулака на расстояние?
Как нанести удар с кулака на расстояние?
шлёшь пакет онфут синхры с фейк позицией прямо перед челом, и ставишь анимку и флаг удара кулаком.
By_Surse
13.02.2016, 12:49
как вызвать стандартный курсор Windows?
как вызвать стандартный курсор Windows?
SetCursor(LoadCursor(NULL, CursorName));
CursorName - можешь посмотреть по 2ой ссылке
https://msdn.microsoft.com/ru-ru/library/windows/desktop/ms648393(v=vs.85).aspx (https://www.blast.hk/redirect/aHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vcnUtcnUvbGlicm FyeS93aW5kb3dzL2Rlc2t0b3AvbXM2NDgzOTModj12cy44NSku YXNweA)
https://msdn.microsoft.com/ru-ru/library/windows/desktop/ms648391(v=vs.85).aspx (https://www.blast.hk/redirect/aHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vcnUtcnUvbGlicm FyeS93aW5kb3dzL2Rlc2t0b3AvbXM2NDgzOTEodj12cy44NSku YXNweA)
как сделать задержку на 1-2 секунды?
itsLegend
13.02.2016, 18:26
C++:
Sleep
(
)
;
C++:
DWORD dwTickStart
=
GetTickCount
(
)
;
// ...
if
(
GetTickCount
(
)
-
dwTickStart
>
2000
)
{
// action
dwTickStart
=
GetTickCount
(
)
;
}
Может кто подсказать в чем проблема? При запуске этого коллбека просто зависает
C++:
if
(
!
SF
->
getSAMP
(
)
)
return
;
while
(
SF
->
getSAMP
(
)
->
getInfo
(
)
->
iGameState
!=
GAMESTATE_CONNECTED
)
;
{
if
(
SF
->
getSAMP
(
)
->
getInfo
(
)
->
iGameState
!=
GAMESTATE_WAIT_CONNECT
)
{
SF
->
getSAMP
(
)
->
disconnect
(
100
)
;
SF
->
getSAMP
(
)
->
getInfo
(
)
->
RestartGame
(
)
;
SF
->
getSAMP
(
)
->
getInfo
(
)
->
iGameState
=
GAMESTATE_WAIT_CONNECT
;
Sleep
(
800
)
;
}
}
Dark_Knight
13.02.2016, 23:12
Конечно. Ты же слип юзаешь.
Конечно. Ты же слип юзаешь.
даже без него зависает
1. Как создавать текстдравы?
2. Есть ли в SFAPI эквивалент опкоду 0AA5: call .. num_params .. pop ?
3. Как получить server ptr в SFAPI? Структуру саму нашёл, а как её правильно редактировать?
By_Surse
14.02.2016, 16:42
Как создавать текстдравы? Класса не нашел чет.
https://www.blast.hk/wiki/tutorials:api_lesson_render
https://www.blast.hk/wiki/tutorials:api_lesson_render
Где там описывается создание текстдрава?
kemperrr
14.02.2016, 22:14
Где там описывается создание текстдрава?
Сам TextDraw наврядли создашь, юзай рендер SF
Сам TextDraw наврядли создашь, юзай рендер SF
Рендер SF это не совсем то, что нужно в моей ситуации.
Gabriel__
15.02.2016, 17:09
Как создаются такие диалоги ?
http://s017.radikal.ru/i425/1602/3d/81e928938440.jpg
DarkP1xel
15.02.2016, 17:10
http://anttweakbar.sourceforge.net/doc/ (https://www.blast.hk/redirect/aHR0cDovL2FudHR3ZWFrYmFyLnNvdXJjZWZvcmdlLm5ldC9kb2 Mv)
https://www.blast.hk/threads/10008/
Так шо, никто не знает как создать свой Текстдрав?
Как проверить всех игроков в радиусе прорисовки?
Как проверить всех игроков в радиусе прорисовки?
что именно у них ты хочешь проверить? Или тебе просто нужно получить кол-во всех актёров в своем стриме.
что именно у них ты хочешь проверить? Или тебе просто нужно получить кол-во всех актёров в своем стриме.
Смотри, мне нужно найти всех игроков в радиусе прорисовки и присвоить им над головой определенный текст, как подобное осуществить?
Или хотя бы просто проверить всех игроков
Или хотя бы просто проверить всех игроков
циклом пройдись и в его теле чекай у каждого игрока что надо.
циклом пройдись и в его теле чекай у каждого игрока что надо.
Можно пример кода на SF API, я в нем просто не очень шарю
Можно пример кода на SF API, я в нем просто не очень шарю
Ну вот пример как циклом доставать инфу с игроков в стриме.
C++:
for
(
unsigned
int
it
=
0
;
it
getSAMP
(
)
->
getPlayers
(
)
->
iIsListed
[
it
]
)
continue
;
if
(
!
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
IsPlayerDefined
(
it
,
true
)
)
continue
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
148
,
112
,
255
)
,
"ID игрока: %d | Уровень: %d"
,
it
,
SF
->
getSAMP
(
)
->
getPlayers
(
)
->
pRemotePlayer
[
it
]
->
iScore
)
;
}
Есть функция преобразования A, R, G, B в ARGB? Нашёл только ARGB в A, R, G, B, может плохо искал?
Есть функция преобразования A, R, G, B в ARGB? Нашёл только ARGB в A, R, G, B, может плохо искал?
плохо искал
Есть ли еще какой-то способ редактировать текст текстдрава, кроме как пересоздавать его с нужным текстом? Боюсь, что это не совсем правильно, так как пересоздавать нужно в бесконечном цикле. Пытался еще менять как-то через структуру, но компилятор ругается "expression must be modified lvalue".
C++:
void
_TextDrawMoney
(
)
{
char
str
[
128
]
;
sprintf
(
str
,
"$%i"
,
GAME
->
GetPlayerInfo
(
)
->
GetPlayerMoney
(
)
)
;
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pTextdraw
->
Delete
(
100
)
;
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pTextdraw
->
Create
(
100
,
&
pTextDrawMoney
,
str
)
;
/*
stTextdraw * TD;
TD = SF->getSAMP()->getInfo()->pPools->pTextdraw->GetTextdraw(100);
TD->szString = "Some string?";
SF->getSAMP()->getInfo()->pPools->pTextdraw->textdraw = TD;
*/
return
;
}
Dark_Knight
19.02.2016, 20:18
Получаешь указатель на текстдрав и редактируешь его.
Получаешь указатель на текстдрав и редактируешь его.
Что-то не так делаю. Не работает код.
CLEO:
SF->getSAMP()->getInfo()->pPools->pTextdraw->Create(
100
, &pTextDrawMoney,
"test"
);
// создаем текстдрав
stTextdraw *TX = SF->getSAMP()->getInfo()->pPools->pTextdraw->GetTextdraw(
100
);
// получаем указатель на его структуру
*TX->szString =
"$4343"
;
// заменяем текущее значение на новое
//*TX->szText = "$4343" // в этом случае текст меняется, но вместо текста символы
Как развернуть себя через матрицу?
Что-то не так делаю. Не работает код.
CLEO:
SF->getSAMP()->getInfo()->pPools->pTextdraw->Create(
100
, &pTextDrawMoney,
"test"
);
// создаем текстдрав
stTextdraw *TX = SF->getSAMP()->getInfo()->pPools->pTextdraw->GetTextdraw(
100
);
// получаем указатель на его структуру
*TX->szString =
"$4343"
;
// заменяем текущее значение на новое
//*TX->szText = "$4343" // в этом случае текст меняется, но вместо текста символы
strcpy
Woofing Giraffe
21.02.2016, 14:42
Как поменять цвет ника игрока?
Woofing Giraffe
21.02.2016, 17:48
C++:
void
CALLBACK
cmd
(
std
::
string param
)
{
int
id
;
DWORD Color
;
if
(
sscanf
(
param
.
c_str
(
)
,
"%d %x"
,
&
id
,
&
color
)
)
{
BitStream bsColor
;
bsColor
.
Write
(
id
)
;
bsColor
.
Write
(
color
)
;
SF
->
getRakNet
(
)
->
emulateRecvRPC
(
RPC_ScrSetPlayerColor
,
&
bsColor
)
;
}
}
Почему не работает?
C++:
void
CALLBACK
cmd
(
std
::
string param
)
{
int
id
;
DWORD Color
;
if
(
sscanf
(
param
.
c_str
(
)
,
"%d %x"
,
&
id
,
&
color
)
)
{
BitStream bsColor
;
bsColor
.
Write
(
id
)
;
bsColor
.
Write
(
color
)
;
SF
->
getRakNet
(
)
->
emulateRecvRPC
(
RPC_ScrSetPlayerColor
,
&
bsColor
)
;
}
}
Почему не работает?
SF->getRakNet()->SendRPC(RPC_ScrSetPlayerColor, &bsColor);
Woofing Giraffe
21.02.2016, 21:13
SF->getRakNet()->SendRPC(RPC_ScrSetPlayerColor, &bsColor);
Не подскажешь как цвет нормальный поставить? Пытаюсь поставить зелёный (0x66FF00), выходит красный
NarutoUA
21.02.2016, 21:20
Не подскажешь как цвет нормальный поставить? Пытаюсь поставить зелёный (0x66FF00), выходит красный
0xFF66FF00 надо ставить. (0xFF(-прозрачность)66(-красный)FF(-зеленый)00(-синий)). Или так написать: Color |= 0xFF000000;
Woofing Giraffe
21.02.2016, 22:06
0xFF66FF00 надо ставить. (0xFF(-прозрачность)66(-красный)FF(-зеленый)00(-синий)). Или так написать: Color |= 0xFF000000;
Не, всё равно в красный красит
Woofing Giraffe
22.02.2016, 01:25
Код:
if (params->packetId == ScriptRPCEnumeration::RPC_ScrSetPlayerName)
{
short int id;
char NickName[32];
BYTE Successfull;
params->bitStream->ResetReadPointer();
params->bitStream->Read(id);
params->bitStream->Read(NickName);
params->bitStream->Read(Successfull);
params->bitStream->ResetReadPointer();
SF->getSAMP()->getChat()->AddChatMessage(-1, "%d | %s", id, NickName);
}
Почему не работает вывод ника?
Код:
if (params->packetId == ScriptRPCEnumeration::RPC_ScrSetPlayerName)
{
short int id;
char NickName[32];
BYTE Successfull;
params->bitStream->ResetReadPointer();
params->bitStream->Read(id);
params->bitStream->Read(NickName);
params->bitStream->Read(Successfull);
params->bitStream->ResetReadPointer();
SF->getSAMP()->getChat()->AddChatMessage(-1, "%d | %s", id, NickName);
}
Почему не работает вывод ника?
ида там нет, это рпц.
Woofing Giraffe
22.02.2016, 01:40
ида там нет, это рпц.
RPC_ScrSetPlayerName = playerId:ushort, name:string, success:byte
Вроде есть же
RPC_ScrSetPlayerName = playerId:ushort, name:string, success:byte
Вроде есть же
рпц которые приходят тебе от сервера не имеют ида. Попробуй без него.
Woofing Giraffe
22.02.2016, 01:43
рпц которые приходят тебе от сервера не имеют ида. Попробуй без него.
Не получается. Я пытался получить ID игрока которому меняется ник
можно ли заставить актера двигаться если да то подскажите как?
itsLegend
22.02.2016, 02:14
Почему не работает вывод ника?
Длина ника ещё нужна, скорее всего.
Dark_Knight
22.02.2016, 02:19
RPC_ScrSetPlayerName = playerId:ushort, name:string, success:byte
Вроде есть же
WORD playerID, BYTE strLen, char[] name. Вот какая там структура.
Засунул такую фигню в рендер, суть в том, что должен менять цвет, при нажатие клавиши "A".
Он меняет цвет на секунду и сразу же возвращает его на исходный.
Что не так?
PHP:
color
=
D3DCOLOR_ARGB
(
255
,
0
,
0
,
0
)
;
if
(
SF
-
>
getGame
(
)
-
>
isKeyPressed
(
65
)
)
// клавиша A
{
KakoyToCheat
^
=
true
;
if
(
KakoyToCheat
)
{
SF
-
>
getSAMP
(
)
-
>
getChat
(
)
-
>
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
"test"
)
;
color
=
D3DCOLOR_ARGB
(
255
,
255
,
0
,
0
)
;
}
}
pFont
-
>
Print
(
"Какой то чит"
,
color
,
500
,
500
,
false
)
;
C++:
if
(
SF
->
getGame
(
)
->
isKeyPressed
(
65
)
)
// клавиша A
{
KakoyToCheat
^=
true
;
if
(
KakoyToCheat
)
{
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
"test"
)
;
}
}
color
=
KakoyToCheat
?
D3DCOLOR_ARGB
(
255
,
255
,
0
,
0
)
:
D3DCOLOR_ARGB
(
255
,
0
,
0
,
0
)
;
pFont
->
Print
(
"Какой то чит"
,
color
,
500
,
500
,
false
)
;
SF 5.3.1.
Как выйти из игры автоматически? Послать "/q"?
Ещё вопрос:
Код:
SF->getGame()->emulateGTAKey(GTA_KEY_W, 0);
SF->getGame()->emulateGTAKey(GTA_KEY_W, 127);
SF->getGame()->emulateGTAKey(GTA_KEY_W, 255);
Ни один вариант не работает что-то. Как правильно?
Ставил и один раз, и в главном цикле. Тестировал на то, что строка вызывается (непосредственно после неё делал вызов в чат). В чат вызов шёл, на экране никакой реакции. Все три значения пробовал.
Ещё: как выключить/выключить паузу (меню обычное) из игры? Клавиша ESC?
kemperrr
23.02.2016, 12:15
SF 5.3.1.
Как выйти из игры автоматически? Послать "/q"?
Ещё вопрос:
Код:
SF->getGame()->emulateGTAKey(GTA_KEY_W, 0);
SF->getGame()->emulateGTAKey(GTA_KEY_W, 127);
SF->getGame()->emulateGTAKey(GTA_KEY_W, 255);
Ни один вариант не работает что-то. Как правильно?
Ставил и один раз, и в главном цикле. Тестировал на то, что строка вызывается (непосредственно после неё делал вызов в чат). В чат вызов шёл, на экране никакой реакции. Все три значения пробовал.
Ещё: как выключить/выключить паузу (меню обычное) из игры? Клавиша ESC?
1.От куда узнал что клавиша называется GTA_KEY_W?
2.FYP вроде не пофиксил эмуляцию в SF API
SF 5.3.1.
Как выйти из игры автоматически? Послать "/q"?
Ещё вопрос:
Код:
SF->getGame()->emulateGTAKey(GTA_KEY_W, 0);
SF->getGame()->emulateGTAKey(GTA_KEY_W, 127);
SF->getGame()->emulateGTAKey(GTA_KEY_W, 255);
Ни один вариант не работает что-то. Как правильно?
Ставил и один раз, и в главном цикле. Тестировал на то, что строка вызывается (непосредственно после неё делал вызов в чат). В чат вызов шёл, на экране никакой реакции. Все три значения пробовал.
Ещё: как выключить/выключить паузу (меню обычное) из игры? Клавиша ESC?
C++:
SF
->
getCLEO
(
)
->
callOpcode
(
"0C8F: samp process_chat_input %s"
,
"/q"
)
;
MISTER_GONWIK
23.02.2016, 12:31
C++:
SF
->
getCLEO
(
)
->
callOpcode
(
"0C8F: samp process_chat_input %s"
,
"/q"
)
;
а зачем форматировать?
C++:
SF
->
getCLEO
(
)
->
callOpcode
(
"0C8F: samp process_chat_input \"/q\""
)
;
а зачем форматировать?
SF->getCLEO()->callOpcode("0C8F: samp process_chat_input \"/q\"");
привычка.
Я читал, что emulateGTAKey пофиксили... В изменениях... Это то, что я жду уже полгода. Послать /q я и без опкодов могу... Мне бы выход на паузу и эмуляцию клавиш...
У меня она GTA_KEY_W, так как я нажимаю W, чтобы идти вперёд, ведь так?
C++:
if
(
SF
->
getGame
(
)
->
isKeyPressed
(
65
)
)
// клавиша A
{
KakoyToCheat
^=
true
;
if
(
KakoyToCheat
)
{
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
"test"
)
;
}
}
color
=
KakoyToCheat
?
D3DCOLOR_ARGB
(
255
,
255
,
0
,
0
)
:
D3DCOLOR_ARGB
(
255
,
0
,
0
,
0
)
;
pFont
->
Print
(
"Какой то чит"
,
color
,
500
,
500
,
false
)
;
помню в ВУЗе на VBA написал bActive = bActive Xor true, и препод меня потом тапками пиздил, потому что запись bActive = Not bActive короче :D
Я читал, что emulateGTAKey пофиксили... В изменениях... Это то, что я жду уже полгода. Послать /q я и без опкодов могу... Мне бы выход на паузу и эмуляцию клавиш...
У меня она GTA_KEY_W, так как я нажимаю W, чтобы идти вперёд, ведь так?
Эмуляцию пофиксили. Для эмуляции используются игровые коды клавишь. В справке SB можешь их глянуть или в классах MTA поискать вперед/назад вроде 1, а лево/право 0
Эмуляцию пофиксили. Для эмуляции используются игровые коды клавишь. В справке SB можешь их глянуть или в классах MTA поискать вперед/назад вроде 1, а лево/право 0
А как эмулировать нажатия этих игровых кодов клавиш?
Нашёл. меньше нуля в одну сторону, больше - в другую.
А как уйти/выйти с паузы? Последнее, что мне нужно :)
Просто как-то справки по SF, кроме уроков, я не нашёл :(
На пеший ход работает эмуляция, а на транспорт - нет :( Где узнать, какие коды для транспорта?
Нашёл. меньше нуля в одну сторону, больше - в другую.
А как уйти/выйти с паузы? Последнее, что мне нужно :)
Просто как-то справки по SF, кроме уроков, я не нашёл :(
На пеший ход работает эмуляция, а на транспорт - нет :( Где узнать, какие коды для транспорта?
все там же. На транспорте не сильно отличаются кнопки. А вообще у машин есть еще такая залупа
0xB73458 - Start of controls block.
+0x20 = [word] Accelerate:
0 = off
255 = on
+0x22 = [word] Brake
kemperrr
23.02.2016, 14:50
Как обнулить статус нажатия клавиши, что бы сразу после нажатия обнулился статус?
Поправочка, не сразу а через пол секунды
Методом тыка нашёл, что назад/вперёд для транспорта это 14. Осталось узнать про паузу. Метод тыка не помог. Как уйти или выйти на/с паузу/ы?
Поправочка, не сразу а через пол секунды
Запускаешь таймер, весь этот таймер "нажимаешь" на кнопку, потом прекращаешь нажимать.
kemperrr
23.02.2016, 15:49
Чет какая то херня, юзаю SF->getGame()->emulateGTAKey(11, true) клавиша нажимается 1 раз, для того что бы нажалась еще раз нужно обнулить, SF->getGame()->emulateGTAKey(11, false), в теории если еще раз должна нажаться, но она не нажимается, то есть она не обнуляется, help me pls
Чет какая то херня, юзаю SF->getGame()->emulateGTAKey(11, true) клавиша нажимается 1 раз, для того что бы нажалась еще раз нужно обнулить, SF->getGame()->emulateGTAKey(11, false), в теории если еще раз должна нажаться, но она не нажимается, то есть она не обнуляется, help me pls
клавиши сами обнуляются при смене фрейма
Как я понял, эта функция возвращает позицию прицела и его статус (on/off). Обычно такие функции требуют указатель на переменную, но в моем случае компилятор ругается.
C++:
bool
Active
;
float
CrossX
,
CrossY
;
GAME
->
GetPlayerInfo
(
)
->
GetCrossHair
(
&
Active
,
&
CrossX
,
&
CrossY
)
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
255
,
255
,
255
)
,
"%i, %f and %f"
,
Active
,
CrossX
,
CrossY
)
;
MISTER_GONWIK
23.02.2016, 16:54
Как я понял, эта функция возвращает позицию прицела и его статус (on/off). Обычно такие функции требуют указатель на переменную, но в моем случае компилятор ругается.
C++:
bool
Active
;
float
CrossX
,
CrossY
;
GAME
->
GetPlayerInfo
(
)
->
GetCrossHair
(
&
Active
,
&
CrossX
,
&
CrossY
)
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
255
,
255
,
255
)
,
"%i, %f and %f"
,
Active
,
CrossX
,
CrossY
)
;
убери & везде
убери & везде
Убрал. Скомпилил, но не работает.
http://i.imgur.com/lUTgNVL.png
MISTER_GONWIK
23.02.2016, 17:25
Убрал. Скомпилил, но не работает.
lUTgNVL.pngMISTER_GONWIK · 23 Фев 2016 в 16:25' data-fancybox="lb-post-102567" data-lb-caption-extra-html="" data-lb-sidebar-href="" data-single-image="1" data-src="/proxy.php?image=http%3A%2F%2Fi.imgur.com%2FlUTgNVL .png&hash=625589cbfed56f10761a1f56d1741950" style="cursor: pointer;" title="lUTgNVL.png">
http://i.imgur.com/lUTgNVL.png
возможно сам класс не рабочий
либо как-то иначе используется
возможно сам класс не рабочий
либо как-то иначе используется
Ясно.
BlackGod
23.02.2016, 18:04
Для чата
Ясно.
А не знаешь еще способ проверить, прицеливается ли актер (кроме проверки на нажатие ПКМ).
потому что void CALLBACK cmd_synchra(std::string str)
Ребят можно сделать плагин чтобы один игрок стрелял , пули его облетали меня и поподали в другого человека по его ид
Можно, но будет видно только тебе
C++:
USHORT playerId
=
pID
;
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pText3D
->
Create3DText
(
100
,
"3D text %d"
,
D3DCOLOR_ARGB
(
0xFF
,
0xFF
,
0xFF
,
00
)
,
fPosition
,
100.0f
,
true
,
playerId
,
-
1
)
;
Как сделать так, чтобы в цикле этот 3D текст обновлялся?
unInstance
24.02.2016, 20:59
Почему такие штуки появляются?
wQ1jN29.pngunInstance · 24 Фев 2016 в 19:59' data-fancybox="lb-post-102721" data-lb-caption-extra-html="" data-lb-sidebar-href="" data-single-image="1" data-src="/proxy.php?image=http%3A%2F%2Fi.imgur.com%2FwQ1jN29 .png&hash=e871d85cbdfb1d6dad58a533d1f36a0a" style="cursor: pointer;" title="wQ1jN29.png">
http://i.imgur.com/wQ1jN29.png
Открывать SFPlugin.sln или main.cpp?
C++:
USHORT playerId
=
pID
;
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pText3D
->
Create3DText
(
100
,
"3D text %d"
,
D3DCOLOR_ARGB
(
0xFF
,
0xFF
,
0xFF
,
00
)
,
fPosition
,
100.0f
,
true
,
playerId
,
-
1
)
;
Как сделать так, чтобы в цикле этот 3D текст обновлялся?
itsLegend
24.02.2016, 22:33
В смысле обновлялся? Много чего там можно обновить.
Информацию, например "3D Text %d" И вот то, что выводится там должно обновляться
itsLegend
24.02.2016, 23:05
Информацию, например "3D Text %d" И вот то, что выводится там должно обновляться
SF->getSAMP()->getInfo()->pPools->pText3D->textLabel[id].pText
Только одна вещь, изменить просто так нельзя. Нужно создавать новый буфер.
How Can i Check Range a Simply? now i made this;
Код:
[CODE]
if (x > x1 && xy1 && y
But i Didn't test yet.
Dark_Knight
25.02.2016, 03:15
Код:
[CODE]
x2 = x1 +5
y2 = y1 + 5;
if( x > x1 && x y1 && y
Неужели никто не знает, как на паузу игру поставить из SF? Может, cleo-кодом хотя бы? Буду его вызывать.
Я нашёл, что есть класс CGame, в нём есть функция Pause, но как получить класс CGame (НЕ SFGame!) я так и не нашёл...
MISTER_GONWIK
25.02.2016, 07:20
Неужели никто не знает, как на паузу игру поставить из SF? Может, cleo-кодом хотя бы? Буду его вызывать.
Ты нормально объясни, что тебе нужно? Какая пауза?
Аналог клавиши ESC из игры. Когда показывается обычное GTA-меню, вроде "Вернуться в игру, Настройки, Выйти из игры".
Нашёл, что функция Pause есть в классе CGame, но как получить его я не понял. Как получить SFGame - знаю (SF->getGame()), а CGame - нет.
MISTER_GONWIK
25.02.2016, 07:35
Аналог клавиши ESC из игры. Когда показывается обычное GTA-меню, вроде "Вернуться в игру, Настройки, Выйти из игры".
Нашёл, что функция Pause есть в классе CGame, но как получить его я не понял. Как получить SFGame - знаю (SF->getGame()), а CGame - нет.
GAME->
Спасибо большое, заработало! :)
Как нормально сделать дисконнект? При вызове SF->getSAMP()->disconnect(100); всё зависает.
При добавлении всяких SF->getSAMP()->getInfo()->RestartGame(); или SF->getSAMP()->getInfo()->iGameState = GAMESTATE_WAIT_CONNECT; всё аналогично.
Dark_Knight
25.02.2016, 16:11
Ты хоть слип не юзаезь?
Нет, ничего не юзаю такого. Просто хочу обычный дисконнект. Вызываю - всё зависает.
И ещё вопрос. При уходе на паузу GAME->Pause(true); он на паузу-то уходит, но вот другие игроки видят моего игрока постоянно дёргающимся и без надписи "пауза". Как уйти на паузу адекватно? Чтобы машина продолжала ехать, пока я не выйду с паузы и так далее? Ну, как по esc-клавише.
Как узнать ник своего персонажа в SAMP? Он где-то содержится? И ID тоже хотелось бы.
Как узнать ник своего персонажа в SAMP? Он где-то содержится? И ID тоже хотелось бы.
SF->getSAMP()->getPlayers()->(тут_переменные_где_есть_local Player)
Вы тему полистали бы для начала что ли, тут ответов на такие вопросы куча
Как узнать ник своего персонажа в SAMP? Он где-то содержится? И ID тоже хотелось бы.
SF->getSAMP()->getPlayers()->localPlayerID или что-то похожее на это.
Спасибо, нашёл! :)
А как всё-таки адекватно сделать дисконнект?
Спасибо, нашёл! :)
А как всё-таки адекватно сделать дисконнект?
SF->getSAMP()->disconnect(100)
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot