Вход

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


Страницы : 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

Vadim.dll
30.06.2016, 10:44
Пацаны есть тема такая... Можно подключиться к серву самп по сокету и взять оттуда инфу например скипок игроков?

itsLegend
30.06.2016, 15:42
Если больше 100 человек - нет.

А так - https://sampwiki.blast.hk/wiki/Query_Mechanism

Vadim.dll
30.06.2016, 17:31
Оооо спс тут PHP есть, то что надо!

Vadim.dll
30.06.2016, 17:48
А нет способа полчить игроков с серва 100+ человек?

itsLegend
30.06.2016, 18:00
А нет способа полчить игроков с серва 100+ человек?


Зайди через RakSAMP, получи игроков, отправь куда-нибудь и профит.

Vadim.dll
30.06.2016, 18:50
Вот тут то и проблемка мне либо PHP шная версия раксампа нужна либо способ получить всех игроков

SR_team
30.06.2016, 19:16
Вот тут то и проблемка мне либо PHP шная версия раксампа нужна либо способ получить всех игроков


Что б ты знал, в php есть функция exec

Dark_Knight
30.06.2016, 20:26
Что б ты знал, в php есть функция exec


Он ебанется с "костылем" этим

SR_team
30.06.2016, 20:28
Он ебанется с "костылем" этим


он ебанется с портированием раксампа на php, а с костылем просто помучается

Dark_Knight
30.06.2016, 21:51
он ебанется с портированием раксампа на php, а с костылем просто помучается


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

SR_team
30.06.2016, 22:09
Эму надо под юникс скомпилировать раксамп, запустить его, приконектится, записать хоть файл данные об сервере, выйти. И все это через exec.


изи каточка

AWRage
01.07.2016, 21:40
А какой функцией в RakClientInterface обрабатываются RPC? Нашел только SendPacket, SendRPC и ReceivePacket.

QGate
04.07.2016, 00:00
А чем чревато использование string в больших кол-вах?

SR_team
04.07.2016, 00:04
А чем чревато использование string в больших кол-вах?


Какой именно string? Сишный это просто массив чаров, а в C++ это класс. Класс больше памяти занимает

QGate
04.07.2016, 00:25
Значит std::string лучше не юзать, жаль.

Еще вопрос, это нормально, что у меня скрипт SF весит 501кб?

AWRage
04.07.2016, 00:39
Значит std::string лучше не юзать, жаль.
Еще вопрос, это нормально, что у меня скрипт SF весит 501кб?


Почему не юзать? Юзай, если он тебе нравится. Просто для экономии памяти лучше использовать стандартный массив. Но опять же, у тебя же там не база данных?

NarutoUA
04.07.2016, 01:16
Используй string, разницу в производительности ты не почуствуешь, в некоторых моментах стринги лучше

QGate
04.07.2016, 01:21
Используй string, разницу в производительности ты не почуствуешь, в некоторых моментах стринги лучше


а есть большая разница в string и std::string? Просто у меня идет несколько потоков и результаты записываю в struct.

Dark_Knight
04.07.2016, 01:26
а есть большая разница в string и std::string? Просто у меня идет несколько потоков и результаты записываю в struct.


Это одно и тоже

QGate
04.07.2016, 01:29
Это одно и тоже


пфффффф, ну ок тогда. Прям аж запутали немного меня)

QGate
04.07.2016, 15:01
Какая та фигня происходит с regex_search.

Отправляю:

std::string = "United states";

std::regex rgx((.*));

Получаю:

matched[1]= "United states"

Что делать?

Vadim.dll
04.07.2016, 15:02
Как поставить хук на адрес памяти из samp.dll?

SR_team
04.07.2016, 15:48
Как поставить хук на адрес памяти из samp.dll?


а в чем собственно проблема. Где ты видишь разницу между адресным пространством samp.dll и gta_sa.exe?

SR_team
04.07.2016, 15:50
Какая та фигня происходит с regex_search.
Отправляю:
std::string = "United states";
std::regex rgx((.*));
Получаю:
matched[1]= "United states"
Что делать?


попробуй (\w+)

QGate
04.07.2016, 16:03
попробуй (\w+)


Не работает.

san0
04.07.2016, 16:04
Какая та фигня происходит с regex_search.
Отправляю:
std::string = "United states";
std::regex rgx((.*));
Получаю:
matched[1]= "United states"
Что делать?


(.*)

QGate
04.07.2016, 16:08
(.*)


Нет.

Dark_Knight
04.07.2016, 16:36
if(std::regex_match(str, res, std::regex(R"((.+))"))){

SF->Log(res[1].str().c_str())

}

https://yadi.sk/i/qFQNcHuosyyii (https://www.blast.hk/redirect/aHR0cHM6Ly95YWRpLnNrL2kvcUZRTmNIdW9zeXlpaQ)

Woofing Giraffe
04.07.2016, 16:56
Ребят, создаю папку через CreateDirectory, у меня эта папка создаётся, а у друга почему-то нет. Почему так? P.S.: адрес примерно такой ...GTA\\SAMPFUNCS\\NewFolder Путь до GTA нахожу через GetCurrentDirectory, в общем путь правильный получается.

SR_team
04.07.2016, 17:10
Ребят, создаю папку через CreateDirectory, у меня эта папка создаётся, а у друга почему-то нет. Почему так? P.S.: адрес примерно такой ...GTA\\SAMPFUNCS\\NewFolder Путь до GTA нахожу через GetCurrentDirectory, в общем путь правильный получается.


права

QGate
04.07.2016, 17:28
if(std::regex_match(str, res, std::regex(R"((.+))"))){
SF->Log(res[1].str().c_str())
}

https://yadi.sk/i/qFQNcHuosyyii (https://www.blast.hk/redirect/aHR0cHM6Ly95YWRpLnNrL2kvcUZRTmNIdW9zeXlpaQ)


увы, но что-то не хочет, точнее он вообще не находит.

Woofing Giraffe
04.07.2016, 18:02
права


А как их выставить не подскажешь?

Dark_Knight
04.07.2016, 18:02
Весь код.

SR_team
04.07.2016, 18:17
А как их выставить не подскажешь?


права у юзера в системе

Seanbotik
05.07.2016, 00:08
0B56: set_game_key 1 state -255

опкод из сфа имитирует нажатие клавиши

есть какой-нибудь аналог для собейта?

или как сделать так же

Woofing Giraffe
05.07.2016, 17:59
права у юзера в системе


Администратор стоит у него



Весь код.






C++:






#pragma comment(lib, "user32.lib")
#include
#include
#include "SAMPFUNCS_API.h"
#include "game_api\game_api.h"
SAMPFUNCS
*
SF
=
new
SAMPFUNCS
(
)
;
using
namespace
std
;
string
GetDir
(
)
{
char
MainDir
[
256
]
;
GetCurrentDirectory
(
256
,
MainDir
)
;
string Result
=
MainDir
;
return
Result
;
}
void
CreateResultFile
(
char
*
Organization
,
char
*
Subdivision
,
char
*
Data
,
char
*
Time
,
char
*
FileText
)
{
string MainDirectory
=
GetDir
(
)
;
MainDirectory
+=
"\\SAMPFUNCS\\"
;
CreateDirectory
(
string
(
MainDirectory
+
"TestScript"
)
.
c_str
(
)
,
NULL
)
;
CreateDirectory
(
string
(
MainDirectory
+
"TestScript\\MainTest"
)
.
c_str
(
)
,
NULL
)
;
CreateDirectory
(
string
(
MainDirectory
+
"TestScript\\MainTest\\"
+
Organization
)
.
c_str
(
)
,
NULL
)
;
CreateDirectory
(
string
(
MainDirectory
+
"TestScript\\MainTest\\"
+
Organization
+
"\\"
+
Subdivision
+
"\\"
)
.
c_str
(
)
,
NULL
)
;
CreateDirectory
(
string
(
MainDirectory
+
"TestScript\\MainTest\\"
+
Organization
+
"\\"
+
Subdivision
+
"\\"
+
Data
+
"\\"
)
.
c_str
(
)
,
NULL
)
;
FILE
*
pFile
=
fopen
(
string
(
MainDirectory
+
"TestScript\\MainTest\\"
+
Organization
+
"\\"
+
Subdivision
+
"\\"
+
Data
+
"\\"
+
Time
+
".ini"
)
.
c_str
(
)
,
"w"
)
;
fwrite
(
FileText
,
strlen
(
FileText
)
,
1
,
pFile
)
;
fclose
(
pFile
)
;
}
void
CALLBACK
loop
(
)
{
static
bool
init
=
false
;
if
(
!
init
)
{
if
(
GAME
==
nullptr
||
GAME
->
GetSystemState
(
)
!=
eSystemState
::
GS_PLAYING_GAME
||
!
SF
->
getSAMP
(
)
->
IsInitialized
(
)
)
return
;
CreateResultFile
(
"Proba"
,
"Testing"
,
"03.07.2016"
,
"13 20"
,
"Write in file is successful"
)
;
init
=
true
;
}
}
BOOL APIENTRY
DllMain
(
HMODULE hModule
,
DWORD dwReasonForCall
,
LPVOID lpReserved
)
{
if
(
dwReasonForCall
==
DLL_PROCESS_ATTACH
)
return
SF
->
initPlugin
(
loop
,
hModule
)
;
return
TRUE
;
}





Путь получается примерно такой: C:\Program Files (x86)\GTA San Andreas\SAMPFUNCS\TestScript\MainTest\Proba\Testin g\03.07.2016\13 20.ini

barspinoff
07.07.2016, 18:20
как ракнет правильно хукать? самп всё время фризит

pRakClient = (RakClientInterface *) pSAMP->pRakClientInterface;

pSAMP->pRakClientInterface = new HookedRakClientInterface();

Vadim.dll
07.07.2016, 21:49
https://www.blast.hk/wiki/tutorials:api_lesson_raknet

barspinoff
07.07.2016, 23:07
вх на сф плохо работает

Woofing Giraffe
08.07.2016, 01:18
вх на сф плохо работает


а ты через память запили

iAmerican
08.07.2016, 02:44
Как эмулировать нажатие ЛКМ в игре?

НЕ СФ АПИ!

barspinoff
08.07.2016, 02:50
а ты через память запили


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

barspinoff
09.07.2016, 15:38
1.Как написать SF Plugin? Какой проект нужно создавать, там разные типы для проектов, я не знаю какой надо, тут на форуме нигде про это не слова. Кто может записать видео? Или хотя бы объяснить. Раньше делал клео, шарю вроде, но тут хз


в SF SDK в архиве SFPlugin есть тестовый плагин

barspinoff
09.07.2016, 16:09
А как скомпилировать в .sf ? Ничего не нашел


установи сначала DirectX 9 sdk, открой SFPlugin.sln и компилируй

barspinoff
09.07.2016, 16:11
Эмм, установлю, а что дальше? Можно пожалуйста?


SFPlugin.zip->SFPlugin->SFPlugin.sln открой и компилируй

barspinoff
09.07.2016, 16:54
А где кнопка компилировать? Ты меня не понял


F7 нажми или Build->Build SFPlugin

barspinoff
09.07.2016, 17:30
Народ подскажите что за адрес и для чего он нужен

GetModuleHandle("samp.dll") + 0x30B30

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


Ты где его взял?

barspinoff
09.07.2016, 19:11
Ты где его взял?


снял деньги со счёта и зашёл в CE

это вроде бы как не NOP, вроде адрес какой-то функции

iAmerican
10.07.2016, 14:34
C++:






Серьезность Код Описание Проект Файл Строка Состояние подавления
Ошибка LNK1104 не удается открыть файл
"C:Program Files (x86)Microsoft DirectX SDK (June 2010)Libdd3dx9.lib"




Как это исправить ? Таких файлов вообще нету в подключении.

Vadim.dll
10.07.2016, 14:37
directx SDK установлен?

iAmerican
10.07.2016, 15:01
directx SDK установлен?


конечно , я вообще хз что это за файл. Его не существует как бы.

Начал вечером d3d менюху писать , комп выключил , включаю, тут бац такая штука.

C++:






#ifndef _STDAFX_H_
#define _STDAFX_H_
#define WIN32_LEAN_AND_MEAN
#define WIN32_EXTRA_LEAN
#include
#include
#include
#include
#include
#include
#include "C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Include\d3dx9math.inl"
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define D3DparamX , UINT paramx
#define D3DparamvalX , paramx
#pragma comment(lib, "C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Lib\x64\d3d9.lib")
#pragma comment(lib, "C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Lib\x64\d3dx9.lib")
#pragma comment(lib, "WinMM.Lib")
#define VK_0 0x30
#define VK_1 0x31
#define VK_2 0x32
#define VK_3 0x33
#define VK_4 0x34
#define VK_5 0x35
#define VK_6 0x36
#define VK_7 0x37
#define VK_8 0x38
#define VK_9 0x39
#define VK_A 0x41
#define VK_B 0x42
#define VK_C 0x43
#define VK_D 0x44
#define VK_E 0x45
#define VK_F 0x46
#define VK_G 0x47
#define VK_H 0x48
#define VK_I 0x49
#define VK_J 0x4A
#define VK_K 0x4B
#define VK_L 0x4C
#define VK_M 0x4D
#define VK_N 0x4E
#define VK_O 0x4F
#define VK_P 0x50
#define VK_Q 0x51
#define VK_R 0x52
#define VK_S 0x53
#define VK_T 0x54
#define VK_U 0x55
#define VK_V 0x56
#define VK_W 0x57
#define VK_X 0x58
#define VK_Y 0x59
#define VK_Z 0x5A
#define VK_LSHIFT 0xA0
#define VK_RSHIFT 0xA1
#define VK_LCONTROL 0xA2
#define VK_RCONTROL 0xA3
#define VK_LMENU 0xA4
#define VK_RMENU 0xA5
#define VK_CAPS 0x14
#define CText (DT_CENTER|DT_NOCLIP)
#define LText (DT_LEFT|DT_NOCLIP)
#define RText (DT_RIGHT|DT_NOCLIP)
#endif

Vadim.dll
10.07.2016, 15:32
Какая то фигня сейчас может кто по опытней подскажет но вроде все говорит о том, что проект не может подключить библиотеку directx

iAmerican
10.07.2016, 15:44
Какая то фигня сейчас может кто по опытней подскажет но вроде все говорит о том, что проект не может подключить библиотеку directx


Решил уже . Проблема тут была..

Код:






#pragma comment(lib, "C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Lib\x64\d3d9.lib")




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

itsLegend
10.07.2016, 15:48
Решил уже . Проблема тут была..

Код:






#pragma comment(lib, "C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Lib\x64\d3d9.lib")




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


C:\\Program Files (x86)\\Microsoft DirectX SDK (June 2010)\\Lib\\x64\\d3d9.lib

QGate
10.07.2016, 22:47
Никак не получается составить регулярное выражение. Есть строчка либо формата "ip1 ip2", либо просто "ip1". Нужно регулярками понять сколько введено адресов и записать каждое в переменную. Поможете? Вот есть небольшая наработка.

C++:






std
::
regex
rgx
(
"([:digit:]{1,3}\.[:digit:]{1,3}\.[:digit:]{1,3}\.[:digit:]{1,3}) ([:digit:]{1,3}\.[:digit:]{1,3}\.[:digit:]{1,3}\.[:digit:]{1,3})"
)
;
std
::
smatch match
;
if
(
std
::
regex_search
(
playerid
,
match
,
rgx
)
)
{
if
(
match
[
2
]
.
matched
)
{
SF
->
LogFile
(
"[EM]: Найдено 2 ip адреса"
,
m
)
;
findedip
=
match
[
1
]
;
sprintf
(
sInfo
.
ip1
,
"%s"
,
findedip
.
c_str
(
)
)
;
findedip
=
match
[
2
]
;
sprintf
(
sInfo
.
ip2
,
"%s"
,
findedip
.
c_str
(
)
)
;
SF
->
LogFile
(
"[EM]: %s %s"
,
sInfo
.
ip1
,
sInfo
.
ip2
)
;
}
else
if
(
match
[
1
]
.
matched
)
{
SF
->
LogFile
(
"[EM]: Найден 1 ip адрес."
)
;
findedip
=
match
[
1
]
;
sprintf
(
sInfo
.
ip1
,
"%s"
,
findedip
.
c_str
(
)
)
;
SF
->
LogFile
(
"[EM]: %s"
,
sInfo
.
ip1
)
;
}
else
{
SF
->
LogFile
(
"[EM]: Ошибка ввода."
)
;
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DCOLOR_XRGB
(
0xFF
,
0
,
0
)
,
"Проверьте правильность ввода!"
)
;
return
;
}
}

Yzkuz
11.07.2016, 00:18
Хочу начать учить C++, где взять уроки?

itsLegend
11.07.2016, 04:40
Никак не получается составить регулярное выражение. Есть строчка либо формата "ip1 ip2", либо просто "ip1". Нужно регулярками понять сколько введено адресов и записать каждое в переменную. Поможете? Вот есть небольшая наработка.



C++:






std
::
regex
rx
(
"(\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})"
)
;
std
::
smatch rx_match
;
std
::
string str
=
"15.14.88.4 127.0.0.1"
;
byte count
=
0
;
// http://stackoverflow.com/questions/6136699/visual-studio-2010-c-tr1-regex-equivalent-of-perl-g-global-modifier
auto
str_it
=
str
.
cbegin
(
)
;
while
(
std
::
regex_search
(
str_it
,
str
.
cend
(
)
,
rx_match
,
rx
)
)
{
// SF->Log("%s", rx_match.str().c_str());
str_it
=
rx_match
[
0
]
.
second
;
count
++
;
}
printf
(
"Found: %d\n"
,
count
)
;




Если хочешь прям точно определить, IP ли это(максимальный диапазон ипа - 255.255.255.255), то можешь найти в интернете, либо помучиться самому. Вообще, составить регулярку для такой задачи будет тяжело, поэтому как-нибудь через строки проверяй.

Vadim.dll
11.07.2016, 09:22
есть адрес памяти на RPC ClickTextDraw что то типа такого?

QGate
11.07.2016, 11:43
C++:






std
::
regex
rx
(
"(\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})"
)
;
std
::
smatch rx_match
;
std
::
string str
=
"15.14.88.4 127.0.0.1"
;
byte count
=
0
;
// http://stackoverflow.com/questions/6136699/visual-studio-2010-c-tr1-regex-equivalent-of-perl-g-global-modifier
auto
str_it
=
str
.
cbegin
(
)
;
while
(
std
::
regex_search
(
str_it
,
str
.
cend
(
)
,
rx_match
,
rx
)
)
{
// SF->Log("%s", rx_match.str().c_str());
str_it
=
rx_match
[
0
]
.
second
;
count
++
;
}
printf
(
"Found: %d\n"
,
count
)
;




Если хочешь прям точно определить, IP ли это(максимальный диапазон ипа - 255.255.255.255), то можешь найти в интернете, либо помучиться самому. Вообще, составить регулярку для такой задачи будет тяжело, поэтому как-нибудь через строки проверяй.


Я нашел выход из этой ситуации. Я сделал просто 2 регулярки, одна ищет 2 ип адреса в стринге, вторая - один, соответственно если не находится 2 адреса, ищется 1.

C++:






std
::
regex
rgx1
(
"(\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}) (\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})"
)
;
std
::
regex
rgx2
(
"(\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})"
)
;
std
::
smatch match
;
if
(
std
::
regex_search
(
playerid
,
match
,
rgx1
)
)
{
SF
->
LogFile
(
"[EM]: Найдено 2 ip адреса"
,
m
)
;
findedip1
=
match
[
1
]
;
findedip2
=
match
[
2
]
;
SF
->
LogFile
(
"[EM]: %s %s"
,
findedip1
.
c_str
(
)
,
findedip2
.
c_str
(
)
)
;
return
;
}
else
if
(
std
::
regex_search
(
playerid
,
match
,
rgx2
)
)
{
SF
->
LogFile
(
"[EM]: Найден 1 ip адрес."
)
;
findedip1
=
match
[
1
]
;
SF
->
LogFile
(
"[EM]: %s"
,
findedip1
.
c_str
(
)
)
;
return
;
}

itsLegend
11.07.2016, 12:11
Требую больше костылей!

QGate
11.07.2016, 12:32
Требую больше костылей!


В смысле? Я тут пока ньюбис, всех терминов не знаю)

Dark_Knight
11.07.2016, 14:11
Я нашел выход из этой ситуации. Я сделал просто 2 регулярки, одна ищет 2 ип адреса в стринге, вторая - один, соответственно если не находится 2 адреса, ищется 1.


Твои регурялки плохие.

https://yadi.sk/i/7A9glYbFtBekc (https://www.blast.hk/redirect/aHR0cHM6Ly95YWRpLnNrL2kvN0E5Z2xZYkZ0QmVrYw)

Так же регекс сеарч нужно юзать в цикле, а не как условие.

http://pastebin.com/V0d8paZX (https://www.blast.hk/redirect/aHR0cDovL3Bhc3RlYmluLmNvbS9WMGQ4cGFaWA)

SR_team
11.07.2016, 14:36
регекс сеарч нужно юзать в цикле, а не как условие.


для поиска подстроки в строки с дальнейшим извлечением из нее параметров вполне катит в качестве условия

Dark_Knight
11.07.2016, 15:04
для поиска подстроки в строки с дальнейшим извлечением из нее параметров вполне катит в качестве условия


Можно, но тогда лучше уже матч юзать.

SR_team
11.07.2016, 15:13
Можно, но тогда лучше уже матч юзать.


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

QGate
11.07.2016, 17:59
Твои регурялки плохие.
https://yadi.sk/i/7A9glYbFtBekc (https://www.blast.hk/redirect/aHR0cHM6Ly95YWRpLnNrL2kvN0E5Z2xZYkZ0QmVrYw)
Так же регекс сеарч нужно юзать в цикле, а не как условие.
http://pastebin.com/V0d8paZX (https://www.blast.hk/redirect/aHR0cDovL3Bhc3RlYmluLmNvbS9WMGQ4cGFaWA)


Ну плохи не плохие... по крайней мере оно работает :) А насчет цикла не знал.

Dark_Knight
11.07.2016, 19:07
в матч надо звездочки ставить, ибо он предполагает полное соответствие строки


Не надо.

barspinoff
12.07.2016, 16:55
чем можно заменить _asm db FF ?

при компиляции ошибку выдаёт

SR_team
12.07.2016, 17:24
чем можно заменить _asm db FF ?
при компиляции ошибку выдаёт


_asm db 0xFF

barspinoff
12.07.2016, 17:33
_asm db 0xFF


inline assembler syntax error in 'opcode'; found 'constant'

SR_team
12.07.2016, 17:46
inline assembler syntax error in 'opcode'; found 'constant'


походу нет такого опкода в asm. ты не из IDA случаем копипастишь?

barspinoff
12.07.2016, 17:49
походу нет такого опкода в asm. ты не из IDA случаем копипастишь?


из CE, два опкода норм, а этот - не компилится

xor al,05

add [eax],al

db 0xFF

SR_team
12.07.2016, 17:50
из CE, два опкода норм, а этот - не компилится


Код в CE покажи

barspinoff
12.07.2016, 17:53
Код в CE покажи


xor al,05

add [eax],al

db 0xFF

SR_team
12.07.2016, 17:54
из CE, два опкода норм, а этот - не компилится
xor al,05
add [eax],al
db 0xFF


кр4 CE понимает db FF как вставить байт FF, а FF это call [eax + 0], где вместо +0 может быть иное мтематическое действие

barspinoff
12.07.2016, 17:57
кр4 CE понимает db FF как вставить байт FF, а FF это call [eax + 0], где вместо +0 может быть иное мтематическое действие


Разобрался,не тот адрес в CE забил, в правильном опкоде 6 байт

Vadim.dll
15.07.2016, 21:09
Вообщем глядите... Я функцией spintf записываю строку в например char buf[256]

Мне нужно поместить этот buf в массив то есть есть там вверху массив char bufarray[]

Но! Вылазит ошибка потомучто char buf[256] это const char* всяко перепробывал... никак не выходит, подскажите пожалуйста

iAmerican
15.07.2016, 22:20
Вообщем глядите... Я функцией spintf записываю строку в например char buf[256]
Мне нужно поместить этот buf в массив то есть есть там вверху массив char bufarray[]
Но! Вылазит ошибка потомучто char buf[256] это const char* всяко перепробывал... никак не выходит, подскажите пожалуйста



CSS:






sprintf
(
*buf
,
""
,
bufarray
)
;




Не заработает , кинь полностью код.

Vadim.dll
16.07.2016, 09:05
CSS:






sprintf
(
*buf
,
""
,
bufarray
)
;




Не заработает , кинь полностью код.


Я так пробывал ошибка вылетает...

char *buf[];

buf2[256];

sprintf(buf2, "Строка %d", 1);

buf[1] = buf2;

iAmerican
16.07.2016, 09:51
Я так пробывал ошибка вылетает...

char *buf[];

buf2[256];

sprintf(buf2, "Строка %d", 1);
buf[1] = buf2;



Сложно ты как то делаешь . Да и код не полный.

C++:






char
*
buf
[
]
;




Так нельзя делать.

C++:






buf
[
1
]
=
buf2
;




Так тоже.

Так можно:

C++:






sprintf
(
buf2
,
"%s"
,
buf1
)




И что вообще за " 1 "?

Vadim.dll
16.07.2016, 10:21
Первый элемент в массиве... ты не понимаешь мне нужно поместить буфер этот в массив а не просто присвоить значение

itsLegend
16.07.2016, 11:22
Что это за объявление массива такое? Cтранно, что у тебя вообще компилятор допустил такое объявление.

Для объявления массива типа char нужно делать так: char arr[16]; - вместится 16 символов.

Чтобы хранить "строки" нужно объявлять так: char arr[12][16]- 12 строк по 16 символов.

Записывать можно только определенной длины - 16 символов(1 из них нулевой).

Можно хранить указатели на выделенные буферы. Объявлять массив придется так: char* arr[12], далее объявляем и присваиваем char* str = "test"; и в необходимую ячейку записываем, либо выделяем через malloc, форматируем и записываем в массив.

Для таких целей есть std::vector и std::string с которыми удобнее работать.

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

Vadim.dll
16.07.2016, 11:38
это я уже понял... я много языков видел н тут с память робота в притык прям

p1cador
21.07.2016, 01:47
сразу говорю - не .sf, а .asi

вопрос:

как пользоваться вот этим:

C++:






#define FUNC_IsOnScreen 0x534540
#define FUNC_IsVisible 0x536BC0




а если точнее - мне нужно проверить, видно ли игроков на экране. Нашел эти адреса в исходниках собейта, долго пытался вкурить и пересматривал исходник соба - нихера не понял. Из игрока могу вытянуть любую инфу, вплоть до 2д координат.

Как этими функами пользоваться, и распишите пожалуйста подробней - я тупой.

спс

AWRage
21.07.2016, 02:51
Оно?

C++:






// Converted from thiscall bool CEntity::GetIsOnScreen(void) 0x534540
bool
CEntity
::
GetIsOnScreen
(
)
{
return
(
(
bool
(
__thiscall
*
)
(
CEntity
*
)
)
0x534540
)
(
this
)
;
}

p1cador
21.07.2016, 04:25
Оно?

C++:






// Converted from thiscall bool CEntity::GetIsOnScreen(void) 0x534540
bool
CEntity
::
GetIsOnScreen
(
)
{
return
(
(
bool
(
__thiscall
*
)
(
CEntity
*
)
)
0x534540
)
(
this
)
;
}





Возможно, только завтра будет возможность проверить. Но я нихера не понял все ровно. То есть это можно юзать только в методах классов? А вместо CEntity* передавать указатель на CPed? Если можно обьясни плз как вообще эта ***ня называется и с чем ее едят

SR_team
21.07.2016, 08:04
Возможно, только завтра будет возможность проверить. Но я нихера не понял все ровно. То есть это можно юзать только в методах классов? А вместо CEntity* передавать указатель на CPed? Если можно обьясни плз как вообще эта ***ня называется и с чем ее едят


CPed вместо this

AWRage
21.07.2016, 14:46
Возможно, только завтра будет возможность проверить. Но я нихера не понял все ровно. То есть это можно юзать только в методах классов? А вместо CEntity* передавать указатель на CPed? Если можно обьясни плз как вообще эта ***ня называется и с чем ее едят


Можно использовать где угодно, вместо this передавай CPed или actor_info.

Vadim.dll
21.07.2016, 16:29
Вопрос как извлечь файл из папки с проектом? В общем мне нужно чтобы программа считывала строки файла из папки с проектом... Как это сделать?

Как выгрузить клео из памяти Гта а потом назад загрузить?

barspinoff
21.07.2016, 20:03
Как выгрузить клео из памяти Гта а потом назад загрузить?


в CLEO.asi такая функция есть

Vadim.dll
21.07.2016, 23:07
Через память надо там?

barspinoff
22.07.2016, 14:24
Через память надо там?


да, но адреса у CLEO 4.1 и CLEO 4.3 разные

Vadim.dll
22.07.2016, 14:59
Ага... это проблемка.. я решил уже свою проблу спасибо за помощь

AWRage
22.07.2016, 17:06
Почему ID3DXFont флаг DT_CALCRECT игнорирует пробелы? Длинна строки " " в пикселях = 0. Почему так?

Gabriel__
24.07.2016, 09:59
Хочу прочитать значения из регистра

C++:






DWORD value
;
_asm
{
mov value
,
ecx
}




Что мне использовать ? DWORD или ставить проверку на разрядность системы DWORD32 или DWORD64?

Vadim.dll
24.07.2016, 10:45
Как преобразовать текст в массив данных например 0x32, 0x22 вот в таком формате

Dark_Knight
24.07.2016, 12:38
char и есть массив.

=SAYBER=
24.07.2016, 17:58
Как узнать ID скина в собейте?

Gabriel__
24.07.2016, 18:42
pPedSelf->GetModelIndex();

AWRage
29.07.2016, 22:17
Почему при вводе команды крашит?

C++:






// Функция регистрирование команды.
void
RegisterCliendCommand
(
char
*
Name
,
CMDPROC CMDProc
)
{
if
(
Name
==
nullptr
||
CMDProc
==
nullptr
)
return
;
(
(
void
(
__thiscall
*
)
(
void
*
_this
,
char
*
name
,
CMDPROC cmd
)
)
(
gSAMPBase
+
0x65AD0
)
)
(
(
*
(
void
*
*
)
(
gSAMPBase
+
0x21A0E8
)
)
,
Name
,
CMDProc
)
;
}
// Тело команды.
void
__cdecl
MilieuCMD
(
char
*
Params
)
{
return
;
}
// Регистрирование команды.
RegisterCliendCommand
(
"milieu"
,
MilieuCMD
)
;

kuleer221
31.07.2016, 18:08
Как через c++ подключится к серверу самп как например в rakbot?

AWRage
31.07.2016, 19:08
Как включить NOP? Например, вот этот.

sampPatch[] = "NOP SetWeather" &0 0 0xB2C0 "" "C390"

MISTER_GONWIK
31.07.2016, 23:36
Как включить NOP? Например, вот этот.
sampPatch[] = "NOP SetWeather" &0 0 0xB2C0 "" "C390"


каждый нуб это знает

AWRage
01.08.2016, 01:30
каждый нуб это знает


Я не знаю. Я всегда ставил хук на RPC handler и там уже отклонял нужные RPC.

DarkP1xel
01.08.2016, 01:50
смещаешь базовый адрес на функу нопа и записываешь значение

AWRage
01.08.2016, 02:29
смещаешь базовый адрес на функу нопа и записываешь значение


memcpy((void *)gSAMPBase + 0xB2C0, "C390", 4); Так?

p1cador
01.08.2016, 14:22
Как получить CPed (не мой, другого игрока), имея, например, actor_info, чтобы передать потом его в функцию, например

AWRage
01.08.2016, 15:58
Как получить CPed (не мой, другого игрока), имея, например, actor_info, чтобы передать потом его в функцию, например


actor_info это и есть CPed.

MISTER_GONWIK
01.08.2016, 16:06
actor_info это и есть CPed.


это разные вещи

p1cador
01.08.2016, 16:45
Как получить CPed (не мой, другого игрока), имея, например, actor_info, чтобы передать потом его в функцию, например

AWRage
01.08.2016, 16:50
это разные вещи


Я использовал actor_info вместо CPed водной из функций из Plugin SDK. Все работало.

p1cador
01.08.2016, 16:55
Вот, что записать в переменную dwThis?

C++:






bool
IsOnScreen
(
short
i
)
//#define FUNC_IsOnScreen 0x534540 #define FUNC_IsVisible 0x536BC0
{
DWORD dwFunc
=
0x536BC0
;
//FUNC_IsOnScreen;
DWORD dwThis
=
//???????????????????????????????????
bool
bReturn
=
false
;
_asm
{
mov ecx
,
dwThis
call dwFunc
mov bReturn
,
al
}
return
bReturn
;
}

Goldfish
01.08.2016, 17:26
как исключить файл исх.кода из компиляции, но что бы он был виден в решении?

Sia
04.08.2016, 22:52
как исключить файл исх.кода из компиляции, но что бы он был виден в решении?


ПКМ по файлу -> Удалить...

http://i.prntscr.com/ae27fc45b1594b0f94baf8007fbc8e06.png

barspinoff
05.08.2016, 02:51
как исключить файл исх.кода из компиляции, но что бы он был виден в решении?


В настройках проекта поищи,



ПКМ по файлу -> Удалить...

http://i.prntscr.com/ae27fc45b1594b0f94baf8007fbc8e06.png


стиллер пишешь?



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


как можно такого не знать?
https://forum.antichat.xyz/attachments/27118189/

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

SR_team
05.08.2016, 03:52
Как через c++ подключится к серверу самп как например в rakbot?


например взять код подключения из raksamp

Sia
06.08.2016, 15:01
Вот, что записать в переменную dwThis?

C++:






bool
IsOnScreen
(
short
i
)
//#define FUNC_IsOnScreen 0x534540 #define FUNC_IsVisible 0x536BC0
{
DWORD dwFunc
=
0x536BC0
;
//FUNC_IsOnScreen;
DWORD dwThis
=
//???????????????????????????????????
bool
bReturn
=
false
;
_asm
{
mov ecx
,
dwThis
call dwFunc
mov bReturn
,
al
}
return
bReturn
;
}






Что должно проверять .

для сф , проверить что объект (DWORD)SF->getSAMP()->getInfo()->pPools->pObject->object[OBJECT]->pGTAEntity;

соотвественно тогда будет вот так bool isOnsreen( DWORD OBJECT )

loominati
14.08.2016, 22:12
Как сбить анимацию игроку, имея CPed*? Через CTaskManager не канает.

Gabriel__
14.08.2016, 22:19
CVector *pos = ped->GetPosition();

ped->Teleport(pos->fX, pos->fY, pos->fZ);

loominati
14.08.2016, 22:55
CVector *pos = ped->GetPosition();
ped->Teleport(pos->fX, pos->fY, pos->fZ);


Не работает. Может знаешь еще способ?

Dark_Knight
15.08.2016, 12:17
Не работает. Может знаешь еще способ?


Ты же на свои координаты телепортируешься.

Gabriel__
15.08.2016, 12:19
Ты же на свои координаты телепортируешься.


Ну и анимация сбивается при телепортации.

Dark_Knight
15.08.2016, 12:20
Ну и анимация сбивается при телепортации.


Это понятно. Но функа рабочая на 100 процентов.

loominati
17.08.2016, 02:40
Это понятно. Но функа рабочая на 100 процентов.


Анимация не сбивается, не буду же я врать вам. Может не так беру CPed* локального игрока. Как это делаете вы? Хотя, например, ped->GetHealth() работает.

Dark_Knight
17.08.2016, 03:48
Анимация не сбивается, не буду же я врать вам. Может не так беру CPed* локального игрока. Как это делаете вы? Хотя, например, ped->GetHealth() работает.


У меня через PEDSELF->SetPosition(CVector &vector) сделано и мне этого хватает.

return
24.08.2016, 13:27
добавляю в proxyIDirect3DDevice9.cpp в renderSAMP после g_renderSAMP_initSAMPstructs

C++:






g_GameInfo
=
stGetGameInfo
(
)
;
if
(
isBadPtr_writeAny
(
g_GameInfo
,
sizeof
(
stGameInfo
)
)
)
return
;




Если добавляю в начало - краш.

Если в конец, то работает, но не рендерит clickWarp.

В Чём дело?

Gabriel__
27.08.2016, 15:19
Хочу взять адрес метода класса и передать в функцию преобразовав в тип long но ошибка. Вроде можно брать адреса только со статических методов а они требуют статические переменные внутри класса. Помогите передать адрес. Вот код

C++:






class
HookedWndProc
{
public
:
HookedWndProc
(
HWND hWnd
,
WNDPROC WndProc
)
;
~
HookedWndProc
(
)
;
private
:
LRESULT CALLBACK
m_WindowProc
(
HWND hWnd
,
UINT uMsg
,
WPARAM wParam
,
LPARAM lParam
)
;
// data
HWND m_hWnd
;
WNDPROC m_WndProc
;
WNDPROC m_prevWndProc
;
}
;
HookedWndProc
::
HookedWndProc
(
HWND hWnd
,
WNDPROC WndProc
)
{
m_hWnd
=
hWnd
;
m_WndProc
=
WndProc
;
m_prevWndProc
=
(
WNDPROC
)
SetWindowLongA
(
m_hWnd
,
GWL_WNDPROC
,
/*error C2440: приведение типов*/
(
LONG
)
m_WindowProc
)
;
// Ставим свой Window proc
}
HookedWndProc
::
~
HookedWndProc
(
)
{
SetWindowLongA
(
m_hWnd
,
GWL_WNDPROC
,
(
LONG
)
m_prevWndProc
)
;
// Восстанавливаем прежний Window proc
}
LRESULT HookedWndProc
::
m_WindowProc
(
HWND hWnd
,
UINT uMsg
,
WPARAM wParam
,
LPARAM lParam
)
/* callback */
{
CallWindowProcA
(
this
->
m_WndProc
,
hWnd
,
uMsg
,
wParam
,
lParam
)
;
// Вызыв пользовательского Window proc
return
CallWindowProcA
(
this
->
m_prevWndProc
,
hWnd
,
uMsg
,
wParam
,
lParam
)
;
// Вызов оригинального
}

AWRage
27.08.2016, 16:16
Хочу взять адрес метода класса и передать в функцию преобразовав в тип long но ошибка. Вроде можно брать адреса только со статических методов а они требуют статические переменные внутри класса. Помогите передать адрес. Вот код

C++:






class
HookedWndProc
{
public
:
HookedWndProc
(
HWND hWnd
,
WNDPROC WndProc
)
;
~
HookedWndProc
(
)
;
private
:
LRESULT CALLBACK
m_WindowProc
(
HWND hWnd
,
UINT uMsg
,
WPARAM wParam
,
LPARAM lParam
)
;
// data
HWND m_hWnd
;
WNDPROC m_WndProc
;
WNDPROC m_prevWndProc
;
}
;
HookedWndProc
::
HookedWndProc
(
HWND hWnd
,
WNDPROC WndProc
)
{
m_hWnd
=
hWnd
;
m_WndProc
=
WndProc
;
m_prevWndProc
=
(
WNDPROC
)
SetWindowLongA
(
m_hWnd
,
GWL_WNDPROC
,
/*error C2440: приведение типов*/
(
LONG
)
m_WindowProc
)
;
// Ставим свой Window proc
}
HookedWndProc
::
~
HookedWndProc
(
)
{
SetWindowLongA
(
m_hWnd
,
GWL_WNDPROC
,
(
LONG
)
m_prevWndProc
)
;
// Восстанавливаем прежний Window proc
}
LRESULT HookedWndProc
::
m_WindowProc
(
HWND hWnd
,
UINT uMsg
,
WPARAM wParam
,
LPARAM lParam
)
/* callback */
{
CallWindowProcA
(
this
->
m_WndProc
,
hWnd
,
uMsg
,
wParam
,
lParam
)
;
// Вызыв пользовательского Window proc
return
CallWindowProcA
(
this
->
m_prevWndProc
,
hWnd
,
uMsg
,
wParam
,
lParam
)
;
// Вызов оригинального
}





Нужно что бы функция m_WindowProc была статической.

Gabriel__
27.08.2016, 16:18
Нужно что бы функция m_WindowProc была статической.


Да, и из-за этого переменные в private тоже делать статическими ?

AWRage
27.08.2016, 16:25
Да, и из-за этого переменные в private тоже делать статическими ?


Да, только их нужно инициализировать как глобальные. То есть yourClass::mStaticMember = 0; Если ничего не путаю.

Либо просто вынеси m_WindowProc за пределы класса и все.

p1cador
03.09.2016, 16:25
Пишу по фану простенький платформер. Такой вопрос: как можно спрятать все использующиеся текстуры, звуки, изображения и т.д. в какую-нибудь библиотеку, как это сделано, например, в гта (.txd, .img, .dff)

Dark_Knight
04.09.2016, 01:39
Ресурсы или можно хранить в массиве байт.

iAmerican
05.09.2016, 19:24
0A8D: 0@ = read_memory 0xB6EC1C size 4 virtual_protect 0

0A8D: 1@ = read_memory 0xB6EC18 size 4 virtual_protect 0

if

8045: not 0@ == 1@ // (float)

then

0A8C: write_memory 0xB6EC18 size 4 value 0@ virtual_protect 0

end

Может кто перевести на С++?

SR_team
05.09.2016, 19:32
Ресурсы или можно хранить в массиве байт.


или лучше написать свой упаковщик. там оно на изи делается

SR_team
05.09.2016, 19:32
0A8D: 0@ = read_memory 0xB6EC1C size 4 virtual_protect 0
0A8D: 1@ = read_memory 0xB6EC18 size 4 virtual_protect 0
if
8045: not 0@ == 1@ // (float)
then
0A8C: write_memory 0xB6EC18 size 4 value 0@ virtual_protect 0
end
Может кто перевести на С++?


нуб

iAmerican
05.09.2016, 19:35
нуб


ну не могу я вообще работать с памятью , что я тебе могу сделать , не понимаю и все.

DarkP1xel
05.09.2016, 19:37
C++:






float
fValue
[
2
]
=
{
*
reinterpret_cast

(
0xB6EC1C
)
,
*
reinterpret_cast

(
0xB6EC18
)
}
;
if
(
fValue
[
0
]
!=
fValue
[
1
]
)
*
reinterpret_cast

(
0xB6EC18
)
=
fValue
[
0
]
;

MISTER_GONWIK
05.09.2016, 19:42
0A8D: 0@ = read_memory 0xB6EC1C size 4 virtual_protect 0
0A8D: 1@ = read_memory 0xB6EC18 size 4 virtual_protect 0
if
8045: not 0@ == 1@ // (float)
then
0A8C: write_memory 0xB6EC18 size 4 value 0@ virtual_protect 0
end
Может кто перевести на С++?



Код:






if (*(float*)0xB6EC1C != *(float*)0xB6EC18)
*(float*)0xB6EC18 = *(float*)0xB6EC1C;

iAmerican
11.09.2016, 17:58
Думаю многие знают gta_sa.exe с антиразбросом.

Можно ли как то программно выявить что именно в данной gta_sa.exe есть антиразброс?

MISTER_GONWIK
11.09.2016, 18:13
Думаю многие знают gta_sa.exe с антиразбросом.
Можно ли как то программно выявить что именно в данной gta_sa.exe есть антиразброс?


да

Woofing Giraffe
11.09.2016, 22:35
Есть ли аналог антипаузы в samp addon в отдельном скрипте?

p1cador
25.09.2016, 22:59
Как создать консоль (для вывода в нее отладочной информации) через .dll библиотеку?

Dark_Knight
26.09.2016, 00:01
Взаемодествие между двумя приложениями? Сокеты юзай.

p1cador
26.09.2016, 00:07
Взаемодествие между двумя приложениями? Сокеты юзай.


Может херово объяснил. У меня есть, например, .asi плагин. Я хочу следить за тем, как в нем изменяются переменные. Для этого хочу вывести их каким-нибудь образом на экран. Лучше всего - в консольку. Как это можно сделать, как через длл создать консоль? Такую. в которую потом ожно будет сделать cout

#WH1SKEY
26.09.2016, 00:42
Как сделать такое:

Класс->Группа->функция;

Типа

SFPlugin->Client()->SendMes();

У меня выходит только так:

Класс->Функция;

Хочу свои классы с группами написать, но не выходит.

FYP
26.09.2016, 00:51
Как сделать такое:
Класс->Группа->функция;
Типа
SFPlugin->Client()->SendMes();

У меня выходит только так:
Класс->Функция;

Хочу свои классы с группами написать, но не выходит.


какие группы? учи язык.

#WH1SKEY
26.09.2016, 00:54
ФИП, объекты если я не ошибаюсь.

FYP
26.09.2016, 00:55
[QUOTE="Picador"]

Может херово объяснил. У меня есть, например, .asi плагин. Я хочу следить за тем, как в нем изменяются переменные. Для этого хочу вывести их каким-нибудь образом на экран. Лучше всего - в консольку. Как это можно сделать, как через длл создать консоль? Такую. в которую потом ожно будет сделать cout

C++:






/* некоторые инклуды лишние, не помню какие из них нужны
#include
#include
#include
#include
#include
#include
*/
void
RedirectIOToConsole
(
void
)
{
const
WORD MAX_CONSOLE_LINES
=
500
;
int
hConHandle
;
long
lStdHandle
;
CONSOLE_SCREEN_BUFFER_INFO coninfo
;
FILE
*
fp
;
// allocate a console for this app
AllocConsole
(
)
;
// set the screen buffer to be big enough to let us scroll text
GetConsoleScreenBufferInfo
(
GetStdHandle
(
STD_OUTPUT_HANDLE
)
,
&
coninfo
)
;
coninfo
.
dwSize
.
Y
=
MAX_CONSOLE_LINES
;
SetConsoleScreenBufferSize
(
GetStdHandle
(
STD_OUTPUT_HANDLE
)
,
coninfo
.
dwSize
)
;
// redirect unbuffered STDOUT to the console
lStdHandle
=
(
long
)
GetStdHandle
(
STD_OUTPUT_HANDLE
)
;
hConHandle
=
_open_osfhandle
(
lStdHandle
,
_O_TEXT
)
;
fp
=
_fdopen
(
hConHandle
,
"w"
)
;
*
stdout
=
*
fp
;
setvbuf
(
stdout
,
NULL
,
_IONBF
,
0
)
;
// redirect unbuffered STDIN to the console
lStdHandle
=
(
long
)
GetStdHandle
(
STD_INPUT_HANDLE
)
;
hConHandle
=
_open_osfhandle
(
lStdHandle
,
_O_TEXT
)
;
fp
=
_fdopen
(
hConHandle
,
"r"
)
;
*
stdin
=
*
fp
;
setvbuf
(
stdin
,
NULL
,
_IONBF
,
0
)
;
// redirect unbuffered STDERR to the console
lStdHandle
=
(
long
)
GetStdHandle
(
STD_ERROR_HANDLE
)
;
hConHandle
=
_open_osfhandle
(
lStdHandle
,
_O_TEXT
)
;
fp
=
_fdopen
(
hConHandle
,
"w"
)
;
*
stderr
=
*
fp
;
setvbuf
(
stderr
,
NULL
,
_IONBF
,
0
)
;
// make cout, wcout, cin, wcin, wcerr, cerr, wclog and clog
// point to console as well
std
::
ios
::
sync_with_stdio
(
)
;
}

FYP
26.09.2016, 00:58
ФИП, объекты если я не ошибаюсь.


ошибаешься. это функции, возвращающие указатели на объекты. учи язык.

Dark_Knight
26.09.2016, 11:38
Как сделать такое:
Класс->Группа->функция;
Типа
SFPlugin->Client()->SendMes();

У меня выходит только так:
Класс->Функция;

Хочу свои классы с группами написать, но не выходит.


Учи ООП. Это идет класс в классе. Да простит меня фип, если я не прав.

p1cador
26.09.2016, 14:03
Может что-то не так понял, но:

добавил функцию

C++:






void
RedirectIOToConsole
(
)




потом в bool WINAPI DllMain после выполнения условия DLL_PROCESS_ATTACH добавил

C++:






RedirectIOToConsole
(
)
;




после чего в след. строке начал поток

C++:






_beginthread
(
DLLProject
,
NULL
,
NULL
)
;




В DLLProject сделал вывод текста разными способами:

C++:





[CODE]
cout



В консоль ничего из этого не выводится. Но там появляется строка "Initialised SoundManager, которая вообще хер пойми откуда берется.

FYP
26.09.2016, 14:12
@Picador (https://www.blast.hk/members/20413/) похоже что игра перенаправляет вывод. это как-то можно пофиксить, но как я не знаю, не приходилось аттачить консоль к sa.

#WH1SKEY
26.09.2016, 15:04
Порылся, вот че накидал

C++:






class
date
{
public
:
bool
CMDS
(
)
{
// Действие
return
true
;
}
}
;
class
Cedit
{
public
:
date
*
Client
;
}
;
class
Cedit
*
Plugin
;




Вот так использую

C++:






Plugin
->
Client
->
CMDS
(
)
;




Программу крашит

MISTER_GONWIK
26.09.2016, 15:34
Порылся, вот че накидал

C++:






class
date
{
public
:
bool
CMDS
(
)
{
// Действие
return
true
;
}
}
;
class
Cedit
{
public
:
date
*
Client
;
}
;
class
Cedit
*
Plugin
;




Вот так использую

C++:






Plugin
->
Client
->
CMDS
(
)
;




Программу крашит


потому что под указатель Client не выделена память, а ты обращаешься к нему

и вообще, иди не позорься, почитай нормально о C++, мы тут не собираемся тебя обучать

Perojek)0
26.09.2016, 21:56
Можно, пожалуйста, пример, как через dll написать что-нибудь в чат?

SR_team
27.09.2016, 00:13
Можно, пожалуйста, пример, как через dll написать что-нибудь в чат?


Вызвать AddChatWnd, в собе есть адрес

SR_team
27.09.2016, 00:23
[QUOTE="Picador"]

Может что-то не так понял, но:
добавил функцию

C++:






void
RedirectIOToConsole
(
)




потом в bool WINAPI DllMain после выполнения условия DLL_PROCESS_ATTACH добавил

C++:






RedirectIOToConsole
(
)
;




после чего в след. строке начал поток

C++:






_beginthread
(
DLLProject
,
NULL
,
NULL
)
;




В DLLProject сделал вывод текста разными способами:

C++:





[CODE]
cout

iAmerican
27.09.2016, 10:52
Можно, пожалуйста, пример, как через dll написать что-нибудь в чат?



ну как то так

C++:






stChatInfo
*
g_Chat
=
0x0
;
#define SAMP_FUNC_ADDTOCHATWND 0x064010
void
addMessageToChat
(
D3DCOLOR cColor
,
char
*
szMsg
,
.
.
.
)
{
void
(
__thiscall
*
AddToChatWindowBuffer
)
(
const
void
*
_this
,
int
iType
,
char
*
szText
,
char
*
szPrefix
,
DWORD cColor
,
DWORD cPrefixColor
)
=
(
void
(
__thiscall
*
)
(
const
void
*
,
int
,
char
*
,
char
*
,
DWORD
,
DWORD
)
)
(
dwSAMPAddr
+
SAMP_FUNC_ADDTOCHATWND
)
;
va_list ap
;
char
tmp
[
512
]
;
memset
(
tmp
,
0
,
512
)
;
va_start
(
ap
,
szMsg
)
;
vsnprintf
(
tmp
,
sizeof
(
tmp
)
-
1
,
szMsg
,
ap
)
;
va_end
(
ap
)
;
return
AddToChatWindowBuffer
(
(
void
*
)
g_Chat
,
8
,
tmp
,
NULL
,
cColor
,
0x00
)
;
}

SR_team
27.09.2016, 12:21
char tmp[512];


144 максимум.



memset(tmp, 0, 512);


в c++11 можно так:

char tmp[512] = { 0 };

FYP
27.09.2016, 12:36
в c++11 можно так:
char tmp[512] = { 0 };


так можно и в си.

@iAmerican (https://www.blast.hk/members/18641/) будет вылетать, т.к. g_Chat == 0.

SR_team
27.09.2016, 13:42
так можно и в си.
@iAmerican (https://www.blast.hk/members/18641/) будет вылетать, т.к. g_Chat == 0.


Я стандартов C не знаю, а вот в C++98 такого вроде нельзя было делать

iAmerican
27.09.2016, 14:18
Можно, пожалуйста, пример, как через dll написать что-нибудь в чат?



http://rgho.st/7lWv4gxpX (https://www.blast.hk/redirect/aHR0cDovL3JnaG8uc3QvN2xXdjRneHBY)

MISTER_GONWIK
27.09.2016, 14:22
Можно, пожалуйста, пример, как через dll написать что-нибудь в чат?


https://github.com/MISTERGONWIK/efc/blob/master/sampBase.hpp

iAmerican
29.09.2016, 10:45
C++:






CVector vecSpeed
=
*
(
CVector
*
)
(
(
pPed
)
+
0x44
)
;
ReadProcessMemory
(
pHandle
,
(
LPCVOID
)
vecSpeed
,
&
vecSpeed
,
4
,
0
)
;




Как правильно сделать? А то не дает CVector в LPCVOID преобразовать.

SR_team
29.09.2016, 11:24
C++:






CVector vecSpeed
=
*
(
CVector
*
)
(
(
pPed
)
+
0x44
)
;
ReadProcessMemory
(
pHandle
,
(
LPCVOID
)
vecSpeed
,
&
vecSpeed
,
4
,
0
)
;




Как правильно сделать? А то не дает CVector в LPCVOID преобразовать.


потому что ***ню написал. читаешь вектор из свой программы, а потом в ReadProcessMemory пытаешься запихать этот вектор вместо адреса

iAmerican
29.09.2016, 11:58
потому что ***ню написал. читаешь вектор из свой программы, а потом в ReadProcessMemory пытаешься запихать этот вектор вместо адреса



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

C++:






DWORD vPos
=
(
DWORD
)
(
(
pPed
)
+
0x14
)
;
ReadProcessMemory
(
pHandle
,
(
LPCVOID
)
vPos
,
&
vPos
,
4
,
0
)
;




Это получается тоже неправильно ?

SR_team
29.09.2016, 13:08
как мне его прочитать? что бы потом с ним мат. действия выполнять

C++:






DWORD vPos
=
(
DWORD
)
(
(
pPed
)
+
0x14
)
;
ReadProcessMemory
(
pHandle
,
(
LPCVOID
)
vPos
,
&
vPos
,
4
,
0
)
;




Это получается тоже неправильно ?


конечно не правильно. загугли "ReadProcessMemory example c++"

Dark_Knight
29.09.2016, 16:17
Код:






CVector vecSpeed = *(CVector*)((pPed) + 0x44);




Рабочий вариант кстати.

iAmerican
29.09.2016, 16:36
конечно не правильно. загугли "ReadProcessMemory example c++"



ты понимаешь что это EXE приложение?

То что ты сказал, что vPos тоже не правильно , оно правильно 100%

C++:






CVector vecSpeed
;
// = *(CVector*)((pPed)+0x44);
ReadProcessMemory
(
pHandle
,
(
LPCVOID
)
(
(
pPed
)
+
0x44
)
,
&
vecSpeed
,
4
,
0
)
;




Вот так вот читает , но только координату X :(

SR_team
29.09.2016, 16:44
ты понимаешь что это EXE приложение?
То что ты сказал, что vPos тоже не правильно , оно правильно 100%


Я то как раз понимаю. И размер 12 байт у CVector, а не 4.

iAmerican
29.09.2016, 16:51
Я то как раз понимаю. И размер 12 байт у CVector, а не 4.


Вот можно сказать в чем трабл и был. Размер не знал что изменять надо ) . Благодарю

iAmerican
30.09.2016, 12:43
Как адресс игры получить?

SR_team
30.09.2016, 13:52
Как адресс игры получить?


OpenProcess

iAmerican
05.10.2016, 00:28
C++:






char
Hostname
(
)
{
ReadProcessMemory
(
pHandle
,
(
LPVOID
)
(
SAMPDLLBASE
+
0x21A0F8
)
,
(
LPVOID
)
&
Out
,
sizeof
(
Out
)
,
NULL
)
;
char
ServerString
[
128
]
;
ReadProcessMemory
(
pHandle
,
(
LPVOID
)
(
Out
+
0x121
)
,
&
ServerString
,
128
,
NULL
)
;
cout



В отдельности читает все отлично , но хочу сделать это функцией , что бы вызывать , например вот так :

C++:





[CODE]
printf
(
"%s"
,
Hostname
(
)
)
;




Но бьет ошибку.

Думаю это из за того что я как то не так возвращаю ServerString , подскажите пж.

Код:






Вызвано исключение по адресу 0x6D6D2E47 (ucrtbase.dll) в API.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0xFFFFFFD8.

Если для этого исключения имеется обработчик, выполнение программы может быть продолжено безопасно.

DarkP1xel
05.10.2016, 00:36
указатель возвращай

SR_team
05.10.2016, 00:40
хочу сделать это функцией



C++:





[CODE]
std
::
string
Hostname
(
)
{
ReadProcessMemory
(
pHandle
,
(
LPVOID
)
(
SAMPDLLBASE
+
0x21A0F8
)
,
(
LPVOID
)
&
Out
,
sizeof
(
Out
)
,
NULL
)
;
char
ServerString
[
128
]
;
ReadProcessMemory
(
pHandle
,
(
LPVOID
)
(
Out
+
0x121
)
,
&
ServerString
,
128
,
NULL
)
;
cout



Вывод: cout

iAmerican
05.10.2016, 01:07
[QUOTE="SR_team"]

C++:





[CODE]
std
::
string
Hostname
(
)
{
ReadProcessMemory
(
pHandle
,
(
LPVOID
)
(
SAMPDLLBASE
+
0x21A0F8
)
,
(
LPVOID
)
&
Out
,
sizeof
(
Out
)
,
NULL
)
;
char
ServerString
[
128
]
;
ReadProcessMemory
(
pHandle
,
(
LPVOID
)
(
Out
+
0x121
)
,
&
ServerString
,
128
,
NULL
)
;
cout

barspinoff
07.10.2016, 03:45
Подскажите, как получить никнейм игрока при RPC_ClientJoin.

Woofing Giraffe
07.10.2016, 09:57
Подскажите, как получить никнейм игрока при RPC_ClientJoin.



Код:






Пример перехвата входящего (пришедшего от сервера) RPC_ScrServerJoin:

bool CALLBACK incomingRPC( stRakNetHookParams *params ) // определение callback-функции, которая будет вызвана, если от сервера был получен новый RPC.
{
if( params->packetId == ScriptRPCEnumeration::RPC_ScrServerJoin ) // если это RPC_ScrServerJoin
{
short int sPlayerID;
D3DCOLOR D3DPlayerColor;
byte isNPC, nameLen;
char szPlayerName[25];
params->bitStream->ResetReadPointer(); // обнуляем оффсет чтения.
params->bitStream->Read( sPlayerID ); // читаем ID игрока.
params->bitStream->Read( D3DPlayerColor ); // цвет ника игрока.
params->bitStream->Read( isNPC ); // флаг, говорящий о том, NPC это или нет.
params->bitStream->Read( nameLen ); // длина ника.
params->bitStream->Read( szPlayerName, nameLen ); // ник.
szPlayerName[ nameLen ]= '\0'; // обрезаем, чтоб не было мусора
params->bitStream->ResetReadPointer(); // обнуляем оффсет чтения
SF->getSAMP()->getChat()->AddChatMessage( D3DPlayerColor, "%s[%d] Подключился к серверу.",
szPlayerName, sPlayerID ); // добавляем сообщение в чат.
};
return true; // успешно завершаем обработку RPC.
};
SF->getRakNet()->registerRakNetCallback( RakNetScriptHookType::RAKHOOK_TYPE_INCOMING_RPC, incomingRPC ); // регистрируем callback

barspinoff
07.10.2016, 20:39
Код:






Пример перехвата входящего (пришедшего от сервера) RPC_ScrServerJoin:

bool CALLBACK incomingRPC( stRakNetHookParams *params ) // определение callback-функции, которая будет вызвана, если от сервера был получен новый RPC.
{
if( params->packetId == ScriptRPCEnumeration::RPC_ScrServerJoin ) // если это RPC_ScrServerJoin
{
short int sPlayerID;
D3DCOLOR D3DPlayerColor;
byte isNPC, nameLen;
char szPlayerName[25];
params->bitStream->ResetReadPointer(); // обнуляем оффсет чтения.
params->bitStream->Read( sPlayerID ); // читаем ID игрока.
params->bitStream->Read( D3DPlayerColor ); // цвет ника игрока.
params->bitStream->Read( isNPC ); // флаг, говорящий о том, NPC это или нет.
params->bitStream->Read( nameLen ); // длина ника.
params->bitStream->Read( szPlayerName, nameLen ); // ник.
szPlayerName[ nameLen ]= '\0'; // обрезаем, чтоб не было мусора
params->bitStream->ResetReadPointer(); // обнуляем оффсет чтения
SF->getSAMP()->getChat()->AddChatMessage( D3DPlayerColor, "%s[%d] Подключился к серверу.",
szPlayerName, sPlayerID ); // добавляем сообщение в чат.
};
return true; // успешно завершаем обработку RPC.
};
SF->getRakNet()->registerRakNetCallback( RakNetScriptHookType::RAKHOOK_TYPE_INCOMING_RPC, incomingRPC ); // регистрируем callback





А как получить только свой никнейм?

iAmerican
07.10.2016, 21:51
А как получить только свой никнейм?



C++:






if
(
strstr
(
szPlayerName
,
"nickname"
)
!=
NULL
)
{
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DPlayerColor
,
"%s[%d] Подключился к серверу."
,
szPlayerName
,
sPlayerID
)
;
// добавляем сообщение в чат.
}




хотя вроде будет правильнее strcmp , ну сам погугли, поймешь

Woofing Giraffe
07.10.2016, 22:42
А как получить только свой никнейм?


Функция есть получения ника, ну а если так, то ID со своим сравнивай, или строку со строкой. Хотя я хз отправляется ли этот RPC при твоем коннекте

barspinoff
07.10.2016, 23:40
C++:






if
(
strstr
(
szPlayerName
,
"nickname"
)
!=
NULL
)
{
SF
->
getSAMP
(
)
->
getChat
(
)
->
AddChatMessage
(
D3DPlayerColor
,
"%s[%d] Подключился к серверу."
,
szPlayerName
,
sPlayerID
)
;
// добавляем сообщение в чат.
}




хотя вроде будет правильнее strcmp , ну сам погугли, поймешь


"nickname"? не понял. Мне нужен именно мой ник, под которым я зайду, а LocalPlayerName у меня иногда с кривыми символами отображается.

Dark_Knight
07.10.2016, 23:47
Как читаешь? После упрочнения надо записывать ноль в конце строки.

char text[123];

auto len = strlen(text);

text[len] = '\0';

p1cador
08.10.2016, 02:02
Хочу собрать в .asi все свои наработки. По /командам все раскидывать уже не вариант, хочу сделать простую менюшку.

Начал делать

Но почему-то кажется, что у меня адский говнокод, размер файла растет пиздец как быстро, хотелось бы подглядывать куда-нибудь. Дайте пож. ссылки на соурсы каких-нибудь ПРОСТЫХ менюшек, чтобы можно было изучить, как там все устроено, классы там, всякое такое.

FYP
08.10.2016, 13:13
Хочу собрать в .asi все свои наработки. По /командам все раскидывать уже не вариант, хочу сделать простую менюшку.
Начал делать

Но почему-то кажется, что у меня адский говнокод, размер файла растет пиздец как быстро, хотелось бы подглядывать куда-нибудь. Дайте пож. ссылки на соурсы каких-нибудь ПРОСТЫХ менюшек, чтобы можно было изучить, как там все устроено, классы там, всякое такое.


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

iAmerican
09.10.2016, 15:28
Хочу собрать в .asi все свои наработки. По /командам все раскидывать уже не вариант, хочу сделать простую менюшку.
Начал делать

Но почему-то кажется, что у меня адский говнокод, размер файла растет пиздец как быстро, хотелось бы подглядывать куда-нибудь. Дайте пож. ссылки на соурсы каких-нибудь ПРОСТЫХ менюшек, чтобы можно было изучить, как там все устроено, классы там, всякое такое.


https://zhyk.ru/forum/showthread.php?t=840968 (https://www.blast.hk/redirect/aHR0cHM6Ly96aHlrLnJ1L2ZvcnVtL3Nob3d0aHJlYWQucGhwP3 Q9ODQwOTY4)

Мне вот эта статья когда-то помогла. Делал тоже самое что и ты.

p1cador
09.10.2016, 19:47
https://zhyk.ru/forum/showthread.php?t=840968 (https://www.blast.hk/redirect/aHR0cHM6Ly96aHlrLnJ1L2ZvcnVtL3Nob3d0aHJlYWQucGhwP3 Q9ODQwOTY4)
Мне вот эта статья когда-то помогла. Делал тоже самое что и ты.


да-да, давно видел этот гайд на жуке, спасибо что напомнил

получается пока как-то так





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

p1cador
11.10.2016, 01:02
Жопа полыхает.

C++:






samp_dll
=
(
uint32_t
)
LoadLibrary
(
"samp.dll"
)
;
kek
=
(
stScoreboardInfo
*
)
(
samp_dll
+
0x21A0B4
)
;
//SAMP_SCOREBOARD_INFO 0x21A0B4






дебаг вывод (вдруг ошибка в получении):

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

(предпоследнее samp_dll, последнее kek->iIsEnabled )

проверка:

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

все правильно. Идем дальше. Адрес 1b505d0, смотрим, ставим брекпоинт на запись

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

разворачиваем, жмем tab, брекпоинт срабатывает

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


Нубовопросы:

1) какого хуя в углу на 1 скрине рендерится адрес, а не само значение

2) является ли адрес структуры адресом первого поля? Просто тогда не добавлял бы целую структуру ради одного значения

FYP
11.10.2016, 10:40
Жопа полыхает.

C++:






samp_dll
=
(
uint32_t
)
LoadLibrary
(
"samp.dll"
)
;
kek
=
(
stScoreboardInfo
*
)
(
samp_dll
+
0x21A0B4
)
;
//SAMP_SCOREBOARD_INFO 0x21A0B4






дебаг вывод (вдруг ошибка в получении):

(предпоследнее samp_dll, последнее kek->iIsEnabled )

проверка:

все правильно. Идем дальше. Адрес 1b505d0, смотрим, ставим брекпоинт на запись

разворачиваем, жмем tab, брекпоинт срабатывает


Нубовопросы:
1) какого хуя в углу на 1 скрине рендерится адрес, а не само значение
2) является ли адрес структуры адресом первого поля? Просто тогда не добавлял бы целую структуру ради одного значения


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

C++:






kek
=
*
(
stScoreboardInfo
*
*
)
(
samp_dll
+
0x21A0B4
)
;
//SAMP_SCOREBOARD_INFO 0x21A0B4

Skadi
11.10.2016, 12:02
есть похожая софтина в паблики?

http://www.unknowncheats.me/forum/direct3d/171874-kittonium-d3d9-test-environment.html (https://www.blast.hk/redirect/aHR0cDovL3d3dy51bmtub3duY2hlYXRzLm1lL2ZvcnVtL2Rpcm VjdDNkLzE3MTg3NC1raXR0b25pdW0tZDNkOS10ZXN0LWVudmly b25tZW50Lmh0bWw)

просто эта не работает

iAmerican
11.10.2016, 12:52
есть похожая софтина в паблики?
http://www.unknowncheats.me/forum/direct3d/171874-kittonium-d3d9-test-environment.html (https://www.blast.hk/redirect/aHR0cDovL3d3dy51bmtub3duY2hlYXRzLm1lL2ZvcnVtL2Rpcm VjdDNkLzE3MTg3NC1raXR0b25pdW0tZDNkOS10ZXN0LWVudmly b25tZW50Lmh0bWw)

просто эта не работает


Если ты про d3d9 тест , то их полно в интернете. Воспользуйся гуглом.

SR_team
11.10.2016, 13:03
есть похожая софтина в паблики?
http://www.unknowncheats.me/forum/direct3d/171874-kittonium-d3d9-test-environment.html (https://www.blast.hk/redirect/aHR0cDovL3d3dy51bmtub3duY2hlYXRzLm1lL2ZvcnVtL2Rpcm VjdDNkLzE3MTg3NC1raXR0b25pdW0tZDNkOS10ZXN0LWVudmly b25tZW50Lmh0bWw)

просто эта не работает


из соба возьми. Там именно она

Skadi
11.10.2016, 14:00
из соба возьми. Там именно она


где она там?

return
20.10.2016, 17:10
как привести pPresentParam.BackBufferWidth / 2 и pPresentParam.BackBufferHeight / 2 в обычное число ?

Dark_Knight
20.10.2016, 17:15
Всмысле в обычное?

SR_team
20.10.2016, 17:28
как привести pPresentParam.BackBufferWidth / 2 и pPresentParam.BackBufferHeight / 2 в обычное число ?


не делить на 2

return
20.10.2016, 21:02
нет, я имею ввиду, что я получаю этим центр экрана, а как его получить в цифрах?

что бы можно было записывать не так - pPresentParam.BackBufferWidth / 2 и pPresentParam.BackBufferHeight / 2, а допустим 640 на 512

я конечно могу сделать под свой экран, но он ведь у всех разный, вот и вопрос возник, как получить центр экрана, без этого - pPresentParam.BackBufferWidth / 2 и pPresentParam.BackBufferHeight / 2 ?

Dark_Knight
20.10.2016, 21:45
int a = pPresentParam.BackBufferWidth / 2;

return
20.10.2016, 22:14
если использовать pPresentParam.BackBufferWidth, то я не могу его изменять.

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

есть альтернатива pPresentParam.BackBufferWidth и pPresentParam.BackBufferHeight ?

SR_team
20.10.2016, 22:26
если использовать pPresentParam.BackBufferWidth, то я не могу его изменять.
мне нужно получать число, которое я в дальнейшем буду изменять на своё.

есть альтернатива pPresentParam.BackBufferWidth и pPresentParam.BackBufferHeight ?


ты чо идиот? в чем проблема его изменения?

NarutoUA
20.10.2016, 22:50
ты чо хочешь разрешение экрана менять? так просто не получится

iAmerican
21.10.2016, 09:26
нет, я имею ввиду, что я получаю этим центр экрана, а как его получить в цифрах?
что бы можно было записывать не так - pPresentParam.BackBufferWidth / 2 и pPresentParam.BackBufferHeight / 2, а допустим 640 на 512
я конечно могу сделать под свой экран, но он ведь у всех разный, вот и вопрос возник, как получить центр экрана, без этого - pPresentParam.BackBufferWidth / 2 и pPresentParam.BackBufferHeight / 2 ?



C++:






iX
=
GetSystemMetrics
(
SM_CXSCREEN
)
/
2
;
iY
=
GetSystemMetrics
(
SM_CYSCREEN
)
/
2
;

Rapt0r6113
30.10.2016, 15:52
Киньте ссылку на норм учебник или видосик по C++, буду благодарен

Dark_Knight
30.10.2016, 16:44
Страуструп с++ 4 издание

Rapt0r6113
30.10.2016, 19:55
Страуструп с++ 4 издание


спс, почитаю

iAmerican
30.10.2016, 20:03
спс, почитаю


youtube С++ уроки.

http://cppstudio.com (https://www.blast.hk/redirect/aHR0cDovL2NwcHN0dWRpby5jb20) - лучший сайт , ИМХО

Rapt0r6113
09.11.2016, 19:40
Как редактировать адреса памяти? например надо 0xB7CEE4 (бесконечный бег) сделать включённым, если спросите, почему в клео не сделать, отвечу, что для ГВ нужно(exe формат)

AWRage
09.11.2016, 19:55
Как редактировать адреса памяти? например надо 0xB7CEE4 (бесконечный бег) сделать включённым, если спросите, почему в клео не сделать, отвечу, что для ГВ нужно(exe формат)


bool b = *(bool *)0xB7CEE4; // read

*(bool *)0xB7CEE4 = true; // write

Rapt0r6113
09.11.2016, 19:57
благодарю

Dark_Knight
09.11.2016, 19:59
bool b = *(bool *)0xB7CEE4; // read
*(bool *)0xB7CEE4 = true; // write


То там по другому делать надо.

AWRage
09.11.2016, 20:48
То там по другому делать надо.


Он спросил как редачить адреса памяти. Я ответил.

Woofing Giraffe
10.11.2016, 22:52
Нужно зарандомить число от x до y включительно. Как реализовать? Пробовал так: rand() % (Count[1] - Count[0]) + Count[0];

На числах от 1 до 9 работает, дальше бред выдает

FYP
10.11.2016, 23:02
Нужно зарандомить число от x до y включительно. Как реализовать? Пробовал так: rand() % (Count[1] - Count[0]) + Count[0];
На числах от 1 до 9 работает, дальше бред выдает


rand() - прошлый век, не надо его юзать.

C++:






#include
int
randomInteger
(
int
min
,
int
max
)
{
static
std
::
random_device rd
;
static
std
::
default_random_engine
e1
(
rd
(
)
)
;
std
::
uniform_int_distribution

uniform_dist
(
min
,
max
)
;
return
uniform_dist
(
e1
)
;
}

p1cador
13.11.2016, 14:57
Несколько вопросов, не касаемых гта:

1)Steam. HL2: DM. На сервере использвуется VAC. Если сразу после включения игры заинжектить простую .dll, которая хукает directx, то при заходе на сервер прилетает VAC бан, или кикает, или еще че, но если заинжектить ее после подключения к серверу - все работает прекрасно. Неужели в CS:GO будет так же?






2)Может есть какие-нибудь хитрости в поиске различных структур в играх? Поделитесь ссылками на статьи/гайды пож. Потому что у меня, кроме как пригласить 2-3 человек на сервер и искать в памяти их хп, позицию и т.п., искать закономерности, разницу между адресами этих значений у игроков (по идее должна быть равна размеру стр-ры), других идей пока что нет.

3)Или, может, по HL2: DM (движок Source) выкладывали хоть какие-нибудь адреса? Искать всё с нуля впадлу пзедц. Нашел исходники движка, но они старые и хер знает, сколько потерпели изменений.

FYP
13.11.2016, 17:25
@Picador (https://www.blast.hk/members/20413/)

1. насколько мне известно, инжектить dll туда, где есть встроенный античит - это плохая практика. спустя время такие дллки начинают палится, если не будут замечены античитом сразу же. почему? точно сказать не могу, но можно предположить, что неизвестные библиотеки отправляются на сервера античита для анализа, возможно даже ручного. альтернатива - внешние (external) читы, но и у них есть хуева гора нюансов.

2. трюки есть, но они все не универсальные. например, в CE есть немало инструментов для автоматического анализа структур, в IDA Pro можно составить структуру из обращения к полям, есть даже отдельная программа ReClass, которая предназначена лишь для одной цели - разбора структур в запущенном процессе, но любые автоматические методы никак не могут гарантировать правильность распознавания, и чаще всего разбор любых структур требует ручного вмешательства.

3. можно поискать читы с открытыми исходниками. начни с unknowncheats.me, там немало такого контента.

Sire Like
15.11.2016, 20:37
Нужно зарандомить число от x до y включительно. Как реализовать? Пробовал так: rand() % (Count[1] - Count[0]) + Count[0];
На числах от 1 до 9 работает, дальше бред выдает



C++:






int
x
=
rand
(
)
%
(
B
-
A
+
1
)
+
A
;




я так делал

Pawn, как пример.

Код:






stock FractionName(playerid)
{
new fractionname[40];
switch(pInfo[playerid][pMember])
{
case 1: { fractionname = "38"; }
case 2: { fractionname = "64"; }
case 3: { fractionname = "208+"; }
case 4: { fractionname = "++102"; }
case 5: { fractionname = "283"; }
}
return fractionname;
}




И потом хуярим например так:







Код:






new dialog[24 + 40 + 40]; format(dialog, sizeof(dialog), "%s приглашает Вас присоединиться к %s", pInfo[playerid][pName], FractionName(playerid));




Kak захуярить на C++ такое? Ну сток создать

Woofing Giraffe
17.11.2016, 01:24
Pawn, как пример.

Код:






stock FractionName(playerid)
{
new fractionname[40];
switch(pInfo[playerid][pMember])
{
case 1: { fractionname = "38"; }
case 2: { fractionname = "64"; }
case 3: { fractionname = "208+"; }
case 4: { fractionname = "++102"; }
case 5: { fractionname = "283"; }
}
return fractionname;
}




И потом хуярим например так:







Код:






new dialog[24 + 40 + 40]; format(dialog, sizeof(dialog), "%s приглашает Вас присоединиться к %s", pInfo[playerid][pName], FractionName(playerid));




Kak захуярить на C++ такое? Ну сток создать


char же обычный

BlackKnigga
22.11.2016, 15:44
Есть две строки, одна указатель, другая массив:

C++:






char
*
pstr
=
"string"
,
str
[
]
=
"string"
;




Как их сравнить?

p1cador
22.11.2016, 16:12
@BlackKnigga (https://www.blast.hk/members/83040/), название массива(str) это адрес его первого элемента.

Передай их в соответствующую функцию/напиши сам

Dark_Knight
22.11.2016, 20:33
http://ideone.com/OZwcGD (https://www.blast.hk/redirect/aHR0cDovL2lkZW9uZS5jb20vT1p3Y0dE)

SR_team
26.11.2016, 16:38
Есть две строки, одна указатель, другая массив:

C++:






char
*
pstr
=
"string"
,
str
[
]
=
"string"
;




Как их сравнить?


strcmp

BlackKnigga
26.11.2016, 17:32
strcmp


Разобрался уже. Оказалось что если строки равны, strcmp вернет NULL:monkey:

NarutoUA
26.11.2016, 18:23
Разобрался уже. Оказалось что если строки равны, strcmp вернет NULL:monkey:


Оказалось или это в документации написано?

p1cador
29.11.2016, 01:33
Ковырял свой .asi, смотрел сурсы соба и сф сдк, нашел в actor_info такую штукенцию:

C++:






void
*
pNeck
;
/* 1164 - void* pNeck
(pChest?)
- 4 unknown
- float height
- float front/back
- float left/right
- void* pObject
(same struct for the following body-part-pointers [except pLeft/RightArm])
*/
void
*
pHead
;
/* 1168 */
void
*
pLeftArm
;
/* 1172 */
void
*
pRightArm
;
/* 1176 */
void
*
pLeftLowArm
;
/* 1180 */
void
*
pRightLowArm
;
/* 1184 */
void
*
pLeftLeg
;
/* 1188 */
void
*
pRightLeg
;
/* 1192 */
void
*
pLeftLowLeg
;
/* 1196 */
void
*
pRightLowLeg
;
/* 1200 */
void
*
pRightMidLeg
;
/* 1204 */
void
*
pLeftMidLeg
;
/* 1208 */
void
*
pLeftMidArm
;
/* 1212 */
void
*
pRightMidArm
;
/* 1216 */
void
*
pLeftShoulder
;
/* 1220 */
void
*
pRightShoulder
;
/* 1224 */
void
*
pChest
;
/* 1228 */
void
*
pMouth
;
/* 1232 */




Указатели на некоторыечасти тела. Если создать соотв. стр-ру

C++:






struct
stBodyPart
{
BYTE bIgnore
[
0x10
]
;
CObject
*
pObject
;
}
;




то через pObject можно будет получить инфу о конкретных частях тела игрока, хранящуюся в полях структур CPhysical, CEntity, CPlaceable (т.к. наследование), включая позицию костей, без использования функи? И какая это будет позиция, настоящия, или это какие-то дефолтные оффсеты, необходимые для построения модели? Или я вообще не правильно это понял? Поясните крч плз

NarutoUA
29.11.2016, 01:52
то через pObject можно будет получить инфу о конкретных частях тела игрока, хранящуюся в полях структур CPhysical, CEntity, CPlaceable (т.к. наследование), включая позицию костей, без использования функи? И какая это будет позиция, настоящия, или это какие-то дефолтные оффсеты, необходимые для построения модели? Или я вообще не правильно это понял? Поясните крч плз


Скорей всего нет, там другая структура для костей:

#pragma pack(push, 4)

class PLUGIN_API AnimBlendFrameData

{

public:

unsigned __int8 m_nFlags;

CVector m_vOffset;

class IFrame *m_pIFrame;

unsigned __int32 m_dwNodeId;

};

#pragma pack(pop)

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

Skadi
01.12.2016, 14:55
как задать путь до файла, который не имеет расширения?

получается так, что он принимает файл без расширения за папку.

strcat_s(path, "\\тут какой то путь\\файл");

решил данную проблему путём копирования файла и изменения его названия.

не знаю насколько это хорошо, мб кто то подскажет.

Woofing Giraffe
02.12.2016, 13:32
как задать путь до файла, который не имеет расширения?

получается так, что он принимает файл без расширения за папку.

strcat_s(path, "\\тут какой то путь\\файл");

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


А что ты с ним собрался делать то?

p1cador
05.12.2016, 19:13
Хук DirectX, работают все функи, коме DrawLine. Спиздил ее отсюда: https://github.com/BlastHackNet/mod_s0beit_sa/blob/master/src/d3drender.cpp

Вот вызовы:







C++:






pD3DHook
->
pRender
->
DrawLine
(
v
[
0
]
,
v
[
1
]
,
0xffff0000
)
;
pD3DHook
->
pRender
->
DrawLine
(
xy
[
0
]
,
xy
[
1
]
,
0xff00ff00
)
;




где v[2] и xy[2] имеют тип D3DXVECTOR3

v заполнил вручную (1.0;1.0 ... 500.0, 500.0)

xy содержит 2д координаты (мои и таргета)

В результате должно быть две линии - красная(диагональ с левого верхнего угла экрана) и зеленая - от меня до цели.

Но нихуя. Рисует непонятно что (квадраты мои, на них внимание не обращайте):




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


Если целюсь в педа с другой стороны - рисует вообще в другом месте:



Screenshot_5.pngp1cador · 5 Дек 2016 в 18:13' data-fancybox="lb-post-130875" data-lb-caption-extra-html="" data-lb-sidebar-href="" data-single-image="1" data-src="https://www.blast.hk/attachments/6254/" style="cursor: pointer;" title="Screenshot_5.png">
https://forum.antichat.xyz/attachments/27130875/


Если стать по другому. То ее вообще не видно будет.

Прямо внутри функи CD3DRender:: DrawLine сделал вывод координат в чат, так же отрендерил доп. инфу (слева). Числа правильные. Почему зеленая линия рисуется вообще не там, где мне нужно, а красной вообще нет?

Вот функция из соба(из сурса, ссылка на который в начале сообщения), в ней абсолютно ничего не менял, только добавил вывод в чат

C++:






bool
CD3DRender
::
DrawLine
(
const
D3DXVECTOR3
&
a
,
const
D3DXVECTOR3
&
b
,
DWORD dwColor
)
{
if
(
FAILED
(
CD3DBaseRender
::
BeginRender
(
)
)
)
return
false
;
////////////////////////////////////////////////////
// Make sure we have a valid vertex buffer.
if
(
m_pD3Dbuf
==
NULL
)
{
return
false
;
}
m_pD3Ddev
->
SetTextureStageState
(
0
,
D3DTSS_COLOROP
,
D3DTOP_SELECTARG2
)
;
m_pD3Ddev
->
SetTextureStageState
(
0
,
D3DTSS_ALPHAOP
,
D3DTOP_SELECTARG2
)
;
//m_pD3Ddev->SetTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_DIFFUSE );
//m_pD3Ddev->SetTextureStageState( 0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE );
m_pD3Ddev
->
SetRenderState
(
D3DRS_CLIPPING
,
false
)
;
m_pD3Ddev
->
SetRenderState
(
D3DRS_ZENABLE
,
false
)
;
//m_pD3Ddev->SetRenderState ( D3DRS_LIGHTING, false );
D3DLVERTEX lineList
[
2
]
;
//////////////////////////////////////////////////
// Lock the vertex buffer and copy in the verts.
m_pD3Dbuf
->
Lock
(
0
,
0
,
(
void
*
*
)
&
lineList
,
D3DLOCK_DISCARD
|
D3DLOCK_NOSYSLOCK
)
;
// flogs: D3DLOCK_NOSYSLOCK, D3DLOCK_DISCARD
{
lineList
[
0
]
.
x
=
a
.
x
;
lineList
[
0
]
.
y
=
a
.
y
;
lineList
[
0
]
.
z
=
a
.
z
;
lineList
[
0
]
.
color
=
dwColor
;
lineList
[
0
]
.
specular
=
dwColor
;
lineList
[
1
]
.
x
=
b
.
x
;
lineList
[
1
]
.
y
=
b
.
y
;
lineList
[
1
]
.
z
=
b
.
z
;
lineList
[
1
]
.
color
=
dwColor
;
lineList
[
1
]
.
specular
=
dwColor
;
}
m_pD3Dbuf
->
Unlock
(
)
;
// store FVF to restore original at the end of this function
DWORD fvf
;
m_pD3Ddev
->
GetFVF
(
&
fvf
)
;
m_pD3Ddev
->
SetFVF
(
D3DFVF_LVERTEX
)
;
//m_pD3Ddev->SetFVF( D3DFVF_PRIMITIVES );
////////////////////////////////////////////////////
// Draw!
p1c
->
addMessageToChat
(
0xFFe1e1e1
,
"1) %.1f %.1f %.1f %.1f | %x"
,
a
.
x
,
a
.
y
,
b
.
x
,
b
.
y
,
dwColor
)
;
p1c
->
addMessageToChat
(
0xFFc1c1c1
,
"2) %.1f %.1f %.1f %.1f | %x"
,
lineList
[
0
]
.
x
,
lineList
[
0
]
.
y
,
lineList
[
1
]
.
x
,
lineList
[
1
]
.
y
,
dwColor
)
;
m_pD3Ddev
->
DrawPrimitiveUP
(
D3DPT_LINESTRIP
,
1
,
lineList
,
sizeof
(
lineList
)
/
2
)
;
// reset states
m_pD3Ddev
->
SetTextureStageState
(
0
,
D3DTSS_COLOROP
,
D3DTOP_MODULATE
)
;
m_pD3Ddev
->
SetTextureStageState
(
0
,
D3DTSS_ALPHAOP
,
D3DTOP_MODULATE
)
;
m_pD3Ddev
->
SetRenderState
(
D3DRS_ZENABLE
,
true
)
;
m_pD3Ddev
->
SetRenderState
(
D3DRS_CLIPPING
,
true
)
;
// restore FVF
m_pD3Ddev
->
SetFVF
(
fvf
)
;
CD3DBaseRender
::
EndRender
(
)
;
return
true
;
}

SR_team
05.12.2016, 19:27
Хук DirectX, работают все функи, коме DrawLine. Спиздил ее отсюда: https://github.com/BlastHackNet/mod_s0beit_sa/blob/master/src/d3drender.cpp

Вот вызовы:







C++:






pD3DHook
->
pRender
->
DrawLine
(
v
[
0
]
,
v
[
1
]
,
0xffff0000
)
;
pD3DHook
->
pRender
->
DrawLine
(
xy
[
0
]
,
xy
[
1
]
,
0xff00ff00
)
;




где v[2] и xy[2] имеют тип D3DXVECTOR3

v заполнил вручную (1.0;1.0 ... 500.0, 500.0)
xy содержит 2д координаты (мои и таргета)
В результате должно быть две линии - красная(диагональ с левого верхнего угла экрана) и зеленая - от меня до цели.
Но нихуя. Рисует непонятно что (квадраты мои, на них внимание не обращайте):




Если целюсь в педа с другой стороны - рисует вообще в другом месте:




Если стать по другому. То ее вообще не видно будет.
Прямо внутри функи CD3DRender:: DrawLine сделал вывод координат в чат, так же отрендерил доп. инфу (слева). Числа правильные. Почему зеленая линия рисуется вообще не там, где мне нужно, а красной вообще нет?

Вот функция из соба(из сурса, ссылка на который в начале сообщения), в ней абсолютно ничего не менял, только добавил вывод в чат

C++:






bool
CD3DRender
::
DrawLine
(
const
D3DXVECTOR3
&
a
,
const
D3DXVECTOR3
&
b
,
DWORD dwColor
)
{
if
(
FAILED
(
CD3DBaseRender
::
BeginRender
(
)
)
)
return
false
;
////////////////////////////////////////////////////
// Make sure we have a valid vertex buffer.
if
(
m_pD3Dbuf
==
NULL
)
{
return
false
;
}
m_pD3Ddev
->
SetTextureStageState
(
0
,
D3DTSS_COLOROP
,
D3DTOP_SELECTARG2
)
;
m_pD3Ddev
->
SetTextureStageState
(
0
,
D3DTSS_ALPHAOP
,
D3DTOP_SELECTARG2
)
;
//m_pD3Ddev->SetTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_DIFFUSE );
//m_pD3Ddev->SetTextureStageState( 0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE );
m_pD3Ddev
->
SetRenderState
(
D3DRS_CLIPPING
,
false
)
;
m_pD3Ddev
->
SetRenderState
(
D3DRS_ZENABLE
,
false
)
;
//m_pD3Ddev->SetRenderState ( D3DRS_LIGHTING, false );
D3DLVERTEX lineList
[
2
]
;
//////////////////////////////////////////////////
// Lock the vertex buffer and copy in the verts.
m_pD3Dbuf
->
Lock
(
0
,
0
,
(
void
*
*
)
&
lineList
,
D3DLOCK_DISCARD
|
D3DLOCK_NOSYSLOCK
)
;
// flogs: D3DLOCK_NOSYSLOCK, D3DLOCK_DISCARD
{
lineList
[
0
]
.
x
=
a
.
x
;
lineList
[
0
]
.
y
=
a
.
y
;
lineList
[
0
]
.
z
=
a
.
z
;
lineList
[
0
]
.
color
=
dwColor
;
lineList
[
0
]
.
specular
=
dwColor
;
lineList
[
1
]
.
x
=
b
.
x
;
lineList
[
1
]
.
y
=
b
.
y
;
lineList
[
1
]
.
z
=
b
.
z
;
lineList
[
1
]
.
color
=
dwColor
;
lineList
[
1
]
.
specular
=
dwColor
;
}
m_pD3Dbuf
->
Unlock
(
)
;
// store FVF to restore original at the end of this function
DWORD fvf
;
m_pD3Ddev
->
GetFVF
(
&
fvf
)
;
m_pD3Ddev
->
SetFVF
(
D3DFVF_LVERTEX
)
;
//m_pD3Ddev->SetFVF( D3DFVF_PRIMITIVES );
////////////////////////////////////////////////////
// Draw!
p1c
->
addMessageToChat
(
0xFFe1e1e1
,
"1) %.1f %.1f %.1f %.1f | %x"
,
a
.
x
,
a
.
y
,
b
.
x
,
b
.
y
,
dwColor
)
;
p1c
->
addMessageToChat
(
0xFFc1c1c1
,
"2) %.1f %.1f %.1f %.1f | %x"
,
lineList
[
0
]
.
x
,
lineList
[
0
]
.
y
,
lineList
[
1
]
.
x
,
lineList
[
1
]
.
y
,
dwColor
)
;
m_pD3Ddev
->
DrawPrimitiveUP
(
D3DPT_LINESTRIP
,
1
,
lineList
,
sizeof
(
lineList
)
/
2
)
;
// reset states
m_pD3Ddev
->
SetTextureStageState
(
0
,
D3DTSS_COLOROP
,
D3DTOP_MODULATE
)
;
m_pD3Ddev
->
SetTextureStageState
(
0
,
D3DTSS_ALPHAOP
,
D3DTOP_MODULATE
)
;
m_pD3Ddev
->
SetRenderState
(
D3DRS_ZENABLE
,
true
)
;
m_pD3Ddev
->
SetRenderState
(
D3DRS_CLIPPING
,
true
)
;
// restore FVF
m_pD3Ddev
->
SetFVF
(
fvf
)
;
CD3DBaseRender
::
EndRender
(
)
;
return
true
;
}





Была такая проблема. Пизди линии из antTweakBar

FYP
05.12.2016, 19:47
@Picador (https://www.blast.hk/members/20413/) так это же функция рендера линии в мире. она принимает 3д координаты.

p1cador
05.12.2016, 19:51
@Picador (https://www.blast.hk/members/20413/) так это же функция рендера линии в мире. она принимает 3д координаты.


cerf)

я еще думал, нахера там z

ну щас точно все на свои места стало) спс



(external) читы


Может есть инфа минимальная хотя бы, VAC как-то будет палить, если я сделаю ReadProcessMemory с левого .exe? Ну просто с проверкой на наличие инжекнутых .dll библиотек я согласен, справедливо, VAC это изи палит. А что, если просто прочитать (!не записывать) что-либо через ReadProcessMemory, это вообще может палиться? Хотя бы в теории, оставит ли след где-то в игре сам факт того, что я просто прочитал значение? Просто я плохо шарю в том, как это все устроено и мне кажется, что в прочтении значения по опред. адресу не должно быть ничего серьезного, это вроде как просто в щелочку посмотреть :D Или всё-таки где-то эта операция будет оставлять след? Там регистры какие-нибудь, еще че, я хз

А то у меня в бошке все как-то слишком изи получается, прочитал координаты игроков через стороннее приложение->отрендерил через него же поверх всех окон = изи вх. Или просто приаттачить к бандикаму там, или еще куда, что поверх всех окон висит и с ваком дружит. Но подозреваю, что я далеко не первый такой умник.

FYP
07.12.2016, 14:02
@Picador (https://www.blast.hk/members/20413/) я особо не вдавался в работу VAC. отследить вызов ReadProcessMemory можно только с помощью драйвера. в MTA, например, он есть. кроме ReadProcessMemory есть и другие способы прочитать память процесса, они сложнее. есть и возможность скрытно загрузить dll в процесс и скрыть её вообще от всего, только это тоже сложно и сам процесс скрытия может детектироваться.

p1cador
07.12.2016, 16:16
я особо не вдавался в работу VAC. отследить вызов ReadProcessMemory можно только с помощью драйвера.


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



кроме ReadProcessMemory есть и другие способы прочитать память процесса, они сложнее.


В какую сторону гуглить?



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


Ну я подозревал, что это всетаки возможно. Это ж комп, тут, в теории возможно сделать что угодно, но для меня это рил слишком сложно будет. А вот про то, как прочитать значения безпалева, кроме ReadProcessMemory, я бы почитал. Что искать?

П.С. спс за помощь, от души, хз где еще мне в этом помогут на таком уровне

Woofing Giraffe
07.12.2016, 17:42
Вот есть у меня функция и есть глобальная переменная. Как мне передать в эту функцию переменную, чтобы саму эту переменную функция могла изменить (не переданную, а глобальную)? Указатель не помогает

itsLegend
07.12.2016, 18:36
Вот есть у меня функция и есть глобальная переменная. Как мне передать в эту функцию переменную, чтобы саму эту переменную функция могла изменить (не переданную, а глобальную)? Указатель не помогает


Но она же глобальная. Зачем передавать ссылку на неё?

FYP
07.12.2016, 21:22
Т.е. про наличие этого драйвера в кс го точно сказать не можешь?


не могу.



В какую сторону гуглить?


в сторону обходов обнаружения вызовов Read/WriteProcessMemory.

SR_team
07.12.2016, 22:19
@Picador (https://www.blast.hk/members/20413/) я особо не вдавался в работу VAC. отследить вызов ReadProcessMemory можно только с помощью драйвера. в MTA, например, он есть. кроме ReadProcessMemory есть и другие способы прочитать память процесса, они сложнее. есть и возможность скрытно загрузить dll в процесс и скрыть её вообще от всего, только это тоже сложно и сам процесс скрытия может детектироваться.


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

p1cador
08.12.2016, 13:05
@kiceargy (https://www.blast.hk/members/106749/), OpenFileDialog

FYP
08.12.2016, 18:56
Не работает эта функция, на MSDN не чего нету,


если что-то не работает у тебя, это не значит, что оно не работает вовсе.

Dark_Knight
08.12.2016, 23:49
Логируй что возращает GetOpenFileNameW и MoveFile

DarkP1xel
09.12.2016, 13:34
Это понятно... Вопрос как логировать


Лучше не занимайся этим.

p1cador
10.12.2016, 03:59
Очень нубский вопрос: максимум, к примеру, может быть 32 игрока, т.е. 32 объекта структуры игрока. Читаю циклом все. Если какого-то игрока нет, то игру нахер крашит. Как попытаться прочитать значение по опред. адресу?

Например, в client_dll + 0x4AC5E94 лежит моя стр-ра, дальше по адресам client_dll + 0x4AC5E94+ 0x10*iнаходятся стр-ры других игроков. Пробовал проверять через иф, не помогает вроде, да и хз, должно ли.

Пробовал что-то такое:

C++:





[CODE]
for
(
short
i
(
0
)
;
i



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




https://pp.vk.me/c636217/v636217232/35ffa/YrdO99kMUOc.jpg

Dark_Knight
10.12.2016, 10:08
Получай сначала количество игроков на сервере. Потом уже юзай цикл.

p1cador
10.12.2016, 11:00
Получай сначала количество игроков на сервере. Потом уже юзай цикл.


Хотел так сделать, но там, вроде, не всегда адресация по порядку идет

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

FYP
10.12.2016, 11:35
if (client_dll + 0x4AC5E94 + 0x10 * i != NULL)


if (*(intptr_t*)(client_dll + 0x4AC5E94 + 0x10 * i) != NULL)

советую повыпиливать всю эту хуету с оффсетами и заменить их структурами и массивами - это избавит от лишней головной боли.

а для каких-то отдельных значений можно использовать, например, такое: https://gist.github.com/THE-FYP/81d68e85a198b01b911ff6aa7197910b (https://www.blast.hk/redirect/aHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vVEhFLUZZUC84MWQ2OG U4NWExOThiMDFiOTExZmY2YWE3MTk3OTEwYg)

D3structoR
20.12.2016, 18:54
[m0d sa]При телепортировании ко всем игрокам цикл находит только ид 0. В чем проблема может быть?

BlackKnigga
20.12.2016, 19:29
[m0d sa]При телепортировании ко всем игрокам цикл находит только ид 0. В чем проблема может быть?


Код

p1cador
25.12.2016, 02:59
Как проверить кнопку на однократное нажатие?

Желательно без огромных хуков клавиатуры.