
05.08.2020, 15:05
|
|
Участник форума
Регистрация: 14.04.2018
Сообщений: 122
С нами:
4254200
Репутация:
98
|
|
Сообщение от KiN4StAt
Если я все правильно понял, то
Код:
(DWORD*)(*pInfo + SAMP_SETTINGS)
Преобразует *pInfo+SAMP_SETTINGS в DWORD*, после идет +0x27, а из-за арифметики указателей, это получается 0x27 * 4, и потом идет разыменование.
Возможно ты еще с преобразованиями накосячил, пока с телефонам, не совсем удобно смотреть 
Также возможно у тебя DWORD задейфанен в 8 байт, а не в 4. Я однажды из-за этого час искал где приколы возникли
нашел где ошибка. Вместо
C++:
Код:
ReadProcessMemory
(
hProcess
,
(
LPVOID
)
(
moduleBase
+
SAMP_INFO
)
,
&
pInfo
,
sizeof
(
pInfo
)
,
nullptr
)
;
WriteProcessMemory
(
hProcess
,
(
LPVOID
)
(
pInfo
+
SAMP_SETTINGS
+
0x38
)
,
&
ShowNameTags
,
sizeof
(
ShowNameTags
)
,
nullptr
)
;
WriteProcessMemory
(
hProcess
,
(
LPVOID
)
(
pInfo
+
SAMP_SETTINGS
+
0x2F
)
,
&
ThroughWalls
,
sizeof
(
ThroughWalls
)
,
nullptr
)
;
WriteProcessMemory
(
hProcess
,
(
LPVOID
)
(
pInfo
+
SAMP_SETTINGS
+
0x27
)
,
&
fDistance
,
sizeof
(
fDistance
)
,
nullptr
)
;
Должно быть что-то типа такого:
C++:
Код:
ReadProcessMemory
(
hProcess
,
(
LPVOID
)
(
moduleBase
+
SAMP_INFO
)
,
&
pInfo
,
sizeof
(
pInfo
)
,
nullptr
)
;
DWORD pSettings
;
ReadProcessMemory
(
hProcess
,
(
LPVOID
)
(
pInfo
+
SAMP_SETTINGS
)
,
&
pSettings
,
sizeof
(
pSettings
)
,
NULL
)
;
WriteProcessMemory
(
hProcess
,
(
LPVOID
)
(
pSettings
+
0x38
)
,
&
ShowNameTags
,
sizeof
(
ShowNameTags
)
,
nullptr
)
;
WriteProcessMemory
(
hProcess
,
(
LPVOID
)
(
pSettings
+
0x2F
)
,
&
ThroughWalls
,
sizeof
(
ThroughWalls
)
,
nullptr
)
;
WriteProcessMemory
(
hProcess
,
(
LPVOID
)
(
pSettings
+
0x27
)
,
&
fDistance
,
sizeof
(
fDistance
)
,
nullptr
)
;
Спасибо, вижу, я не обратил внимания. Но не заработало(
Сообщение от KiN4StAt
Также возможно у тебя DWORD задейфанен в 8 байт, а не в 4. Я однажды из-за этого час искал где приколы возникли
Это как? Я размерность нигде не указывал
|
|
|

05.08.2020, 15:09
|
|
Флудер
Регистрация: 06.11.2017
Сообщений: 2,759
С нами:
4483143
Репутация:
183
|
|
Сообщение от T4yz1e
Спасибо, вижу, я не обратил внимания. Но не заработало(
Это как? Я размерность нигде не указывал
У меня тоже левых дефайнов не было, а оказалось что где-то есть
|
|
|

05.08.2020, 15:23
|
|
Участник форума
Регистрация: 14.04.2018
Сообщений: 122
С нами:
4254200
Репутация:
98
|
|
Сообщение от KiN4StAt
У меня тоже левых дефайнов не было, а оказалось что где-то есть
Обэма взломал комп и задефайнил пока тебя не было
|
|
|

07.08.2020, 17:52
|
|
Познающий
Регистрация: 03.05.2016
Сообщений: 64
С нами:
5277893
Репутация:
56
|
|
Как включить курсор Windows и заморозить управление? Подобно когда заходишь в меню паузы.
|
|
|

07.08.2020, 18:33
|
|
Флудер
Регистрация: 06.11.2017
Сообщений: 2,759
С нами:
4483143
Репутация:
183
|
|
Сообщение от SKIC
Как включить курсор Windows и заморозить управление? Подобно когда заходишь в меню паузы.
C++:
Код:
// SAMP 0.3.7-R1
#define SAMP_MISC_INFO = 0x21A10C
#define SAMP_FUNC_TOGGLECURSOR = 0x9BD30
#define SAMP_FUNC_CURSORUNLOCKACTORCAM = 0x9BC10
void
ToggleCursor
(
bool
state
)
{
//state - 1 on; 0 off
if
(
iInputEnabled
)
//is Input Active Check
return
;
void
*
obj
=
*
(
void
*
*
)
(
dwSAMPAddr
+
SAMP_MISC_INFO
)
;
(
(
void
(
__thiscall
*
)
(
void
*
,
int
,
bool
)
)
(
dwSAMPAddr
+
SAMP_TOGGLECURSOR
)
)
(
obj
,
state
?
3
:
0
,
!
state
)
;
if
(
!
state
)
(
(
void
(
__thiscall
*
)
(
void
*
)
)
(
dwSAMPAddr
+
SAMP_CURSORUNLOCKACTORCAM
)
)
(
obj
)
;
}
Для блокировки управления в wndProc добавить return
|
|
|

07.08.2020, 18:42
|
|
Познающий
Регистрация: 03.05.2016
Сообщений: 64
С нами:
5277893
Репутация:
56
|
|
Сообщение от KiN4StAt
C++:
Код:
// SAMP 0.3.7-R1
#define SAMP_MISC_INFO = 0x21A10C
#define SAMP_FUNC_TOGGLECURSOR = 0x9BD30
#define SAMP_FUNC_CURSORUNLOCKACTORCAM = 0x9BC10
void
ToggleCursor
(
bool
state
)
{
//state - 1 on; 0 off
if
(
iInputEnabled
)
//is Input Active Check
return
;
void
*
obj
=
*
(
void
*
*
)
(
dwSAMPAddr
+
SAMP_MISC_INFO
)
;
(
(
void
(
__thiscall
*
)
(
void
*
,
int
,
bool
)
)
(
dwSAMPAddr
+
SAMP_TOGGLECURSOR
)
)
(
obj
,
state
?
3
:
0
,
!
state
)
;
if
(
!
state
)
(
(
void
(
__thiscall
*
)
(
void
*
)
)
(
dwSAMPAddr
+
SAMP_CURSORUNLOCKACTORCAM
)
)
(
obj
)
;
}
Для блокировки управления в wndProc добавить return
Это для SAMP а мне для одиночки.
@FYP, можешь пожалуйста дать код своего showCursor из moonloader. ну пожалуйста.
|
|
|

07.08.2020, 22:06
|
|
Флудер
Регистрация: 17.06.2013
Сообщений: 3,635
С нами:
6791977
Репутация:
183
|
|
Сообщение от SKIC
Это для SAMP а мне для одиночки.
@FYP, можешь пожалуйста дать код своего showCursor из moonloader. ну пожалуйста.
Псевдокод функции включения курсора SA-MP'a.:
Код:
int
__thiscall
ToggleCursor
(
stMiscInfo
*
this
,
int
cursorMode
,
int
hideCursor
?
)
{
int
result
;
// eax
stMiscInfo
*
v4
;
// esi
result
=
cursorMode
;
v4
=
this
;
switch
(
cursorMode
)
{
case
2
:
UnProtectMemmory
(
(
void
*
)
0x541DF5
,
5
)
;
MEMORY
[
0x541DF5
]
=
0x90909090
;
MEMORY
[
0x541DF9
]
=
0x90u
;
GTA
::
patch
::
enableCursor
(
)
;
MEMORY
[
0xB73424
]
=
0
;
MEMORY
[
0xB73428
]
=
0
;
MEMORY
[
0x541BD0
]
(
)
;
MEMORY
[
0x541DD0
]
(
)
;
UnProtectMemmory
(
(
void
*
)
0x6194A0
,
1
)
;
MEMORY
[
0x6194A0
]
=
0xC3u
;
result
=
(
(
int
(
__stdcall
*
)
(
IDirect3DDevice9
*
,
signed
int
)
)
pDevice
->
vtbl
->
ShowCursor
)
(
pDevice
,
1
)
;
v4
->
iCursorMode
=
2
;
break
;
case
1
:
if
(
this
->
iCursorMode
!=
1
)
{
UnProtectMemmory
(
(
void
*
)
0x541DF5
,
5
)
;
result
=
0x90909090
;
MEMORY
[
0x541DF5
]
=
0x90909090
;
MEMORY
[
0x541DF9
]
=
0x90u
;
v4
->
iCursorMode
=
1
;
}
break
;
case
3
:
if
(
this
->
iCursorMode
!=
3
)
{
GTA
::
patch
::
enableCursor
(
)
;
MEMORY
[
0xB73424
]
=
0
;
MEMORY
[
0xB73428
]
=
0
;
MEMORY
[
0x541BD0
]
(
)
;
MEMORY
[
0x541DD0
]
(
)
;
UnProtectMemmory
(
(
void
*
)
0x6194A0
,
1
)
;
MEMORY
[
0x6194A0
]
=
0xC3u
;
result
=
(
(
int
(
__stdcall
*
)
(
IDirect3DDevice9
*
,
signed
int
)
)
pDevice
->
vtbl
->
ShowCursor
)
(
pDevice
,
1
)
;
v4
->
iCursorMode
=
3
;
}
break
;
case
4
:
if
(
this
->
iCursorMode
!=
4
)
{
sub_1009BB20
(
)
;
MEMORY
[
0xB73424
]
=
0
;
MEMORY
[
0xB73428
]
=
0
;
MEMORY
[
0x541BD0
]
(
)
;
MEMORY
[
0x541DD0
]
(
)
;
result
=
UnProtectMemmory
(
(
void
*
)
0x6194A0
,
1
)
;
MEMORY
[
0x6194A0
]
=
0xC3u
;
v4
->
iCursorMode
=
4
;
}
break
;
default
:
if
(
!
cursorMode
&&
this
->
iCursorMode
)
{
this
->
field_59
=
hideCursor
?
!=
0
?
0
:
0xA
;
result
=
(
(
int
(
__stdcall
*
)
(
IDirect3DDevice9
*
,
_DWORD
)
)
pDevice
->
vtbl
->
ShowCursor
)
(
pDevice
,
0
)
;
v4
->
iCursorMode
=
0
;
}
break
;
}
return
result
;
}
|
|
|

08.08.2020, 02:08
|
|
Новичок
Регистрация: 08.08.2020
Сообщений: 1
С нами:
3035061
Репутация:
1
|
|
1) Не могли бы подсказать в чем ошибка? (Суть скрипта, чтобы при виде пикапа(иконки зеленого домика"1273" нажимал alt+enter)
В каком формате закидывать в корень? .lua?
Код:
void CalcScreenCoors(D3DXVECTOR3* vecWorld, D3DXVECTOR3* vecScreen)
{
D3DXMATRIX m((float*)(0xB6FA2C));
DWORD* dwLenX = (DWORD*)(0xC17044);
DWORD* dwLenY = (DWORD*)(0xC17048);
vecScreen->x = (vecWorld->z * m._31) + (vecWorld->y * m._21) + (vecWorld->x * m._11) + m._41;
vecScreen->y = (vecWorld->z * m._32) + (vecWorld->y * m._22) + (vecWorld->x * m._12) + m._42;
vecScreen->z = (vecWorld->z * m._33) + (vecWorld->y * m._23) + (vecWorld->x * m._13) + m._43;
double fRecip = (double)1.0 / vecScreen->z;
vecScreen->x *= (float)(fRecip * (*dwLenX));
vecScreen->y *= (float)(fRecip * (*dwLenY));
}
bool IsPickOnScreen(int p)
{
D3DXVECTOR3 vecPos;
vecPos.x = SF->getSAMP()->getInfo()->pPools->pPickup->pickup[p].fPosition[0];
vecPos.y = SF->getSAMP()->getInfo()->pPools->pPickup->pickup[p].fPosition[1];
vecPos.z = SF->getSAMP()->getInfo()->pPools->pPickup->pickup[p].fPosition[2];
D3DXVECTOR3 screenPos;
CalcScreenCoors(&vecPos, &screenPos);
if (screenPos.z
|
|
|

08.08.2020, 17:19
|
|
Флудер
Регистрация: 05.02.2015
Сообщений: 2,141
С нами:
5929676
Репутация:
183
|
|
[QUOTE="sqdxi"]
1) Не могли бы подсказать в чем ошибка? (Суть скрипта, чтобы при виде пикапа(иконки зеленого домика"1273" нажимал alt+enter)
В каком формате закидывать в корень? .lua?
Код:
void CalcScreenCoors(D3DXVECTOR3* vecWorld, D3DXVECTOR3* vecScreen)
{
D3DXMATRIX m((float*)(0xB6FA2C));
DWORD* dwLenX = (DWORD*)(0xC17044);
DWORD* dwLenY = (DWORD*)(0xC17048);
vecScreen->x = (vecWorld->z * m._31) + (vecWorld->y * m._21) + (vecWorld->x * m._11) + m._41;
vecScreen->y = (vecWorld->z * m._32) + (vecWorld->y * m._22) + (vecWorld->x * m._12) + m._42;
vecScreen->z = (vecWorld->z * m._33) + (vecWorld->y * m._23) + (vecWorld->x * m._13) + m._43;
double fRecip = (double)1.0 / vecScreen->z;
vecScreen->x *= (float)(fRecip * (*dwLenX));
vecScreen->y *= (float)(fRecip * (*dwLenY));
}
bool IsPickOnScreen(int p)
{
D3DXVECTOR3 vecPos;
vecPos.x = SF->getSAMP()->getInfo()->pPools->pPickup->pickup[p].fPosition[0];
vecPos.y = SF->getSAMP()->getInfo()->pPools->pPickup->pickup[p].fPosition[1];
vecPos.z = SF->getSAMP()->getInfo()->pPools->pPickup->pickup[p].fPosition[2];
D3DXVECTOR3 screenPos;
CalcScreenCoors(&vecPos, &screenPos);
if (screenPos.z
|
|
|

09.08.2020, 00:21
|
|
Познающий
Регистрация: 06.11.2015
Сообщений: 95
С нами:
5535607
Репутация:
58
|
|
В попытках работы с .ini пробую такой код:
Сообщение от Спойлер
C++:
Код:
void
CALLBACK
testik
(
std
::
string param
)
{
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
"Start"
)
;
std
::
fstream
sets
(
"settings.ini"
,
std
::
ios
::
out
)
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
"Файл открыт"
)
;
sets
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
"Записан аргумент"
)
;
sets
.
close
(
)
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
-
1
,
"Файл закрыт"
)
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
0
,
0xAA
,
0
)
,
"End"
)
;
}
Сообщение от Спойлер
C++:
Код:
SF
->
getSAMP
(
)
->
registerChatCommand
(
"test"
,
testik
)
;
Но ничего не работает, краша нет, всё выводиться что должно в сампе, но файл не заполняется.
Хочу услышать любые советы и предположения, сразу говорю что в Cpp я не так давно, и многие локальные фразы могу не понять
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|