PDA

Просмотр полной версии : С/С++ Вопрос - Ответ


Страницы : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 [16] 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

iAmerican
30.06.2019, 14:04
https://prnt.sc/o8k60k (https://www.blast.hk/redirect/aHR0cHM6Ly9wcm50LnNjL284azYwaw) как только поставил сразу ошибки и не компилит


Ошибки покажи , ты кинул просто варнинг

vania3450
30.06.2019, 15:31
Ошибки покажи , ты кинул просто варнинг


Решил проблему,но все равно спасибо)

$continue$
30.06.2019, 22:02
Есть pool vehicle, как можно узнать модель машины, по иду в пуле?

vania3450
01.07.2019, 01:05
у меня есть исходник который создает plugin для сервера, но создает его в dll формате, как можно закомпилить его в so для Linux сервера?

ALF
01.07.2019, 03:17
у меня есть исходник который создает plugin для сервера, но создает его в dll формате, как можно закомпилить его в so для Linux сервера?


компилировать в линуксе

vania3450
01.07.2019, 14:14
компилировать в линуксе


На винде вообще никак ?

AnWu
01.07.2019, 14:23
На винде вообще никак ?


http://qaru.site/questions/83458/how-to-compile-for-windows-on-linux-with-gccg (https://www.blast.hk/redirect/aHR0cDovL3FhcnUuc2l0ZS9xdWVzdGlvbnMvODM0NTgvaG93LX RvLWNvbXBpbGUtZm9yLXdpbmRvd3Mtb24tbGludXgtd2l0aC1n Y2Nn)

vania3450
01.07.2019, 14:33
http://qaru.site/questions/83458/how-to-compile-for-windows-on-linux-with-gccg (https://www.blast.hk/redirect/aHR0cDovL3FhcnUuc2l0ZS9xdWVzdGlvbnMvODM0NTgvaG93LX RvLWNvbXBpbGUtZm9yLXdpbmRvd3Mtb24tbGludXgtd2l0aC1n Y2Nn)


Тут же наоборот для винды с системы линукс,не?

AnWu
01.07.2019, 14:49
Тут же наоборот для винды с системы линукс,не?


чет я не то прочитал, гугл глупый. Поищи инфу в гугле. 100 % найдешь решение

Roger571
02.07.2019, 10:19
у меня есть исходник который создает plugin для сервера, но создает его в dll формате, как можно закомпилить его в so для Linux сервера?


Для меня самым простым и быстрым решением оказалось просто установить виртуалку и компилировать уже в ней.

Но если интересно, то можешь почитать, вот (https://www.blast.hk/redirect/aHR0cHM6Ly90b3N0ZXIucnUvcS80NzIyMzk) и еще (https://www.blast.hk/redirect/aHR0cHM6Ly93d3cubGludXgub3JnLnJ1L2ZvcnVtL2RldmVsb3 BtZW50LzY3NTE2MTU)

vania3450
02.07.2019, 11:02
Для меня самым простым и быстрым решением оказалось просто установить виртуалку и компилировать уже в ней.
Но если интересно, то можешь почитать, вот (https://www.blast.hk/redirect/aHR0cHM6Ly90b3N0ZXIucnUvcS80NzIyMzk) и еще (https://www.blast.hk/redirect/aHR0cHM6Ly93d3cubGludXgub3JnLnJ1L2ZvcnVtL2RldmVsb3 BtZW50LzY3NTE2MTU)


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

Stiopko
02.07.2019, 14:14
дарова, подскажите почему я не отослать пост запрос, ответ от сайта есть а данные пост почему-то не отправляются

C++:






const
char
*
MyNet
::
SendPost
(
const
char
*
file
,
char
*
data
)
{
char
szReq
[
1024
]
=
""
,
szBuffer
[
1025
]
;
DWORD dwByteRead
=
0
;
BOOL bRead
;
if
(
mainBuf
!=
nullptr
)
mainBuf
[
0
]
=
'\0'
;
hHttpRequest
=
HttpOpenRequest
(
hHttpSession
,
"POST"
,
file
,
0
,
0
,
0
,
INTERNET_FLAG_RELOAD
,
0
)
;
if
(
hHttpRequest
!=
NULL
)
{
LPCSTR header
;
header
=
"Accept: */*"
;
HttpAddRequestHeaders
(
hHttpRequest
,
header
,
strlen
(
header
)
,
HTTP_ADDREQ_FLAG_ADD
)
;
header
=
"Content-Type: application/json"
;
HttpAddRequestHeaders
(
hHttpRequest
,
header
,
strlen
(
header
)
,
HTTP_ADDREQ_FLAG_ADD
)
;
HttpSendRequest
(
hHttpRequest
,
NULL
,
0
,
data
,
strlen
(
data
)
)
;
while
(
true
)
{
bRead
=
InternetReadFile
(
hHttpRequest
,
szBuffer
,
sizeof
(
szBuffer
)
-
1
,
&
dwByteRead
)
;
if
(
bRead
==
FALSE
||
dwByteRead
==
0
)
break
;
szBuffer
[
dwByteRead
]
=
'\0'
;
AddToString
(
&
mainBuf
,
szBuffer
)
;
}
MessageBox
(
GetForegroundWindow
(
)
,
mainBuf
,
"Rab"
,
MB_OK
)
;
}
return
mainBuf
;
}

ALF
02.07.2019, 14:16
Хорошо, а как через линукс компилить если поставлю на виртуалку, не скажешь?


sudo apt install build-essential - установит всё что надо

g++ -o test test.cpp - компиляция. test - имя выходного файла, test.cpp - имя компилируемого файла

_Vine_
02.07.2019, 14:20
дарова, подскажите почему я не отослать пост запрос, ответ от сайта есть а данные пост почему-то не отправляются

C++:






const
char
*
MyNet
::
SendPost
(
const
char
*
file
,
char
*
data
)
{
char
szReq
[
1024
]
=
""
,
szBuffer
[
1025
]
;
DWORD dwByteRead
=
0
;
BOOL bRead
;
if
(
mainBuf
!=
nullptr
)
mainBuf
[
0
]
=
'\0'
;
hHttpRequest
=
HttpOpenRequest
(
hHttpSession
,
"POST"
,
file
,
0
,
0
,
0
,
INTERNET_FLAG_RELOAD
,
0
)
;
if
(
hHttpRequest
!=
NULL
)
{
LPCSTR header
;
header
=
"Accept: */*"
;
HttpAddRequestHeaders
(
hHttpRequest
,
header
,
strlen
(
header
)
,
HTTP_ADDREQ_FLAG_ADD
)
;
header
=
"Content-Type: application/json"
;
HttpAddRequestHeaders
(
hHttpRequest
,
header
,
strlen
(
header
)
,
HTTP_ADDREQ_FLAG_ADD
)
;
HttpSendRequest
(
hHttpRequest
,
NULL
,
0
,
data
,
strlen
(
data
)
)
;
while
(
true
)
{
bRead
=
InternetReadFile
(
hHttpRequest
,
szBuffer
,
sizeof
(
szBuffer
)
-
1
,
&
dwByteRead
)
;
if
(
bRead
==
FALSE
||
dwByteRead
==
0
)
break
;
szBuffer
[
dwByteRead
]
=
'\0'
;
AddToString
(
&
mainBuf
,
szBuffer
)
;
}
MessageBox
(
GetForegroundWindow
(
)
,
mainBuf
,
"Rab"
,
MB_OK
)
;
}
return
mainBuf
;
}






Код:






Content-Type: application/json




замени на







Код:






Content-Type: application/x-www-form-urlencoded

Roger571
02.07.2019, 16:24
Хорошо, а как через линукс компилить если поставлю на виртуалку, не скажешь?


Самым простым для тебя будет установка IDE.

Установи CodeBlocks, вот инструкция (https://www.blast.hk/redirect/aHR0cHM6Ly9taWNyby1waS5ydS8lRDElODMlRDElODElRDElOD IlRDAlQjAlRDAlQkQlRDAlQkUlRDAlQjIlRDAlQkElRDAlQjAt JUQwJUJEJUQwJUIwJUQxJTgxJUQxJTgyJUQxJTgwJUQwJUJFJU QwJUI5JUQwJUJBJUQwJUIwLWNvZGVibG9ja3MtdWJ1bnR1Lw) о его установке, где все подробно расписано и дан пример создания проекта.

Только при создании проекта выбирай не "Console application", а "Shared library". Затем добавляешь файлы своего плагина и компилируешь.

В настройках проекта можешь указать желаемое имя выходного файла.

zMViToS_
02.07.2019, 23:45
Есть мобильный клиент самп. Базируется на 0.3.7, в самом клиенте не реализовано оружие, ходьба, приседания и урон с оружия, так же тюнинг. Как реализовать?

ALF
03.07.2019, 03:34
Есть мобильный клиент самп. Базируется на 0.3.7, в самом клиенте не реализовано оружие, ходьба, приседания и урон с оружия, так же тюнинг. Как реализовать?


как я знаю, сервер там 0.3.7, а получается, что достаточно научить клиент принимать и отправлять нужные пакеты.

не думаю, что если ты задаёшь такой вопрос, то ты сможешь это реализовать.

ты можешь посмотреть как уже реализовано там что то и делать по аналогии с этим.

ALF
06.07.2019, 11:26
есть два объекта, каждый из них расположен на своей позиции, нужно повернуть объект в сторону другого объекта в трёхмерном пространстве.

я прогуливал школу, вот и туповат чуть-чуть, дайте пожалуйста формулу как можно это высчитать

object one[x y z]

object two[x y z]

как мне высчитать ротацию по всем трём координатам?

semenrbt
06.07.2019, 11:30
есть два объекта, каждый из них расположен на своей позиции, нужно повернуть объект в сторону другого объекта в трёхмерном пространстве.
я прогуливал школу, вот и туповат чуть-чуть, дайте пожалуйста формулу как можно это высчитать

object one[x y z]
object two[x y z]
как мне высчитать ротацию по всем трём координатам?


а как узнать куда смотрит твой обьект =)

Stiopko
06.07.2019, 12:00
есть два объекта, каждый из них расположен на своей позиции, нужно повернуть объект в сторону другого объекта в трёхмерном пространстве.
я прогуливал школу, вот и туповат чуть-чуть, дайте пожалуйста формулу как можно это высчитать

object one[x y z]
object two[x y z]
как мне высчитать ротацию по всем трём координатам?



Ну по x и y вот, но это походу не то

C++:






// pos позиция обекта к которому нужно повернутся
// posTo сам обект
float
angle
=
atan2
(
(
pos
[
0
]
-
posTo
[
0
]
)
,
(
posTo
[
1
]
-
pos
[
1
]
)
)
+
M_PI
;

ALF
06.07.2019, 12:48
Ну по x и y вот, но это походу не то

C++:






// pos позиция обекта к которому нужно повернутся
// posTo сам обект
float
angle
=
atan2
(
(
pos
[
0
]
-
posTo
[
0
]
)
,
(
posTo
[
1
]
-
pos
[
1
]
)
)
+
M_PI
;





это не то

ALF
06.07.2019, 13:12
это всё не то.

объясняю понятней, вот функция которая создаёт объект, ротация там меняется по трём переменным(вектор, x, y, z)

C++:






BOOL
Create
(
WORD nId
,
int
nModel
,
CVector position
,
CVector rotation
,
float
fDrawDistance
)
{
return
(
(
BOOL
(
__thiscall
*
)
(
stObjectPool
*
,
WORD
,
int
,
CVector
,
CVector
,
float
)
)
(
SF
->
getSAMP
(
)
->
getSAMPAddr
(
)
+
0xF470
)
)
(
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pObject
,
nId
,
nModel
,
position
,
rotation
,
fDrawDistance
)
;
}




у меня есть координаты моего созданного объекта и координаты того вокруг чего он должен вращаться.

вопрос, как мне из этих двух координат высчитать ротация и повернуть объект в сторону моих координат?

Stiopko
06.07.2019, 13:37
это всё не то.

объясняю понятней, вот функция которая создаёт объект, ротация там меняется по трём переменным(вектор, x, y, z)

C++:






BOOL
Create
(
WORD nId
,
int
nModel
,
CVector position
,
CVector rotation
,
float
fDrawDistance
)
{
return
(
(
BOOL
(
__thiscall
*
)
(
stObjectPool
*
,
WORD
,
int
,
CVector
,
CVector
,
float
)
)
(
SF
->
getSAMP
(
)
->
getSAMPAddr
(
)
+
0xF470
)
)
(
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pObject
,
nId
,
nModel
,
position
,
rotation
,
fDrawDistance
)
;
}




у меня есть координаты моего созданного объекта и координаты того вокруг чего он должен вращаться.
вопрос, как мне из этих двух координат высчитать ротация и повернуть объект в сторону моих координат?


Смотри тебе нужно вот это Кватеринион (https://www.blast.hk/redirect/aHR0cHM6Ly9hcGktMmQzZC1jYWQuY29tL2V1bGVyX2FuZ2xlc1 9xdWF0ZXJuaW9ucy8), но я это еще в школе не проходил поэтому хз

Akionka
06.07.2019, 14:05
Подскажите, если кто-нибудь знает, как работает это (https://blast.hk/threads/18967/)? Какие адреса чистит, где их можно узнать итд.

Roger571
06.07.2019, 14:32
это всё не то.



Не особо понимаю с похмелья что тебе требуется в итоге, но попробуй

Вычисляешь угол между объектами с помощью atan2 и переводишь в кватернион.




C++:






void
QuaternionFromAngle
(
float
*
fQuaternion
,
float
fAngle
)
{
fAngle
=
DEGTORAD
(
fAngle
)
;
float
fMatrix
[
3
]
[
3
]
,
c
=
cos
(
fAngle
)
,
s
=
sin
(
fAngle
)
;
// QuaternionRotateZ
fMatrix
[
0
]
[
0
]
=
c
;
fMatrix
[
0
]
[
1
]
=
s
;
fMatrix
[
0
]
[
2
]
=
0.0
;
fMatrix
[
1
]
[
0
]
=
-
s
;
fMatrix
[
1
]
[
1
]
=
c
;
fMatrix
[
1
]
[
2
]
=
0.0
;
fMatrix
[
2
]
[
0
]
=
0.0
;
fMatrix
[
2
]
[
1
]
=
0.0
;
fMatrix
[
2
]
[
2
]
=
1.0
;
// GetQuaternionFromMatrix
fQuaternion
[
0
]
=
sqrt
(
Max
(
(
float
)
0
,
1.0f
+
fMatrix
[
0
]
[
0
]
+
fMatrix
[
1
]
[
1
]
+
fMatrix
[
2
]
[
2
]
)
)
*
0.5f
;
fQuaternion
[
1
]
=
sqrt
(
Max
(
(
float
)
0
,
1.0f
+
fMatrix
[
0
]
[
0
]
-
fMatrix
[
1
]
[
1
]
-
fMatrix
[
2
]
[
2
]
)
)
*
0.5f
;
fQuaternion
[
2
]
=
sqrt
(
Max
(
(
float
)
0
,
1.0f
-
fMatrix
[
0
]
[
0
]
+
fMatrix
[
1
]
[
1
]
-
fMatrix
[
2
]
[
2
]
)
)
*
0.5f
;
fQuaternion
[
3
]
=
sqrt
(
Max
(
(
float
)
0
,
1.0f
-
fMatrix
[
0
]
[
0
]
-
fMatrix
[
1
]
[
1
]
+
fMatrix
[
2
]
[
2
]
)
)
*
0.5f
;
fQuaternion
[
1
]
=
static_cast

(
_copysign
(
fQuaternion
[
1
]
,
fMatrix
[
2
]
[
1
]
-
fMatrix
[
1
]
[
2
]
)
)
;
fQuaternion
[
2
]
=
static_cast

(
_copysign
(
fQuaternion
[
2
]
,
fMatrix
[
0
]
[
2
]
-
fMatrix
[
2
]
[
0
]
)
)
;
fQuaternion
[
3
]
=
static_cast

(
_copysign
(
fQuaternion
[
3
]
,
fMatrix
[
1
]
[
0
]
-
fMatrix
[
0
]
[
1
]
)
)
;
}







Пробуй, вроде должно работать

ishi
06.07.2019, 16:42
Есть функция для поиска последовательности строчных символов:







C++:





[CODE]
int
findstring
(
void
*
where_
,
char
*
what
,
int
whereSize
)
{
void
*
temp
=
malloc
(
strlen
(
what
)
+
1
)
;
int
iterator
=
0
;
char
*
yo
=
new
char
[
strlen
(
what
)
+
1
]
;
yo
=
(
char
*
)
temp
;
char
*
tempptr
=
static_cast

(
where_
)
;
while
(
iterator



Она копирует из области поиска по n байт длиною равной длине искомого, добавляет на конец 0 и сравнивает. И так, пока не кончится буфер.

Однако, я её раз 10 наверное прогнал по циклу вызвов с одинаковыми параметрами, и примерно 33-39 из 100 вызовов она возвращает ошибку(-1). Лично я тут не вижу ошибки в логике, но результат говорит об обратном.

Помогите понять, где косяк, плиз.

rraggerr
06.07.2019, 17:19
[QUOTE="ishi"]

Есть функция для поиска последовательности строчных символов:







C++:





[CODE]
int
findstring
(
void
*
where_
,
char
*
what
,
int
whereSize
)
{
void
*
temp
=
malloc
(
strlen
(
what
)
+
1
)
;
int
iterator
=
0
;
char
*
yo
=
new
char
[
strlen
(
what
)
+
1
]
;
yo
=
(
char
*
)
temp
;
char
*
tempptr
=
static_cast

(
where_
)
;
while
(
iterator

ШPEK
06.07.2019, 17:35
Lua:






#
include
"stdafx.h"
#
include

#
include

#
include

#
define REGISTER_CLIENT_COMMAND
0x65AC0
#
define ADD_CHAT_MESSAGE
0x64520
#
define pChat
0x21A0E4
#
define pInput
0x21A0E8
#
define memory_info
0x8A5A80
DWORD dwSamp
;
void
AddChatMessage
(
const char
*
msg
)
{
(
(
void
(
__thiscall
*
)
(
DWORD str
,
const char
*
text
)
)
(
dwSamp
+
ADD_CHAT_MESSAGE
)
)
(
*
(
DWORD
*
)
(
dwSamp
+
pChat
)
,
msg
)
;
}
bool
isInit
(
)
{
return
(
(
bool
(
__thiscall
*
)
(
)
)
(
dwSamp
+
0x9BF70
)
)
(
)
;
}
void
AddClientCommand
(
const char
*
cmd
,
void
*
func
)
{
(
(
void
(
__thiscall
*
)
(
DWORD str
,
const char
*
cmd
,
void
*
func
)
)
(
dwSamp
+
REGISTER_CLIENT_COMMAND
)
)
(
*
(
DWORD
*
)
(
dwSamp
+
pInput
)
,
cmd
,
func
)
;
}
void
core
(
)
{
char buf
[
40
]
;
sprintf_s
(
buf
,
"%u"
,
*
(
DWORD
*
)
(
dwSamp
+
memory_info
)
)
;
AddChatMessage
(
buf
)
;
}
void
attach
(
)
{
dwSamp
=
(
DWORD
)
GetModuleHandle
(
L
"samp.dll"
)
;
while
(
!dwSamp
)
{
dwSamp
=
(
DWORD
)
GetModuleHandle
(
L
"samp.dll"
)
;
Sleep
(
30
)
;
}
dwSamp
=
(
DWORD
)
GetModuleHandle
(
L
"samp.dll"
)
;
AddClientCommand
(
"getmem"
,
core
)
;
}
BOOL APIENTRY
DllMain
(
HMODULE hModule
,
DWORD ul_reason_for_call
,
LPVOID lpReserved
)
{
if
(
ul_reason_for_call
==
DLL_PROCESS_ATTACH
)
_beginthread
(
(
_beginthread_proc_type
)
attach
,
NULL
,
NULL
)
;
return
TRUE
;
}




Крашит игру. в MoonLoader'e проверял вызов AddChatMessage, всё работало. AddChatMessage и AddClientMessage -

это методы класса.

astap_
06.07.2019, 19:12
Подскажите, если кто-нибудь знает, как работает это (https://blast.hk/threads/18967/)? Какие адреса чистит, где их можно узнать итд.


обычный игнор входящего RPC_SCRREMOVEBUILDINGFORPLAYER

ishi
06.07.2019, 19:47
это проверка на то что "слово" есть в строчке "какое то слово" ?


Не совсем. Это для поиска в буфере, содержимое которого может не соответствовать строчному типу: на конце может не быть нуля, а сами символы могут не соответствовать кодировке искомого. Короче говоря: поиск в бинарном файле.



чем strstr не устраивает?


Не хочет искать дальше первого \0

-raymond-
06.07.2019, 19:51
как сделать альтернативу keyhook_keycombo_pressed из собейта в сф?

ishi
06.07.2019, 20:50
Обновляю запрос.

[QUOTE="Спойлер"]
[COLOR="#363940"]
[QUOTE="ishi"]

Есть функция для поиска последовательности строчных символов:







C++:





[CODE]
int
findstring
(
void
*
where_
,
char
*
what
,
int
whereSize
)
{
void
*
temp
=
malloc
(
strlen
(
what
)
+
1
)
;
int
iterator
=
0
;
char
*
yo
=
new
char
[
strlen
(
what
)
+
1
]
;
yo
=
(
char
*
)
temp
;
char
*
tempptr
=
static_cast

(
where_
)
;
while
(
iterator

C++:





[CODE]
int
findstring
(
void
*
where_
,
char
*
what
,
int
whereSize
)
{
void
*
temp
=
malloc
(
strlen
(
what
)
+
1
)
;
int
iterator
=
0
;
char
*
yo
=
static_cast

(
temp
)
+
strlen
(
what
)
+
1
;
char
*
tempptr
=
static_cast

(
where_
)
;
while
(
iterator



Теперь из десяти запусков по 100 вызовов, 8-9 запусков идут без ошибок, а конкретно: ошибка вылетает первые

ALF
06.07.2019, 21:46
[QUOTE="ishi"]

Обновляю запрос.
В yo была утечка, исправив слепил это:

C++:





[CODE]
int
findstring
(
void
*
where_
,
char
*
what
,
int
whereSize
)
{
void
*
temp
=
malloc
(
strlen
(
what
)
+
1
)
;
int
iterator
=
0
;
char
*
yo
=
static_cast

(
temp
)
+
strlen
(
what
)
+
1
;
char
*
tempptr
=
static_cast

(
where_
)
;
while
(
iterator

_Vine_
06.07.2019, 21:56
[QUOTE="ishi"]

Обновляю запрос.
В yo была утечка, исправив слепил это:

C++:






int
findstring
(
void
*
where_
,
char
*
what
,
int
whereSize
)
{
void
*
temp
=
malloc
(
strlen
(
what
)
+
1
)
;
int
iterator
=
0
;
char
*
yo
=
static_cast

(
temp
)
+
strlen
(
what
)
+
1
;
char
*
tempptr
=
static_cast

(
where_
)
;
while
(
iterator

C++:





[CODE]
char
*
yo
=
static_cast

(
temp
)
+
strlen
(
what
)
+
1
;




+ 1 не нужен, так ты будешь получать указатель на конец строки + 1, а это не только может приводить к неправильному результату функции, но и изменять данные в чужой выделенной памяти и приводить к сбою программы

C++:





[CODE]
while
(
iterator



Тут должен быть оператор

C++:





[CODE]
int
findstring
(
void
*
where_
,
char
*
what
,
int
whereSize
)
{
void
*
temp
=
malloc
(
strlen
(
what
)
+
1
)
;
int
iterator
=
0
;
char
*
yo
=
static_cast

(
temp
)
+
strlen
(
what
)
;
char
*
tempptr
=
static_cast

(
where_
)
;
while
(
iterator



И вообще, можно было бы реализовать функцию и без промежуточного буфера temp, не знаю зачем ты это сделал.

Или вовсе использовать strstr, раз уже используешь strcmp.

C++:





[CODE]
int
findstring
(
const
char
*
str1
,
const
char
*
str2
)
{
int
str1_len
=
strlen
(
str1
)
;
int
str2_len
=
strlen
(
str2
)
;
for
(
int
i
=
0
;
i

enziweee
06.07.2019, 23:34
в общем проблема, пытаюсь отрендерить линию от головы до пуза, в итоге линия строится нормально только на первого попавшегося в радиусе стрима актера, на остальных выходит кривота, как исправлять?




C++:






for
(
int
i
=
0
;
i

GetPlayerPool
(
)
;
CRemotePlayer
*
pRemote
;
if
(
pPlayerPool
->
GetPlayer
(
i
)
)
{
pRemote
=
pPlayerPool
->
GetPlayer
(
i
)
;
if
(
pRemote
->
m_pPed
)
{
SAMP
::
CPed
*
pRemotePed
=
pRemote
->
m_pPed
;
// Handle REMOTE Player
SAMP
::
CPed
*
pLocalPed
=
SAMP
::
pGame
->
m_pPlayerPed
;
// Handle LOCAL Player
if
(
!
pRemotePed
->
IsDead
(
)
||
!
pLocalPed
->
IsDead
(
)
)
{
SAMP
::
CVector pRemoteFirstBoneVector
;
pRemotePed
->
GetBonePosition
(
BONE_HEAD
,
&
pRemoteFirstBoneVector
)
;
SAMP
::
CVector pRemoteSecondBoneVector
;
pRemotePed
->
GetBonePosition
(
BONE_SPINE1
,
&
pRemoteSecondBoneVector
)
;
D3DXVECTOR3 pRemoteFirstBoneDX
;
pRemoteFirstBoneDX
.
x
=
pRemoteFirstBoneVector
.
x
;
pRemoteFirstBoneDX
.
y
=
pRemoteFirstBoneVector
.
y
;
pRemoteFirstBoneDX
.
z
=
pRemoteFirstBoneVector
.
z
;
D3DXVECTOR3 pRemoteSecondBoneDX
;
pRemoteSecondBoneDX
.
x
=
pRemoteSecondBoneVector
.
x
;
pRemoteSecondBoneDX
.
y
=
pRemoteSecondBoneVector
.
y
;
pRemoteSecondBoneDX
.
z
=
pRemoteSecondBoneVector
.
z
;
D3DXVECTOR3 firstCalculated
;
D3DXVECTOR3 secondCalculated
;
CalcScreenCoors
(
&
pRemoteFirstBoneDX
,
&
firstCalculated
)
;
CalcScreenCoors
(
&
pRemoteSecondBoneDX
,
&
secondCalculated
)
;
draw
.
Line
(
firstCalculated
.
x
,
firstCalculated
.
y
,
secondCalculated
.
x
,
secondCalculated
.
y
,
D3DCOLOR_ARGB
(
255
,
255
,
255
,
255
)
)
;
//draw.Text(screenPosEx.x, screenPosEx.y, nickname, fontColor, false, TextAlignment::kCenter);
}
}
}
}








Eu-xFuZUfxU.jpgenziweee · 6 Июл 2019 в 22:34' data-fancybox="lb-post-364267" data-lb-caption-extra-html="" data-lb-sidebar-href="" data-single-image="1" data-src="/proxy.php?image=https%3A%2F%2Fpp.userapi.com%2Fc85 1432%2Fv851432882%2F163f36%2FEu-xFuZUfxU.jpg&hash=708997e6c7b872a49ea3b1d80d772300" style="cursor: pointer;" title="Eu-xFuZUfxU.jpg">
https://pp.userapi.com/c851432/v851432882/163f36/Eu-xFuZUfxU.jpg

rraggerr
06.07.2019, 23:54
в общем проблема, пытаюсь отрендерить линию от головы до пуза, в итоге линия строится нормально только на первого попавшегося в радиусе стрима актера, на остальных выходит кривота, как исправлять?




C++:






for
(
int
i
=
0
;
i

GetPlayerPool
(
)
;
CRemotePlayer
*
pRemote
;
if
(
pPlayerPool
->
GetPlayer
(
i
)
)
{
pRemote
=
pPlayerPool
->
GetPlayer
(
i
)
;
if
(
pRemote
->
m_pPed
)
{
SAMP
::
CPed
*
pRemotePed
=
pRemote
->
m_pPed
;
// Handle REMOTE Player
SAMP
::
CPed
*
pLocalPed
=
SAMP
::
pGame
->
m_pPlayerPed
;
// Handle LOCAL Player
if
(
!
pRemotePed
->
IsDead
(
)
||
!
pLocalPed
->
IsDead
(
)
)
{
SAMP
::
CVector pRemoteFirstBoneVector
;
pRemotePed
->
GetBonePosition
(
BONE_HEAD
,
&
pRemoteFirstBoneVector
)
;
SAMP
::
CVector pRemoteSecondBoneVector
;
pRemotePed
->
GetBonePosition
(
BONE_SPINE1
,
&
pRemoteSecondBoneVector
)
;
D3DXVECTOR3 pRemoteFirstBoneDX
;
pRemoteFirstBoneDX
.
x
=
pRemoteFirstBoneVector
.
x
;
pRemoteFirstBoneDX
.
y
=
pRemoteFirstBoneVector
.
y
;
pRemoteFirstBoneDX
.
z
=
pRemoteFirstBoneVector
.
z
;
D3DXVECTOR3 pRemoteSecondBoneDX
;
pRemoteSecondBoneDX
.
x
=
pRemoteSecondBoneVector
.
x
;
pRemoteSecondBoneDX
.
y
=
pRemoteSecondBoneVector
.
y
;
pRemoteSecondBoneDX
.
z
=
pRemoteSecondBoneVector
.
z
;
D3DXVECTOR3 firstCalculated
;
D3DXVECTOR3 secondCalculated
;
CalcScreenCoors
(
&
pRemoteFirstBoneDX
,
&
firstCalculated
)
;
CalcScreenCoors
(
&
pRemoteSecondBoneDX
,
&
secondCalculated
)
;
draw
.
Line
(
firstCalculated
.
x
,
firstCalculated
.
y
,
secondCalculated
.
x
,
secondCalculated
.
y
,
D3DCOLOR_ARGB
(
255
,
255
,
255
,
255
)
)
;
//draw.Text(screenPosEx.x, screenPosEx.y, nickname, fontColor, false, TextAlignment::kCenter);
}
}
}
}








Eu-xFuZUfxU.jpgrraggerr · 6 Июл 2019 в 22:54' data-fancybox="lb-post-364276" data-lb-caption-extra-html="" data-lb-sidebar-href="" data-single-image="1" data-src="/proxy.php?image=https%3A%2F%2Fpp.userapi.com%2Fc85 1432%2Fv851432882%2F163f36%2FEu-xFuZUfxU.jpg&hash=708997e6c7b872a49ea3b1d80d772300" style="cursor: pointer;" title="Eu-xFuZUfxU.jpg">
https://pp.userapi.com/c851432/v851432882/163f36/Eu-xFuZUfxU.jpg





попробуй добавить проверку на

if (CalcScreenCoors)

и на

GetBonePosition

и еще у тебя ошибки, кароче на

C++:






if
(
pLocalPed
->
IsDead
(
)
)
return
;
for
(
int
i
=
0
;
i

GetPlayerPool
(
)
;
CRemotePlayer
*
pRemote
;
if
(
pPlayerPool
&&
pPlayerPool
->
GetPlayer
(
i
)
)
{
pRemote
=
pPlayerPool
->
GetPlayer
(
i
)
;
if
(
pRemote
->
m_pPed
)
{
SAMP
::
CPed
*
pRemotePed
=
pRemote
->
m_pPed
;
// Handle REMOTE Player
SAMP
::
CPed
*
pLocalPed
=
SAMP
::
pGame
->
m_pPlayerPed
;
// Handle LOCAL Player
if
(
pRemotePed
&&
pLocalPed
&&
!
pRemotePed
->
IsDead
(
)
)
{
SAMP
::
CVector pRemoteFirstBoneVector
;
if
(
!
pRemotePed
->
GetBonePosition
(
BONE_HEAD
,
&
pRemoteFirstBoneVector
)
)
continue
;
SAMP
::
CVector pRemoteSecondBoneVector
;
if
(
!
pRemotePed
->
GetBonePosition
(
BONE_SPINE1
,
&
pRemoteSecondBoneVector
)
)
continue
;
D3DXVECTOR3 pRemoteFirstBoneDX
;
pRemoteFirstBoneDX
.
x
=
pRemoteFirstBoneVector
.
x
;
pRemoteFirstBoneDX
.
y
=
pRemoteFirstBoneVector
.
y
;
pRemoteFirstBoneDX
.
z
=
pRemoteFirstBoneVector
.
z
;
D3DXVECTOR3 pRemoteSecondBoneDX
;
pRemoteSecondBoneDX
.
x
=
pRemoteSecondBoneVector
.
x
;
pRemoteSecondBoneDX
.
y
=
pRemoteSecondBoneVector
.
y
;
pRemoteSecondBoneDX
.
z
=
pRemoteSecondBoneVector
.
z
;
D3DXVECTOR3 firstCalculated
;
D3DXVECTOR3 secondCalculated
;
if
(
!
CalcScreenCoors
(
&
pRemoteFirstBoneDX
,
&
firstCalculated
)
)
continue
;
if
(
CalcScreenCoors
(
&
pRemoteSecondBoneDX
,
&
secondCalculated
)
)
continue
;
draw
.
Line
(
firstCalculated
.
x
,
firstCalculated
.
y
,
secondCalculated
.
x
,
secondCalculated
.
y
,
D3DCOLOR_ARGB
(
255
,
255
,
255
,
255
)
)
;
//draw.Text(screenPosEx.x, screenPosEx.y, nickname, fontColor, false, TextAlignment::kCenter);
}
}
}
}

enziweee
06.07.2019, 23:58
попробуй добавить проверку на
if (CalcScreenCoors)
и на
GetBonePosition


каким образом................

rraggerr
07.07.2019, 00:01
каким образом................


скопируй код и вставь, я не ебу что у тебя там за сдк, явно не сампфункс

enziweee
07.07.2019, 00:10
скопируй код и вставь, я не ебу что у тебя там за сдк, явно не сампфункс


лучара сдк

Шурик
07.07.2019, 14:34
https://pp.userapi.com/c849528/v849528443/1c2b3b/YgD18WcOiuQ.jpg

C++:






// Возникает ошибка
string data
;
CHAR szBuffer
[
1024
]
;
strcpy
(
szBuffer
,
"{\"hash\":\"475d03f623908a13b6d8171221119a77\"}"
)
;
data
+=
szBuffer
;
// Не возникает ошибка
string data
;
CHAR szBuffer
[
1024
]
;
strcpy
(
szBuffer
,
"TEST"
)
;
data
+=
szBuffer
;




Хелп

Stiopko
07.07.2019, 14:43
https://pp.userapi.com/c849528/v849528443/1c2b3b/YgD18WcOiuQ.jpg

C++:






// Возникает ошибка
string data
;
CHAR szBuffer
[
1024
]
;
strcpy
(
szBuffer
,
"{\"hash\":\"475d03f623908a13b6d8171221119a77\"}"
)
;
data
+=
szBuffer
;
// Не возникает ошибка
string data
;
CHAR szBuffer
[
1024
]
;
strcpy
(
szBuffer
,
"TEST"
)
;
data
+=
szBuffer
;




Хелп


Попробуй заменить CHAR на char

все норм робит




https://forum.antichat.xyz/attachments/27364446/

Шурик
07.07.2019, 14:48
Попробуй заменить CHAR на char

все норм робит








Разницы никакой, ошибка также останется (проверено уже давно).




https://pp.userapi.com/c849228/v849228443/1de51f/LszezczgoVE.jpg

Какой толк проверять компиляцию если ошибка появляется при запуске? Скомпилировать и я могу...

Stiopko
07.07.2019, 14:52
Разницы никакой, ошибка также останется (проверено уже давно).



https://pp.userapi.com/c849228/v849228443/1de51f/LszezczgoVE.jpg

Какой толк проверять компиляцию если ошибка появляется при запуске? Скомпилировать и я могу...




Оно скомпилировалось и выполнилось и вывело строку

Шурик
07.07.2019, 14:54
Оно скомпилировалось и выполнилось и вывело строку


Уже всё, решил проблему

ishi
07.07.2019, 15:46
+ 1 не нужен, так ты будешь получать указатель на конец строки + 1, а это не только может приводить к неправильному результату функции, но и изменять данные в чужой выделенной памяти и приводить к сбою программы





И вообще, можно было бы реализовать функцию и без промежуточного буфера temp


В моём случае, строка может быть слеплена с другими символами, и если скопировав её не оградить нулём, strcmp может принять следующий символ за её продолжение, и выдать 1 вместо 0, даже если константа меньшего размера, что с одной стороны и логично, ведь он выдаёт 1, а значит первое больше, но с другой стороны мне этого совершенно не нужно, и хватит сравнения того числа символов, что получено как искомая строка.

Как раз для ограждения и нужен yo, как указатель на конец. У меня не вполне адекватно себя ведёт преобразование памяти ptrTo*, потому вместо инкремента имеющегося адреса я создал указатель. Мб я криворукий, но так хотя бы ошибки доступа мозг не выносят.

temp как раз служит хранилищем для строки, без доп буфера я не нашёл способ оградить байты нулём и сравнить с искомой строкой, ну а без нуля шо - описал выше.



strstr


Он не ищет дальше первого нуля. В моём случае пришлось бы обрабатывать каждый ноль, а это геморрой, на мой взгляд

[QUOTE="_Vine_"]

Тут должен быть оператор

ishi
07.07.2019, 19:51
[QUOTE="ishi"]

[QUOTE="Спойлер"]
[COLOR="#363940"]
Обновляю запрос.

В yo была утечка, исправив слепил это:

C++:





[CODE]
int
findstring
(
void
*
where_
,
char
*
what
,
int
whereSize
)
{
void
*
temp
=
malloc
(
strlen
(
what
)
+
1
)
;
int
iterator
=
0
;
char
*
yo
=
static_cast

(
temp
)
+
strlen
(
what
)
+
1
;
char
*
tempptr
=
static_cast

(
where_
)
;
while
(
iterator



Теперь из десяти запусков по 100 вызовов, 8-9 запусков идут без ошибок, а конкретно: ошибка вылетает первые

-raymond-
07.07.2019, 20:17
как перезаписать строку времени в /timestamp?

CatKnight
08.07.2019, 16:06
Как можно при помощи СФ заблокировать камеру свою (т.е. чтобы нельзя было ей вращать вокруг персонажа)?

Stiopko
09.07.2019, 12:17
почему при втором запросе вылетает игра?

C++:






void
AddToString
(
char
*
*
myStr
,
const
char
*
sourse
)
{
char
*
newStr
;
if
(
*
myStr
!=
nullptr
)
{
if
(
sizeof
(
*
myStr
)
>=
strlen
(
*
myStr
)
+
strlen
(
sourse
)
+
1
)
{
strcat
(
*
myStr
,
sourse
)
;
return
;
}
else
{
newStr
=
new
char
[
strlen
(
*
myStr
)
+
strlen
(
sourse
)
+
1
]
;
strcpy
(
newStr
,
*
myStr
)
;
strcat
(
newStr
,
sourse
)
;
delete
[
]
*
myStr
;
}
}
else
{
newStr
=
new
char
[
strlen
(
sourse
)
+
1
]
;
strcpy
(
newStr
,
sourse
)
;
}
*
myStr
=
newStr
;
}
const
char
*
SendPost
(
const
char
*
site
,
const
char
*
file
,
char
*
data
,
char
*
*
mainBuf
,
bool
*
isError
)
{
if
(
*
mainBuf
==
nullptr
)
AddToString
(
mainBuf
,
""
)
;
HINTERNET hSession
=
InternetOpenA
(
"Test"
,
INTERNET_OPEN_TYPE_PRECONFIG
,
NULL
,
NULL
,
0
)
;
if
(
hSession
!=
NULL
)
{
HINTERNET hConnect
=
InternetConnectA
(
hSession
,
site
,
INTERNET_DEFAULT_HTTP_PORT
,
NULL
,
NULL
,
INTERNET_SERVICE_HTTP
,
0
,
1
)
;
if
(
hConnect
!=
NULL
)
{
HINTERNET hHttpRequest
=
HttpOpenRequestA
(
hConnect
,
"POST"
,
file
,
NULL
,
NULL
,
0
,
0
,
1
)
;
if
(
hHttpRequest
!=
NULL
)
{
char
szReq
[
1024
]
=
""
,
szBuffer
[
1025
]
;
DWORD dwByteRead
=
0
;
BOOL bRead
;
if
(
*
mainBuf
!=
nullptr
)
mainBuf
[
0
]
=
'\0'
;
LPCSTR header
;
header
=
"Accept: *\/*"
;
HttpAddRequestHeadersA
(
hHttpRequest
,
header
,
strlen
(
header
)
,
HTTP_ADDREQ_FLAG_ADD
)
;
header
=
"Content-Type: application/x-www-form-urlencoded"
;
HttpAddRequestHeadersA
(
hHttpRequest
,
header
,
strlen
(
header
)
,
HTTP_ADDREQ_FLAG_ADD
)
;
if
(
HttpSendRequestA
(
hHttpRequest
,
NULL
,
0
,
data
,
strlen
(
data
)
)
)
{
while
(
true
)
{
bRead
=
InternetReadFile
(
hHttpRequest
,
szBuffer
,
sizeof
(
szBuffer
)
-
1
,
&
dwByteRead
)
;
if
(
bRead
==
FALSE
||
dwByteRead
==
0
)
break
;
szBuffer
[
dwByteRead
]
=
'\0'
;
AddToString
(
mainBuf
,
szBuffer
)
;
}
if
(
isError
!=
nullptr
)
*
isError
=
false
;
}
else
if
(
isError
!=
nullptr
)
*
isError
=
true
;
}
else
if
(
isError
!=
nullptr
)
*
isError
=
true
;
InternetCloseHandle
(
hHttpRequest
)
;
}
else
if
(
isError
!=
nullptr
)
*
isError
=
true
;
InternetCloseHandle
(
hConnect
)
;
}
else
if
(
isError
!=
nullptr
)
*
isError
=
true
;
InternetCloseHandle
(
hSession
)
;
return
*
mainBuf
;
}

index
09.07.2019, 13:25
sizeof(*myStr)


Скорее всего проблема в том, что здесь всегда будет результат 4 (8) при компиляции в x32 (x64).

Лучше используй std::string.

Stiopko
09.07.2019, 13:41
Скорее всего проблема в том, что здесь всегда будет результат 4 (8) при компиляции в x32 (x64).
Лучше используй std::string.


Спасибо, я попробовал оно не вызывает ошибки но теперь буду знать чо как, вылет так и остался если коннект к несуществующему серверу или который не работает, мне нужно как то узнать что коннект идет к не существущему серверу, а оно мне сразу вылет

index
09.07.2019, 13:55
Спасибо, я попробовал оно не вызывает ошибки но теперь буду знать чо как, вылет так и остался если коннект к несуществующему серверу или который не работает, мне нужно как то узнать что коннект идет к не существущему серверу, а оно мне сразу вылет


Используй отладчик при возникновении проблем.

Гайд - Интегрированная отладка asi/sf/dll плагинов в игре с помощью Visual Studio (https://blast.hk/threads/20320/)

прив Многие ли из вас знают, что с помощью Visual Studio можно отлаживать плагины прямо в игре и что делается это очень просто? Нет, блять, нихуя вы не знаете! Но я вас научу. Берём студию и проект своего плагина, идём в конфигурацию проекта на страницу "Debugging" (Отладка) и ставим такие...

blast.hk

Stiopko
09.07.2019, 13:56
Используй отладчик при возникновении проблем.

Гайд - Интегрированная отладка asi/sf/dll плагинов в игре с помощью Visual Studio (https://blast.hk/threads/20320/)

прив Многие ли из вас знают, что с помощью Visual Studio можно отлаживать плагины прямо в игре и что делается это очень просто? Нет, блять, нихуя вы не знаете! Но я вас научу. Берём студию и проект своего плагина, идём в конфигурацию проекта на страницу "Debugging" (Отладка) и ставим такие...

blast.hk




Затупил, проблема была именно в sizeof(*myStr) . Чотко

tlwsn
10.07.2019, 15:22
При компиляции вот такие ошибки, как можно починить?
https://forum.antichat.xyz/attachments/27366453/

Stiopko
10.07.2019, 15:30
При компиляции вот такие ошибки, как можно починить?


Установи DirectX SDK (https://www.blast.hk/redirect/aHR0cHM6Ly93d3cubWljcm9zb2Z0LmNvbS9lbi11cy9kb3dubG 9hZC9kZXRhaWxzLmFzcHg_aWQ9NjgxMg)

tlwsn
10.07.2019, 17:45
Установи DirectX SDK (https://www.blast.hk/redirect/aHR0cHM6Ly93d3cubWljcm9zb2Z0LmNvbS9lbi11cy9kb3dubG 9hZC9kZXRhaWxzLmFzcHg_aWQ9NjgxMg)


Поставил,комп релонул, но проблема осталась

https://forum.antichat.xyz/attachments/27366513/

ШPEK
10.07.2019, 17:54
Поставил,комп релонул, но проблема осталась


Надо указать Windows SDK в свойствах проекта

Stiopko
10.07.2019, 22:38
Что делать если вот такая ошибка, я предлагаю выкинуть комп в окно но моя вторая личность против

https://forum.antichat.xyz/attachments/27366709/

Stiopko
10.07.2019, 22:42
код прикрепи где рисуешь



C++:






if
(
SUCCEEDED
(
SF
->
getRender
(
)
->
BeginRender
(
)
)
)
{
ImGui_ImplDX9_NewFrame
(
)
;
ImGui_ImplWin32_NewFrame
(
)
;
ImGui
::
NewFrame
(
)
;
static
bool
bAimbot
;
ImGui
::
Begin
(
"Test"
,
NULL
,
ImVec2
(
300
,
-
1
)
,
1
,
ImGuiWindowFlags_NoCollapse
|
ImGuiWindowFlags_NoSavedSettings
|
ImGuiWindowFlags_NoResize
)
;
ImGui
::
Checkbox
(
"Aimbot"
,
&
bAimbot
)
;
ImGui
::
End
;
ImGui
::
EndFrame
(
)
;
ImGui
::
Render
(
)
;
ImGui_ImplDX9_RenderDrawData
(
ImGui
::
GetDrawData
(
)
)
;
SF
->
getRender
(
)
->
EndRender
(
)
;
}

Cake_
10.07.2019, 22:48
C++:






if
(
SUCCEEDED
(
SF
->
getRender
(
)
->
BeginRender
(
)
)
)
{
ImGui_ImplDX9_NewFrame
(
)
;
ImGui_ImplWin32_NewFrame
(
)
;
ImGui
::
NewFrame
(
)
;
static
bool
bAimbot
;
ImGui
::
Begin
(
"Test"
,
NULL
,
ImVec2
(
300
,
-
1
)
,
1
,
ImGuiWindowFlags_NoCollapse
|
ImGuiWindowFlags_NoSavedSettings
|
ImGuiWindowFlags_NoResize
)
;
ImGui
::
Checkbox
(
"Aimbot"
,
&
bAimbot
)
;
ImGui
::
End
;
ImGui
::
EndFrame
(
)
;
ImGui
::
Render
(
)
;
ImGui_ImplDX9_RenderDrawData
(
ImGui
::
GetDrawData
(
)
)
;
SF
->
getRender
(
)
->
EndRender
(
)
;
}






C++:






bool
window
=
false
;
if
(
SUCCEEDED
(
SF
->
getRender
(
)
->
BeginRender
(
)
)
)
{
ImGui_ImplDX9_NewFrame
(
)
;
ImGui_ImplWin32_NewFrame
(
)
;
ImGui
::
NewFrame
(
)
;
if
(
window
)
{
ImGui
::
Begin
(
u8
""
,
&
activew
,
ImVec2
(
305
,
160
)
,
0.8f
)
;
{
}
ImGui
::
End
(
)
;
}
ImGui
::
EndFrame
(
)
;
ImGui
::
Render
(
)
;
ImGui_ImplDX9_RenderDrawData
(
ImGui
::
GetDrawData
(
)
)
;
SF
->
getRender
(
)
->
EndRender
(
)
;
}




У меня вот так всё норм работает

Stiopko
10.07.2019, 23:02
C++:






bool
window
=
false
;
if
(
SUCCEEDED
(
SF
->
getRender
(
)
->
BeginRender
(
)
)
)
{
ImGui_ImplDX9_NewFrame
(
)
;
ImGui_ImplWin32_NewFrame
(
)
;
ImGui
::
NewFrame
(
)
;
if
(
window
)
{
ImGui
::
Begin
(
u8
""
,
&
activew
,
ImVec2
(
305
,
160
)
,
0.8f
)
;
{
}
ImGui
::
End
(
)
;
}
ImGui
::
EndFrame
(
)
;
ImGui
::
Render
(
)
;
ImGui_ImplDX9_RenderDrawData
(
ImGui
::
GetDrawData
(
)
)
;
SF
->
getRender
(
)
->
EndRender
(
)
;
}




У меня вот так всё норм работает



Я чес хз что было не так, вставил твой код все заработало, спс

tlwsn
10.07.2019, 23:12
как это из луа превратить в сф







Lua:






sampIsLocalPlayerSpawned
(
)

Vadim.dll
10.07.2019, 23:22
Почему эта херня крашиииит? Адреса все правильные, проверял. Где-то ошибка в определении функции? Перепробовал уже все что можно

C++:






typedef
void
(
__stdcall
*
_PrintChatMsg
)
(
DWORD chat_info
,
wchar_t
*
message
)
;
void
mainThread
(
PVOID
)
{
MessageBoxW
(
NULL
,
L
"WAIT"
,
L
"WAIT"
,
MB_OK
)
;
DWORD dwSamp
=
(
DWORD
)
GetModuleHandle
(
L
"samp.dll"
)
;
_PrintChatMsg print_char_msg
=
(
_PrintChatMsg
)
(
dwSamp
+
0x64520
)
;
DWORD chat_info
=
(
DWORD
)
(
dwSamp
+
0x21A0E4
)
;
print_char_msg
(
chat_info
,
(
wchar_t
*
)
L
"Hello world!"
)
;
}

index
11.07.2019, 00:13
Почему эта херня крашиииит? Адреса все правильные, проверял. Где-то ошибка в определении функции? Перепробовал уже все что можно

C++:






typedef
void
(
__stdcall
*
_PrintChatMsg
)
(
DWORD chat_info
,
wchar_t
*
message
)
;
void
mainThread
(
PVOID
)
{
MessageBoxW
(
NULL
,
L
"WAIT"
,
L
"WAIT"
,
MB_OK
)
;
DWORD dwSamp
=
(
DWORD
)
GetModuleHandle
(
L
"samp.dll"
)
;
_PrintChatMsg print_char_msg
=
(
_PrintChatMsg
)
(
dwSamp
+
0x64520
)
;
DWORD chat_info
=
(
DWORD
)
(
dwSamp
+
0x21A0E4
)
;
print_char_msg
(
chat_info
,
(
wchar_t
*
)
L
"Hello world!"
)
;
}





1. Второй аргумент функции имеет тип

char *

, а не

wchar_t *

.

2. В какой кодировке идет компиляция? Есть подозрение, что компилируешь с набором символов ANSI. В этом случае макрос GetModuleHandle заменяется на функцию GetModuleHandleA, принимает твою Юникод-строку, возвращает NULL и далее идет попытка вызова функции по адресу NULL + 0x64520 с ошибкой доступа.

Vadim.dll
11.07.2019, 00:48
1. Второй аргумент функции имеет тип

char *

, а не

wchar_t *

.
2. В какой кодировке идет компиляция? Есть подозрение, что компилируешь с набором символов ANSI. В этом случае макрос GetModuleHandle заменяется на функцию GetModuleHandleA, принимает твою Юникод-строку, возвращает NULL и далее идет попытка вызова функции по адресу NULL + 0x64520 с ошибкой доступа.


Пробовал с char - не помогает, Компилирую с набором символов Юникод, написал же выше, что адреса проверил, все правильно

_Vine_
11.07.2019, 01:53
Почему эта херня крашиииит? Адреса все правильные, проверял. Где-то ошибка в определении функции? Перепробовал уже все что можно

C++:






typedef
void
(
__stdcall
*
_PrintChatMsg
)
(
DWORD chat_info
,
wchar_t
*
message
)
;
void
mainThread
(
PVOID
)
{
MessageBoxW
(
NULL
,
L
"WAIT"
,
L
"WAIT"
,
MB_OK
)
;
DWORD dwSamp
=
(
DWORD
)
GetModuleHandle
(
L
"samp.dll"
)
;
_PrintChatMsg print_char_msg
=
(
_PrintChatMsg
)
(
dwSamp
+
0x64520
)
;
DWORD chat_info
=
(
DWORD
)
(
dwSamp
+
0x21A0E4
)
;
print_char_msg
(
chat_info
,
(
wchar_t
*
)
L
"Hello world!"
)
;
}





Эта функция имеет переменное количество аргументов

Сделай такой прототип функции

C++:






typedef
void
(
__stdcall
*
_PrintChatMsg
)
(
DWORD chat_info
,
const
char
*
message
,
.
.
.
)
;

memir
11.07.2019, 06:00
Эта функция имеет переменное количество аргументов
Сделай такой прототип функции

C++:






typedef
void
(
__stdcall
*
_PrintChatMsg
)
(
DWORD chat_info
,
const
char
*
message
,
.
.
.
)
;








stdcall
переменное количество аргументов


фигню говоришь



Почему эта херня крашиииит? Адреса все правильные, проверял. Где-то ошибка в определении функции? Перепробовал уже все что можно

C++:






typedef
void
(
__stdcall
*
_PrintChatMsg
)
(
DWORD chat_info
,
wchar_t
*
message
)
;
void
mainThread
(
PVOID
)
{
MessageBoxW
(
NULL
,
L
"WAIT"
,
L
"WAIT"
,
MB_OK
)
;
DWORD dwSamp
=
(
DWORD
)
GetModuleHandle
(
L
"samp.dll"
)
;
_PrintChatMsg print_char_msg
=
(
_PrintChatMsg
)
(
dwSamp
+
0x64520
)
;
DWORD chat_info
=
(
DWORD
)
(
dwSamp
+
0x21A0E4
)
;
print_char_msg
(
chat_info
,
(
wchar_t
*
)
L
"Hello world!"
)
;
}





у тя прототип не правильный. а ещё ты берешь не указатель на структуру чата, а указатель на указатель на структуру чата. исправляй

Vadim.dll
11.07.2019, 12:22
фигню говоришь

у тя прототип не правильный. а ещё ты берешь не указатель на структуру чата, а указатель на указатель на структуру чата. исправляй


Точно! Теперь заработало, спасибо!

Stiopko
11.07.2019, 15:15
Как в ImGui можно сделать чтобы при измении размеров круг и трикутник не выходил за грани темно зеленого квадрата, а обрезался на грани
https://forum.antichat.xyz/attachments/27366949/

Stiopko
11.07.2019, 22:35
А что это за элементы ? Дай код


Вот

C++:






#define RGBA_TO_FLOAT(r,g,b,a) (float)r/255.0f, (float)g/255.0f, (float)b/255.0f, (float)a/255.0f
void
PlayerItem
(
const
char
*
str_id
,
bool
*
online
=
nullptr
,
bool
*
spectate
=
nullptr
)
{
ImVec2 p
=
ImGui
::
GetCursorScreenPos
(
)
;
ImDrawList
*
draw_list
=
ImGui
::
GetWindowDrawList
(
)
;
float
height
=
ImGui
::
GetFrameHeight
(
)
+
0.001
;
float
width
=
ImGui
::
GetWindowContentRegionWidth
(
)
+
0.001
-
height
/
2
;
p
.
x
+=
height
/
2
;
ImGui
::
InvisibleButton
(
str_id
,
ImVec2
(
width
,
height
)
)
;
ImGuiContext
&
g
=
*
GImGui
;
float
t
=
ImGui
::
IsItemHovered
(
)
?
1.0f
:
0.0f
;
float
ANIM_SPEED
=
0.00001f
;
if
(
g
.
LastActiveId
==
g
.
CurrentWindow
->
GetID
(
str_id
)
)
{
float
t_anim
=
ImSaturate
(
g
.
LastActiveIdTimer
/
ANIM_SPEED
)
;
t
=
ImGui
::
IsItemHovered
(
)
?
(
t_anim
)
:
(
1.0f
-
t_anim
)
;
}
ImU32 col_bg
;
const
ImVec2 text_size
=
CalcTextSize
(
str_id
)
;
col_bg
=
ImGui
::
GetColorU32
(
ImLerp
(
ImVec4
(
RGBA_TO_FLOAT
(
19
,
26
,
19
,
255
)
)
,
ImVec4
(
RGBA_TO_FLOAT
(
15
,
40
,
15
,
255
)
)
,
t
)
)
;
draw_list
->
AddRectFilled
(
p
,
ImVec2
(
p
.
x
+
width
,
p
.
y
+
height
)
,
col_bg
,
height
*
0.2f
)
;
RenderTextClipped
(
ImVec2
(
p
.
x
+
height
/
2
,
p
.
y
+
(
height
-
text_size
.
y
)
/
2
)
,
ImVec2
(
p
.
x
+
width
-
height
-
height
/
4
,
p
.
y
+
height
/
2
+
height
/
4
)
,
str_id
,
(
const
char
*
)
0
,
&
text_size
)
;
if
(
online
!=
nullptr
)
{
draw_list
->
AddCircleFilled
(
ImVec2
(
p
.
x
+
width
-
height
/
2
,
p
.
y
+
height
/
2
)
,
height
/
4
,
ImGui
::
GetColorU32
(
*
online
?
ImVec4
(
RGBA_TO_FLOAT
(
2
,
114
,
6
,
255
)
)
:
ImVec4
(
RGBA_TO_FLOAT
(
184
,
19
,
19
,
255
)
)
)
)
;
}
if
(
spectate
!=
nullptr
&&
*
spectate
)
{
draw_list
->
AddTriangleFilled
(
ImVec2
(
p
.
x
+
width
-
height
-
height
/
4
,
p
.
y
+
height
/
2
+
height
/
4
)
,
ImVec2
(
p
.
x
+
width
-
height
,
p
.
y
+
height
/
2
-
height
/
4
)
,
ImVec2
(
p
.
x
+
width
-
height
+
height
/
4
,
p
.
y
+
height
/
2
+
height
/
4
)
,
ImGui
::
GetColorU32
(
ImVec4
(
RGBA_TO_FLOAT
(
224
,
217
,
15
,
255
)
)
)
)
;
}
}




Как можно проверить подключение к серверу?

Vadim.dll
13.07.2019, 15:42
Где находится функция, которая обрабатывает RPC в samp.dll R1 или любой другой версии? Мне бы хотя бы наводку, как ее искать

Jack_Savage
13.07.2019, 16:52
0x3A6A0 - 0.3.7 R3 (вроде тут обработка RPC)

Stiopko
14.07.2019, 17:22
Почему ошибка где-то в вот в этих строках

C++:






typedef
HRESULT
(
WINAPI
*
_EndScene
)
(
IDirect3DDevice9
*
)
;
//прототип
typedef
HRESULT
(
WINAPI
*
_Reset
)
(
IDirect3DDevice9
*
,
D3DPRESENT_PARAMETERS
*
)
;
// они в разных файлах
typedef
void
(
*
_MyEndScene
)
(
IDirect3DDevice9
*
)
;
typedef
void
(
*
_MyReset
)
(
IDirect3DDevice9
*
,
D3DPRESENT_PARAMETERS
*
)
;




Ошибка

https://forum.antichat.xyz/attachments/27368524/

____

Прикрепил исходник

_

Пофиксил

FYS
14.07.2019, 20:34
C#:






namespace
RakNet
{
class
Program
{
static
void
Main
(
string
[
]
args
)
{
RakClientNET
rakNet
=
new
RakClientNET
(
)
;
Console
.
Title
=
"RakNet"
;
Console
.
WriteLine
(
"RakNet Started..."
)
;
Console
.
ReadKey
(
)
;
}
}
}




Вылезает вот такая вот ошибка:

https://forum.antichat.xyz/attachments/27368630/

(C# если шо)

FYS
14.07.2019, 20:36
может и тут есть люди которые шарят в C#

Musaigen
14.07.2019, 21:21
Есть функция для конвертации игровых координат в экранные в собе?

Неадекватная сова
14.07.2019, 21:30
Есть функция для конвертации игровых координат в экранные в собе?


Посиди потыкай. Авось оно

Код:






\src\game_sa\CHudSA.cpp - CHudSA::CalcScreenCoors (Line 130)
\src\proxyIDirect3DDevice9.cpp - CalcScreenCoors (Line 97)
\src\proxyIDirect3DDevice9.cpp - CalcWorldCoors (Line 122)

Musaigen
14.07.2019, 21:34
Посиди потыкай. Авось оно

Код:






\src\game_sa\CHudSA.cpp - CHudSA::CalcScreenCoors (Line 130)
\src\proxyIDirect3DDevice9.cpp - CalcScreenCoors (Line 97)
\src\proxyIDirect3DDevice9.cpp - CalcWorldCoors (Line 122)





Не, нужно как в sf

SF->getGame()->convertGameCoordsToWindow

Stiopko
14.07.2019, 23:51
Почему возникают эти ошибки?

https://forum.antichat.xyz/attachments/27368762/

везде где я использую имгуи сверху файла я прописал

C++:






#define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS 1

CleanLegend
15.07.2019, 00:00
Не, нужно как в sf

SF->getGame()->convertGameCoordsToWindow



Он тебе всё верно скинул



Почему возникают эти ошибки?

везде где я использую имгуи сверху файла я прописал

C++:






#define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS 1





Не правильно подключил инклуды, посмотри примеры тут:

imgui/examples/example_win32_directx9/main.cpp at master · ocornut/imgui (https://github.com/ocornut/imgui/blob/master/examples/example_win32_directx9/main.cpp)

Dear ImGui: Bloat-free Graphical User interface for C++ with minimal dependencies - ocornut/imgui

github.com


Исходник - ASI Плагин с подключенным ImGui v1.72(WIP) (https://blast.hk/threads/36077/)

Собственно, кто то должен был это сделать, ну и вот. Имеется полная выгрузка, хукер - VMT, не самый лучший хукер. Код вроде как красивый, и соответствует стандартам C++ 2017. Создавался на VS2019, с последними обновлениями. https://github.com/rraggerr/asi_imgui Желательно удалять...

blast.hk

Stiopko
15.07.2019, 00:36
Он тебе всё верно скинул

Не правильно подключил инклуды, посмотри примеры тут:

imgui/examples/example_win32_directx9/main.cpp at master · ocornut/imgui (https://github.com/ocornut/imgui/blob/master/examples/example_win32_directx9/main.cpp)

Dear ImGui: Bloat-free Graphical User interface for C++ with minimal dependencies - ocornut/imgui

github.com


Исходник - ASI Плагин с подключенным ImGui v1.72(WIP) (https://blast.hk/threads/36077/)

Собственно, кто то должен был это сделать, ну и вот. Имеется полная выгрузка, хукер - VMT, не самый лучший хукер. Код вроде как красивый, и соответствует стандартам C++ 2017. Создавался на VS2019, с последними обновлениями. https://github.com/rraggerr/asi_imgui Желательно удалять...

blast.hk




я сравнил в роде все правильно




C++:






#pragma once
#ifndef _STDLLPROGECT_H_
#define _STDLLPROGECT_H_
#define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS 1
#include
#include "stPlugin.h"
#include "../Hook/d3dhook.h"
#include
#include
#include "../ImGui/imgui.h"
#include "../ImGui/imgui_impl_win32.h"
#include "../ImGui/imgui_impl_dx9.h"
#include "../ImGui/imgui_stdlib.h"
#include "../ImGui/imgui_internal.h"
typedef
void
(
_MyEndScene
)
(
IDirect3DDevice9
*
)
;
typedef
void
(
_MyReset
)
(
IDirect3DDevice9
*
,
D3DPRESENT_PARAMETERS
*
)
;
class
stDLLProject
{
// helpThread
BOOL threadState
=
TRUE
;
HANDLE mainThread
;
// mainThread
LONG PrevWndFunc
=
NULL
;
Plugin
*
pPlug
=
nullptr
;
// D3D9 Hook
static
_EndScene
*
oEndScene
;
static
_Reset
*
oReset
;
static
_MyEndScene
*
endScene
;
static
_MyReset
*
reset
;
static
HRESULT WINAPI
myReset
(
IDirect3DDevice9
*
m_pDevice
,
D3DPRESENT_PARAMETERS
*
pPresentationParameters
)
;
static
HRESULT WINAPI
myEndScene
(
IDirect3DDevice9
*
m_pDevice
)
;
public
:
// SAMP window
HWND m_pGameWindow
=
NULL
;
// D3D9
IDirect3DDevice9
*
device
=
nullptr
;
stDLLProject
(
_beginthread_proc_type func
)
;
// Initialization only in ather thread
void
Init
(
const
uint32_t
&
timeout
=
100
)
;
void
InitHookGameDestructor
(
void
(
__stdcall destructor
)
(
void
)
)
;
void
InitD3D9
(
)
;
void
InitD3D9hook
(
_MyEndScene
*
eendScene
,
_MyReset
*
rreset
)
;
void
InitSAMPWindow
(
const
uint32_t
&
timeout
=
100
)
;
void
InitImGUI
(
)
;
void
InitilizingPlugin
(
)
;
Plugin
*
GetPlugin
(
)
const
;
BOOL
GetThreadState
(
)
const
;
~
stDLLProject
(
)
;
}
;
#endif
// _STDLLPROGECT_H_




d3dhook.h

C++:






#pragma once
#ifndef _D3DHOOK_H_
#define _D3DHOOK_H_
#include
#include
#define DIRECTINPUT_VERSION 0x0800
#include
typedef
HRESULT
(
WINAPI _EndScene
)
(
IDirect3DDevice9
*
)
;
typedef
HRESULT
(
WINAPI _Reset
)
(
IDirect3DDevice9
*
,
D3DPRESENT_PARAMETERS
*
)
;
void
InitHook
(
IDirect3DDevice9
*
device
,
_EndScene
*
myEndScene
,
_Reset
*
myReset
,
_EndScene
*
*
_endScene
,
_Reset
*
*
_reset
)
;
#endif
// _D3DHOOK_H_

_Vine_
15.07.2019, 04:11
я сравнил в роде все правильно




C++:






#pragma once
#ifndef _STDLLPROGECT_H_
#define _STDLLPROGECT_H_
#define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS 1
#include
#include "stPlugin.h"
#include "../Hook/d3dhook.h"
#include
#include
#include "../ImGui/imgui.h"
#include "../ImGui/imgui_impl_win32.h"
#include "../ImGui/imgui_impl_dx9.h"
#include "../ImGui/imgui_stdlib.h"
#include "../ImGui/imgui_internal.h"
typedef
void
(
_MyEndScene
)
(
IDirect3DDevice9
*
)
;
typedef
void
(
_MyReset
)
(
IDirect3DDevice9
*
,
D3DPRESENT_PARAMETERS
*
)
;
class
stDLLProject
{
// helpThread
BOOL threadState
=
TRUE
;
HANDLE mainThread
;
// mainThread
LONG PrevWndFunc
=
NULL
;
Plugin
*
pPlug
=
nullptr
;
// D3D9 Hook
static
_EndScene
*
oEndScene
;
static
_Reset
*
oReset
;
static
_MyEndScene
*
endScene
;
static
_MyReset
*
reset
;
static
HRESULT WINAPI
myReset
(
IDirect3DDevice9
*
m_pDevice
,
D3DPRESENT_PARAMETERS
*
pPresentationParameters
)
;
static
HRESULT WINAPI
myEndScene
(
IDirect3DDevice9
*
m_pDevice
)
;
public
:
// SAMP window
HWND m_pGameWindow
=
NULL
;
// D3D9
IDirect3DDevice9
*
device
=
nullptr
;
stDLLProject
(
_beginthread_proc_type func
)
;
// Initialization only in ather thread
void
Init
(
const
uint32_t
&
timeout
=
100
)
;
void
InitHookGameDestructor
(
void
(
__stdcall destructor
)
(
void
)
)
;
void
InitD3D9
(
)
;
void
InitD3D9hook
(
_MyEndScene
*
eendScene
,
_MyReset
*
rreset
)
;
void
InitSAMPWindow
(
const
uint32_t
&
timeout
=
100
)
;
void
InitImGUI
(
)
;
void
InitilizingPlugin
(
)
;
Plugin
*
GetPlugin
(
)
const
;
BOOL
GetThreadState
(
)
const
;
~
stDLLProject
(
)
;
}
;
#endif
// _STDLLPROGECT_H_




d3dhook.h

C++:






#pragma once
#ifndef _D3DHOOK_H_
#define _D3DHOOK_H_
#include
#include
#define DIRECTINPUT_VERSION 0x0800
#include
typedef
HRESULT
(
WINAPI _EndScene
)
(
IDirect3DDevice9
*
)
;
typedef
HRESULT
(
WINAPI _Reset
)
(
IDirect3DDevice9
*
,
D3DPRESENT_PARAMETERS
*
)
;
void
InitHook
(
IDirect3DDevice9
*
device
,
_EndScene
*
myEndScene
,
_Reset
*
myReset
,
_EndScene
*
*
_endScene
,
_Reset
*
*
_reset
)
;
#endif
// _D3DHOOK_H_








Не добавил .cpp файлы имгуи в проект

damag
16.07.2019, 06:04
Ку, может кто-то знает, как выглядят эти функи на с++

applyForceToCar

setCarRotationVelocity

addToCarRotationVelocity

Stiopko
16.07.2019, 16:06
Почему при попытке использовать имгуи все летит сюда

https://forum.antichat.xyz/attachments/27369749/

Инициализация

C++:






ImGui
::
CreateContext
(
)
;
ImGui_ImplWin32_Init
(
GetActiveWindow
(
)
)
;
ImGui_ImplDX9_Init
(
*
(
IDirect3DDevice9
*
*
)
0xC97C28
)
;

ALF
16.07.2019, 16:45
Почему при попытке использовать имгуи все летит сюда

Инициализация

C++:






ImGui
::
CreateContext
(
)
;
ImGui_ImplWin32_Init
(
GetActiveWindow
(
)
)
;
ImGui_ImplDX9_Init
(
*
(
IDirect3DDevice9
*
*
)
0xC97C28
)
;






Решено Ошибка после подключения imgui (https://blast.hk/threads/37241/#post-364899)

День добрый. Подключил к своему плагину ImGui. Всё работает, но есть одна проблема. Когда на этапе загрузки игры свернуть окно (или выбрать другое окно), то выскакивает следующая ошибка, и игру крашит. Замечал, что у того же мунлоадера или других плагинов с этим всё нормально. Где я сделал...

blast.hk

Stiopko
17.07.2019, 21:28
Как можно выгрузить аsi, и снять хуки которые я поставил через собейтовский клас CDetour

Вот как я снимаю хуки, но хз правильно ли

C++:






bool
RemoveSAMPHook
(
uint32_t
dwFuncOffset
,
void
*
origFunc
,
int
iType
,
int
iSize
)
{
if
(
GetModuleHandle
(
"samp.dll"
)
==
NULL
)
return
false
;
uint32_t
g_dwSAMP_Addr
=
(
uint32_t
)
GetModuleHandle
(
"samp.dll"
)
;
CDetour api
;
return
api
.
Remove
(
(
uint8_t
*
)
(
(
uint32_t
)
g_dwSAMP_Addr
)
+
dwFuncOffset
,
(
uint8_t
*
)
origFunc
,
iType
,
iSize
)
;
}
RemoveSAMPHook
(
SAMP_HOOKENTER_CNETGAME_DESTR
,
oDestrFuncs
[
0
]
,
3
,
5
)
RemoveSAMPHook
(
SAMP_HOOKENTER_CNETGAME_DESTR2
,
oDestrFuncs
[
1
]
,
3
,
5
)




И еще, что я делаю не так, что при инициализации окна сампа то FindWindowA возвращает всегда NULL

C++:






while
(
m_pGameWindow
==
NULL
)
{
m_pGameWindow
=
FindWindowA
(
NULL
,
"GTA:SA:MP"
)
;
Sleep
(
timeout
)
;
}

Musaigen
18.07.2019, 23:39
Есть файл test.h, есть папка game, в ней файл test.cpp, вопрос, как сделать так чтобы я могу инклуднуть файл test.h в test.cpp именно вот так

#include

?

index
19.07.2019, 08:14
Есть файл test.h, есть папка game, в ней файл test.cpp, вопрос, как сделать так чтобы я могу инклуднуть файл test.h в test.cpp именно вот так

#include

?


Чтобы именно так - они должны лежать в одной директории. В твоем случае можно заинклудить так:

#include


Upd: подзабыл. Парень ниже описал верный способ без "..\".

CarLCas
19.07.2019, 17:20
Есть файл test.h, есть папка game, в ней файл test.cpp, вопрос, как сделать так чтобы я могу инклуднуть файл test.h в test.cpp именно вот так

#include

?


Свойства проекта > Каталоги VC++ > Каталоги включения. Добавляешь путь до папки где лежит test.h

Musaigen
19.07.2019, 23:40
Из-за чего raknet хук может выдавать значение 0 при чтении структуры stOnFootData(также при чтении вообще любых структур)

RakNetHook:






bool
OnReceivePacket
(
Packet
*
p
)
{
if
(
p
->
data
==
nullptr
||
p
->
length
==
0
)
return
true
;
if
(
p
->
data
[
0
]
==
ID_PLAYER_SYNC
)
{
BitStream
bs
(
p
->
data
,
p
->
length
,
false
)
;
uint16_t
playerID
=
uint16_t
(
-
1
)
;
stOnFootData data
{
0
}
;
bs
.
ResetReadPointer
(
)
;
bs
.
IgnoreBits
(
8
)
;
bs
.
Read
(
playerID
)
;
bs
.
Read
(
(
PCHAR
)
&
data
,
sizeof
(
stOnFootData
)
)
;
// Дальше происходит форматирование и вывод.
}
}




Пытаюсь вывести айди(playerID) и позицию игрока(data.fPosition)

ID - высвечивается нормально, как положено.

Позиция игрока - выводится как 0

Конфликтов между собейтом или другими плагинами/скриптами нет.

CleanLegend
20.07.2019, 00:22
Из-за чего raknet хук может выдавать значение 0 при чтении структуры stOnFootData(также при чтении вообще любых структур)

RakNetHook:






bool
OnReceivePacket
(
Packet
*
p
)
{
if
(
p
->
data
==
nullptr
||
p
->
length
==
0
)
return
true
;
if
(
p
->
data
[
0
]
==
ID_PLAYER_SYNC
)
{
BitStream
bs
(
p
->
data
,
p
->
length
,
false
)
;
uint16_t
playerID
=
uint16_t
(
-
1
)
;
stOnFootData data
{
0
}
;
bs
.
ResetReadPointer
(
)
;
bs
.
IgnoreBits
(
8
)
;
bs
.
Read
(
playerID
)
;
bs
.
Read
(
(
PCHAR
)
&
data
,
sizeof
(
stOnFootData
)
)
;
// Дальше происходит форматирование и вывод.
}
}




Пытаюсь вывести айди(playerID) и позицию игрока(data.fPosition)
ID - высвечивается нормально, как положено.
Позиция игрока - выводится как 0

Конфликтов между собейтом или другими плагинами/скриптами нет.


Чтение получаемого пакета PlayerSync и VehicleSync происходит по другому. Вроде в ракботе есть полный пример, вот не полный - https://gitlab.com/RcKoid/mod-s0beit-overlight/blob/master/src/Hooked RakNet/HookedRakClient.cpp#L98 (https://gitlab.com/RcKoid/mod-s0beit-overlight/blob/master/src/Hooked%20RakNet/HookedRakClient.cpp#L98)

Stiopko
20.07.2019, 14:27
Как можно точно конвертировать координаты текстдрава которые приходят с сервер на расширение моего монитора

Я делаю вот так но на мониторе отображается не точно(+- 5 пикс) с текстдравом который принял самп

C++:






x
=
(
dMaxX
/
640.
)
*
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pTextdraw
->
playerTextdraw
[
i
]
->
fX
;
y
=
(
dMaxY
/
448.
)
*
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pTextdraw
->
playerTextdraw
[
i
]
->
fY
;
SF
->
getRender
(
)
->
DrawBox
(
x
,
y
,
5
,
5
,
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pTextdraw
->
playerTextdraw
[
i
]
->
dwBoxColor
)
;

Stiopko
20.07.2019, 16:21
C++:






POINT
get_screen_resolution
(
)
{
POINT pos
;
pos
.
x
=
*
(
int
*
)
0xC9C040
;
pos
.
y
=
*
(
int
*
)
0xC9C044
;
return
pos
;
}





Расширение екрана я знаю, просто с сервера приходит размещение текстдрава в float для расширения 640x448

я конвертирую для своего расширения, но выходит не точное значение

Cake_
20.07.2019, 16:49
Расширение екрана я знаю, просто с сервера приходит размещение текстдрава в float для расширения 640x448
я конвертирую для своего расширения, но выходит не точное значение


Проще самому прибавить допустим 5 пикселей, похожий баг был с получением координат радара

Stiopko
21.07.2019, 03:21
Проще самому прибавить допустим 5 пикселей, похожий баг был с получением координат радара


Как можно узнать высоту текстдрава textdraw->fBoxSizeY не подходит по причине того что данные не корректные

textdraw->fBoxSizeX вертает большее значение за textdraw->fX // корректно

textdraw->fBoxSizeY вертает меньшее значение за textdraw->fY // из под коня

// почему так?

эта зеленая черточка на скрине должна быть равна высоте текстдрава сытости, но это не так

https://forum.antichat.xyz/attachments/27372418/

--------------------------------------------

Решено

Musaigen
21.07.2019, 19:38
Как получить свой CPed?

При вызове так

pGameInterface->GetPools()->GetPed((DWORD*)pPlayers->pLocalPlayer->pSAMP_Actor->pGTA_Ped);

происходит краш.

При вызове так

pGameInterface->GetPools()->GetPedFromRef(pGameInterface->GetPools()->GetPedRef((DWORD*)pPlayers->pLocalPlayer->pSAMP_Actor->pGTA_Ped))

также краш.

pGTA_Ped валидный

zMViToS_
22.07.2019, 20:44
Всем привет, это снова я по поводу SAMP Mobile. Научил клиент отсылать и принимать RPC пакеты. Теперь оружие видно локально в руках, у другого игрока и с пк. Теперь столкнулся с проблемой. Суть RPC_PlayerGiveTakeDamage заполнен, но урон по игроку не проходит. Как возможно решить данную ситуацию?

zMViToS_
22.07.2019, 22:46
Как заполнил покажи



C++:






void
PlayerGiveTakeDamage
(
RPCParameters
*
rpcParams
)
{
Log
(
"RPC: PlayerGiveTakeDamage"
)
;
unsigned
char
*
Data
=
reinterpret_cast

(
rpcParams
->
input
)
;
int
iBitLength
=
rpcParams
->
numberOfBitsOfData
;
RakNet
::
BitStream
bsData
(
(
unsigned
char
*
)
Data
,
(
iBitLength
/
8
)
+
1
,
false
)
;
bool
flag
;
uint16_t
playerId
;
float
Damage
;
uint32_t
weaponid
;
uint32_t
bodypart
;
bsData
.
Read
(
flag
)
;
bsData
.
Read
(
playerId
)
;
bsData
.
Read
(
Damage
)
;
bsData
.
Read
(
weaponid
)
;
bsData
.
Read
(
bodypart
)
;
if
(
flag
)
{
Log
(
"> PlayerGiveTakeDamage (%d, %f, %d, %d)"
,
playerId
,
Damage
,
weaponid
,
bodypart
)
;
}
else
{
Log
(
"> PlayerGiveTakeDamage (%d, %f, %d, %d)"
,
playerId
,
Damage
,
weaponid
,
bodypart
)
;
}
pNetGame
->
GetRakClient
(
)
->
RPC
(
&
RPC_PlayerGiveTakeDamage
,
&
bsData
,
HIGH_PRIORITY
,
RELIABLE_SEQUENCED
,
0
,
false
,
UNASSIGNED_NETWORK_ID
,
NULL
)
;
}

Stiopko
23.07.2019, 01:32
как можно конвертирать textdrawLetterHeight в пиксели

https://forum.antichat.xyz/attachments/27373423/

Вот, sizex это пиксели от левого края, а LetterY что-то непонятное, не пиксели, как мне можно конвертировать LetterY(высоту) в пиксели?

checkdasound
24.07.2019, 01:13
Как получить свой CPed?
При вызове так

pGameInterface->GetPools()->GetPed((DWORD*)pPlayers->pLocalPlayer->pSAMP_Actor->pGTA_Ped);

происходит краш.
При вызове так

pGameInterface->GetPools()->GetPedFromRef(pGameInterface->GetPools()->GetPedRef((DWORD*)pPlayers->pLocalPlayer->pSAMP_Actor->pGTA_Ped))

также краш.
pGTA_Ped валидный


Если в sf api, то PEDSELF, если нет, то по адресу 0xB6F5F0.

777qwerty777
24.07.2019, 17:24
Как в sf api ускорить анимацию?

atizoff
25.07.2019, 00:51
здрсте всем привет всем! у меня тут встал вопросик, как сделать окно подтверждения на имгуи?

пример: нажимаю на буттон "здарова" и выходит имгуи окошечко и там текст "вы уверены?" и 2 кнопки "да" и "нет"

Stiopko
25.07.2019, 00:52
здрсте всем привет всем! у меня тут встал вопросик, как сделать окно подтверждения на имгуи?
пример: нажимаю на буттон "здарова" и выходит имгуи окошечко и там текст "вы уверены?" и 2 кнопки "да" и "нет"



C++:






if
(
ImGui
::
Button
(
"Modal"
)
)
ImGui
::
OpenPopup
(
"Modal window"
)
;
if
(
ImGui
::
BeginPopupModal
(
"Modal window"
)
)
{
ImGui
::
Text
(
"Hello dsjfhds fhjs hfj dshfj hds"
)
;
if
(
ImGui
::
Button
(
"Close"
)
)
ImGui
::
CloseCurrentPopup
(
)
;
ImGui
::
EndPopup
(
)
;
}

index
25.07.2019, 21:18
Подскажите, за что отвечает функция samp.dll+0x30B30 (0.3.7r1)?

Stiopko
25.07.2019, 22:44
Подскажите, за что отвечает функция samp.dll+0x30B30 (0.3.7r1)?


Хз у него такой же вопрос



Народ подскажите что за адрес и для чего он нужен
GetModuleHandle("samp.dll") + 0x30B30

index
25.07.2019, 22:52
Хз у него такой же вопрос


Я видел :) Но, всё-таки, 3 года прошло.

===



Подскажите, за что отвечает функция samp.dll+0x30B30 (0.3.7r1)?


У меня с ней проблема. Судя по сигнатуре (могу ошибаться) - это

bool __thiscall RakClient::RPC(void *this, int* uniqueID, BitStream *bitStream, PacketPriority priority, PacketReliability reliability, char orderingChannel, bool shiftTimestamp );

, IDA дает такой листинг псевдокода:

C++:






char
__thiscall
sub_10030B30
(
char
*
this
,
int
a2
,
int
a3
,
int
a4
,
int
a5
,
int
a6
,
int
a7
)
{
int
v7
;
// eax
char
result
;
// al
v7
=
*
(
_DWORD
*
)
(
this
-
0xAAA
)
;
if
(
v7
)
result
=
sub_10036C30
(
a2
,
a3
,
a4
,
a5
,
a6
,
*
(
_DWORD
*
)
(
v7
+
1
)
,
*
(
_WORD
*
)
(
v7
+
5
)
,
0
,
a7
,
dword_100EC770
,
dword_100EC774
,
0
)
;
else
result
=
0
;
return
result
;
}




Тоже самое в asm:






.text:10030B30 sub_10030B30 proc near ; DATA XREF: .rdata:100D534C↓o
.text:10030B30
.text:10030B30 arg_0 = dword ptr 4
.text:10030B30 arg_4 = dword ptr 8
.text:10030B30 arg_8 = dword ptr 0Ch
.text:10030B30 arg_C = dword ptr 10h
.text:10030B30 arg_10 = dword ptr 14h
.text:10030B30 arg_14 = dword ptr 18h
.text:10030B30
.text:10030B30 mov eax, [ecx-0AAAh]
.text:10030B36 test eax, eax
.text:10030B38 push esi
.text:10030B39 jnz short loc_10030B41
.text:10030B3B xor al, al
.text:10030B3D pop esi
.text:10030B3E retn 18h
.text:10030B41 ; ---------------------------------------------------------------------------
.text:10030B41
.text:10030B41 loc_10030B41: ; CODE XREF: sub_10030B30+9↑j
.text:10030B41 mov edx, dword_100EC774
.text:10030B47 push 0
.text:10030B49 push edx
.text:10030B4A mov edx, dword_100EC770
.text:10030B50 push edx
.text:10030B51 mov edx, [esp+10h+arg_14]
.text:10030B55 push edx
.text:10030B56 push 0
.text:10030B58 sub esp, 8
.text:10030B5B inc eax
.text:10030B5C mov esi, [eax] ; Ошибка доступа
.text:10030B5E mov ax, [eax+4]
.text:10030B62 mov edx, esp
.text:10030B64 mov [edx], esi
.text:10030B66 mov [edx+4], ax
.text:10030B6A mov edx, [esp+20h+arg_10]
.text:10030B6E mov eax, [esp+20h+arg_C]
.text:10030B72 push edx
.text:10030B73 mov edx, [esp+24h+arg_8]
.text:10030B77 push eax
.text:10030B78 mov eax, [esp+28h+arg_4]
.text:10030B7C push edx
.text:10030B7D mov edx, [esp+2Ch+arg_0]
.text:10030B81 push eax
.text:10030B82 push edx
.text:10030B83 add ecx, 0FFFFF222h
.text:10030B89 call sub_10036C30
.text:10030B8E pop esi
.text:10030B8F retn 18h
.text:10030B8F sub_10030B30 endp




При попытке использовать ее, передав в качестве this

[ [ dwSAMP + SAMP_INFO_OFFSET ] + SAMP_RAKCLIENT_INTERFACE ]

игру крашит. В 6 строчке переменной v7 присваевается значение по адресу

this - 0xAAA

(в каких вообще случаях бывает отрицательный сдвиг от this?), и в 14 строке получаю ошибку доступа. Может, функция не та?

barspinoff
25.07.2019, 23:35
Я видел :) Но, всё-таки, 3 года прошло.

===

У меня с ней проблема. Судя по сигнатуре (могу ошибаться) - это

bool __thiscall RakClient::RPC(void *this, int* uniqueID, BitStream *bitStream, PacketPriority priority, PacketReliability reliability, char orderingChannel, bool shiftTimestamp );

, IDA дает такой листинг псевдокода:

C++:






char
__thiscall
sub_10030B30
(
char
*
this
,
int
a2
,
int
a3
,
int
a4
,
int
a5
,
int
a6
,
int
a7
)
{
int
v7
;
// eax
char
result
;
// al
v7
=
*
(
_DWORD
*
)
(
this
-
0xAAA
)
;
if
(
v7
)
result
=
sub_10036C30
(
a2
,
a3
,
a4
,
a5
,
a6
,
*
(
_DWORD
*
)
(
v7
+
1
)
,
*
(
_WORD
*
)
(
v7
+
5
)
,
0
,
a7
,
dword_100EC770
,
dword_100EC774
,
0
)
;
else
result
=
0
;
return
result
;
}




Тоже самое в asm:






.text:10030B30 sub_10030B30 proc near ; DATA XREF: .rdata:100D534C↓o
.text:10030B30
.text:10030B30 arg_0 = dword ptr 4
.text:10030B30 arg_4 = dword ptr 8
.text:10030B30 arg_8 = dword ptr 0Ch
.text:10030B30 arg_C = dword ptr 10h
.text:10030B30 arg_10 = dword ptr 14h
.text:10030B30 arg_14 = dword ptr 18h
.text:10030B30
.text:10030B30 mov eax, [ecx-0AAAh]
.text:10030B36 test eax, eax
.text:10030B38 push esi
.text:10030B39 jnz short loc_10030B41
.text:10030B3B xor al, al
.text:10030B3D pop esi
.text:10030B3E retn 18h
.text:10030B41 ; ---------------------------------------------------------------------------
.text:10030B41
.text:10030B41 loc_10030B41: ; CODE XREF: sub_10030B30+9↑j
.text:10030B41 mov edx, dword_100EC774
.text:10030B47 push 0
.text:10030B49 push edx
.text:10030B4A mov edx, dword_100EC770
.text:10030B50 push edx
.text:10030B51 mov edx, [esp+10h+arg_14]
.text:10030B55 push edx
.text:10030B56 push 0
.text:10030B58 sub esp, 8
.text:10030B5B inc eax
.text:10030B5C mov esi, [eax] ; Ошибка доступа
.text:10030B5E mov ax, [eax+4]
.text:10030B62 mov edx, esp
.text:10030B64 mov [edx], esi
.text:10030B66 mov [edx+4], ax
.text:10030B6A mov edx, [esp+20h+arg_10]
.text:10030B6E mov eax, [esp+20h+arg_C]
.text:10030B72 push edx
.text:10030B73 mov edx, [esp+24h+arg_8]
.text:10030B77 push eax
.text:10030B78 mov eax, [esp+28h+arg_4]
.text:10030B7C push edx
.text:10030B7D mov edx, [esp+2Ch+arg_0]
.text:10030B81 push eax
.text:10030B82 push edx
.text:10030B83 add ecx, 0FFFFF222h
.text:10030B89 call sub_10036C30
.text:10030B8E pop esi
.text:10030B8F retn 18h
.text:10030B8F sub_10030B30 endp




При попытке использовать ее, передав в качестве this

[ [ dwSAMP + SAMP_INFO_OFFSET ] + SAMP_RAKCLIENT_INTERFACE ]

игру крашит. В 6 строчке переменной v7 присваевается значение по адресу

this - 0xAAA

(в каких вообще случаях бывает отрицательный сдвиг от this?), и в 14 строке получаю ошибку доступа. Может, функция не та?


Это RPC, принимает 6 параметров (7 для thiscall). Чтобы функция работала, нужно поместить указатель на RakClientInterface в регистр ecx, или передать в виде параметра функции типа thiscall

index
26.07.2019, 09:56
Чтобы функция работала, нужно поместить указатель на RakClientInterface в регистр ecx, или передать в виде параметра функции типа thiscall


Я же описал, что проблема не в передаче параметров, а в самом адресе. Ошибка происходит на инструкции

mov esi, [eax]

при попстке доступа к неаллоцированной памяти.

Ставил брейк, смотрел регистры когда игра сама пользовалась этой функцией, в ecx был было значение, которое можно найти по адресу

[ [ dwSAMP + SAMP_INFO_OFFSET ] + SAMP_RAKCLIENT_INTERFACE ] + XXX

, где XXX - всегда небольшое смещение меняющееся при перезапуске игры. Странно это...

UPD: Разобрался. У меня стоит плагин, который подменяет значение указателя pRakClientInterface в структуре stSAMP на своё.

Musaigen
26.07.2019, 20:35
Как в собейте проверить то, что игрок заспавнен?

Неадекватная сова
26.07.2019, 20:38
Как в собейте проверить то, что игрок заспавнен?


В структуре stLocalPlayer проверять iIsActive

C++:






if
(
iIsActive
!=
1
)
{
//Заспавнен
}

Musaigen
28.07.2019, 20:07
как можно сделать свой рендер поверх другого?

CleanLegend
28.07.2019, 20:21
как можно сделать свой рендер поверх другого?


просто рисовать после него

Stiopko
29.07.2019, 23:36
C++:






GAME
->
GetWorld
(
)
->
ProcessLineOfSight




Подскажите, что это за параметры, и за что они отвечают?

C++:






CColPoint
*
*
colCollision
,
CEntity
*
*
CollisionEntity

damag
30.07.2019, 13:59
Вообщем вопрос. Видел не которые имгуи которые не видны на shadow play, как можно это сделать?

Неадекватная сова
30.07.2019, 14:00
Вообщем вопрос. Видел не которые имгуи которые не видны на shadow play, как можно это сделать?


Вроде как https://blast.hk/threads/32712/#post-323606

_=Gigant=_
30.07.2019, 23:01
does someone have address for chat input toggle on ?

Stiopko
30.07.2019, 23:18
does someone have address for chat input toggle on ?



C++:





[CODE]
#define SAMP_CHAT_INPUT_INFO_OFFSET 0x21A0E8
// pointer to pointer to structure stInputInfo
struct
stInputBox
{
void
*
pUnknown
;
uint8_t
bIsChatboxOpen
;
//



6 line?

Stiopko
31.07.2019, 10:58
Есть ли у кого-то адрес функции DialogResponse как в sf но том уже готовый хук а мне только адрес функи?

CatKnight
31.07.2019, 22:24
Подскажите, как использовать курсор с имгуи? Не могу разобраться.

Stiopko
31.07.2019, 22:33
Подскажите, как использовать курсор с имгуи? Не могу разобраться.


Подробнее, курсор использовать в своих елементах, или просто информацию о курсоре, изменения позиции курсора, включение выключения видимости курсора?

_=Gigant=_
31.07.2019, 22:49
Подскажите, как использовать курсор с имгуи? Не могу разобраться.



C++:






bool
bShowImGui_Menu
;
static
int
mouse_imgui_menu
=
2
;
if
(
bShowImGui_Menu
)
//if menu is ON -> ImGui::Begin("##ImGuiMenu", &bShowImGui_Menu....
{
mouse_imgui_menu
=
0
;
toggleSAMPCursor
(
1
)
;
keyhook.cpp)
if
(
ImGui_ImplWin32_WndProcHandler
(
wnd
,
umsg
,
wparam
,
lparam
)
)
return
true
;

CatKnight
31.07.2019, 23:07
Подробнее, курсор использовать в своих елементах, или просто информацию о курсоре, изменения позиции курсора, включение выключения видимости курсора?


Видимость и возможность использовать обычный системный курсор в имгуи элементах. Что-то вроде imgui.showCursor в луа.



C++:






bool
bShowImGui_Menu
;
static
int
mouse_imgui_menu
=
2
;
if
(
bShowImGui_Menu
)
//if menu is ON -> ImGui::Begin("##ImGuiMenu", &bShowImGui_Menu....
{
mouse_imgui_menu
=
0
;
toggleSAMPCursor
(
1
)
;
keyhook.cpp)
if
(
ImGui_ImplWin32_WndProcHandler
(
wnd
,
umsg
,
wparam
,
lparam
)
)
return
true
;





Спасибо. Но хотелось бы реализацию с системным курсором из Windows.

Stiopko
31.07.2019, 23:10
Видимость и возможность использовать обычный системный курсор в имгуи элементах. Что-то вроде imgui.showCursor в луа.

Спасибо. Но хотелось бы реализацию с системным курсором из Windows.


Нету отдельного курсора в имгуи, есть один курсор

Musaigen
04.08.2019, 18:35
Какая будет нагрузка на процессор, если в потоке будет Sleep(0)?

Stiopko
04.08.2019, 23:38
Какая будет нагрузка на процессор, если в потоке будет Sleep(0)?


Я хз зачем это тебе но вот, бери, замерял в цикле с Sleep(0) и без, циклы выполнялся по 10000000 раз




C++:





[CODE]
#include
#include
#include
#include
int
main
(
)
{
size_t count
=
10000000
;
auto
start
=
std
::
chrono
::
system_clock
::
now
(
)
;
for
(
size_t i
=
0
;
i

elapsed_seconds
=
end
-
start
;
std
::
cout






https://forum.antichat.xyz/attachments/27380200/

#Rin
05.08.2019, 01:09
Какая будет нагрузка на процессор, если в потоке будет Sleep(0)?


Нулевое значение аргумента в Sleep заставляет поток отказаться от оставшейся части его временного интервала в пользу любого другого потока, который готов к запуску. Если других потоков, готовых к выполнению нет, функция немедленно возвращается, и поток продолжает выполнение.*

* На некоторых версиях Windows поведение может немного отличаться.

** Подробнее (https://www.blast.hk/redirect/aHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvd2luZG 93cy93aW4zMi9hcGkvc3luY2hhcGkvbmYtc3luY2hhcGktc2xl ZXA), можешь еще википедию почитать.



Я хз зачем это тебе но вот, бери, замерял в цикле с Sleep(0) и без, циклы выполнялся по 10000000 раз



C++:





[CODE]
#include
#include
#include
#include
int
main
(
)
{
size_t count
=
10000000
;
auto
start
=
std
::
chrono
::
system_clock
::
now
(
)
;
for
(
size_t i
=
0
;
i

elapsed_seconds
=
end
-
start
;
std
::
cout







Нагрузка на процессор и время исполнения кода, не одно и тоже. К тому же мы не знаем какие оптимизации произвел компилятор в твоем случае.

ALF
05.08.2019, 02:54
Я хз зачем это тебе но вот, бери, замерял в цикле с Sleep(0) и без, циклы выполнялся по 10000000 раз



C++:





[CODE]
#include
#include
#include
#include
int
main
(
)
{
size_t count
=
10000000
;
auto
start
=
std
::
chrono
::
system_clock
::
now
(
)
;
for
(
size_t i
=
0
;
i

elapsed_seconds
=
end
-
start
;
std
::
cout







зачем это всё если есть отладчик?

CatKnight
05.08.2019, 14:16
Объясните, пожалуйста, как в wndproc заблокировать сообщение для окна, но оставить его для плагина своего? Сейчас использую хук wndprochandler, который изначально идёт в проекте sf plugin. Подходит он для этого же?

Adder
05.08.2019, 21:13
Пытаюсь пропустить диалог с помощью кода ниже. Диалог пропускается, но перестают работать серверные команды. Сообщения в чат отправляются, но серверные команды не срабатывают ( Данную проблему заметил только на Evolve, на СРП он пропускает диалог и серверные команды работают ) Также пробовал закрывать диалог через SF->getSAMP()->getDialog()->Close(1); ( Проблема та же, диалог закрывается, команды серверные не работают)

Код:






if (params->packetId == ScriptRPCEnumeration::RPC_ScrShowDialog) {
WORD DialogID;
BYTE style, caplen, button1_len, button2_len;
char caption[255], button1[25], button2[25], info[0x1000];

params->bitStream->ResetReadPointer();
params->bitStream->Read(DialogID);
params->bitStream->Read(style);
params->bitStream->Read(caplen);
params->bitStream->Read(caption, caplen);
caption[caplen] = '\0';
params->bitStream->Read(button1_len);
params->bitStream->Read(button1, button1_len);
button1[button1_len] = '\0';
params->bitStream->Read(button2_len);
params->bitStream->Read(button2, button2_len);
button2[button2_len] = '\0';
SF->getRakNet()->DecodeString(info, 0x1000, params->bitStream);

if (DialogID == 0) return false;
}

astap_
05.08.2019, 21:19
Также пробовал закрывать диалог через SF->getSAMP()->getDialog()->Close(1);


офкос ты не закроешь диалог, который ещё не получил от сервера. закрывай после хука.

Roger571
05.08.2019, 21:19
@Adder (https://www.blast.hk/members/11531/) это для того, чтобы не сбивали диалоги командами и прочее, нужно просто отправлять ответ на диалог




C++:






void
SendDialogResponse
(
WORD wDialogID
,
BYTE bButtonID
,
WORD wListBoxItem
=
65535
,
char
*
szInputResp
=
""
)
{
BitStream bsSend
;
BYTE respLen
=
static_cast

(
strlen
(
szInputResp
)
)
;
bsSend
.
ResetWritePointer
(
)
;
bsSend
.
Write
(
wDialogID
)
;
bsSend
.
Write
(
bButtonID
)
;
bsSend
.
Write
(
wListBoxItem
)
;
bsSend
.
Write
(
respLen
)
;
bsSend
.
Write
(
szInputResp
,
respLen
)
;
SAMP
->
RPC
(
RPC_DialogResponse
,
&
bsSend
,
HIGH_PRIORITY
,
RELIABLE_ORDERED
,
NULL
,
false
)
;
}
SendDialogResponse
(
0
,
0
)
;
// 0 - id диалога

Adder
06.08.2019, 15:22
Приветствую, при попытке декодить стринг с диалога всё время крашется игра. Если закоментить строку с компресором, не крашит

Код:






case RPC_ShowDialog:
{

if (cheat_state->_generic.cheat_panic_enabled)
break;

WORD DialogID;
BYTE style, caplen, button1_len, button2_len, button = 1;
char caption[255], button1[25], button2[25], info[256];
BitStream bsData(rpcParams->input, rpcParams->numberOfBitsOfData / 8, false);

bsData.ResetReadPointer();
bsData.Read(DialogID);
bsData.Read(style);
bsData.Read(caplen);
bsData.Read(caption, caplen);
caption[caplen] = '\0';
bsData.Read(button1_len);
bsData.Read(button1, button1_len);
button1[button1_len] = '\0';
bsData.Read(button2_len);
bsData.Read(button2, button2_len);
button2[button2_len] = '\0';
stringCompressor->DecodeString(info, 256, &bsData);

break;

}

Adder
06.08.2019, 15:33
info, 0x1000, &bsData

Это в аргументы DecodeString



Пробовал так, всё равно эффект тот же

SR_team
06.08.2019, 15:52
Пробовал так, всё равно эффект тот же


потому что вместо этого надо читать длину строки и использовать ее в декодировании

Roger571
06.08.2019, 16:52
@Adder (https://www.blast.hk/members/11531/), для использования stringCompressor'а его нужно инициализировать, ну и ессна читать длину строки, как сказал тим

C++:






// при первом запуске или при инициализации RakClient
StringCompressor
::
AddReference
(
)
;
StringTable
::
AddReference
(
)
;

BASS_DEVSOFTWARE
07.08.2019, 11:11
При компиляции плагина получаю следующую строку:


1>e:\samp\sampfuncs sdk\sf plugin template\sfplugin\sfapi\SFRender.h(5): fatal error C1083: Cannot open include file: 'd3dx9.h': No such file or


Где взять d3dx9.h?

Cake_
07.08.2019, 11:17
При компиляции плагина получаю следующую строку:


1>e:\samp\sampfuncs sdk\sf plugin template\sfplugin\sfapi\SFRender.h(5): fatal error C1083: Cannot open include file: 'd3dx9.h': No such file or


Где взять d3dx9.h?


Требуется установка DirectX SDK (https://www.blast.hk/redirect/aHR0cHM6Ly93d3cubWljcm9zb2Z0LmNvbS9lbi11cy9kb3dubG 9hZC9kZXRhaWxzLmFzcHg_aWQ9NjgxMg)

BASS_DEVSOFTWARE
07.08.2019, 14:43
Решение:

https://forum.antichat.xyz/attachments/27381501/

_=Gigant=_
07.08.2019, 15:31
Решение:



problem can occur if you create c++ project before directx sdk is installed, so if u didn't, restart your computer to apply sdk changes then create new project with All Platforms, config - release, but if u are using x86 target machine the platform should be win32

Stiopko
07.08.2019, 21:35
есть ли что похожее ImGui::BeginPopupModal но без залежности к окну имгуи?

Cake_
07.08.2019, 23:51
как реализована эта функция?

C++:






bool
SFSAMP
::
registerChatCommand
(
std
::
string command
,
CommandProc callback
)

ALF
08.08.2019, 00:15
как реализована эта функция?

C++:






bool
SFSAMP
::
registerChatCommand
(
std
::
string command
,
CommandProc callback
)






BlastHackNet/mod_s0beit_sa-1 (https://github.com/BlastHackNet/mod_s0beit_sa-1/blob/master/src/samp.cpp#L602)

Multi-purpose cheat tool for GTA San Andreas and SA:MP - BlastHackNet/mod_s0beit_sa-1

github.com

CatKnight
08.08.2019, 14:31
Кто-нибудь сталкивался с подобным? В какой-то момент перестал полностью выгружаться плагин. Не важно, как я его заполню, он всё равно полностью не выгружается. DLL_PROCESS_DETACH не вызывается при выгрузке (но вызывается, когда полностью из игры выходишь ), при этом все команды освобождаются, но сам плагин как бы подключён, но SF его уже не видит, и когда снова пытаешься выгрузить плагин, в консоли пишет, что такой плагин не найден. Есть решение?

Вот обычный пример:

main.cpp:






#include
#include "main.h"
SAMPFUNCS
*
SF
=
new
SAMPFUNCS
(
)
;
void
__stdcall
mainloop
(
)
{
static
bool
initialized
=
false
;
if
(
!
initialized
)
{
if
(
GAME
&&
GAME
->
GetSystemState
(
)
==
eSystemState
::
GS_PLAYING_GAME
&&
SF
->
getSAMP
(
)
->
IsInitialized
(
)
)
{
initialized
=
true
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
104
,
255
,
192
)
,
"@@@"
)
;
}
}
}
BOOL APIENTRY
DllMain
(
HMODULE hModule
,
DWORD dwReasonForCall
,
LPVOID lpReserved
)
{
if
(
dwReasonForCall
==
DLL_PROCESS_ATTACH
)
{
SF
->
initPlugin
(
mainloop
,
hModule
)
;
// ...
}
if
(
dwReasonForCall
==
DLL_PROCESS_DETACH
)
{
// ...
}
return
TRUE
;
}

Cake_
08.08.2019, 14:42
Кто-нибудь сталкивался с подобным? В какой-то момент перестал полностью выгружаться плагин. Не важно, как я его заполню, он всё равно полностью не выгружается. DLL_PROCESS_DETACH не вызывается при выгрузке (но вызывается, когда полностью из игры выходишь ), при этом все команды освобождаются, но сам плагин как бы подключён, но SF его уже не видит, и когда снова пытаешься выгрузить плагин, в консоли пишет, что такой плагин не найден. Есть решение?
Вот обычный пример:

main.cpp:






#include
#include "main.h"
SAMPFUNCS
*
SF
=
new
SAMPFUNCS
(
)
;
void
__stdcall
mainloop
(
)
{
static
bool
initialized
=
false
;
if
(
!
initialized
)
{
if
(
GAME
&&
GAME
->
GetSystemState
(
)
==
eSystemState
::
GS_PLAYING_GAME
&&
SF
->
getSAMP
(
)
->
IsInitialized
(
)
)
{
initialized
=
true
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
104
,
255
,
192
)
,
"@@@"
)
;
}
}
}
BOOL APIENTRY
DllMain
(
HMODULE hModule
,
DWORD dwReasonForCall
,
LPVOID lpReserved
)
{
if
(
dwReasonForCall
==
DLL_PROCESS_ATTACH
)
{
SF
->
initPlugin
(
mainloop
,
hModule
)
;
// ...
}
if
(
dwReasonForCall
==
DLL_PROCESS_DETACH
)
{
// ...
}
return
TRUE
;
}





Привет, сталкивался с похожей проблемой и мне помогало лишь полная замена проекта на стандартный сфовский от urshadow

CatKnight
08.08.2019, 14:57
Привет, сталкивался с похожей проблемой и мне помогало лишь полная замена проекта на стандартный сфовский от urshadow


Это звучит смешно, но просто переименовав плагин с "SFPlugin" на любое другое название, он стал нормально выгружается/загружается . Пробовал как проект из 5.3.3, так и 5.4.1, и везде не выгружался полностью с дефолтным названием. Ладно, спасибо.

damag
09.08.2019, 15:40
Как получить данную иконку и использовать ее?

https://forum.antichat.xyz/attachments/27382231/

ALF
09.08.2019, 16:16
Как получить данную иконку и использовать ее?


fontawesome

Adder
10.08.2019, 00:44
В сампфунксе для изменения текстдрава, можно использовать данные две функции:

Код:






SF->getSAMP()->getInfo()->pPools->pTextdraw->Delete();
SF->getSAMP()->getInfo()->pPools->pTextdraw->Create();




А как можно перезаписать текстдрав в собейте. Если можно пример. Спасибо

Adder
10.08.2019, 01:21
Как по мне это гавно метод. Лучше в хуке на рпк менять


Пробовал в хуке вот так:

Код:






if (params->packetId == ScriptRPCEnumeration::RPC_ScrShowTextDraw)
{
stTextDrawTransmit txd;
WORD txdID, cTextLen; char cText[800];
params->bitStream->ResetReadPointer();
params->bitStream->Read(txdID);
params->bitStream->Read((PCHAR)&txd, sizeof(stTextDrawTransmit));
params->bitStream->Read(cTextLen);
params->bitStream->Read(cText, cTextLen);
params->bitStream->ResetReadPointer();
cText[cTextLen] = '\0';

if (txdID == 6) {
params->bitStream->ResetWritePointer();
params->bitStream->Write(txdID);
params->bitStream->Write((PCHAR)&txd, sizeof(stTextDrawTransmit));
strcpy_s(cText, "Test");
params->bitStream->Write(cText, strlen(cText));
}
return true;
}




Видно я не правильно перезаписываю, потому что в чат выбивает вот это: Warning: ignoring large TextDraw size=25940

Cake_
10.08.2019, 01:44
Пробовал в хуке вот так:

Код:






if (params->packetId == ScriptRPCEnumeration::RPC_ScrShowTextDraw)
{
stTextDrawTransmit txd;
WORD txdID, cTextLen; char cText[800];
params->bitStream->ResetReadPointer();
params->bitStream->Read(txdID);
params->bitStream->Read((PCHAR)&txd, sizeof(stTextDrawTransmit));
params->bitStream->Read(cTextLen);
params->bitStream->Read(cText, cTextLen);
params->bitStream->ResetReadPointer();
cText[cTextLen] = '\0';

if (txdID == 6) {
params->bitStream->ResetWritePointer();
params->bitStream->Write(txdID);
params->bitStream->Write((PCHAR)&txd, sizeof(stTextDrawTransmit));
strcpy_s(cText, "Test");
params->bitStream->Write(cText, strlen(cText));
}
return true;
}




Видно я не правильно перезаписываю, потому что в чат выбивает вот это: Warning: ignoring large TextDraw size=25940


Вот так надо

C++:






bool
CALLBACK
incomingRPC
(
stRakNetHookParams
*
params
)
{
if
(
params
->
packetId
==
ScriptRPCEnumeration
::
RPC_ScrShowTextDraw
)
{
WORD wTextID
,
cTextLen
;
stTextDrawTransmit data
;
char
cText
[
65535
]
;
BitStream
*
bsData
=
params
->
bitStream
;
bsData
->
Read
(
wTextID
)
;
bsData
->
Read
(
(
PCHAR
)
&
data
,
sizeof
(
stTextDrawTransmit
)
)
;
bsData
->
Read
(
cTextLen
)
;
bsData
->
Read
(
cText
,
cTextLen
)
;
cText
[
cTextLen
]
=
'\0'
;
stTextDrawTransmit MyTD
;
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pTextdraw
->
GetTransmit
(
125
,
MyTD
)
;
MyTD
.
fBoxHeight
=
0.249999
;
MyTD
.
fLetterWidth
=
0.300000
;
MyTD
.
dwBoxColor
=
-
16776961
;
MyTD
.
byteShadow
=
0
;
MyTD
.
byteOutline
=
-
1
;
MyTD
.
dwBackgroundColor
=
-
1
;
MyTD
.
byteStyle
=
2
;
MyTD
.
byteProportional
=
1
;
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pTextdraw
->
Delete
(
125
)
;
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pTextdraw
->
Create
(
125
,
&
MyTD
,
"DIAMOND"
)
;
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pTextdraw
->
Delete
(
126
)
;
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pTextdraw
->
Delete
(
127
)
;
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pTextdraw
->
Delete
(
128
)
;
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pTextdraw
->
Delete
(
129
)
;
}
;
return
true
;
}
;

Adder
10.08.2019, 01:50
Вот так надо

C++:






bool
CALLBACK
incomingRPC
(
stRakNetHookParams
*
params
)
{
if
(
params
->
packetId
==
ScriptRPCEnumeration
::
RPC_ScrShowTextDraw
)
{
WORD wTextID
,
cTextLen
;
stTextDrawTransmit data
;
char
cText
[
65535
]
;
BitStream
*
bsData
=
params
->
bitStream
;
bsData
->
Read
(
wTextID
)
;
bsData
->
Read
(
(
PCHAR
)
&
data
,
sizeof
(
stTextDrawTransmit
)
)
;
bsData
->
Read
(
cTextLen
)
;
bsData
->
Read
(
cText
,
cTextLen
)
;
cText
[
cTextLen
]
=
'\0'
;
stTextDrawTransmit MyTD
;
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pTextdraw
->
GetTransmit
(
125
,
MyTD
)
;
MyTD
.
fBoxHeight
=
0.249999
;
MyTD
.
fLetterWidth
=
0.300000
;
MyTD
.
dwBoxColor
=
-
16776961
;
MyTD
.
byteShadow
=
0
;
MyTD
.
byteOutline
=
-
1
;
MyTD
.
dwBackgroundColor
=
-
1
;
MyTD
.
byteStyle
=
2
;
MyTD
.
byteProportional
=
1
;
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pTextdraw
->
Delete
(
125
)
;
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pTextdraw
->
Create
(
125
,
&
MyTD
,
"DIAMOND"
)
;
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pTextdraw
->
Delete
(
126
)
;
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pTextdraw
->
Delete
(
127
)
;
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pTextdraw
->
Delete
(
128
)
;
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pTextdraw
->
Delete
(
129
)
;
}
;
return
true
;
}
;





Такой метод я пробовал, да он работает. Но вопрос как также сделать в собе, т.к. там нет функций pPools->pTextdraw->Delete() и pPools->pTextdraw->Create()

Roger571
10.08.2019, 19:04
Такой метод я пробовал, да он работает. Но вопрос как также сделать в собе, т.к. там нет функций pPools->pTextdraw->Delete() и pPools->pTextdraw->Create()


Есть несколько путей решения данной проблемы.

Первый - реализовать класс textdraw (обертку над пулом). Можно взять реализацию из SAMPAPI, благо он опенсурс.

Но если тебе нужны лишь эти две функции, то смысла тянуть весь класс в проект не особо вижу.

Второй - просто добавить эти две функции.

C++:






stTextdraw
*
CreateTextDraw
(
int
nId
,
stTextDrawTransmit
*
pTransmit
,
const
char
*
szText
)
{
return
(
(
stTextdraw
*
(
__thiscall
*
)
(
stTextdrawPool
*
,
int
,
stTextDrawTransmit
*
,
const
char
*
)
)
(
g_dwSAMP_Addr
+
0x1AE20
)
)
(
g_SAMP
->
pPools
->
pTextdraw
,
nId
,
pTransmit
,
szText
)
;
}
void
DeleteTextDraw
(
uint16_t
nId
)
{
(
(
void
(
__thiscall
*
)
(
stTextdrawPool
*
,
uint16_t
)
)
(
g_dwSAMP_Addr
+
0x1AD00
)
)
(
g_SAMP
->
pPools
->
pTextdraw
,
nId
)
;
}




Не факт, что работает - проверь. У самого нет возможности проверить.

Adder
10.08.2019, 19:29
Есть несколько путей решения данной проблемы.
Первый - реализовать класс textdraw (обертку над пулом). Можно взять реализацию из SAMPAPI, благо он опенсурс.
Но если тебе нужны лишь эти две функции, то смысла тянуть весь класс в проект не особо вижу.
Второй - просто добавить эти две функции.

C++:






stTextdraw
*
CreateTextDraw
(
int
nId
,
stTextDrawTransmit
*
pTransmit
,
const
char
*
szText
)
{
return
(
(
stTextdraw
*
(
__thiscall
*
)
(
stTextdrawPool
*
,
int
,
stTextDrawTransmit
*
,
const
char
*
)
)
(
g_dwSAMP_Addr
+
0x1AE20
)
)
(
g_SAMP
->
pPools
->
pTextdraw
,
nId
,
pTransmit
,
szText
)
;
}
void
DeleteTextDraw
(
uint16_t
nId
)
{
(
(
void
(
__thiscall
*
)
(
stTextdrawPool
*
,
uint16_t
)
)
(
g_dwSAMP_Addr
+
0x1AD00
)
)
(
g_SAMP
->
pPools
->
pTextdraw
,
nId
)
;
}




Не факт, что работает - проверь. У самого нет возможности проверить.


Не знал, что он в открытом доступе есть. Теперь буду знать.

И перезаписать получилось, я что-то тупанул и забыл длину записать. Поэтому нормально не перезаписывало.

За функции спасибо

Stiopko
11.08.2019, 22:22
Всем привет, пытаюсь поставит хук на самповскую функцию SAMP_FUNC_SENDCMD 0x65C60

ставлю через https://blast.hk/threads/30412/

C++:






DWORD Trampoline
=
0x0
;
byte prologue
[
6
]
;
void
UserHook
(
void
*
_this
,
char
*
message
)
{
MessageBoxA
(
NULL
,
message
,
"sadasd"
,
NULL
)
;
__asm jmp Trampoline
}
// устанавливаю
DWORD Addr
=
SF
->
getSAMP
(
)
->
getSAMPAddr
(
)
+
SAMP_FUNC_SENDCMD
;
Trampoline
=
MakeJump
(
Addr
,
(
DWORD
)
&
UserHook
,
prologue
,
6
)
;




но при вызове команды происходит краш

вот скрины с енжина

до

https://forum.antichat.xyz/attachments/27383314/

и после установки

https://forum.antichat.xyz/attachments/27383314/

по моему выглядит красиво, но все же я где-то проебался

пробовал и с __stdcall функцию UserHook, и брал размер пролога 8 вместо 6 тоже не помогло, что я делаю не так?

Roger571
11.08.2019, 22:41
Скорее я тупой и не вижу очевидного.

Возникла проблема с получением имени сетевого адаптера и я в душе не чаю, что не так и в какой магической кодировке оно находится.

Самое интересное, описание в нормальном виде. У обоих тип char*, ес шо.

Вот, сообсна, код.

C++:






PIP_ADAPTER_INFO pAdapter
=
pAdapterInfo
;
while
(
pAdapter
)
{
Log
(
"Adapter Name: %s %s\n"
,
pAdapter
->
AdapterName
,
pAdapter
->
Description
)
;
Log
(
"IP Address: %s\n"
,
pAdapter
->
IpAddressList
.
IpAddress
.
String
)
;
pAdapter
=
pAdapter
->
Next
;
}




Вот лог:



{D387BCE2-FD49-4AFA-AA49-E7634ED15008} Intel(R) Ethernet Connection (2) I219-V


А теперь главный вопрос, как привести имя адаптера в человеческий вид?

Cake_
11.08.2019, 22:51
Скорее я тупой и не вижу очевидного.
Возникла проблема с получением имени сетевого адаптера и я в душе не чаю, что не так и в какой магической кодировке оно находится.
Самое интересное, описание в нормальном виде. У обоих тип char*, ес шо.
Вот, сообсна, код.

C++:






PIP_ADAPTER_INFO pAdapter
=
pAdapterInfo
;
while
(
pAdapter
)
{
Log
(
"Adapter Name: %s %s\n"
,
pAdapter
->
AdapterName
,
pAdapter
->
Description
)
;
Log
(
"IP Address: %s\n"
,
pAdapter
->
IpAddressList
.
IpAddress
.
String
)
;
pAdapter
=
pAdapter
->
Next
;
}




Вот лог:

А теперь главный вопрос, как привести имя адаптера в человеческий вид?


вот тут должно быть то, что тебе нужно https://books.google.com.ua/books?i...oECAgQAQ#v=onepage&q=имя адаптера c++&f=false (https://www.blast.hk/redirect/aHR0cHM6Ly9ib29rcy5nb29nbGUuY29tLnVhL2Jvb2tzP2lkPU 55dVpyM1k2M1V3QyZwZz1QQTI0NSZscGc9UEEyNDUmZHE9JUQw JUI4JUQwJUJDJUQxJThGKyVEMCVCMCVEMCVCNCVEMCVCMCVEMC VCRiVEMSU4MiVEMCVCNSVEMSU4MCVEMCVCMCtjJTJCJTJCJnNv dXJjZT1ibCZvdHM9VmFja2h4MkxuNCZzaWc9QUNmVTNVMUZUR0 VxX2RNaWFpbzA4XzNWdG04QjhQZkZGZyZobD1ydSZzYT1YJnZl ZD0yYWhVS0V3akw3dnlDdnZ2akFoWHBzNHNLSFQ1akNXb1E2QU V3Qm5vRUNBZ1FBUSN2PW9uZXBhZ2UmcT0lRDAlQjglRDAlQkMl RDElOEYlMjAlRDAlQjAlRDAlQjQlRDAlQjAlRDAlQkYlRDElOD IlRDAlQjUlRDElODAlRDAlQjAlMjBjJTJCJTJCJmY9ZmFsc2U)

Roger571
11.08.2019, 23:04
вот тут должно быть то, что тебе нужно


Оно то есть, да и в других примерах работы с этой библиотекой у людей все нормально и имя адаптера выводится в читаемом формате.

Если интересно, можешь попробовать у себя




C++:






#pragma comment (lib, "Iphlpapi.lib")
#include "Windows.h"
#include "stdio.h"
#include "iphlpapi.h"
int
main
(
)
{
IP_ADAPTER_INFO
*
pAdapterInfo
;
ULONG ulOutBufLen
;
DWORD dwRetVal
;
pAdapterInfo
=
(
IP_ADAPTER_INFO
*
)
malloc
(
sizeof
(
IP_ADAPTER_INFO
)
)
;
ulOutBufLen
=
sizeof
(
IP_ADAPTER_INFO
)
;
if
(
GetAdaptersInfo
(
pAdapterInfo
,
&
ulOutBufLen
)
!=
ERROR_SUCCESS
)
{
free
(
pAdapterInfo
)
;
pAdapterInfo
=
(
IP_ADAPTER_INFO
*
)
malloc
(
ulOutBufLen
)
;
}
if
(
(
dwRetVal
=
GetAdaptersInfo
(
pAdapterInfo
,
&
ulOutBufLen
)
)
!=
ERROR_SUCCESS
)
{
free
(
pAdapterInfo
)
;
}
PIP_ADAPTER_INFO pAdapter
=
pAdapterInfo
;
while
(
pAdapter
)
{
printf
(
"Adapter Name: %s %s\n"
,
pAdapter
->
AdapterName
,
pAdapter
->
Description
)
;
printf
(
"IP Address: %s\n"
,
pAdapter
->
IpAddressList
.
IpAddress
.
String
)
;
pAdapter
=
pAdapter
->
Next
;
}
if
(
pAdapterInfo
)
free
(
pAdapterInfo
)
;
system
(
"pause"
)
;
return
0
;
}

Stiopko
11.08.2019, 23:06
Оно то есть, да и в других примерах работы с этой библиотекой у людей все нормально и имя адаптера выводится в читаемом формате.
Если интересно, можешь попробовать у себя



C++:






#pragma comment (lib, "Iphlpapi.lib")
#include "Windows.h"
#include "stdio.h"
#include "iphlpapi.h"
int
main
(
)
{
IP_ADAPTER_INFO
*
pAdapterInfo
;
ULONG ulOutBufLen
;
DWORD dwRetVal
;
pAdapterInfo
=
(
IP_ADAPTER_INFO
*
)
malloc
(
sizeof
(
IP_ADAPTER_INFO
)
)
;
ulOutBufLen
=
sizeof
(
IP_ADAPTER_INFO
)
;
if
(
GetAdaptersInfo
(
pAdapterInfo
,
&
ulOutBufLen
)
!=
ERROR_SUCCESS
)
{
free
(
pAdapterInfo
)
;
pAdapterInfo
=
(
IP_ADAPTER_INFO
*
)
malloc
(
ulOutBufLen
)
;
}
if
(
(
dwRetVal
=
GetAdaptersInfo
(
pAdapterInfo
,
&
ulOutBufLen
)
)
!=
ERROR_SUCCESS
)
{
free
(
pAdapterInfo
)
;
}
PIP_ADAPTER_INFO pAdapter
=
pAdapterInfo
;
while
(
pAdapter
)
{
printf
(
"Adapter Name: %s %s\n"
,
pAdapter
->
AdapterName
,
pAdapter
->
Description
)
;
printf
(
"IP Address: %s\n"
,
pAdapter
->
IpAddressList
.
IpAddress
.
String
)
;
pAdapter
=
pAdapter
->
Next
;
}
if
(
pAdapterInfo
)
free
(
pAdapterInfo
)
;
system
(
"pause"
)
;
return
0
;
}








В примере вроде похожее имя адаптера?

https://forum.antichat.xyz/attachments/27383329/

Cake_
11.08.2019, 23:13
https://forum.antichat.xyz/attachments/27383332/

RTD
11.08.2019, 23:32
Всем привет, пытаюсь поставит хук на самповскую функцию SAMP_FUNC_SENDCMD 0x65C60

ставлю через https://blast.hk/threads/30412/

C++:






DWORD Trampoline
=
0x0
;
byte prologue
[
6
]
;
void
UserHook
(
void
*
_this
,
char
*
message
)
{
MessageBoxA
(
NULL
,
message
,
"sadasd"
,
NULL
)
;
__asm jmp Trampoline
}
// устанавливаю
DWORD Addr
=
SF
->
getSAMP
(
)
->
getSAMPAddr
(
)
+
SAMP_FUNC_SENDCMD
;
Trampoline
=
MakeJump
(
Addr
,
(
DWORD
)
&
UserHook
,
prologue
,
6
)
;




но при вызове команды происходит краш

вот скрины с енжина
до

и после установки

по моему выглядит красиво, но все же я где-то проебался

пробовал и с __stdcall функцию UserHook, и брал размер пролога 8 вместо 6 тоже не помогло, что я делаю не так?


Крашит т.к. функция __thiscall + хук будет затирать инструкцию mov

https://blast.hk/threads/781/post-359737

ШPEK
11.08.2019, 23:34
Всем привет, пытаюсь поставит хук на самповскую функцию SAMP_FUNC_SENDCMD 0x65C60

ставлю через https://blast.hk/threads/30412/

C++:






DWORD Trampoline
=
0x0
;
byte prologue
[
6
]
;
void
UserHook
(
void
*
_this
,
char
*
message
)
{
MessageBoxA
(
NULL
,
message
,
"sadasd"
,
NULL
)
;
__asm jmp Trampoline
}
// устанавливаю
DWORD Addr
=
SF
->
getSAMP
(
)
->
getSAMPAddr
(
)
+
SAMP_FUNC_SENDCMD
;
Trampoline
=
MakeJump
(
Addr
,
(
DWORD
)
&
UserHook
,
prologue
,
6
)
;




но при вызове команды происходит краш

вот скрины с енжина
до

и после установки

по моему выглядит красиво, но все же я где-то проебался

пробовал и с __stdcall функцию UserHook, и брал размер пролога 8 вместо 6 тоже не помогло, что я делаю не так?


Сделай через call (0xE8)

C++:






void
_stdcall
hook
(
const
char
*
text
)
{
addBlueText
(
text
)
}
void
_declspec
(
naked
)
change
(
)
{
__asm
{
push
[
esp
+
8
]
call hook
mov eax
,
fs
:
[
0
]
ret
}
}




У меня так все работало

Roger571
11.08.2019, 23:42
В примере вроде похожее имя адаптера?


Да, был невнимателен.

В общем, если кому вдруг пригодится, на новых системах нужно использовать GetAdaptersAddresses(), который содержит поле FriendlyName. Он то и содержит читаемое имя адаптера. Источник (https://www.blast.hk/redirect/aHR0cHM6Ly9zb2NpYWwubXNkbi5taWNyb3NvZnQuY29tL0Zvcn Vtcy92c3R1ZGlvL2VuLVVTLzkxNDMxYWE1LWVmYTUtNDA5Ny04 NjU4LTA5OTE2M2Q0ODQ0Zi9ob3ctdG8tbWF0Y2gtcXVvdGxvY2 FsLWFyZWEtY29ubmVjdGlvbnF1b3Qtd2l0aC1uZXR3b3JrLWFk YXB0ZXItbmFtZS1yZXRyaWV2ZWQtZnJvbT9mb3J1bT12Y2dlbm VyYWw).

Рабочий код:




C++:






#include
#include
#include
#include
int
main
(
)
{
PIP_ADAPTER_ADDRESSES pAdapterAdresses
=
NULL
;
ULONG ulOutBufLen
=
0x1000
;
DWORD dwRetVal
;
char
buff
[
0x10
]
,
adapterName
[
0x20
]
,
desc
[
0x20
]
;
pAdapterAdresses
=
(
IP_ADAPTER_ADDRESSES
*
)
malloc
(
ulOutBufLen
)
;
ulOutBufLen
=
sizeof
(
IP_ADAPTER_INFO
)
;
if
(
GetAdaptersAddresses
(
AF_INET
,
GAA_FLAG_INCLUDE_PREFIX
,
NULL
,
pAdapterAdresses
,
&
ulOutBufLen
)
!=
ERROR_SUCCESS
)
{
free
(
pAdapterAdresses
)
;
pAdapterAdresses
=
(
IP_ADAPTER_ADDRESSES
*
)
malloc
(
ulOutBufLen
)
;
}
if
(
(
dwRetVal
=
GetAdaptersAddresses
(
AF_INET
,
GAA_FLAG_INCLUDE_PREFIX
,
NULL
,
pAdapterAdresses
,
&
ulOutBufLen
)
)
!=
ERROR_SUCCESS
)
{
free
(
pAdapterAdresses
)
;
}
PIP_ADAPTER_ADDRESSES pAdapter
=
pAdapterAdresses
;
while
(
pAdapter
)
{
wcstombs
(
adapterName
,
pAdapter
->
FriendlyName
,
wcslen
(
pAdapter
->
FriendlyName
)
)
;
wcstombs
(
desc
,
pAdapter
->
Description
,
wcslen
(
pAdapter
->
Description
)
)
;
printf
(
"Adapter Name: %s %s\n"
,
adapterName
,
desc
)
;
if
(
pAdapter
->
FirstUnicastAddress
->
Address
.
lpSockaddr
->
sa_family
==
AF_INET
)
{
sockaddr_in
*
sa_in
=
(
sockaddr_in
*
)
pAdapter
->
FirstUnicastAddress
->
Address
.
lpSockaddr
;
printf
(
"IP Address: %s\n"
,
inet_ntop
(
AF_INET
,
&
(
sa_in
->
sin_addr
)
,
buff
,
0x10
)
)
;
}
pAdapter
=
pAdapter
->
Next
;
}
if
(
pAdapterAdresses
)
free
(
pAdapterAdresses
)
;
system
(
"pause"
)
;
return
0
;
}










Это описание сетевого адаптера, указывается имя железа.

ALF
12.08.2019, 00:01
Всем привет, пытаюсь поставит хук на самповскую функцию SAMP_FUNC_SENDCMD 0x65C60

ставлю через https://blast.hk/threads/30412/

C++:






DWORD Trampoline
=
0x0
;
byte prologue
[
6
]
;
void
UserHook
(
void
*
_this
,
char
*
message
)
{
MessageBoxA
(
NULL
,
message
,
"sadasd"
,
NULL
)
;
__asm jmp Trampoline
}
// устанавливаю
DWORD Addr
=
SF
->
getSAMP
(
)
->
getSAMPAddr
(
)
+
SAMP_FUNC_SENDCMD
;
Trampoline
=
MakeJump
(
Addr
,
(
DWORD
)
&
UserHook
,
prologue
,
6
)
;




но при вызове команды происходит краш

вот скрины с енжина
до

и после установки

по моему выглядит красиво, но все же я где-то проебался

пробовал и с __stdcall функцию UserHook, и брал размер пролога 8 вместо 6 тоже не помогло, что я делаю не так?


как то трудно всё.

в сф без этого всего можно ставить хуки

C++:






DWORD hk_address
;
void
__declspec
(
naked
)
hook
(
)
{
static
DWORD jmp_address
=
hk_address
+
6
;
__asm
{
mov eax
,
fs
:
[
00000000
]
pushad
pushfd
}
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
"hooked!"
)
;
__asm
{
popfd
popad
jmp jmp_address
}
}
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
;
hk_address
=
SF
->
getSAMP
(
)
->
getSAMPAddr
(
)
+
0x65C60
;
SF
->
getGame
(
)
->
createHook
(
reinterpret_cast

(
hk_address
)
,
hook
,
DETOUR_TYPE_JMP
,
6
)
;
init
=
true
;
}
}

Cake_
12.08.2019, 00:03
как то трудно всё.
в сф без этого всего можно ставить хуки

C++:






DWORD hk_address
;
void
__declspec
(
naked
)
hook
(
)
{
static
DWORD jmp_address
=
hk_address
+
6
;
__asm
{
mov eax
,
fs
:
[
00000000
]
pushad
pushfd
}
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
"hooked!"
)
;
__asm
{
popfd
popad
jmp jmp_address
}
}
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
;
hk_address
=
SF
->
getSAMP
(
)
->
getSAMPAddr
(
)
+
0x65C60
;
SF
->
getGame
(
)
->
createHook
(
reinterpret_cast

(
hk_address
)
,
hook
,
DETOUR_TYPE_JMP
,
6
)
;
init
=
true
;
}
}





Можно пример хука без сф?

ALF
12.08.2019, 00:15
Можно пример хука без сф?


тоже самое всё, ниже функа

кстати, можно использовать для call хука если заменить 0xE9 на 0xE8

C++:





[CODE]
void
CreateJmpHook
(
BYTE
*
pAddress
,
DWORD dwJumpTo
,
size_t size
=
5
)
{
if
(
size

(
pAddress
+
0x1
)
=
dwJumpTo
-
reinterpret_cast

(
pAddress
)
-
0x5
;
for
(
size_t i
=
0x5
;
i

Stiopko
12.08.2019, 23:35
Как можно взять параметры которые передавались в функцию которую хукнули?

И где они хранятся, в коком регистре?

RTD
12.08.2019, 23:43
Как можно взять параметры которые передавались в функцию которую хукнули?

И где они хранятся, в коком регистре?



Исходник - Ищем функции в CE (https://blast.hk/threads/34908/)

Есть тут замечательная тема с инжектом в функции от могайки: https://blast.hk/threads/2370/#post-27225 Все в ней хорошо, только не рассказывается как искать функции и параметры к ним. Сейчас покажу как перехватывать сообщения, введенные нами в чат. Значит для начала запускаем ЖТА и логинимся на...

blast.hk

ШPEK
13.08.2019, 00:06
Как можно взять параметры которые передавались в функцию которую хукнули?

И где они хранятся, в коком регистре?


Зависит от соглашения о вызове.

Например: _cdecl - в стеке, __thiscall - первый аргумент в регистре ecx и остальные в стеке, _stdcall - в стеке.

__thiscall обычно используется в методах класса.

Пример:







C++:






__asm
{
push ebp
// сохраняем значение регистра ebp в стеке
mov ebp
,
esp
push
[
ebp
+
4
+
8
]
// передаем второй аргумент
push
[
ebp
+
4
+
4
]
// передаём первый аргумент
call hook
// функция должна быть _stdcall
pop ebp
// воостанавливаем значение регистра ebp из стека
}

Stiopko
13.08.2019, 00:13
Зависит от соглашения о вызове.
Например: _cdecl - в стеке, __thiscall - первый аргумент в регистре ecx и остальные в стеке, _stdcall - в стеке.
__thiscall обычно используется в методах класса.
Пример:







C++:






__asm
{
push ebp
// сохраняем значение регистра ebp в стеке
mov ebp
,
esp
push
[
ebp
+
4
+
8
]
// передаем второй аргумент
push
[
ebp
+
4
+
4
]
// передаём первый аргумент
call hook
// функция должна быть _stdcall
pop ebp
// воостанавливаем значение регистра ebp из стека
}





а что хранится в регистре ebp, или обязательно сохранять все регистры через pushad, или можно только ebp?

ШPEK
13.08.2019, 00:16
а что хранится в регистре ebp, или обязательно сохранять все регистры через pushad, или можно только ebp?


ebp удобней т.к он не меняется в отличии от esp, pushad сохраняет 32 битные регистры в стеке

Stiopko
13.08.2019, 00:22
ebp удобней т.к он не меняется в отличии от esp, pushad сохраняет 32 битные регистры в стеке


А почему мы добавляем к регистру esp если esp это вершина куда еще вверх?

ШPEK
13.08.2019, 00:24
А почему мы добавляем к регистру esp если esp это вершина куда еще вверх?


При push стек уменьшается на 4, а аргументы передаются через push

0xNull_Dll
13.08.2019, 20:06
Парни, кто-нибудь знает оффсет на клавиши? Конкретно - на WASD. Типа, чтобы можно было записать в какой-то адресс 255 - нажалась кнопка, к примеру, W. 0 = "отжалась" (press / release)

P.S Не функцию. Именно оффсет

MuhaPW
14.08.2019, 16:47
1 Не могу начать писать плагины SAMPFUNCS.

Установил Visual Studio, распаковал проект SFPlugin и открыл. Вот ошибка, ни как не могу понять с чем связана ошибка и как его исправить.

Код:






1>------ Перестроение всех файлов начато: проект: FirstSF, Конфигурация: Release Win32 ------
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VC\v160\Mi crosoft.CppBuild.targets(379,5): error MSB8020: The build tools for Visual Studio 2012 - Windows XP (Platform Toolset = 'v110_xp') cannot be found. To build using the v110_xp build tools, please install Visual Studio 2012 - Windows XP build tools. Alternatively, you may upgrade to the current Visual Studio tools by selecting the Project menu or right-click the solution, and then selecting "Retarget solution".
1>Сборка проекта "SFPlugin.vcxproj" завершена с ошибкой.
========== Перестроение всех проектов: успешно: 0, с ошибками: 1, пропущено: 0 ==========

MuhaPW
15.08.2019, 21:43
1 Не могу начать писать плагины SAMPFUNCS.
Установил Visual Studio, распаковал проект SFPlugin и открыл. Вот ошибка, ни как не могу понять с чем связана ошибка и как его исправить.

Код:






1>------ Перестроение всех файлов начато: проект: FirstSF, Конфигурация: Release Win32 ------
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VC\v160\Mi crosoft.CppBuild.targets(379,5): error MSB8020: The build tools for Visual Studio 2012 - Windows XP (Platform Toolset = 'v110_xp') cannot be found. To build using the v110_xp build tools, please install Visual Studio 2012 - Windows XP build tools. Alternatively, you may upgrade to the current Visual Studio tools by selecting the Project menu or right-click the solution, and then selecting "Retarget solution".
1>Сборка проекта "SFPlugin.vcxproj" завершена с ошибкой.
========== Перестроение всех проектов: успешно: 0, с ошибками: 1, пропущено: 0 ==========






Я решил проблему. Мне помог человек из Stack Overflow. Вот ссылка на вопрос и ответ. https://ru.stackoverflow.com/questions/1013544/visual-studio-2019-error-msb8020/1013659#1013659 (https://www.blast.hk/redirect/aHR0cHM6Ly9ydS5zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbn MvMTAxMzU0NC92aXN1YWwtc3R1ZGlvLTIwMTktZXJyb3ItbXNi ODAyMC8xMDEzNjU5IzEwMTM2NTk)

ALF
15.08.2019, 21:50
1 Не могу начать писать плагины SAMPFUNCS.
Установил Visual Studio, распаковал проект SFPlugin и открыл. Вот ошибка, ни как не могу понять с чем связана ошибка и как его исправить.

Код:






1>------ Перестроение всех файлов начато: проект: FirstSF, Конфигурация: Release Win32 ------
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VC\v160\Mi crosoft.CppBuild.targets(379,5): error MSB8020: The build tools for Visual Studio 2012 - Windows XP (Platform Toolset = 'v110_xp') cannot be found. To build using the v110_xp build tools, please install Visual Studio 2012 - Windows XP build tools. Alternatively, you may upgrade to the current Visual Studio tools by selecting the Project menu or right-click the solution, and then selecting "Retarget solution".
1>Сборка проекта "SFPlugin.vcxproj" завершена с ошибкой.
========== Перестроение всех проектов: успешно: 0, с ошибками: 1, пропущено: 0 ==========





достаточно просто прочитать что там написано



Alternatively, you may upgrade to the current Visual Studio tools by selecting the Project menu or right-click the solution, and then selecting "Retarget solution".

Stiopko
16.08.2019, 00:53
Здарова, сделал я структуру для хука, но она почему-то не ставит хук, хотя просто функция работала нормально, как можно решить?

C++:






struct
Hook
{
DWORD addr
=
NULL
;
byte
*
data
=
nullptr
;
size_t size
=
NULL
;
Hook
(
const
DWORD
&
addr
,
const
DWORD
&
func
,
const
size_t
&
size
=
5
)
{
this
->
data
=
new
byte
[
size
]
;
this
->
size
=
size
;
this
->
addr
=
addr
;
DWORD dwProt
=
PAGE_EXECUTE_READWRITE
;
VirtualProtect
(
(
void
*
)
addr
,
size
,
dwProt
,
&
dwProt
)
;
memcpy
(
data
,
(
void
*
)
addr
,
size
)
;
memset
(
(
void
*
)
(
addr
-
4
)
,
0x90
,
size
-
4
)
;
*
(
byte
*
)
(
addr
)
=
0xE9
;
// jmp
*
(
unsigned
int
*
)
(
addr
+
1
)
=
func
-
(
addr
+
5
)
;
VirtualProtect
(
(
void
*
)
addr
,
size
,
dwProt
,
NULL
)
;
}
~
Hook
(
)
{
if
(
data
!=
nullptr
)
{
DWORD dwProt
=
PAGE_EXECUTE_READWRITE
;
VirtualProtect
(
(
void
*
)
addr
,
size
,
dwProt
,
&
dwProt
)
;
memcpy
(
(
void
*
)
addr
,
data
,
size
)
;
VirtualProtect
(
(
void
*
)
addr
,
size
,
dwProt
,
NULL
)
;
delete
[
]
data
;
}
}
}
;

p1cador
16.08.2019, 04:12
@Stiopko (https://www.blast.hk/members/185191/), код, реализующий перенаправление из функции в другое место хоть и говноплоховат, но свою задачу выполняет (не поленился, проверил дебагером).

Возможно, ты создал объект Hook на стеке, в результате чего после выхода из области видимости, автоматически вызвался деструктор. Попробуй создавать его на куче через new

MuhaPW
16.08.2019, 11:19
У меня появился другой вопрос. Вот я отлавливаю пакеты.

Вот по этому уроку у меня получилось это сделать https://blast.hk/wiki/tutorials:api_lesson_raknet

Я понимаю как он отлавливает пакеты и как читает. (Конечно есть некоторые вопросы, но походу разберусь).

Я не понимаю одного. Зачем нужны 2 вида отправка пакетов Pacet и RPC ? Что, когда нужно использовать ?

В интернете я ничего не нашел по этому вопросу. Пожалуйста, если вы знаете ответ, или знаете источник где этот ответ есть скажите мне!

Cake_
16.08.2019, 11:47
У меня появился другой вопрос. Вот я отлавливаю пакеты.
Вот по этому уроку у меня получилось это сделать https://blast.hk/wiki/tutorials:api_lesson_raknet
Я понимаю как он отлавливает пакеты и как читает. (Конечно есть некоторые вопросы, но походу разберусь).

Я не понимаю одного. Зачем нужны 2 вида отправка пакетов Pacet и RPC ? Что, когда нужно использовать ?
В интернете я ничего не нашел по этому вопросу. Пожалуйста, если вы знаете ответ, или знаете источник где этот ответ есть скажите мне!


рпк и пакеты это разные вещи. рпк отправляются / приходят в момент какого-то события например сервер показал нам диалог в этот момент нам приходит ShowDialog - ID: 61. а пакеты же используются для того чтобы отправлять информацию серверу об твоём хп / позиции / положении твоей камеры / являешься ли ты наблюдателем / отправка BULLET SYNC(в момент стрельбы) пример, когда мы двигаемся отправляется он фут дата (ID_PLAYER_SYNC), оно отправляется даже когда персонаж не двигается(отправляется с меньшей частотой)

update: https://github.com/BrunoBM16/samp-packet-list/wiki/RPC-List тут можешь глянуть инфу об всех пакетах / rpc

Stiopko
16.08.2019, 12:18
@Stiopko (https://www.blast.hk/members/185191/), код, реализующий перенаправление из функции в другое место хоть и говноплоховат, но свою задачу выполняет (не поленился, проверил дебагером).
Возможно, ты создал объект Hook на стеке, в результате чего после выхода из области видимости, автоматически вызвался деструктор. Попробуй создавать его на куче через new


а что в коде говно, хочу узнать чтоби в будущем писать меньше говна

upd: нашел ошибку там вместо memset((void*)(addr - 4), 0x90, size-4);

нужно memset((void*)(addr + 4), 0x90, size-4);



@Stiopko (https://www.blast.hk/members/185191/)
Возможно, ты создал объект Hook на стеке, в результате чего после выхода из области видимости, автоматически вызвался деструктор. Попробуй создавать его на куче через new


upd: не знал что такое может быть, я просто его в вектор записываю, попробую указатель записывать

upd: все работает, спасибо

ШPEK
16.08.2019, 22:47
Здарова, сделал я структуру для хука, но она почему-то не ставит хук, хотя просто функция работала нормально, как можно решить?

C++:






struct
Hook
{
DWORD addr
=
NULL
;
byte
*
data
=
nullptr
;
size_t size
=
NULL
;
Hook
(
const
DWORD
&
addr
,
const
DWORD
&
func
,
const
size_t
&
size
=
5
)
{
this
->
data
=
new
byte
[
size
]
;
this
->
size
=
size
;
this
->
addr
=
addr
;
DWORD dwProt
=
PAGE_EXECUTE_READWRITE
;
VirtualProtect
(
(
void
*
)
addr
,
size
,
dwProt
,
&
dwProt
)
;
memcpy
(
data
,
(
void
*
)
addr
,
size
)
;
memset
(
(
void
*
)
(
addr
-
4
)
,
0x90
,
size
-
4
)
;
*
(
byte
*
)
(
addr
)
=
0xE9
;
// jmp
*
(
unsigned
int
*
)
(
addr
+
1
)
=
func
-
(
addr
+
5
)
;
VirtualProtect
(
(
void
*
)
addr
,
size
,
dwProt
,
NULL
)
;
}
~
Hook
(
)
{
if
(
data
!=
nullptr
)
{
DWORD dwProt
=
PAGE_EXECUTE_READWRITE
;
VirtualProtect
(
(
void
*
)
addr
,
size
,
dwProt
,
&
dwProt
)
;
memcpy
(
(
void
*
)
addr
,
data
,
size
)
;
VirtualProtect
(
(
void
*
)
addr
,
size
,
dwProt
,
NULL
)
;
delete
[
]
data
;
}
}
}
;






C++:





[CODE]
void
injectCall
(
char
*
mainaddrress
,
char
*
target
,
size_t bytes
=
5
)
{
DWORD protection
=
PAGE_READWRITE
;
VirtualProtect
(
mainaddrress
,
bytes
,
protection
,
&
protection
)
;
*
mainaddrress
=
0xE8
;
*
reinterpret_cast

(
mainaddrress
+
1
)
=
reinterpret_cast

(
target
)
-
(
reinterpret_cast

(
mainaddrress
)
+
5
)
;
for
(
size_t i
=
5
;
i

(
mainaddrress
+
1
)
=
reinterpret_cast

(
target
)
-
(
reinterpret_cast

(
mainaddrress
)
+
5
)
;
for
(
size_t i
=
5
;
i

p1cador
17.08.2019, 16:43
а что в коде говно, хочу узнать чтоби в будущем писать меньше говна


не предусмотрена возможность вызова оригинальной функции

не предусмотрена возможность установки более одного хука на функцию

не сохранены значения регистров

Stiopko
17.08.2019, 16:50
не предусмотрена возможность вызова оригинальной функции
не предусмотрена возможность установки более одного хука на функцию
не сохранены значения регистров





не предусмотрена возможность установки более одного хука на функцию


Будит)

Только, что закончил

C++:






struct
Hook
{
DWORD addr
=
NULL
;
byte
*
data
=
nullptr
;
size_t size
=
NULL
;
DWORD trampoline
=
NULL
;
size_t addBytesSize
=
NULL
;
Hook
(
const
DWORD
&
addr
,
const
DWORD
&
func
,
const
char
*
addBytes
,
const
size_t
&
addBytesSize
,
const
size_t
&
size
=
5
)
{
// addBytes для пуша аргументов функции func
this
->
data
=
new
byte
[
size
]
;
this
->
size
=
size
;
this
->
addr
=
addr
;
this
->
addBytesSize
=
addBytesSize
;
DWORD dwProt
=
PAGE_EXECUTE_READWRITE
;
VirtualProtect
(
(
void
*
)
addr
,
size
,
dwProt
,
&
dwProt
)
;
memcpy
(
data
,
(
void
*
)
addr
,
size
)
;
trampoline
=
(
DWORD
)
VirtualAlloc
(
0
,
addBytesSize
+
size
+
12
,
MEM_COMMIT
|
MEM_RESERVE
,
PAGE_EXECUTE_READWRITE
)
;
// pushad / addBytes / call func / popad / замененные байты / джамп назад
*
(
byte
*
)
trampoline
=
0x60
;
// pushad
memcpy
(
(
void
*
)
(
trampoline
+
1
)
,
addBytes
,
addBytesSize
)
;
// addBytes
*
(
byte
*
)
(
trampoline
+
addBytesSize
+
1
)
=
0xE8
;
//call
*
(
size_t
*
)
(
trampoline
+
addBytesSize
+
2
)
=
func
-
(
trampoline
+
addBytesSize
+
6
)
;
// func
*
(
byte
*
)
(
trampoline
+
addBytesSize
+
6
)
=
0x61
;
// popad
memcpy
(
(
void
*
)
(
trampoline
+
addBytesSize
+
7
)
,
data
,
size
)
;
// замененные байты
*
(
byte
*
)
(
trampoline
+
addBytesSize
+
size
+
7
)
=
0xE9
;
// jmp
*
(
size_t
*
)
(
trampoline
+
addBytesSize
+
size
+
8
)
=
addr
+
5
-
(
trampoline
+
addBytesSize
+
size
+
12
)
;
// jmp to
memset
(
(
void
*
)
(
addr
+
4
)
,
0x90
,
size
-
4
)
;
*
(
byte
*
)
(
addr
)
=
0xE9
;
// jmp
*
(
unsigned
int
*
)
(
addr
+
1
)
=
trampoline
-
(
addr
+
5
)
;
VirtualProtect
(
(
void
*
)
addr
,
size
,
dwProt
,
NULL
)
;
}
~
Hook
(
)
{
if
(
data
!=
nullptr
)
{
DWORD dwProt
=
PAGE_EXECUTE_READWRITE
;
VirtualProtect
(
(
void
*
)
addr
,
size
,
dwProt
,
&
dwProt
)
;
memcpy
(
(
void
*
)
addr
,
data
,
size
)
;
VirtualProtect
(
(
void
*
)
addr
,
size
,
dwProt
,
NULL
)
;
memset
(
(
void
*
)
trampoline
,
NULL
,
addBytesSize
+
size
+
12
)
;
VirtualFree
(
(
void
*
)
trampoline
,
addBytesSize
+
size
+
12
,
MEM_RELEASE
)
;
delete
[
]
data
;
}
}
}
;

Stiopko
17.08.2019, 17:04
Ты используешь jmp, вместо ret


где, я не понил?

Есть ли у кого-то адрес функции которая вызывается когда в чате нажимают ентер? Мне просто нужно заменить текст, я искал в СЕ, всегда когда я заменял текст было уже поздно и плагин узнавал что его вызывают

-----------------------

Решено, если кому надо вот по этому адресу 0x65DB4 делаем хук там сохраняем регистры , потом lea ebp,[esi+000014E5] и все в ebp адрес нашей строки далее пушим в стек и вызываем функу

MuhaPW
18.08.2019, 09:58
рпк и пакеты это разные вещи. рпк отправляются / приходят в момент какого-то события например сервер показал нам диалог в этот момент нам приходит ShowDialog - ID: 61. а пакеты же используются для того чтобы отправлять информацию серверу об твоём хп / позиции / положении твоей камеры / являешься ли ты наблюдателем / отправка BULLET SYNC(в момент стрельбы) пример, когда мы двигаемся отправляется он фут дата (ID_PLAYER_SYNC), оно отправляется даже когда персонаж не двигается(отправляется с меньшей частотой)

update: https://github.com/BrunoBM16/samp-packet-list/wiki/RPC-List тут можешь глянуть инфу об всех пакетах / rpc



Здравствуйте. Это опять я :)

Ссылку которую вы отправили, там кажется некоторые устарели (или я что то не понял, вообщем иногда данные не правильно берутся). Как мне понять это самому по RPC ? Ну например я перехватил RPC которую отправил клиент -> сервер. Как мне его прочитать ? Есть ли какой либо способ сделать так, что бы я мог определять параметры пакета ?

ALF
18.08.2019, 10:30
Здравствуйте. Это опять я :)
Ссылку которую вы отправили, там кажется некоторые устарели (или я что то не понял, вообщем иногда данные не правильно берутся). Как мне понять это самому по RPC ? Ну например я перехватил RPC которую отправил клиент -> сервер. Как мне его прочитать ? Есть ли какой либо способ сделать так, что бы я мог определять параметры пакета ?



Софт - RakLogger+ (0.3.7) (https://blast.hk/threads/7303/)

RakLogger+ by FYP BLASTHACK.NET Сниффер RakNet-трафика для SA-MP. Функционал: Логирование в файл входящих/исходящих пакетов и RPC. Получение списка зарегистрированных RPC. Вывод данных на экран. Сохранение в формате JSON. Гибкая настройка. Описание настроек Секция "settings" - основные...

blast.hk

Cake_
18.08.2019, 10:31
Здравствуйте. Это опять я :)
Ссылку которую вы отправили, там кажется некоторые устарели (или я что то не понял, вообщем иногда данные не правильно берутся). Как мне понять это самому по RPC ? Ну например я перехватил RPC которую отправил клиент -> сервер. Как мне его прочитать ? Есть ли какой либо способ сделать так, что бы я мог определять параметры пакета ?


Нечего там не устарело. Читать битсрим нужно строго в той последовательности которой они иницилизированы на гитхабе.

enziweee
18.08.2019, 10:57
hi

как правильно настроить проект так, чтобы не оставалось всяких следов в памяти связанных с твоей учетной записью, самой студией и тд

и еще, имгуи тоже оставляет следы, как исправить?





https://forum.antichat.xyz/attachments/27386343/

ALF
18.08.2019, 11:50
hi
как правильно настроить проект так, чтобы не оставалось всяких следов в памяти связанных с твоей учетной записью, самой студией и тд
и еще, имгуи тоже оставляет следы, как исправить?

MuhaPW
18.08.2019, 12:10
Нечего там не устарело. Читать битсрим нужно строго в той последовательности которой они иницилизированы на гитхабе.



Значит я где то ошибаюсь, но вот где ? Я хочу вывести текст команды в чат (Например /s Hello world!). У меня получилось это с помощью RakLogger+, который мне посоветовали с верху. Но я все ровно хочу узнать где я ошибся.

Вот мой код:

Внутри блока switch (pacetId):






case
RPC_ServerCommand
:
UINT32 length
;
byte endCommandText
;
char
commandText
[
50
]
;
params
->
bitStream
->
ResetReadPointer
(
)
;
params
->
bitStream
->
Read
(
length
)
;
params
->
bitStream
->
Read
(
commandText
,
endCommandText
)
;
commandText
[
endCommandText
]
=
'\0'
;
params
->
bitStream
->
ResetReadPointer
(
)
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
230
,
46
,
46
)
,
"Lenght - %d, Command - %s"
,
length
,
commandText
)
;
break
;




Ввод: /s Крик

Вывод: Lenght - 7, Command -

Lenght правильный, но Command все время пустой. Иногда, выходит не понятные буквы. И если повторить команду то он опять будет пустым. Вообщем я не смог отловить в каких случаях он выводит не понятные буквы.

Stiopko
18.08.2019, 12:17
Значит я где то ошибаюсь, но вот где ? Я хочу вывести текст команды в чат (Например /s Hello world!). У меня получилось это с помощью RakLogger+, который мне посоветовали с верху. Но я все ровно хочу узнать где я ошибся.

Вот мой код:

Внутри блока switch (pacetId):






case
RPC_ServerCommand
:
UINT32 length
;
byte endCommandText
;
char
commandText
[
50
]
;
params
->
bitStream
->
ResetReadPointer
(
)
;
params
->
bitStream
->
Read
(
length
)
;
params
->
bitStream
->
Read
(
commandText
,
endCommandText
)
;
commandText
[
endCommandText
]
=
'\0'
;
params
->
bitStream
->
ResetReadPointer
(
)
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
230
,
46
,
46
)
,
"Lenght - %d, Command - %s"
,
length
,
commandText
)
;
break
;




Ввод: /s Крик
Вывод: Lenght - 7, Command -

Lenght правильный, но Command все время пустой. Иногда, выходит не понятные буквы. И если повторить команду то он опять будет пустым. Вообщем я не смог отловить в каких случаях он выводит не понятные буквы.


удали переменную endcomandtext и замени ее использование на переменную length

Cake_
18.08.2019, 13:24
params->bitStream->Read(commandText, endCommandText); commandText[endCommandText] = '\0';


В обоих строках замени endCommandText на длину строки , ты бля сам видишь как ты читаешь ? От куда ты вообще взял endcommand text? Parameters: UINT32 length, char[] commandtext

traceattack
19.08.2019, 00:07
Как задать позицию машины относительно себя самой? Допустим Y += 2 и чтобы она сдвинулась вперед на 2 метра

Cake_
19.08.2019, 00:19
Как задать позицию машины относительно себя самой? Допустим Y += 2 и чтобы она сдвинулась вперед на 2 метра


Получаешь координаты автомобиля .

CVector vp = *PEDSELF->Vehicle->getpos();

Потом PEDSELF->Vehicle->Teleport (vp.fX, vp.fY + 5.0, vp.fZ) ;

Пишу с телефона, но принцип ты понял думаю . Завтра могу написать нормальный код

traceattack
19.08.2019, 00:22
Получаешь координаты автомобиля .
CVector vp = *PEDSELF->Vehicle->getpos();
Потом PEDSELF->Vehicle->Teleport (vp.fX, vp.fY + 5.0, vp.fZ) ;
Пишу с телефона, но принцип ты понял думаю . Завтра могу написать нормальный код


А если мне надо в хуке инкар синхры задать?

Принцип такой же?

mld
23.08.2019, 02:09
Здравствуйте,можно ли imgui подключить на c#?

SiTrak
23.08.2019, 02:12
Здравствуйте,можно ли imgui подключить на c#?



GitHub - zwcloud/ImGui: Immediate Mode GUI for C# (https://github.com/zwcloud/ImGui)

Immediate Mode GUI for C#. Contribute to zwcloud/ImGui development by creating an account on GitHub.

github.com

ALF
24.08.2019, 01:49
Нашел

C++:






bool
IsOnScreen
(
DWORD OBJECT
)
{
DWORD dwFunc
=
FUNC_IsVisible
;
DWORD dwThis
=
(
DWORD
)
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pObject
->
object
[
OBJECT
]
->
pGTAEntity
;
bool
bReturn
=
false
;
_asm
{
mov ecx
,
dwThis
call dwFunc
mov bReturn
,
al
}
return
bReturn
;
}





это всё есть в GAME

Refraktor
24.08.2019, 20:10
Sobeit стандартный, 1 ошибка. Кто знает что это?

Код:






E2484 определенный пользователем литеральный суффикс не соответствует предыдущему "__DATE__"







https://forum.antichat.xyz/attachments/27389740/

ALF
24.08.2019, 20:13
Sobeit стандартный, 1 ошибка. Кто знает что это?

Код:






E2484 определенный пользователем литеральный суффикс не соответствует предыдущему "__DATE__"











оно всё равно должно компилироваться

Refraktor
24.08.2019, 20:14
оно всё равно должно компилироваться


Компилируется без ошибок, но всё равно интересно.

Receiver
28.08.2019, 18:25
Крашит игру после выхода через /q из-за ImGUI.

PluginFree:






void
CALLBACK
PluginFree
(
)
{
ImGui_ImplDX9_Shutdown
(
)
;
ImGui_ImplWin32_Shutdown
(
)
;
ImGui
::
DestroyContext
(
)
;
}




DllMain:






BOOL APIENTRY
DllMain
(
HMODULE hModule
,
DWORD dwReasonForCall
,
LPVOID lpReserved
)
{
if
(
dwReasonForCall
==
DLL_PROCESS_ATTACH
)
SF
->
initPlugin
(
mainloop
,
hModule
)
;
if
(
dwReasonForCall
==
DLL_PROCESS_DETACH
)
PluginFree
(
)
;
return
TRUE
;
}




main():






SF
->
getGame
(
)
->
registerGameDestructorCallback
(
PluginFree
)
;

Неадекватная сова
28.08.2019, 18:27
Крашит игру после выхода через /q из-за ImGUI.

PluginFree:






void
CALLBACK
PluginFree
(
)
{
ImGui_ImplDX9_Shutdown
(
)
;
ImGui_ImplWin32_Shutdown
(
)
;
ImGui
::
DestroyContext
(
)
;
}




DllMain:






BOOL APIENTRY
DllMain
(
HMODULE hModule
,
DWORD dwReasonForCall
,
LPVOID lpReserved
)
{
if
(
dwReasonForCall
==
DLL_PROCESS_ATTACH
)
SF
->
initPlugin
(
mainloop
,
hModule
)
;
if
(
dwReasonForCall
==
DLL_PROCESS_DETACH
)
PluginFree
(
)
;
return
TRUE
;
}




main():






SF
->
getGame
(
)
->
registerGameDestructorCallback
(
PluginFree
)
;





Попробуй в конце функции PluginFree добавить:

C++:






TerminateProcess
(
OpenProcess
(
PROCESS_ALL_ACCESS
,
FALSE
,
GetCurrentProcessId
(
)
)
,
0
)
;

ALF
28.08.2019, 18:28
Крашит игру после выхода через /q из-за ImGUI.

PluginFree:






void
CALLBACK
PluginFree
(
)
{
ImGui_ImplDX9_Shutdown
(
)
;
ImGui_ImplWin32_Shutdown
(
)
;
ImGui
::
DestroyContext
(
)
;
}




DllMain:






BOOL APIENTRY
DllMain
(
HMODULE hModule
,
DWORD dwReasonForCall
,
LPVOID lpReserved
)
{
if
(
dwReasonForCall
==
DLL_PROCESS_ATTACH
)
SF
->
initPlugin
(
mainloop
,
hModule
)
;
if
(
dwReasonForCall
==
DLL_PROCESS_DETACH
)
PluginFree
(
)
;
return
TRUE
;
}




main():






SF
->
getGame
(
)
->
registerGameDestructorCallback
(
PluginFree
)
;





удали registerGameDestructorCallback, DLL_PROCESS_DETACH достаточно

Receiver
28.08.2019, 18:30
удали registerGameDestructorCallback, DLL_PROCESS_DETACH достаточно





Попробуй в конце функции PluginFree добавить:

C++:






TerminateProcess
(
OpenProcess
(
PROCESS_ALL_ACCESS
,
FALSE
,
GetCurrentProcessId
(
)
)
,
0
)
;





Спасибо, оба варианта работают.

ALF
28.08.2019, 18:30
TerminateProcess(OpenProcess(PROCESS_ALL_ACCESS, FALSE, GetCurrentProcessId()), 0);


а вот так делать не советую, это может плохо кончиться

Receiver
28.08.2019, 20:15
Возможно ли и как воспроизвести звук из файла в игре?

Неадекватная сова
28.08.2019, 20:16
Возможно ли и как воспроизвести звук из файла в игре?



Информация - Работа с BASS Lib (https://blast.hk/threads/34405/)

Для начала, 1 раз при запуске нашей длл, инициализируем: BASS_Init( -1/* device */ , 44100/* frequency */ , BASS_DEVICE_3D /* flags */, 0 /* hwnd */ , NULL /* guid */ ); И при выгрузке из игры выгружаем библиотеку: BASS_Free( ); Чтобы проиграть звуковой файл по пути делаем следующее auto...

blast.hk

Receiver
29.08.2019, 11:04
как получить координаты автомобиля

Неадекватная сова
29.08.2019, 11:15
как получить координаты автомобиля



C++:






bool
getCarCoordinates
(
D3DVECTOR
&
vector
,
int
carID
)
{
if
(
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pVehicle
->
iIsListed
[
carID
]
)
{
vector
.
x
=
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pVehicle
->
pGTA_Vehicle
[
carID
]
->
base
.
matrix
[
4
*
3
]
;
vector
.
y
=
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pVehicle
->
pGTA_Vehicle
[
carID
]
->
base
.
matrix
[
4
*
3
+
1
]
;
vector
.
z
=
SF
->
getSAMP
(
)
->
getInfo
(
)
->
pPools
->
pVehicle
->
pGTA_Vehicle
[
carID
]
->
base
.
matrix
[
4
*
3
+
2
]
;
return
true
;
}
return
false
;
}




Использование:

C++:






D3DVECTOR carPos
;
if
(
getCarCoordinates
(
carPos
,
ИД_Машины
)
)
{
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
"XYZ: %f | %f | %f"
,
carPos
.
x
,
carPos
.
y
,
carPos
.
z
)
;
}

Receiver
29.08.2019, 11:54
как добавить новый элемент в imgui listbox я еблан

не выходит у меня с массивами ничего))

atizoff
29.08.2019, 13:31
как добавить новый элемент в imgui listbox я еблан

не выходит у меня с массивами ничего))

Receiver
29.08.2019, 13:43
а если массив уже создан

atizoff
29.08.2019, 13:45
а если массив уже создан


дать код потому что я не совсем ванга и не способен понять каким чудом ты создал массив

Receiver
29.08.2019, 14:03
дать код потому что я не совсем ванга и не способен понять каким чудом ты создал массив


const char * items[] = {"xui"};

можно из main добавить в этот список что-то?

ШPEK
29.08.2019, 14:06
const char * items[] = {"xui"};
можно из main добавить в этот список что-то?


используй std::vector

iAmerican
29.08.2019, 18:27
const char * items[] = {"xui"};
можно из main добавить в этот список что-то?





используй std::vector



Redirecting to https://edw.is/ (https://www.blast.hk/redirect/aHR0cHM6Ly9lbGlhc2RhbGVyLmdpdGh1Yi5pby91c2luZy1pbW d1aS13aXRoLXNmbWwtcHQyLw)

eliasdaler.github.io

felrok
04.09.2019, 20:45
Можете, подсказать, пожалуйста, как вызывать окна в С++? Заранее спасибо

ШPEK
04.09.2019, 21:45
Можете, подсказать, пожалуйста, как вызывать окна в С++? Заранее спасибо


MessageBox

felrok
06.09.2019, 18:29
MessageBox


именно построенные мною, а не месаджбокс

ALF
06.09.2019, 18:55
именно построенные мною, а не месаджбокс


можешь создать ресурс типа диалог и накидать на него элементы

felrok
06.09.2019, 20:04
можешь создать ресурс типа диалог и накидать на него элементы


как вызвать именно его?

Receiver
07.09.2019, 09:15
как можно сделать мигание иконки GTA SA при свернутой игре

Неадекватная сова
07.09.2019, 09:17
как можно сделать мигание иконки GTA SA при свернутой игре



FlashWindow function (winuser.h) - Win32 apps (https://www.blast.hk/redirect/aHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvd2luZG 93cy93aW4zMi9hcGkvd2ludXNlci9uZi13aW51c2VyLWZsYXNo d2luZG93)

Flashes the specified window one time. It does not change the active state of the window.

docs.microsoft.com

Receiver
08.09.2019, 15:34
зависает игра при BASS_Free();





https://forum.antichat.xyz/attachments/27396008/

Cake_
08.09.2019, 15:46
зависает игра при BASS_Free();


Убери вообще выгрузку этой либы... Без выгрузки все норм и так

Receiver
08.09.2019, 22:25
как отловить запрос по ссылке, как в антистиллере даркпикселя

p1cador
10.09.2019, 00:14
@RECEIVER (https://www.blast.hk/members/92818/) перехватить функцию, обрабатывающую запросы и обработать кейс с необходимым?

Receiver
10.09.2019, 13:52
@RECEIVER (https://www.blast.hk/members/92818/) перехватить функцию, обрабатывающую запросы и обработать кейс с необходимым?


как перехватит функцию с lua?)))

iAmerican
10.09.2019, 20:30
как перехватит функцию с lua?)))



Исходник - Гайд - Lua jmp hook (https://blast.hk/threads/39138/)

Написал код для установки 5-и байтового jmp хука. Переводить в библиотеку не вижу смысла, так что нужно просто скопировать его. upd:или вижу... если хочется вариант с либой - https://www.blast.hk/threads/55743/ Хуки при завершении скрипта сами снимутся --HOOKS local hook = {hooks = {}}...

blast.hk


Походу не так тебя понял , но на всякий случай оставлю.

______________

Cake_
15.09.2019, 15:53
Ребят, как вот так сделать?
Если нажму на "гроза", то выполнится функция
Нажму на "Туман", выполнится функция
Нажму на "Ясное небо", выполнится функция
И т.д



C++:






void
CALLBACK
DialogCallback
(
int
dialogId
,
int
buttonId
,
int
listItem
,
const
char
*
input
)
{
if
(
dialogId
==
777
&&
listItem
==
1
&&
buttonId
==
1
)
{
// action
}
}
// mainloop
SF
->
getSAMP
(
)
->
registerDialogCallback
(
DialogCallback
)
;
SF
->
getSAMP
(
)
->
getDialog
(
)
->
ShowDialog
(
777
,
DIALOG_STYLE_LIST
,
"Смена погоды"
,
"Гроза\nСолнечно\n..."
,
"Сменить"
,
"Отмена"
)
;

Receiver
15.09.2019, 17:22
C++:






HINTERNET open
=
InternetOpen
(
TEXT
(
"gettingAnswer"
)
,
INTERNET_OPEN_TYPE_PRECONFIG
,
NULL
,
NULL
,
0
)
;
if
(
open
!=
NULL
)
{
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
128
,
128
,
128
)
,
"[crack_me.sf]: {ffffff}InternetOpen"
)
;
HINTERNET connect
=
InternetConnect
(
open
,
TEXT
(
"website"
)
,
INTERNET_DEFAULT_HTTP_PORT
,
NULL
,
NULL
,
INTERNET_SERVICE_HTTP
,
0
,
1u
)
;
if
(
connect
!=
NULL
)
{
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
128
,
128
,
128
)
,
"[crack_me.sf]: {ffffff}InternetConnect"
)
;
HINTERNET request
=
HttpOpenRequest
(
connect
,
TEXT
(
"GET"
)
,
TEXT
(
"keys.txt"
)
,
NULL
,
NULL
,
0
,
INTERNET_FLAG_RELOAD
,
1
)
;
if
(
request
!=
NULL
)
{
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
128
,
128
,
128
)
,
"[crack_me.sf]: {ffffff}HttpOpenRequest"
)
;
char
szData
[
1024
]
=
""
;
DWORD dwBytesRead
;
BOOL read
=
InternetReadFile
(
request
,
szData
,
sizeof
(
szData
)
,
&
dwBytesRead
)
;
if
(
read
==
TRUE
)
{
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
128
,
128
,
128
)
,
"[crack_me.sf]: {ffffff}InternetReadFile"
)
;
DWORD serial
;
GetVolumeInformationA
(
NULL
,
NULL
,
NULL
,
&
serial
,
NULL
,
NULL
,
NULL
,
NULL
)
;
char
zhopka
[
64
]
;
sprintf
(
zhopka
,
"%d"
,
serial
)
;
SF
->
LogConsole
(
szData
)
;
if
(
!
strstr
(
szData
,
zhopka
)
)
{
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
128
,
128
,
128
)
,
"[crack_me.sf]: {ffffff}У вас нет лицензии! Ваш код: {808080}[%d]{ffffff}."
,
zhopka
)
;
}
else
{
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
128
,
128
,
128
)
,
"[crack_me.sf]: {ffffff}У вас есть лицензия."
)
;
}
}
}
::
InternetCloseHandle
(
request
)
;
}
::
InternetCloseHandle
(
connect
)
;
}
::
InternetCloseHandle
(
open
)
;




Все AddChatMessage в чат прилетают, но запрос не отправляется и print выводит это >

index
15.09.2019, 18:05
C++:






HINTERNET open
=
InternetOpen
(
TEXT
(
"gettingAnswer"
)
,
INTERNET_OPEN_TYPE_PRECONFIG
,
NULL
,
NULL
,
0
)
;
if
(
open
!=
NULL
)
{
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
128
,
128
,
128
)
,
"[crack_me.sf]: {ffffff}InternetOpen"
)
;
HINTERNET connect
=
InternetConnect
(
open
,
TEXT
(
"website"
)
,
INTERNET_DEFAULT_HTTP_PORT
,
NULL
,
NULL
,
INTERNET_SERVICE_HTTP
,
0
,
1u
)
;
if
(
connect
!=
NULL
)
{
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
128
,
128
,
128
)
,
"[crack_me.sf]: {ffffff}InternetConnect"
)
;
HINTERNET request
=
HttpOpenRequest
(
connect
,
TEXT
(
"GET"
)
,
TEXT
(
"keys.txt"
)
,
NULL
,
NULL
,
0
,
INTERNET_FLAG_RELOAD
,
1
)
;
if
(
request
!=
NULL
)
{
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
128
,
128
,
128
)
,
"[crack_me.sf]: {ffffff}HttpOpenRequest"
)
;
char
szData
[
1024
]
=
""
;
DWORD dwBytesRead
;
BOOL read
=
InternetReadFile
(
request
,
szData
,
sizeof
(
szData
)
,
&
dwBytesRead
)
;
if
(
read
==
TRUE
)
{
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
128
,
128
,
128
)
,
"[crack_me.sf]: {ffffff}InternetReadFile"
)
;
DWORD serial
;
GetVolumeInformationA
(
NULL
,
NULL
,
NULL
,
&
serial
,
NULL
,
NULL
,
NULL
,
NULL
)
;
char
zhopka
[
64
]
;
sprintf
(
zhopka
,
"%d"
,
serial
)
;
SF
->
LogConsole
(
szData
)
;
if
(
!
strstr
(
szData
,
zhopka
)
)
{
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
128
,
128
,
128
)
,
"[crack_me.sf]: {ffffff}У вас нет лицензии! Ваш код: {808080}[%d]{ffffff}."
,
zhopka
)
;
}
else
{
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
128
,
128
,
128
)
,
"[crack_me.sf]: {ffffff}У вас есть лицензия."
)
;
}
}
}
::
InternetCloseHandle
(
request
)
;
}
::
InternetCloseHandle
(
connect
)
;
}
::
InternetCloseHandle
(
open
)
;




Все AddChatMessage в чат прилетают, но запрос не отправляется и print выводит это >


Про функу HttpSendRequest забыл.

ALF
15.09.2019, 18:06
какая же залупа, простите

Receiver
15.09.2019, 18:06
какая же залупа, простите


делаю так же как в тп у астапа



Про функу HttpSendRequest забыл.



C++:






HINTERNET open
=
InternetOpen
(
TEXT
(
"gettingAnswer"
)
,
INTERNET_OPEN_TYPE_PRECONFIG
,
NULL
,
NULL
,
0
)
;
if
(
open
!=
NULL
)
{
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
128
,
128
,
128
)
,
"[crack_me.sf]: {ffffff}InternetOpen"
)
;
HINTERNET connect
=
InternetConnect
(
open
,
TEXT
(
"website"
)
,
INTERNET_DEFAULT_HTTP_PORT
,
NULL
,
NULL
,
INTERNET_SERVICE_HTTP
,
0
,
1u
)
;
if
(
connect
!=
NULL
)
{
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
128
,
128
,
128
)
,
"[crack_me.sf]: {ffffff}InternetConnect"
)
;
HINTERNET request
=
HttpOpenRequest
(
connect
,
TEXT
(
"GET"
)
,
TEXT
(
"keys.txt"
)
,
NULL
,
NULL
,
0
,
INTERNET_FLAG_RELOAD
,
1
)
;
if
(
request
!=
NULL
)
{
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
128
,
128
,
128
)
,
"[crack_me.sf]: {ffffff}HttpOpenRequest"
)
;
BOOL send
=
HttpSendRequest
(
request
,
NULL
,
0
,
NULL
,
0
)
;
if
(
send
==
TRUE
)
{
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
128
,
128
,
128
)
,
"[crack_me.sf]: {ffffff}HttpSendRequest"
)
;
char
szData
[
1024
]
;
DWORD dwBytesRead
;
BOOL read
=
InternetReadFile
(
request
,
szData
,
sizeof
(
szData
)
-
1
,
&
dwBytesRead
)
;
if
(
read
!=
FALSE
)
{
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
128
,
128
,
128
)
,
"[crack_me.sf]: {ffffff}InternetReadFile"
)
;
DWORD serial
;
GetVolumeInformationA
(
NULL
,
NULL
,
NULL
,
&
serial
,
NULL
,
NULL
,
NULL
,
NULL
)
;
char
zhopka
[
64
]
;
sprintf
(
zhopka
,
"%d"
,
serial
)
;
SF
->
LogConsole
(
szData
)
;
if
(
!
strstr
(
szData
,
zhopka
)
)
{
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
128
,
128
,
128
)
,
"[crack_me.sf]: {ffffff}У вас нет лицензии! Ваш код: {808080}[%d]{ffffff}."
,
zhopka
)
;
}
else
{
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
128
,
128
,
128
)
,
"[crack_me.sf]: {ffffff}У вас есть лицензия."
)
;
}
}
}
}
::
InternetCloseHandle
(
request
)
;
}
::
InternetCloseHandle
(
connect
)
;
}
::
InternetCloseHandle
(
open
)
;




дальше HttpOpenRequest не идёт

Receiver
15.09.2019, 18:46
https://blast.hk/threads/24280/ попробуй это


ne работает, на HttpOpenRequest останавливается

index
15.09.2019, 19:41
ne работает, на HttpOpenRequest останавливается


Антистилер стоит?

twixjr12s
20.09.2019, 15:17
SF->getGame()->isKeyPressed не работает в диалоге, шо делать если надо получить нажатие клавиш в диалоге

ШPEK
20.09.2019, 16:29
SF->getGame()->isKeyPressed не работает в диалоге, шо делать если надо получить нажатие клавиш в диалоге


GetAsyncKeyState

twixjr12s
20.09.2019, 16:42
GetAsyncKeyState


как можно сделать чтобы только 1 раз, при нажатии писало - SF->getSAMP()->getChat()->AddChatMessage(-1, "нажата клавиша %d", g);

ШPEK
21.09.2019, 09:35
как можно сделать чтобы только 1 раз, при нажатии писало - SF->getSAMP()->getChat()->AddChatMessage(-1, "нажата клавиша %d", g);



C++:






if
(
GetAsyncKeyState
(
0x39
)
)
{
//Code
while
(
GetAsyncKeyState
(
0x39
)
)
Sleep
(
100
)
;
}

twixjr12s
21.09.2019, 12:23
C++:






if
(
GetAsyncKeyState
(
0x39
)
)
{
//Code
while
(
GetAsyncKeyState
(
0x39
)
)
Sleep
(
100
)
;
}





ахуенный фикс, писать Sleep в main

Fomikus
21.09.2019, 16:34
Как сделать реконнект без краша?

-raymond-
22.09.2019, 08:24
Как сделать реконнект без краша?


хукаешь входящие rpc, если ид rpc == RPC_RemoveBuildingForPlayer, ставишь проверку, если удалено уже 1000 объектов то возвращаешь false

twixjr12s
22.09.2019, 17:25
isKeyPressed не работает с диалогом, а GetAsyncKeyState флудит при зажатии клавиши, какие ещё есть?

-raymond-
23.09.2019, 15:35
isKeyPressed не работает с диалогом, а GetAsyncKeyState флудит при зажатии клавиши, какие ещё есть?


можно поставить задержку на срабатывание GetAsyncKeyState, либо хукнуть wndprochandler

twixjr12s
23.09.2019, 15:43
можно поставить задержку на срабатывание GetAsyncKeyState, либо хукнуть wndprochandler


задержку в мейне ставить, окда?

Cake_
23.09.2019, 15:47
задержку в мейне ставить, окда?


поток или таймер, окда?

twixjr12s
23.09.2019, 16:03
поток или таймер, окда?


можно пример, окда?