Показать сообщение отдельно

  #4100  
Старый 01.11.2019, 18:05
ImPasha
Познавший АНТИЧАТ
Регистрация: 28.10.2017
Сообщений: 1,778
С нами: 4495573

Репутация: 183


По умолчанию

Всем привет 👋

Есть нужда в создании плагина, который бы запускался на всех последних версиях SAMP, а значит возможность написания SF плагина сразу отпадает. Собственно, в C++ я новичок, можно сказать, но всё равно попытался всё сделать сам - ничего не получилось, по итогам тестирования было установлено, что игра офигевает от происходящего и крашится. Мои цели в данный момент достаточно простые - заставить ASI плагин выводить сообщение в чат после инициализации SAMP'a.

Пожалуйста, не нужно советовать различные ASI Framework - это не то, что мне нужно. Помогите разобраться с тем, как это работает в идеале, пожалуйста.

Цитата:
Сообщение от Спойлер  


main.cpp:





Код:
#include "main.h"
void
MainThread
(
)
{
do
{
samp
.
dwModule
=
(
DWORD
)
GetModuleHandle
(
L
"samp.dll"
)
;
}
while
(
!
samp
.
dwModule
)
;
do
{
Sleep
(
1
)
;
}
while
(
IsSampInit
(
)
!=
TRUE
)
;
Sleep
(
2500
)
;
AddChatMessage
(
"Hello world!"
)
;
}
BOOL WINAPI
DllMain
(
HINSTANCE hModule
,
DWORD dwReason
,
LPVOID lpReserved
)
{
switch
(
dwReason
)
{
case
DLL_PROCESS_ATTACH
:
{
DisableThreadLibraryCalls
(
hModule
)
;
_beginthread
(
(
_beginthread_proc_type
)
MainThread
,
NULL
,
NULL
)
;
break
;
}
}
}


main.h:





Код:
#pragma once
#include 
#include 
#include 
#include 
#include 
struct
SAMPStruct
{
DWORD dwModule
;
}
samp
;
struct
SAMPOffsets
{
DWORD registerClientCommand
=
0x65AC0
;
DWORD addChatMessage
=
0x64520
;
}
offset
;
bool
IsSampInit
(
)
{
return
(
(
bool
(
__thiscall
*
)
(
)
)
(
samp
.
dwModule
+
0x9BF70
)
)
(
)
;
}
void
RegisterChatCommand
(
const
char
*
command
,
void
*
function
)
{
(
(
void
(
__thiscall
*
)
(
DWORD str
,
const
char
*
cmd
,
void
*
func
)
)
(
samp
.
dwModule
+
offset
.
registerClientCommand
)
)
(
*
(
DWORD
*
)
(
samp
.
dwModule
+
0x21A0E8
)
,
command
,
function
)
;
}
void
AddChatMessage
(
const
char
*
message
)
{
(
(
void
(
__thiscall
*
)
(
DWORD str
,
const
char
*
text
)
)
(
samp
.
dwModule
+
offset
.
addChatMessage
)
)
(
*
(
DWORD
*
)
(
samp
.
dwModule
+
0x21A0E4
)
,
message
)
;
}


Warning!Указатели, находящиеся в моём коде неправильные. Всё, что они Вам дадут - краш игры.
 
Ответить с цитированием