PDA

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


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

CarLCas
25.02.2016, 19:11
Не понял, что за переменная counti, что с ней делать?


Ошибся, не "counti",a "count". Каждый раз когда скин походит, она инкримируется, и в последствии у тебя будет количество людей с нужными скинами

return
25.02.2016, 21:19
Почему то так, выводит только первый скин, 102.

103 и 104 не выводит.



Я бы заменил на:

C++:






if
(
g_Players
->
pRemotePlayer
[
i
]
->
pPlayerData
->
pSAMP_Actor
->
pGTA_Ped
->
base
.
model_alt_id
>
102
&&
g_Players
->
pRemotePlayer
[
i
]
->
pPlayerData
->
pSAMP_Actor
->
pGTA_Ped
->
base
.
model_alt_id

PrintShadow
(
1
,
pPresentParam
.
BackBufferHeight
/
2
+
count
*
20
,
color
,
text
)
;
count
++
;
}

CarLCas
25.02.2016, 21:29
Почему то так, выводит только первый скин, 102.
103 и 104 не выводит.


Он выводит только 103 скин, я писал не так. У меня вместо 102 в коде 101, а вместо 104 - 105. А в случае как ты написал, надо было бы в условии сделать вместо знаков ">" "=" "

return
26.02.2016, 19:54
в исходнике соба нет структуры stSAMPMisc

в структуре есть iRaceCheckpointEnabled и vecRaceCheckpointPos, чем их можно заменить?

san0
02.03.2016, 02:57
Как сделать проверку на ЗАЖАТИЕ клавиши? Пока клавишу держат опущенной, то программа работает, когда отпускают - перестаёт работать.


SF->getGame()->isKeyDown()

or

GetAsyncKeyState() != NULL

Ice
12.03.2016, 09:33
как проверить, если пикап уже подобрали?

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

Vasiliy77
12.03.2016, 22:52
Пробую написать значит прогу для начала у виде ехе файла, чтобы можно было удобней проверять написанное. Прога должна находить с памяти gta-sa.exe динамический адрес айпи. С помощью видеоуроков на ютубе и Cheat Engine я сделал приблизительно что нужно мне:





// В файле класса:

DWORD Anticheat::ReadPointer(DWORD base, DWORD* offsets, int count)

{

for (int i = 0; i Open();

printf("PID: %x\n\n", mem->getPID());

DWORD offsets[] = { 0x021A0F8, 0x20 };

DWORD addressdllsamp = 0x05180000;// адрес samp.dll

DWORD ammoadr = mem->ReadPointer(addressdllsamp, offsets, 2);

printf("Adress: 0x%x / value = %s\n\n", ammoadr, mem->Read(ammoadr, 15).toStringA());// 15 - величина nick`a + 1

system("PAUSE");

}[/I]



Здесь система получает динамический адресс значения "айпи сервера", через оффсеты и поинты.

Если в уже открытом процессе менять айпи, то в консоль выводит ее правильно. Но если перезапустить процесс, то в CE вижу что в samp.dll уже другой адрес, и в итоге в консоли ничего нет. Помогите вот, нужно такое же сделать, только уже для samp.dll, тоесть узнать поинт и оффсеты смещения в памяти адреса dll-лки.






http://www.cyberforum.ru/attachments/660889d1457693750

FYP
13.03.2016, 12:14
@Vasiliy77 (https://www.blast.hk/members/62479/), тебе нужно получить базовый адрес модуля в процессе.

это можно сделать с помощью такой функции:

C++:






#include
#include
HMODULE
getModuleHandleRemote
(
DWORD processId
,
const
char
*
moduleName
)
{
HANDLE snap
=
CreateToolhelp32Snapshot
(
TH32CS_SNAPMODULE
,
processId
)
;
if
(
snap
==
INVALID_HANDLE_VALUE
)
return
NULL
;
MODULEENTRY32 moduleEntry
;
moduleEntry
.
dwSize
=
sizeof
(
moduleEntry
)
;
bool
found
=
Module32First
(
snap
,
&
moduleEntry
)
==
TRUE
;
while
(
found
)
{
if
(
stricmp
(
moduleEntry
.
szModule
,
moduleName
)
==
0
)
return
CloseHandle
(
snap
)
,
moduleEntry
.
hModule
;
found
=
Module32Next
(
snap
,
&
moduleEntry
)
==
TRUE
;
}
CloseHandle
(
snap
)
;
return
NULL
;
}

Gabriel__
15.03.2016, 14:26
Почему не работает!!!

Это все изза дибильной функции stricmp которая не сравнивает две строки если они одинаковые. (код отлаживал)

Код:






#include
#include
....
DWORD GetPID(const char * m_pName)
{
DWORD m_pID = 0;
HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
PROCESSENTRY32 pInfo;
pInfo.dwSize = sizeof(PROCESSENTRY32);

if (Process32First(snapshot, &pInfo))
{
while (Process32Next(snapshot, &pInfo))
{
if ( !stricmp( (const char *) m_pName, (const char *) pInfo.szExeFile) )
{
m_pID = pInfo.th32ProcessID;
CloseHandle(snapshot);
return m_pID;
}
}
}
CloseHandle(snapshot);
return m_pID;
}
....
GetPID("smss.exe");

itsLegend
15.03.2016, 15:57
И что именно не работает? Я скомпилил, норм всё.

Vasiliy77
15.03.2016, 15:58
Почему не работает!!!
Это все изза дибильной функции stricmp которая не сравнивает две строки если они одинаковые. (код отлаживал)

Код:






#include
#include
....
DWORD GetPID(const char * m_pName)
{
DWORD m_pID = 0;
HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
PROCESSENTRY32 pInfo;
pInfo.dwSize = sizeof(PROCESSENTRY32);
.................






Код:






void GetPID()
{
HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
PROCESSENTRY32 pInfo;// тут хранится запись о текущем процессе
pInfo.dwSize = sizeof(PROCESSENTRY32);// размер структуры записи текущего процесса

if (Process32First(snapshot, &pInfo))
{
while (Process32Next(snapshot, &pInfo))
{
if (_stricmp(m_pName, pInfo.szExeFile) == 0)
{
m_pID = pInfo.th32ProcessID;
CloseHandle(snapshot);
return;
}
}
}
CloseHandle(snapshot);
m_pID = 0;
}
void Open(DWORD accessRights)
{
GetPID();
m_hProc = OpenProcess(accessRights, false, m_pID);
}
DWORD getPID(){ return m_pID; }

Vasiliy77
15.03.2016, 16:01
@Vasiliy77 (https://www.blast.hk/members/62479/), тебе нужно получить базовый адрес модуля в процессе.
это можно сделать с помощью такой функции:

C++:






#include
#include
HMODULE
getModuleHandleRemote
(
DWORD processId
,
const
char
*
moduleName
)
{
HANDLE snap
=
CreateToolhelp32Snapshot
(
TH32CS_SNAPMODULE
,
processId
)
;
if
(
snap
==
INVALID_HANDLE_VALUE
)
return
NULL
;
MODULEENTRY32 moduleEntry
;
moduleEntry
.
dwSize
=
sizeof
(
moduleEntry
)
;
bool
found
=
Module32First
(
snap
,
&
moduleEntry
)
==
TRUE
;
while
(
found
)
{
if
(
stricmp
(
moduleEntry
.
szModule
,
moduleName
)
==
0
)
return
CloseHandle
(
snap
)
,
moduleEntry
.
hModule
;
found
=
Module32Next
(
snap
,
&
moduleEntry
)
==
TRUE
;
}
CloseHandle
(
snap
)
;
return
NULL
;
}





Спасибо, все получилось. А как можно узнать какие клео скрипты уже загружены в память? В каком участке памяти это есть? Нужны особенно те скрипты, которые делают WriteMemory в процесс.

Goldfish
16.03.2016, 16:07
подскажите плиз где найти задачки с примерами среднего уровня по ООП C++

Dark_Knight
16.03.2016, 17:00
подскажите плиз где найти задачки с примерами среднего уровня по ООП C++


Гугл)))

Gabriel__
16.03.2016, 18:12
И что именно не работает? Я скомпилил, норм всё.


Сказал же _stricmp нихрена не работает! Строки одинаковые но выдает что они разные!

http://s017.radikal.ru/i434/1603/47/d77b4138d112.jpg

Наверное это все изза вот такого преобразования

_stricmp(m_pName, (char *) pInfo.szExeFile) == 0

Без вот этого ---

Ошибка компиляции.

error C2664: _stricmp: невозможно преобразовать параметр 2 из "WCHAR [260]" в "const char *"

Код:






DWORD GetPID()
{
DWORD m_pID = 0;
char * m_pName = "smss.exe";

HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
PROCESSENTRY32 pInfo;// тут хранится запись о текущем процессе
pInfo.dwSize = sizeof(PROCESSENTRY32);// размер структуры записи текущего процесса

if (Process32First(snapshot, &pInfo))
{
while (Process32Next(snapshot, &pInfo))
{
if (_stricmp(m_pName, (char *) pInfo.szExeFile) == 0)
{
m_pID = pInfo.th32ProcessID;
CloseHandle(snapshot);
return m_pID;
}
}
}
CloseHandle(snapshot);
return m_pID;
}

itsLegend
16.03.2016, 22:39
В свойствах проекта установи набор символов из многобайтовой кодировки.

Goldfish
16.03.2016, 23:17
Гугл)))


спасибо что напомнил :mda:

Gabriel__
17.03.2016, 13:24
Как проверить что хендл или указатель рабочие ? Тоесть на что они указывают существует.

Dark_Knight
17.03.2016, 14:27
!= null(nullptr)

01EG
20.03.2016, 14:00
Извините прям, ну вот совсем за такой уебанский вопрос. Что нужно добавлять в исходник кода, чтоб консоль не закрывалась сразу после выполнения кода. Т.е. даже самый простой пример, я вывожу текст Hello, World ! И даже не успеваю его прочитать, как консоль закрывается. Или считаю числа и не успеваю посмотреть ответ между подсчетами. Короче сабж.

Пример кода:




C++:






#include "stdafx.h"
#include
int
main
(
)
{
std
::
cout
>
v1
>>
v2
;
std
::
cout




Код все норм дебажится и запускается консоль.

Вот кстати код дебага:




Код:





[CODE]
'ConsoleApplication1.exe' (Win32): Loaded 'C:\Users\Oleg\Documents\Visual Studio 2013\Projects\ConsoleApplication1\Debug\ConsoleApp lication1.exe'. Symbols loaded.
'ConsoleApplication1.exe' (Win32): Loaded 'C:\Windows\System32\ntdll.dll'. Cannot find or open the PDB file.
'ConsoleApplication1.exe' (Win32): Loaded 'C:\Windows\System32\kernel32.dll'. Cannot find or open the PDB file.
'ConsoleApplication1.exe' (Win32): Loaded 'C:\Windows\System32\KernelBase.dll'. Cannot find or open the PDB file.
'ConsoleApplication1.exe' (Win32): Loaded 'C:\Windows\System32\msvcp120d.dll'. Cannot find or open the PDB file.
'ConsoleApplication1.exe' (Win32): Loaded 'C:\Windows\System32\msvcr120d.dll'. Cannot find or open the PDB file.
The program '[3384] ConsoleApplication1.exe' has exited with code 0 (0x0).







P.S. Microsoft Visual Studio 2013 (последний Pack)

BlackKnigga
20.03.2016, 14:08
Извините прям, ну вот совсем за такой уебанский вопрос. Что нужно добавлять в исходник кода, чтоб консоль не закрывалась сразу после выполнения кода. Т.е. даже самый простой пример, я вывожу текст Hello, World ! И даже не успеваю его прочитать, как консоль закрывается. Или считаю числа и не успеваю посмотреть ответ между подсчетами. Короче сабж.
Пример кода:



C++:






#include "stdafx.h"
#include
int
main
(
)
{
std
::
cout
>
v1
>>
v2
;
std
::
cout




Код все норм дебажится и запускается консоль.
Вот кстати код дебага:



Код:





[CODE]
'ConsoleApplication1.exe' (Win32): Loaded 'C:\Users\Oleg\Documents\Visual Studio 2013\Projects\ConsoleApplication1\Debug\ConsoleApp lication1.exe'. Symbols loaded.
'ConsoleApplication1.exe' (Win32): Loaded 'C:\Windows\System32\ntdll.dll'. Cannot find or open the PDB file.
'ConsoleApplication1.exe' (Win32): Loaded 'C:\Windows\System32\kernel32.dll'. Cannot find or open the PDB file.
'ConsoleApplication1.exe' (Win32): Loaded 'C:\Windows\System32\KernelBase.dll'. Cannot find or open the PDB file.
'ConsoleApplication1.exe' (Win32): Loaded 'C:\Windows\System32\msvcp120d.dll'. Cannot find or open the PDB file.
'ConsoleApplication1.exe' (Win32): Loaded 'C:\Windows\System32\msvcr120d.dll'. Cannot find or open the PDB file.
The program '[3384] ConsoleApplication1.exe' has exited with code 0 (0x0).






P.S. Microsoft Visual Studio 2013 (последний Pack)


Инклудь cstdlib и в конец System("Pause");

01EG
20.03.2016, 15:40
Инклудь cstdlib и в конец System("Pause");


Бесит, что в учебнике не сказано, так делать. После таких глупостей, просто хочеться плюнуть в лицо автору учебника. Просто после таких ошибок, ты сидишь и думаешь, какого фига консоль закрывается ? Вроде бы все хорошо написал в коде, но бац тут такая фигня, автор учебника просто забыл сказать это. Учебник 2013.

В любом случаи спасибо за помощь.

Gabriel__
20.03.2016, 15:45
_getch() - Файл conio.h

system("pause") - Файл iostream для VS

system("pause") - Файл cstdlib для GCC

Tray228
20.03.2016, 17:24
Можно ли сделать сканер файлов?

kraft1k
20.03.2016, 19:04
как подключится к процессу dll ? На подобии CE

Woofing Giraffe
21.03.2016, 00:40
Глупый вопрос, но почему компилятор ругается? И как можно сделать по другому?

Код:






size_t test = strlen(NickLexem);
char Trash[test];

Dark_Knight
21.03.2016, 00:45
Глупый вопрос, но почему компилятор ругается? И как можно сделать по другому?

Код:






size_t test= strlen(NickLexem);
char Trash[test];





char *cha = (char *)malloc(test);

Tray228
23.03.2016, 00:52
Кто нибудь работал с трейнерами cs go или warface (на С++) отпишите мне в лс пожалуйста.

Gabriel__
23.03.2016, 18:56
Как записать значение в память ? Например мне нужно записать значение размеров в 8 байт как мне это сделать ?

Dark_Knight
23.03.2016, 19:29
*(DWORD *)0xFFFFFFFF = 0xFFFFFFFF

Gabriel__
23.03.2016, 19:44
DWORD имеет размер 4.

Как это будет выглядить в c++ ?

0A8C: write_memory 0x747FB6 size 1 value 16843009 virtual_protect 0

0A8C: write_memory 0x74805A size 1 value 16843009 virtual_protect 0

0A8C: write_memory 0x74542B size 8 value -1869574000 virtual_protect 0

Dark_Knight
23.03.2016, 21:07
Код в клео неверный. В первой и второй строке у тебя точно значение не в байтах.

Третья строка вот тебе.

*(double *)0x74542B = -1869574000

Gabriel__
24.03.2016, 15:36
Как через Switch создавать объекты с одинаковыми названиями но разными типами ?

Код:






switch (params->packetId)
{
case PacketEnumeration::ID_WEAPONS_UPDATE:
return false;
case PacketEnumeration::ID_PLAYER_SYNC:
stOnFootData *data = new stOnFootData;
break;
case PacketEnumeration::ID_VEHICLE_SYNC:
stInCarData *data = new stInCarData;
break;
case PacketEnumeration::ID_PASSENGER_SYNC:
stPassengerData *data = new stPassengerData;
break;
default:
return true;
}
memset(data, 0, sizeof (data) ); // обнуляем

SR_team
24.03.2016, 15:59
DWORD имеет размер 4.
Как это будет выглядить в c++ ?
0A8C: write_memory 0x747FB6 size 1 value 16843009 virtual_protect 0
0A8C: write_memory 0x74805A size 1 value 16843009 virtual_protect 0
0A8C: write_memory 0x74542B size 8 value -1869574000 virtual_protect 0


В клео вроде нельзя больше 4х байт писать.

Gabriel__
24.03.2016, 16:01
Как опростить этот говнокод ? Т.е Switch создать объект нужной структуры.

Код:






switch (params->packetId)
{
case PacketEnumeration::ID_PLAYER_SYNC:
stOnFootData data; // определяем объект в который сохраним отправляемые данные
memset(&data, 0, sizeof(stOnFootData)); // обнуляем
byte packet;
params->bitStream->ResetReadPointer(); // на всякий случай устанавливаем оффсет чтения на начало
params->bitStream->Read(packet); // читаем ID пакета
params->bitStream->Read((PCHAR)&data, sizeof(stOnFootData)); // читаем отправляемые данные
params->bitStream->ResetReadPointer(); // снова обнуляем оффсет чтения
data.byteCurrentWeapon = 0;
params->bitStream->ResetWritePointer(); // обнуляем оффсет записи
params->bitStream->Write(packet); // пишем ид пакета
params->bitStream->Write((PCHAR)&data, sizeof(stOnFootData)); // пишем обновленные данные
break;
case PacketEnumeration::ID_VEHICLE_SYNC:
stInCarData data; // определяем объект в который сохраним отправляемые данные
memset(&data, 0, sizeof(stInCarData)); // обнуляем
byte packet;
params->bitStream->ResetReadPointer(); // на всякий случай устанавливаем оффсет чтения на начало
params->bitStream->Read(packet); // читаем ID пакета
params->bitStream->Read((PCHAR)&data, sizeof(stInCarData)); // читаем отправляемые данные
params->bitStream->ResetReadPointer(); // снова обнуляем оффсет чтения
data.byteCurrentWeapon = 0;
params->bitStream->ResetWritePointer(); // обнуляем оффсет записи
params->bitStream->Write(packet); // пишем ид пакета
params->bitStream->Write((PCHAR)&data, sizeof(stInCarData)); // пишем обновленные данные
break;
case PacketEnumeration::ID_PASSENGER_SYNC:
stPassengerData data; // определяем объект в который сохраним отправляемые данные
memset(&data, 0, sizeof(stPassengerData)); // обнуляем
byte packet;
params->bitStream->ResetReadPointer(); // на всякий случай устанавливаем оффсет чтения на начало
params->bitStream->Read(packet); // читаем ID пакета
params->bitStream->Read((PCHAR)&data, sizeof(stPassengerData)); // читаем отправляемые данные
params->bitStream->ResetReadPointer(); // снова обнуляем оффсет чтения
data.byteCurrentWeapon = 0;
params->bitStream->ResetWritePointer(); // обнуляем оффсет записи
params->bitStream->Write(packet); // пишем ид пакета
params->bitStream->Write((PCHAR)&data, sizeof(stPassengerData)); // пишем обновленные данные
break;
default:
}
return true;

};

Dark_Knight
24.03.2016, 16:08
Никак, но можно создать определенные функции в которые можно передавать ид пакета указатель на битстрим.

Gabriel__
24.03.2016, 16:32
А как создать такую переменную которая будет хранить класс или структуру а потом через эту переменную создать объект.

Вот что то типо такого

myClass = &stOnFootData;

myclass * obj = new myClass;

Dark_Knight
24.03.2016, 16:43
Создаешь обьект своей структуры и не паришься.

Gabriel__
24.03.2016, 16:46
Не получится так. Компилятор выдаст ошибку что объект уже создан.

Dark_Knight
24.03.2016, 16:57
Ну тогда в чем проблема? Опиши, что тебе надо сделать.

Gabriel__
24.03.2016, 17:08
Хук который будет ловить исходящие пакеты. В Switch'е он будет создавать объект нужной структуры stOnFootData, stInCarData. И слудующий код будет ставить им значения скорости например. А то без этого пулучится такая хрень типо для каждой структуры будет такая хрень.

Код:






switch (params->packetId)
{
case PacketEnumeration::ID_PLAYER_SYNC:
stOnFootData data; // определяем объект в который сохраним отправляемые данные
memset(&data, 0, sizeof(stOnFootData)); // обнуляем
byte packet;
params->bitStream->ResetReadPointer(); // на всякий случай устанавливаем оффсет чтения на начало
params->bitStream->Read(packet); // читаем ID пакета
params->bitStream->Read((PCHAR)&data, sizeof(stOnFootData)); // читаем отправляемые данные
params->bitStream->ResetReadPointer(); // снова обнуляем оффсет чтения
data.byteCurrentWeapon = 0;
params->bitStream->ResetWritePointer(); // обнуляем оффсет записи
params->bitStream->Write(packet); // пишем ид пакета
params->bitStream->Write((PCHAR)&data, sizeof(stOnFootData)); // пишем обновленные данные
break;
case PacketEnumeration::ID_VEHICLE_SYNC:
stInCarData data; // определяем объект в который сохраним отправляемые данные
memset(&data, 0, sizeof(stInCarData)); // обнуляем
byte packet;
params->bitStream->ResetReadPointer(); // на всякий случай устанавливаем оффсет чтения на начало
params->bitStream->Read(packet); // читаем ID пакета
params->bitStream->Read((PCHAR)&data, sizeof(stInCarData)); // читаем отправляемые данные
params->bitStream->ResetReadPointer(); // снова обнуляем оффсет чтения
data.byteCurrentWeapon = 0;
params->bitStream->ResetWritePointer(); // обнуляем оффсет записи
params->bitStream->Write(packet); // пишем ид пакета
params->bitStream->Write((PCHAR)&data, sizeof(stInCarData)); // пишем обновленные данные
break;
case PacketEnumeration::ID_PASSENGER_SYNC:
stPassengerData data; // определяем объект в который сохраним отправляемые данные
memset(&data, 0, sizeof(stPassengerData)); // обнуляем
byte packet;
params->bitStream->ResetReadPointer(); // на всякий случай устанавливаем оффсет чтения на начало
params->bitStream->Read(packet); // читаем ID пакета
params->bitStream->Read((PCHAR)&data, sizeof(stPassengerData)); // читаем отправляемые данные
params->bitStream->ResetReadPointer(); // снова обнуляем оффсет чтения
data.byteCurrentWeapon = 0;
params->bitStream->ResetWritePointer(); // обнуляем оффсет записи
params->bitStream->Write(packet); // пишем ид пакета
params->bitStream->Write((PCHAR)&data, sizeof(stPassengerData)); // пишем обновленные данные
break;
default:
}
return true;

};

Dark_Knight
24.03.2016, 17:22
Ну так у тебя верный код. Какие проблемы с ним?

Gabriel__
24.03.2016, 17:26
Это не код а говнокод. Нужно исправить. Он очень большой.

AWRage
24.03.2016, 17:35
Делал кто функции с переменным числом параметров? Хочу создать свою функцию логгирования данных, но не знаю как реализовать это. Делал кто такое?

Вот что хочу:

C++:






void
Log
(
char
*
String
,
.
.
.
)
{
char
out
[
1024
]
;
//sprintf(out, String, ... /*параметры*/);
va_list ap
;
va_start
(
ap
,
pText
)
;
sprintf
(
out
,
String
,
ap
)
}




Идея заключается в том, чтобы передать в sprintf список параметров из функции Log. Как это можно сделать? Отправить туда адрес, указатель или что? Теоретически это возможно, но я не знаю как это реализовать.

MISTER_GONWIK
24.03.2016, 18:27
Делал кто функции с переменным числом параметров? Хочу создать свою функцию логгирования данных, но не знаю как реализовать это. Делал кто такое?

Вот что хочу:

C++:






void
Log
(
char
*
String
,
.
.
.
)
{
char
out
[
1024
]
;
//sprintf(out, String, ... /*параметры*/);
va_list ap
;
va_start
(
ap
,
pText
)
;
sprintf
(
out
,
String
,
ap
)
}




Идея заключается в том, чтобы передать в sprintf список параметров из функции Log. Как это можно сделать? Отправить туда адрес, указатель или что? Теоретически это возможно, но я не знаю как это реализовать.


идёшь в собейт и смотришь как там реализовано

AWRage
24.03.2016, 19:45
идёшь в собейт и смотришь как там реализовано


Спасибо, нашёл. Почему то думал, что там немного другая система.

Gabriel__
24.03.2016, 19:58
Как пользоваться GetPrivateProfileInt.

Это не работает int buffer = GetPrivateProfileInt((LPCWSTR)"Section", (LPCWSTR)"Key", 0, (LPCWSTR)"Config");

И нахуя её надо LPCWSTR че её const char не устраивает.

Dark_Knight
24.03.2016, 20:15
Читай справку на MSDN

dimoz
26.03.2016, 23:08
Подскажите, пожалуйста.

Нахожу данные о чекпоинте:

Код:






struct checkpoint *cp = (struct checkpoint *)0x00C7F158;




Нужно найти его тип, но его нет в структуре. Я узнал, что смещение (byte)+0 - это и есть тип чекпоинта, но когда делаю такое:

Код:






struct checkpoint *cp = (struct checkpoint *)0x00C7F158;
SF->getSAMP()->getChat()->AddChatMessage(0x808080, "%d", cp);




... выдает хуету.

Есть идеи?

Dark_Knight
27.03.2016, 00:20
В цикле перебирал?

dimoz
28.03.2016, 14:35
В цикле перебирал?


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

В struct checkpoint есть радиус, координаты и прочее, но нет типа чекпоинта, на который смещение +0.

Или имеется ввиду перебрать адреса какие-то?

Gabriel__
28.03.2016, 15:07
Гоночных чекпоинтов можно создать несколько. Только нигде так не делают.

Dark_Knight
28.03.2016, 15:27
Я, наверное, неправильно выразился. У меня структура гоночного чекпоинта, он может быть только один.
В struct checkpoint есть радиус, координаты и прочее, но нет типа чекпоинта, на который смещение +0.
Или имеется ввиду перебрать адреса какие-то?


Они в пуле идут, если память не изменяет.

Dark_Knight
28.03.2016, 15:28
Они в пуле идут, если память не изменяет.


Собственно вот.

https://yadi.sk/i/M4iivoFGqXu8b (https://www.blast.hk/redirect/aHR0cHM6Ly95YWRpLnNrL2kvTTRpaXZvRkdxWHU4Yg)

Woofing Giraffe
30.03.2016, 21:13
Как работают подобные сайты? (https://www.blast.hk/redirect/aHR0cDovL29ubGluZXNpbS5ydS8) (Не реклама)

Возможно ли сделать что то подобное чисто для себя?

QGate
30.03.2016, 22:55
Как взять строку из чата и проверить ее на наличие ключевого слова? Для SF надо.

Woofing Giraffe
30.03.2016, 23:34
Как взять строку из чата и проверить ее на наличие ключевого слова? Для SF надо.


Хукаешь RPC_ScrClientMessage и strstr

QGate
30.03.2016, 23:42
Хукаешь RPC_ScrClientMessage и strstr


чет сложно) Можно подробней?

Woofing Giraffe
30.03.2016, 23:43
чет сложно) Можно подробней?


https://www.blast.hk/wiki/tutorials:api_lesson_raknet

Vasiliy77
31.03.2016, 00:10
Почему при каждом запуске консоли значение адреса всегда разное, а в Cheat Engine оно не меняется? Код прилагаю ниже.




C++:






DWORD offsets
[
]
=
{
0x6FCF3
}
;
// смещение
DWORD addressdllsamp
=
(
DWORD
)
getModuleHandleRemote
(
PID
,
"samp.dll"
)
;
// адрес samp.dll
DWORD ippointer1
=
mem
->
ReadPointer
(
addressdllsamp
,
offsets
,
1
)
;
printf
(
"Address samp.dll [2]: 0x%x \n=====================\n"
,
addressdllsamp
)
;
printf
(
"[2] Adress: 0x%x / value = %d\n"
,
ippointer1
,
mem
->
Read
(
ippointer1
,
16
)
)
;
// ВОТ ТУТ value = всегда разное число




C++:






HMODULE AC
::
getModuleHandleRemote
(
DWORD processId
,
const
char
*
moduleName
)
{
HANDLE snap
=
CreateToolhelp32Snapshot
(
TH32CS_SNAPMODULE
,
processId
)
;
if
(
snap
==
INVALID_HANDLE_VALUE
)
return
NULL
;
MODULEENTRY32 moduleEntry
;
moduleEntry
.
dwSize
=
sizeof
(
moduleEntry
)
;
bool
found
=
Module32First
(
snap
,
&
moduleEntry
)
==
TRUE
;
while
(
found
)
{
if
(
strcmp
(
moduleEntry
.
szModule
,
moduleName
)
==
0
)
return
CloseHandle
(
snap
)
,
moduleEntry
.
hModule
;
found
=
Module32Next
(
snap
,
&
moduleEntry
)
==
TRUE
;
}
CloseHandle
(
snap
)
;
return
NULL
;
}




C++:





[CODE]
DWORD AC
::
ReadPointer
(
DWORD base
,
DWORD
*
offsets
,
int
count
)
{
for
(
int
i
=
0
;
i

QGate
31.03.2016, 23:09
1. Как можно поворачивать игрока?

2. Как можно удобней записать 72 точки телепорта, содержащие 3 координаты каждая?

SR_team
31.03.2016, 23:21
Почему при каждом запуске консоли значение адреса всегда разное, а в Cheat Engine оно не меняется? Код прилагаю ниже.




C++:






DWORD offsets
[
]
=
{
0x6FCF3
}
;
// смещение
DWORD addressdllsamp
=
(
DWORD
)
getModuleHandleRemote
(
PID
,
"samp.dll"
)
;
// адрес samp.dll
DWORD ippointer1
=
mem
->
ReadPointer
(
addressdllsamp
,
offsets
,
1
)
;
printf
(
"Address samp.dll [2]: 0x%x \n=====================\n"
,
addressdllsamp
)
;
printf
(
"[2] Adress: 0x%x / value = %d\n"
,
ippointer1
,
mem
->
Read
(
ippointer1
,
16
)
)
;
// ВОТ ТУТ value = всегда разное число




C++:






HMODULE AC
::
getModuleHandleRemote
(
DWORD processId
,
const
char
*
moduleName
)
{
HANDLE snap
=
CreateToolhelp32Snapshot
(
TH32CS_SNAPMODULE
,
processId
)
;
if
(
snap
==
INVALID_HANDLE_VALUE
)
return
NULL
;
MODULEENTRY32 moduleEntry
;
moduleEntry
.
dwSize
=
sizeof
(
moduleEntry
)
;
bool
found
=
Module32First
(
snap
,
&
moduleEntry
)
==
TRUE
;
while
(
found
)
{
if
(
strcmp
(
moduleEntry
.
szModule
,
moduleName
)
==
0
)
return
CloseHandle
(
snap
)
,
moduleEntry
.
hModule
;
found
=
Module32Next
(
snap
,
&
moduleEntry
)
==
TRUE
;
}
CloseHandle
(
snap
)
;
return
NULL
;
}




C++:





[CODE]
DWORD AC
::
ReadPointer
(
DWORD base
,
DWORD
*
offsets
,
int
count
)
{
for
(
int
i
=
0
;
i







потому что CE использует оффсеты от начала модуля (например samp.dll + 1337)

SR_team
31.03.2016, 23:22
1. Как можно поворачивать игрока?
2. Как можно удобней записать 72 точки телепорта, содержащие 3 координаты каждая?



Через матрицу и структуру(только Z)

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

QGate
31.03.2016, 23:39
Через матрицу и структуру(только Z)


А можно подробней?

BlackKnigga
05.04.2016, 18:18
Как циклом for each перебрать элементы списка с конца?

Dark_Knight
05.04.2016, 19:11
std::vector vector;

vector.push_back("Хуй");

vector.push_back("Пизда");

vector.push_back("скоровода");

for(auto &it : vector)

{

SF->log(it.c_str());

}

Dark_Knight
05.04.2016, 22:08
Пиздю. Это с начала до конца.

BlackKnigga
05.04.2016, 22:16
Пиздю. Это с начала до конца.


Так я и не понял ничего%). А с циклом for что?

Dark_Knight
05.04.2016, 22:27
Так я и не понял ничего%). А с циклом for что?


Щас усё будет. Подожди

NarutoUA
05.04.2016, 22:47
C++:





[CODE]
vector

vec
=
{
1
,
2
,
3
,
4
,
5
}
;
std
::
reverse
(
vec
.
begin
(
)
,
vec
.
end
(
)
)
;
for
(
auto
&
i
:
vec
)
cout



Но лучше не выдумывать ***ни и делать через

C++:





[CODE]
for
(
int
j
=
vec
.
size
(
)
;
j
--
;
)
cout

BlackKnigga
05.04.2016, 22:47
Щас усё будет. Подожди


Да я уже придумал, спасибо.

[QUOTE="NarutoUA"]

Но лучше не выдумывать ***ни и делать через
for (int j = vec.size(); j--;)
cout

NarutoUA
05.04.2016, 22:56
Да я уже придумал, спасибо.

Кстать так и сделал.


ну так ты спрашивал о цикле for each, в С++ такого как в C# нет

Dark_Knight
05.04.2016, 23:00
Я пытался сделать через итераторы, но я нуб и не получилось :sad_frog:

Через реверс, все работает заебись.

https://yadi.sk/i/Plp7_K8cqmHuf (https://www.blast.hk/redirect/aHR0cHM6Ly95YWRpLnNrL2kvUGxwN19LOGNxbUh1Zg)

Плюсик твой))

NarutoUA
05.04.2016, 23:15
Я пытался сделать через итераторы, но я нуб и не получилось :sad_frog:



C++:





[CODE]
vector

vec
=
{
1
,
2
,
3
,
4
,
5
}
;
for
(
auto
it
=
vec
.
rbegin
(
)
;
it
!=
vec
.
rend
(
)
;
it
++
)
{
cout

Dark_Knight
05.04.2016, 23:26
Чуствовал, что надо было его еще потестить.

2Shae
06.04.2016, 00:06
Как достать уровень доступного спринта?

Dark_Knight
06.04.2016, 00:09
Как достать уровень доступного спринта?


Т.е. значение выносливости?

2Shae
06.04.2016, 00:14
Т.е. значение выносливости?


Ну да :D

Dark_Knight
06.04.2016, 00:25
float stamina = *(float *)0xB7CDB4;

Так же советую делить на 31.4701;

2Shae
06.04.2016, 00:31
float stamina = *(float *)0xB7CDB4;
Так же советую делить на 31.4701;


Благодарю.

zikekazil
08.04.2016, 22:02
Есть такая строка:

Код:






[Рация] Ivan_Ivanov[17]: тест




Как используя RegEx можно извлечь и ник, и сообщение (где "тест")? Перепробовал все, но чет не могу сам дойти до этого. :(

Dydaev
08.04.2016, 22:09
1. Как сделать админ чекер в m0d_sa?

2Shae
09.04.2016, 00:35
1. Как сделать админ чекер в m0d_sa?


https://www.blast.hk/threads/1549/

itsLegend
09.04.2016, 15:57
Есть такая строка:

Код:






[Рация] Ivan_Ivanov[17]: тест




Как используя RegEx можно извлечь и ник, и сообщение (где "тест")? Перепробовал все, но чет не могу сам дойти до этого. :(



Код:






([\\w]+)\\[(\\d+)\\]\\: ([^$]+)




Код:






Result of search: 1 match(-es)
Match #0: Ivan_Ivanov[17]: test
Match #1: Ivan_Ivanov
Match #2: 17
Match #3: test

Dark_Knight
09.04.2016, 16:05
Как по мне она у тебя кривая, легенд. Ты заюзал 2 слеша, а это уже ты ишешь символ \, а не слова. Так же такая регулярка не сможешь пропустить ники с символами.

Такие будут получше ловить

^\[Рация\] (.+)\[(\d+)\]\: ([А-Яа-я]+)$

^\[Рация\] (.+)\[(\d+)\]\: (.+)$

itsLegend
09.04.2016, 16:06
Хз как у тебя, но у меня VS жалуется на то, что без двух бэкслэшей.

Dark_Knight
09.04.2016, 16:19
Ставишь 2013 ВС с апдейтом 5 и не паришься.

zikekazil
09.04.2016, 18:05
спасибо, сделал как-то так:

Код:






std::string chatm = "[Рация] Ivan_Ivanov[17]: тест";
std::smatch chatres;
if (std::regex_match(chatm, chatres, std::regex(R"(^\[Рация\] (.+)\[(\d+)\]\: (.+)$)")))
SF->getSAMP()->getChat()->AddChatMessage(-1, "Ник: %s", chatres[1].str());




но после проверки всего этого в игре, происходит зависание. Смог вывести только "chatres" целиком, а не один его элемент. Почему так? :(

Dark_Knight
09.04.2016, 18:56
str().c_str() заюзай

Dydaev
11.04.2016, 17:07
Помогите исправить код, всё объявлено и код работает, но при активации телепортирует под землю и не замирает, то есть, если не поставить метку - в чат пишет, но самой телепортации не происходит, войд ниже.

Код:






void cheat_handle_coordmaster()

{

static int time=0;

if(cheat_state->_generic.coordmaster == 1) {

if(GetTickCount()-set.coord_time > time) {

if (*(int *)0xBA6774 != 0)

{

float mapPos[3];

for ( int i = 0; i GetWorld()->FindGroundZForPosition( mapPos[0], mapPos[1] ) + 2.0f;

float cpos[3] = {pPedSelf->GetPosition()->fX,pPedSelf->GetPosition()->fY,pPedSelf->GetPosition()->fZ};

char opa=0;

if(cpos[0] > mapPos[0]) {

if(cpos[0]-mapPos[0] > set.coord_distance) cpos[0] -= set.coord_distance;

else {

cpos[0] = mapPos[0];

opa++;

}

} else {

if(mapPos[0]-cpos[0] > set.coord_distance) cpos[0] += set.coord_distance;

else {

cpos[0] = mapPos[0];

opa++;

}

}

if(cpos[1] > mapPos[1]) {

if(cpos[1]-mapPos[1] > set.coord_distance) cpos[1] -= set.coord_distance;

else {

cpos[1] = mapPos[1];

opa++;

}

} else {

if(mapPos[1]-cpos[1] > set.coord_distance) cpos[1] += set.coord_distance;

else {

cpos[1] = mapPos[1];

opa++;

}

}

if(opa == 2) {

cpos[2] = mapPos[2];

cheat_state->_generic.coordmaster = 0;

GTAfunc_TogglePlayerControllable(0);

GTAfunc_LockActor(0);

}

else cpos[2] = pGameInterface->GetWorld()->FindGroundZForPosition( cpos[0], cpos[1] )-20;

cheat_teleport(cpos,0);

}

}

} else {

addMessageToChatWindow("Поставьте метку на карте!");

cheat_state->_generic.coordmaster = 0;

}

time = GetTickCount();

}

}

return;

}

AWRage
13.04.2016, 14:31
Решил создать .asi плагин. В DllMain в DLL_PROCESS_ATTACH создал поток и в главной функции этого потока написал самое простое, логирование строки "loop", но когда увидел лог, охуел. 155 mb за минуту работы плагина. Понятно, что с такой скоростью игра зависнет, если я буду добавлять функции. Как это решить, юзать Sleep(1); ?

C++:






void
Loop
(
LPVOID pArg
)
{
while
(
bThreadStatus
)
{
Log
(
"Loop"
)
;
}
_endthread
(
)
;
}

Dark_Knight
13.04.2016, 15:56
Не зависнет. И надо юзать таймеры, а не слипы.

AWRage
13.04.2016, 20:01
Не зависнет. И надо юзать таймеры, а не слипы.


Понял. Но появилась другая проблемка. Создал пустой проект, добавил DllMain, но появилась ошибка entry point must be defined. В настройках тип конфигурации dll, исходное расширение .asi. Искал в интернете, не нашёл ничего.

P.S. Где подчеркнуто, писал /ENTRY: DllMain, тоже не помогло.




http://i.imgur.com/u3rwYvw.png

Dark_Knight
13.04.2016, 20:15
http://www.cplusplus.com/forum/windows/58523/#msg315653 (https://www.blast.hk/redirect/aHR0cDovL3d3dy5jcGx1c3BsdXMuY29tL2ZvcnVtL3dpbmRvd3 MvNTg1MjMvI21zZzMxNTY1Mw)

AWRage
13.04.2016, 20:24
http://www.cplusplus.com/forum/windows/58523/#msg315653 (https://www.blast.hk/redirect/aHR0cDovL3d3dy5jcGx1c3BsdXMuY29tL2ZvcnVtL3dpbmRvd3 MvNTg1MjMvI21zZzMxNTY1Mw)


Там у него консольное приложение, где точка в хода main(). А мне нужно dll приложение, где роль точки входа отыгрывает DllMain, которая у меня есть, но компилить не хочет.

SR_team
13.04.2016, 23:52
Там у него консольное приложение, где точка в хода main(). А мне нужно dll приложение, где роль точки входа отыгрывает DllMain, которая у меня есть, но компилить не хочет.


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



_endthread();


он используется как return в void функциях, и в конце не обязателен

AWRage
14.04.2016, 15:35
в свойствах проекта выбери тип динамической библиотеки


Я компилил конфигурацией Debug, а настраивал конфигурацию Release.:pidrila:

AWRage
14.04.2016, 15:55
Как проверить, что игра загрузилась не используя GAME_API и SF_API?

CarLCas
14.04.2016, 16:56
Как проверить, что игра загрузилась не используя GAME_API и SF_API?


if (*(DWORD*)0xB6F5F0>0)

NarutoUA
14.04.2016, 17:31
*(DWORD*)0xC8D4C0 == 7;

AWRage
14.04.2016, 20:00
А что на счет сампа?

NarutoUA
14.04.2016, 20:04
А что на счет сампа?


g_SAMP != NULL

Vasiliy77
17.04.2016, 02:47
Вопрос по dll & asi, как определить вхождение в игру, т.е. момент появления чата после загрузки, чтобы туда отправить текст? И момент загрузки, когда картинка сампа появляется, для рендера текста. Без SF желательно.

SR_team
18.04.2016, 02:11
Вопрос по dll & asi, как определить вхождение в игру, т.е. момент появления чата после загрузки, чтобы туда отправить текст? И момент загрузки, когда картинка сампа появляется, для рендера текста. Без SF желательно.


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

Vasiliy77
18.04.2016, 19:37
Чекай его на строку загруженности сампа, это и будет тот момент, что ты хочешь поймать


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

C&J
19.04.2016, 19:10
Здравствуйте,не могли бы вы мне сказать:

1) Какие библиотека(и) служит(ат) для работы с Хуками в самп?

2) Как узнать какие параметры у данные RPCs?

Скрытое содержимое доступно для зарегистрированных пользователей!

Dark_Knight
19.04.2016, 21:13
1. СФ.

2. https://docs.google.com/spreadsheet/ccc?key=0AtKPKl8O9mGodFZESEp6WEdzcTB0U2V1ZkR0UWpub 1E#gid=1 (https://www.blast.hk/redirect/aHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vc3ByZWFkc2hlZXQvY2 NjP2tleT0wQXRLUEtsOE85bUdvZEZaRVNFcDZXRWR6Y1RCMFUy VjFaa1IwVVdwdWIxRSNnaWQ9MQ)

dimoz
23.04.2016, 03:30
Подскажите, пожалуйста, как в собейте реализован телепорт к поставленному игроком маркеру на карте?

Нужно перенести это дело в сф плагин.

CarLCas
23.04.2016, 05:59
Подскажите, пожалуйста, как в собейте реализован телепорт к поставленному игроком маркеру на карте?
Нужно перенести это дело в сф плагин.


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

dimoz
23.04.2016, 11:33
Получаешь координаты маркера на карте, получаешь по координатам высоту, телепортируешь игрока на эти координаты


В этом-то и вся загвоздка: не знаю, как получить координату маркера.

Woofing Giraffe
24.04.2016, 23:31
https://pp.vk.me/c628731/v628731695/506c0/ow5Nl_yzC8A.jpg

Что за фигня? Почему не устанавливается?

itsLegend
24.04.2016, 23:59
Откуда скачивал?

Woofing Giraffe
25.04.2016, 00:03
Откуда скачивал?


С оф. сайта Microsoft

Woofing Giraffe
25.04.2016, 00:20
Установил СДК, теперь это












https://pp.vk.me/c628731/v628731695/506de/ZGhDEt3jSQ4.jpg

AWRage
25.04.2016, 01:11
Вызываю функцию рисование текста в перехваченной End Scene - черный экран. Если вызвать в Present, то рисуется пока есть загрузочный экран, как только проходим этот этап - тоже черный экран.

C++:






if
(
pFont
==
NULL
)
D3DXCreateFont
(
pDevice
,
17
,
0
,
FW_BOLD
,
0
,
FALSE
,
DEFAULT_CHARSET
,
OUT_DEFAULT_PRECIS
,
ANTIALIASED_QUALITY
,
DEFAULT_PITCH
|
FF_DONTCARE
,
TEXT
(
"Arial"
)
,
&
pFont
)
;
PrintText
(
pFont
,
700
,
700
,
D3DCOLOR_ARGB
(
255
,
255
,
255
,
0
)
,
"Testing hook."
)
;




C++:






void
PrintText
(
ID3DXFont
*
pFont
,
int
X
,
int
Y
,
D3DCOLOR ARGB
,
LPCSTR Text
)
{
RECT Rect
;
Rect
.
left
=
X
;
Rect
.
right
=
1680
;
Rect
.
top
=
Y
;
Rect
.
bottom
=
Rect
.
top
+
200
;
pFont
->
DrawTextA
(
NULL
,
Text
,
-
1
,
&
Rect
,
DT_LEFT
,
ARGB
)
;
}

NarutoUA
25.04.2016, 01:18
Нужно настраивать RenderState до и после отрисовки.

Vasiliy77
25.04.2016, 01:58
Можно ли из готового ехе файла-чита вытянуть адреса памяти, значения которых он меняет? Каким способом?

И можно ли сделать AntTweakBar без использования SF? Мб какие-то библиотеки есть.

CarLCas
25.04.2016, 05:57
Можно ли из готового ехе файла-чита вытянуть адреса памяти, значения которых он меняет? Каким способом?
И можно ли сделать AntTweakBar без использования SF? Мб какие-то библиотеки есть.


ReadProcessMemory, WriteProcessMemory

AntTweakBar это отдельная библиотека, ты можешь её юзать не только с сф

AWRage
27.04.2016, 17:51
Чет ничего не пойму. Не рендерит. Может какие RenderStates установить нужно? p.s. вызываю перед end scene

C++:






D3DXVECTOR2 Vectors
[
2
]
;
Vectors
[
0
]
.
x
=
X1
;
Vectors
[
0
]
.
y
=
Y1
;
Vectors
[
1
]
.
x
=
X2
;
Vectors
[
1
]
.
y
=
Y2
;
D3DLine
->
SetWidth
(
Width
)
;
D3DLine
->
SetAntialias
(
false
)
;
D3DLine
->
SetGLLines
(
false
)
;
D3DLine
->
Begin
(
)
;
D3DLine
->
Draw
(
Vectors
,
2
,
ARGB
)
;
D3DLine
->
End
(
)
;

SR_team
27.04.2016, 18:48
Чет ничего не пойму. Не рендерит. Может какие RenderStates установить нужно? p.s. вызываю перед end scene

C++:






D3DXVECTOR2 Vectors
[
2
]
;
Vectors
[
0
]
.
x
=
X1
;
Vectors
[
0
]
.
y
=
Y1
;
Vectors
[
1
]
.
x
=
X2
;
Vectors
[
1
]
.
y
=
Y2
;
D3DLine
->
SetWidth
(
Width
)
;
D3DLine
->
SetAntialias
(
false
)
;
D3DLine
->
SetGLLines
(
false
)
;
D3DLine
->
Begin
(
)
;
D3DLine
->
Draw
(
Vectors
,
2
,
ARGB
)
;
D3DLine
->
End
(
)
;





ты не заменяй функцию, а заинжекться в оригинальную, после Begin() сделай вызов своей stdcall функции

woksonal
27.04.2016, 18:56
Установил СДК, теперь это UOTE]


попробуй поменять: проект - свойства - свойства конфигурации - набор инструментов платф.

AWRage
30.04.2016, 20:53
Почему пропадают объекты, которые я рисую, когда я скрываю чат. Вроде не должно..

Gabriel__
02.05.2016, 10:57
Как создать таймер который будет вызывать функцию каждый интервал ? ( Как таймеры в SAMPFUNCS в клео )

Dark_Knight
02.05.2016, 12:24
https://github.com/urShadow/TimerManager

MISTER_GONWIK
02.05.2016, 13:45
Нихрена не работает это не для Visual Studio. И вообще непонятно как работает. Придется отдельный поток создавать.


:facepalm:

AWRage
02.05.2016, 14:54
Вообщем, я хз почему, но когда в своей перехваченной функции Present я рисую текст и примитивы, то когда я скрываю чат или захожу в меню, текст остается, а примитивы исчезают. Как это решить? Вот функция рисования четырехугольника.

C++:






HRESULT CD3DRender
::
DrawBox
(
int
X
,
int
Y
,
int
W
,
int
H
,
D3DCOLOR ARGB
)
{
D3DVERTEX Vertices
[
6
]
;
Vertices
[
0
]
=
{
(
float
)
X
,
(
float
)
Y
,
1.0f
,
1.0f
,
ARGB
}
;
Vertices
[
1
]
=
{
(
float
)
X
+
W
,
(
float
)
Y
,
1.0f
,
1.0f
,
ARGB
}
;
Vertices
[
2
]
=
{
(
float
)
X
,
(
float
)
Y
+
H
,
1.0f
,
1.0f
,
ARGB
}
;
Vertices
[
3
]
=
{
(
float
)
X
,
(
float
)
Y
+
H
,
1.0f
,
1.0f
,
ARGB
}
;
Vertices
[
4
]
=
{
(
float
)
X
+
W
,
(
float
)
Y
,
1.0f
,
1.0f
,
ARGB
}
;
Vertices
[
5
]
=
{
(
float
)
X
+
W
,
(
float
)
Y
+
H
,
1.0f
,
1.0f
,
ARGB
}
;
DWORD FVF
;
m_D3DDevice
->
GetFVF
(
&
FVF
)
;
m_D3DStateNorm
->
Capture
(
)
;
m_D3DStateDraw
->
Apply
(
)
;
m_D3DDevice
->
SetFVF
(
D3DFVF_XYZRHW
|
D3DFVF_DIFFUSE
)
;
m_D3DDevice
->
DrawPrimitiveUP
(
D3DPT_TRIANGLELIST
,
2
,
&
Vertices
,
sizeof
(
D3DVERTEX
)
)
;
m_D3DDevice
->
SetFVF
(
FVF
)
;
m_D3DStateNorm
->
Apply
(
)
;
return
S_OK
;
}

AWRage
04.05.2016, 15:53
Можно как-то занопить функцию рисования клистов на карте? Как найти её?

SR_team
04.05.2016, 21:04
Можно как-то занопить функцию рисования клистов на карте? Как найти её?


можно альфа канал на 0 уебать

AWRage
04.05.2016, 22:03
можно альфа канал на 0 уебать


Можно, но в каком месте?)

Dark_Knight
05.05.2016, 14:08
Можно, но в каком месте?)


Через хук РПЦ. Хотя не уверен.

Stas07
05.05.2016, 16:58
http://gui.oldschoolhack.me/ (https://www.blast.hk/redirect/aHR0cDovL2d1aS5vbGRzY2hvb2xoYWNrLm1lLw) Что скажите насчет этого?

Dark_Knight
05.05.2016, 17:16
Судя по коду то подключить не сложно

Gabriel__
05.05.2016, 18:48
А для memcpy и memset обязательно снимать защиту памяти ? (VirtualProtect)

Vasiliy77
09.05.2016, 10:37
Как нужно переделать, чтобы выводило в "Test command with params" не только цифры, а и буквы? Сейчас цифры только.

C++:






void
cmd_findtext
(
char
*
szParams
)
{
addMessageToChat
(
0xFFFFFFFF
,
"Test command with params: "
%
s
""
,
szParams
)
;
}
void
addMessageToChat
(
D3DCOLOR cColor
,
char
*
szMsg
,
.
.
.
)
{
if
(
g_Chat
==
nullptr
)
return
;
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
)
;
if
(
szMsg
==
NULL
)
return
;
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
)
;
}

DarkExorcist
18.05.2016, 01:15
Как создать поток при подключении .dll, чтобы игру не крашнуло?

Код:






DWORD WINAPI tp (LPVOID);

DWORD APIENTRY DllMain (HMODULE hModule, DWORD ul_reason_for_call, LPVOID IpReserved)
{
switch(ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
CreateThread(NULL,NULL,tp,NULL,NULL,NULL);
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
}




Таким способом не получается, но нашел только его :(

Woofing Giraffe
18.05.2016, 09:09
Как создать поток при подключении .dll, чтобы игру не крашнуло?

Код:






DWORD WINAPI tp (LPVOID);

DWORD APIENTRY DllMain (HMODULE hModule, DWORD ul_reason_for_call, LPVOID IpReserved)
{
switch(ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
CreateThread(NULL,NULL,tp,NULL,NULL,NULL);
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
}




Таким способом не получается, но нашел только его :(


Не проще в main его создать?

SR_team
18.05.2016, 10:29
Как создать поток при подключении .dll, чтобы игру не крашнуло?

Код:






DWORD WINAPI tp (LPVOID);

DWORD APIENTRY DllMain (HMODULE hModule, DWORD ul_reason_for_call, LPVOID IpReserved)
{
switch(ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
CreateThread(NULL,NULL,tp,NULL,NULL,NULL);
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
}




Таким способом не получается, но нашел только его :(


_beginthread

DarkExorcist
18.05.2016, 16:48
Что делать, чтобы GetKeyState(); возвращала значение не равное 0, только когда нужная мне кнопка зажата? Просто условие продолжает работу до повторного нажатия Insert

Dark_Knight
18.05.2016, 19:49
getasynckeystate и цикл. Можно и булевую переменную создать и её в качестве проверке юзать.

Frixen
20.05.2016, 11:20
CLEO:






0AA2:
30@
= load_library
"samp.dll"
// IF and SET
0A8E:
1@
=
30@
+
457971
// int
0A8C:
write_memory
1@
size
4
value
24216591
virtual_protect
1
0A8E:
2@
=
1@
+
4
// int
0A8C:
write_memory
2@
size
2
value
0
virtual_protect
1
0A8E:
3@
=
30@
+
458004
// int
0A8C:
write_memory
3@
size
4
value
22053903
virtual_protect
1
0A8E:
4@
=
3@
+
4
// int
0A8C:
write_memory
4@
size
2
value
0
virtual_protect
1
0A8E:
5@
=
30@
+
458280
// int
0A8C:
write_memory
5@
size
2
value
16500
virtual_protect
1
0A8E:
6@
=
30@
+
462648
// int
0A8C:
write_memory
6@
size
2
value
24948
virtual_protect
1
0A8E:
7@
=
30@
+
462372
// int
0A8C:
write_memory
7@
size
4
value
24218127
virtual_protect
1
0A8E:
8@
=
7@
+
4
// int
0A8C:
write_memory
8@
size
2
value
0
virtual_protect
1
0AA3:
free_library
30@
0AB2:
ret
0




как это будет в C++

SR_team
20.05.2016, 12:44
CLEO:






0AA2:
30@
= load_library
"samp.dll"
// IF and SET
0A8E:
1@
=
30@
+
457971
// int
0A8C:
write_memory
1@
size
4
value
24216591
virtual_protect
1
0A8E:
2@
=
1@
+
4
// int
0A8C:
write_memory
2@
size
2
value
0
virtual_protect
1
0A8E:
3@
=
30@
+
458004
// int
0A8C:
write_memory
3@
size
4
value
22053903
virtual_protect
1
0A8E:
4@
=
3@
+
4
// int
0A8C:
write_memory
4@
size
2
value
0
virtual_protect
1
0A8E:
5@
=
30@
+
458280
// int
0A8C:
write_memory
5@
size
2
value
16500
virtual_protect
1
0A8E:
6@
=
30@
+
462648
// int
0A8C:
write_memory
6@
size
2
value
24948
virtual_protect
1
0A8E:
7@
=
30@
+
462372
// int
0A8C:
write_memory
7@
size
4
value
24218127
virtual_protect
1
0A8E:
8@
=
7@
+
4
// int
0A8C:
write_memory
8@
size
2
value
0
virtual_protect
1
0AA3:
free_library
30@
0AB2:
ret
0




как это будет в C++


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

Frixen
20.05.2016, 13:06
да почти также, но если sf плагин пишешь, то лучше готовыми структурами воспользуйся


можно пример?

SR_team
20.05.2016, 13:14
можно пример?


https://google.gik-team.com/?q=указатели+C++ (https://www.blast.hk/redirect/aHR0cHM6Ly9nb29nbGUuZ2lrLXRlYW0uY29tLz9xPSVEMSU4My VEMCVCQSVEMCVCMCVEMCVCNyVEMCVCMCVEMSU4MiVEMCVCNSVE MCVCQiVEMCVCOCtDJTJCJTJC)

https://google.gik-team.com/?q=работа+с+памятью+C++ (https://www.blast.hk/redirect/aHR0cHM6Ly9nb29nbGUuZ2lrLXRlYW0uY29tLz9xPSVEMSU4MC VEMCVCMCVEMCVCMSVEMCVCRSVEMSU4MiVEMCVCMCslRDElODEr JUQwJUJGJUQwJUIwJUQwJUJDJUQxJThGJUQxJTgyJUQxJThDJU QxJThFK0MlMkIlMkI)

Frixen
20.05.2016, 13:27
https://google.gik-team.com/?q=указатели+C++ (https://www.blast.hk/redirect/aHR0cHM6Ly9nb29nbGUuZ2lrLXRlYW0uY29tLz9xPSVEMSU4My VEMCVCQSVEMCVCMCVEMCVCNyVEMCVCMCVEMSU4MiVEMCVCNSVE MCVCQiVEMCVCOCtDJTJCJTJC)

https://google.gik-team.com/?q=работа+с+памятью+C++ (https://www.blast.hk/redirect/aHR0cHM6Ly9nb29nbGUuZ2lrLXRlYW0uY29tLz9xPSVEMSU4MC VEMCVCMCVEMCVCMSVEMCVCRSVEMSU4MiVEMCVCMCslRDElODEr JUQwJUJGJUQwJUIwJUQwJUJDJUQxJThGJUQxJTgyJUQxJThDJU QxJThFK0MlMkIlMkI)


я по поводу SF и его структур, как на СФ написать этот код будет проще?

Dark_Knight
20.05.2016, 13:33
Вообще чего это код?

Frixen
20.05.2016, 13:35
Вообще чего это код?


Отрывок кода nametaghack

Gabriel__
20.05.2016, 14:21
CLEO:






0AA2:
30@
= load_library
"samp.dll"
// IF and SET
0A8E:
1@
=
30@
+
457971
// int
0A8C:
write_memory
1@
size
4
value
24216591
virtual_protect
1
0A8E:
2@
=
1@
+
4
// int
0A8C:
write_memory
2@
size
2
value
0
virtual_protect
1
0A8E:
3@
=
30@
+
458004
// int
0A8C:
write_memory
3@
size
4
value
22053903
virtual_protect
1
0A8E:
4@
=
3@
+
4
// int
0A8C:
write_memory
4@
size
2
value
0
virtual_protect
1
0A8E:
5@
=
30@
+
458280
// int
0A8C:
write_memory
5@
size
2
value
16500
virtual_protect
1
0A8E:
6@
=
30@
+
462648
// int
0A8C:
write_memory
6@
size
2
value
24948
virtual_protect
1
0A8E:
7@
=
30@
+
462372
// int
0A8C:
write_memory
7@
size
4
value
24218127
virtual_protect
1
0A8E:
8@
=
7@
+
4
// int
0A8C:
write_memory
8@
size
2
value
0
virtual_protect
1
0AA3:
free_library
30@
0AB2:
ret
0




как это будет в C++


А зачем сдесь загружать и выгружать библиотеку ? И почему это вообще работает ?? Нужно же в уже в существующую samp.dll писать значение чтобы работало.

NarutoUA
20.05.2016, 14:59
Ну загружать видимо чтобы получить дескриптор модуля, а выгружать хз.

DarkExorcist
21.05.2016, 17:32
Как в с++ использовать call, call_function или же call_method из клео. Точнее аналоги этих функций в с++

SR_team
21.05.2016, 18:26
Как в с++ использовать call, call_function или же call_method из клео. Точнее аналоги этих функций в с++


как-то так DWORD dwRet = ((DWORD*)dwAddress)(float fParam);

Проще юзать asm вставку

_asm{

push fParam

call dwAddress

mov dwRet, eax

}

AWRage
21.05.2016, 19:12
Почему не работает? Хочу сделать массив массивов массивов%) (примерно так array[0][0][0]). Но чтобы количество элементов можно было увеличивать.

Код:






int lvl1 = 0;
int lvl2 = 0;
int lvl3 = 0;

void inc3(int *arr, int val)
{
lvl3++;
arr = (int *)realloc(arr, sizeof(int) * lvl3);
arr[lvl3 - 1] = val;
}

void inc2(int **arr, int val)
{
lvl2++;
arr = (int **)realloc(arr, sizeof(int) * lvl2);
inc3(arr[lvl2 - 1], val);
}

void inc1(int ***arr, int val)
{
lvl1++;
arr = (int ***)realloc(arr, sizeof(int) * lvl1);
inc2(arr[lvl1 - 1], val);
}

void main()
{
int ***arr = NULL;
inc1(arr, 10);
}

Dark_Knight
21.05.2016, 19:56
А не проще ли заюзать вектора?

Vasiliy77
22.05.2016, 00:09
Какие оффсеты нужны для создания диалога на 0.3.7? Юзаю код ниже, в результате диалог не отображается.




C++:






#define SAMP_DIALOG_SHOW 0x80320
//
#define SAMP_DIALOG_INFO_OFFSET 0x2129F8
//
showSampDialog
(
int
send
,
int
dialogID
,
int
typedialog
,
char
*
caption
,
char
*
text
,
char
*
button1
,
char
*
button2
)
{
uint32_t
samp_dll
=
(
uint32_t
)
GetModuleHandle
(
"samp.dll"
)
;
g_dwSAMP_Addr
=
(
uint32_t
)
samp_dll
;
uint32_t
func
=
g_dwSAMP_Addr
+
SAMP_DIALOG_SHOW
;
uint32_t
data
=
g_dwSAMP_Addr
+
SAMP_DIALOG_INFO_OFFSET
;
__asm mov eax
,
dword ptr
[
data
]
__asm mov ecx
,
dword ptr
[
eax
]
//mov to offset
__asm push send
//0 - No send response, 1 - Send response
__asm push button2
__asm push button1
__asm push text
__asm push caption
__asm push typedialog
__asm push dialogID
__asm call func
return
;
}





Думаю нужны другие адреса в #define, может знаете какие?

И 2 вопрос, как редактировать пункты в главном меню на Esc? Убрать какой-то например.

Skadi
22.05.2016, 14:14
SAMP_DIALOG_SHOW 0x6B9C0

SAMP_DIALOG_INFO_OFFSET 0x21A0B8

AWRage
22.05.2016, 14:43
А не проще ли заюзать вектора?


Это что?

san0
22.05.2016, 17:07
Это что?


std::vector

AWRage
24.05.2016, 17:06
Как проверить что нужная клавиша была нажата, а не зажата.

SR_team
24.05.2016, 17:25
Как проверить что нужная клавиша была нажата, а не зажата.


WM_KEYDOWN

AWRage
24.05.2016, 22:33
Как я понял, вместо _beginthreadex можно засунуть вызов своей функции в case: DLL_THREAD_ATTACH? На сколько это будет правильно и когда вообще вызывается функция DllMain и параметром DLL_THREAD_ATTACH?

SR_team
24.05.2016, 22:58
Как я понял, вместо _beginthreadex можно засунуть вызов своей функции в case: DLL_THREAD_ATTACH? На сколько это будет правильно и когда вообще вызывается функция DllMain и параметром DLL_THREAD_ATTACH?


DLL_PROCESS_ATTACH вызывается при подключение библиотеки к процессу

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

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

DLL_PROCESS_DETACH вызывается при выгрузке библиотеки из памяти процесса

Есть еще WinAPI функция, которая отключает опрос библиотеки, я ее не помню, но можно найти в говно-примерах читов, где сам чит работает в отдельном потоке

AWRage
25.05.2016, 21:43
Как на счет delete this? Это плохой тон? Одни пишут что это плохо, другие что это вполне нормально.

C++:






class
myclass
{
public
:
void
Initialize
(
)
;
void
Release
(
)
{
delete
this
;
}
}
// ...
myclass
*
class
=
new
myclass
(
)
;
// ...
class
->
Initialize
(
)
;
// ...
class
->
Release
(
)
;

SR_team
25.05.2016, 22:12
Как на счет delete this? Это плохой тон? Одни пишут что это плохо, другие что это вполне нормально.

C++:






class
myclass
{
public
:
void
Initialize
(
)
;
void
Release
(
)
{
delete
this
;
}
}
// ...
myclass
*
class
=
new
myclass
(
)
;
// ...
class
->
Initialize
(
)
;
// ...
class
->
Release
(
)
;





а нахуя? Есть же деструктор class->~myclass()

Dark_Knight
25.05.2016, 22:14
а нахуя? Есть же деструктор class->~myclass()


Который вызывается при делете. А так же можно вместо инициализации юзать конструктор

Gabriel__
27.05.2016, 15:09
Не получается получить адрес функции. Вместо неё получается адрес call'a который её вызывает.

C++:





[CODE]
std
::
cout

SR_team
27.05.2016, 16:15
[QUOTE="Gabriel__"]

Не получается получить адрес функции. Вместо неё получается адрес call'a который её вызывает.

C++:





[CODE]
std
::
cout

Gabriel__
27.05.2016, 16:49
Ты наверно не меня понял. Я перехожу в отладчике по адресу который мне высветила консоль и вижу там call и адрес моей функции. А я хотел сразу получить её адрес.

SR_team
27.05.2016, 16:54
Ты наверно не меня понял.


да, походу не тебя

dimoz
28.05.2016, 18:09
Помогите, пытаюсь переименовать окно гташки, но ничего не получается.

Код:






SendMessage(*(HWND*)0xC17054, WM_SETTEXT, 0, (LPARAM)SF->getSAMP()->getInfo()->szHostname);




Решил. Не тот адрес.

Dark_Knight
30.05.2016, 11:42
В собе никак.

Vasiliy77
30.05.2016, 11:53
Как редактировать список пунктов в главном меню на Esc? Убрать несколько например

SR_team
30.05.2016, 15:00
В собе никак.


а я видел реализацию. Был выдран кусок из сурсов сампа для этого

Dark_Knight
30.05.2016, 20:05
а я видел реализацию. Был выдран кусок из сурсов сампа для этого


Только зачем юзать клео, если есть GAME API?

Frixen
01.06.2016, 13:30
есть у кого функция чтения ini файла?

Dark_Knight
01.06.2016, 14:52
Boost::property_tree

AWRage
02.06.2016, 00:18
Написал .asi плагин, у меня норм работает. У других необходим VCRUNTIME140.dll и другие библиотеки. Как это обойти?

itsLegend
02.06.2016, 00:25
Visual C++ Redistributable пусть обновляют, либо компилируй под старую платформу

AWRage
02.06.2016, 00:29
Visual C++ Redistributable пусть обновляют, либо компилируй под старую платформу


Про второй вариант можно подробнее? Это как?

Gabriel__
02.06.2016, 10:13
В настройках проекта выбрать платформу v100(Свойства конфигурации->общие->набор инструментов платформы).

AWRage
02.06.2016, 14:05
В настройках проекта выбрать платформу v100(Свойства конфигурации->общие->набор инструментов платформы).


Нет такой платормы.

SR_team
02.06.2016, 14:47
Нет такой платормы.


просто у тебя она не установленна.

AWRage
02.06.2016, 18:03
Что хранят эти переменные? За что отвечают? (те, возле которых стоят вопросы)







C++:






struct
stSAMPInfo
{
void
*
pUnk0
[
2
]
;
uint8_t
byteSpace
[
24
]
;
char
szIP
[
257
]
;
char
szHostname
[
259
]
;
uint8_t
byteUnk1
;
uint32_t
ulPort
;
uint32_t
ulMapIcons
[
100
]
;
// Что это?
int
iLanMode
;
// И это
int
iGameState
;
uint32_t
ulConnectTick
;
struct
stServerPresets
*
pSettings
;
void
*
pRakClientInterface
;
struct
stSAMPPools
*
pPools
;
}
;
struct
stServerPresets
{
uint8_t
byteCJWalk
;
// true\false?
uint8_t
byteUnk0
[
4
]
;
float
fWorldBoundaries
[
4
]
;
uint8_t
byteUnk1
;
float
fGravity
;
uint8_t
byteDisableInteriorEnterExits
;
uint32_t
ulVehicleFriendlyFire
;
// true/false? Почему тогда unsigned int?
uint8_t
byteUnk2
[
4
]
;
int
iClassesAvailable
;
// mm?
float
fNameTagsDistance
;
uint8_t
byteUnk3
;
uint8_t
byteWorldTime_Hour
;
uint8_t
byteWorldTime_Minute
;
uint8_t
byteWeather
;
uint8_t
byteNoNametagsBehindWalls
;
uint8_t
bytePlayerMarkersMode
;
uint8_t
byteUnk4
[
3
]
;
float
fGlobalChatRadiusLimit
;
uint8_t
byteShowNameTags
;
}
;

Dark_Knight
02.06.2016, 18:46
uint8_t byteCJWalk; // true\false? 6ег сиджея. 6айт

uint32_t ulMapIcons[100]; // Что это? Массив иконок на карте. Дворд

int iLanMode; // И это. 1ока1ьный режим

san0
02.06.2016, 19:19
Что хранят эти переменные? За что отвечают? (те, возле которых стоят вопросы)







C++:






struct
stSAMPInfo
{
void
*
pUnk0
[
2
]
;
uint8_t
byteSpace
[
24
]
;
char
szIP
[
257
]
;
char
szHostname
[
259
]
;
uint8_t
byteUnk1
;
uint32_t
ulPort
;
uint32_t
ulMapIcons
[
100
]
;
// Что это?
int
iLanMode
;
// И это
int
iGameState
;
uint32_t
ulConnectTick
;
struct
stServerPresets
*
pSettings
;
void
*
pRakClientInterface
;
struct
stSAMPPools
*
pPools
;
}
;
struct
stServerPresets
{
uint8_t
byteCJWalk
;
// true\false?
uint8_t
byteUnk0
[
4
]
;
float
fWorldBoundaries
[
4
]
;
uint8_t
byteUnk1
;
float
fGravity
;
uint8_t
byteDisableInteriorEnterExits
;
uint32_t
ulVehicleFriendlyFire
;
// true/false? Почему тогда unsigned int?
uint8_t
byteUnk2
[
4
]
;
int
iClassesAvailable
;
// mm?
float
fNameTagsDistance
;
uint8_t
byteUnk3
;
uint8_t
byteWorldTime_Hour
;
uint8_t
byteWorldTime_Minute
;
uint8_t
byteWeather
;
uint8_t
byteNoNametagsBehindWalls
;
uint8_t
bytePlayerMarkersMode
;
uint8_t
byteUnk4
[
3
]
;
float
fGlobalChatRadiusLimit
;
uint8_t
byteShowNameTags
;
}
;





все же есть в samp wiki

ShowPlayerMapIcon();

lanmode в server.cfg

UsePlayerPedAnims()

EnableVehicleFriendlyFire()

AddPlayerClass() - их кол-во

AWRage
02.06.2016, 21:02
все же есть в samp wiki
ShowPlayerMapIcon();
lanmode в server.cfg
UsePlayerPedAnims()
EnableVehicleFriendlyFire()
AddPlayerClass() - их кол-во





uint8_t byteCJWalk; // true\false? 6ег сиджея. 6айт
uint32_t ulMapIcons[100]; // Что это? Массив иконок на карте. Дворд
int iLanMode; // И это. 1ока1ьный режим


Благодарю! :)

Dark_Knight
04.06.2016, 11:45
C++:






key
=
get_string_from_ini
(
INI_FILE
,
INI_SECTION_FRIXEN
,
INI_TEST
)
;
_bKEY
=
atoi
(
key
.
c_str
(
)
)
;




Почему он берет из ini файла допустим не 123 (как там написано), а в игру выводит 4234234234 - приблизительно такие числа.
SF->getGame()->isKeyPressed(_bKEY) - не работает :(


Весь код давай.

Frixen
04.06.2016, 12:02
Весь код давай.


уже сам разобрался, все получилось

AWRage
04.06.2016, 15:09
Как превратить интерфейс в таблицу виртуальных методов? Такое врятли сработает.

C++:






DWORD
*
VTable
;
memcpy
(
&
VTable
,
(
BYTE
*
)
getRakClientInterface
(
)
,
4
)
;

AWRage
05.06.2016, 20:12
Не подскажете где взять функцию конвертирования 3D координат в экранные и наоборот. В собейте искал, не нашёл чет. Искал также и в Game SDK.

SR_team
05.06.2016, 20:33
В собейте искал, не нашёл чет


плохо искал

AWRage
05.06.2016, 20:34
плохо искал


Подскажи в каком хедере искать. Там их много.

AWRage
06.06.2016, 16:43
Так что? Никто не даст функцию конвертирования 3d координат в экранные? Я хз где оно в собейте и как она вообще называется.

itsLegend
06.06.2016, 19:00
Так что? Никто не даст функцию конвертирования 3d координат в экранные? Я хз где оно в собейте и как она вообще называется.


https://github.com/BlastHackNet/mod...b494a3f7d0f/src/proxyIDirect3DDevice9.cpp#L97 (https://github.com/BlastHackNet/mod_s0beit_sa/blob/19e9ec2e0f393ff9d094337519ea1b494a3f7d0f/src/proxyIDirect3DDevice9.cpp#L97)

AWRage
06.06.2016, 21:25
https://github.com/BlastHackNet/mod...b494a3f7d0f/src/proxyIDirect3DDevice9.cpp#L97 (https://github.com/BlastHackNet/mod_s0beit_sa/blob/19e9ec2e0f393ff9d094337519ea1b494a3f7d0f/src/proxyIDirect3DDevice9.cpp#L97)


Спасибо :3

Dark_Knight
07.06.2016, 22:32
RPC_ScrCreateExplosion скорее всего он.

AWRage
11.06.2016, 13:56
По какому адресу находится game destructor? Хочу на него хук поставить.

SR_team
11.06.2016, 13:59
По какому адресу находится game destructor? Хочу на него хук поставить.


в собе глянь

Vadim.dll
11.06.2016, 16:13
Как подключить D3d9 к проекту SF?

SR_team
11.06.2016, 17:10
Как подключить D3d9 к проекту SF?


он и так подключен

Dark_Knight
11.06.2016, 17:50
И? Ты включил какой-то патч не написавши код? На*** тогда было вопрос задавать.

SR_team
11.06.2016, 17:51
включил патч все ровно взрывы есть


взрывы от гранат, машин, танков, вертолетов обрабатываются не через этот рпц

SR_team
11.06.2016, 18:15
как найти нужный рпц


для чего именно?

SR_team
11.06.2016, 18:34
взрывы от выстрела танков вертолетов гидры


они не в рпц

Seanbotik
11.06.2016, 20:46
как правильно raknet библиотеки к собейту подключить? если напрямую, то переопределения и т.д.

Vadim.dll
11.06.2016, 21:26
не удается открыть источник файл "windows.h" SFPlugin

Вот такую ошибку выдает, что делать?

Vadim.dll
11.06.2016, 21:36
И еще вопросик, какой функцией можно изменить значение в памяти gta sa?


0xB7CE50 - [dword] Деньги - Например

Dark_Knight
11.06.2016, 22:25
*(type *)adress = value

Vadim.dll
11.06.2016, 22:35
*(type *)adress = value


Дарк, ты не знаешь а на питоне как?

Dark_Knight
12.06.2016, 03:29
Дарк, ты не знаешь а на питоне как?


Нет. И темка по С/С++

Frixen
12.06.2016, 09:10
RPC_Chat какие параметры имеет

Dark_Knight
12.06.2016, 12:25
Дворд и чар

AWRage
12.06.2016, 13:12
в собе глянь


Я хз где там. Я искал и не нашёл.

AWRage
12.06.2016, 15:30
Что за hook_handle_rpc_packet1 и hook_handle_rpc_packet2? Нашёл в собейте/ Это зачем? Ведь есть OnSendRPC, OnSendPacket и OnReceivePacket?

Так что, знает кто где в собейте устанавливается хук на game destructor?

dimoz
16.06.2016, 22:57
пытаюсь сделать динамическое выделение памяти для менюхи, как в собейте, но вылетает через 1-2 секунды после загрузки игры, если madd() вызывать

Код:






struct stMenuInfo
{
const char *mname;
struct stMenuInfo *pmenu;
struct stMenuInfo *cmenu;
unsigned int bcount;
struct stButtonInfo *btn;
};

struct stMenuInfo* mdata;
unsigned int mcount = 0;

unsigned int madd(const char* mname)
{
struct stMenuInfo *new_mn;
memset(&new_mn, 0, 0);
new_mn = (struct stMenuInfo *)realloc(mdata, (mcount + 1) * sizeof(struct stMenuInfo));

if (new_mn == NULL)
return NULL;

mdata = new_mn;
mdata[mcount].mname = _strdup(mname);
mcount++;
return mcount - 1;
}




помогите, пожалуйста

AWRage
16.06.2016, 23:36
Если я понял тебя правильно.

C++:






struct
stMenuInfo
{
const
char
*
mname
;
struct
stMenuInfo
*
pmenu
;
struct
stMenuInfo
*
cmenu
;
unsigned
int
bcount
;
struct
stButtonInfo
*
btn
;
}
;
struct
stMenuInfo
*
mdata
;
unsigned
int
mcount
=
0
;
unsigned
int
madd
(
const
char
*
mname
)
{
// Есть массив меню и их количество.
// realloc - это функция, которая изменяет количество выделенной памяти
// для нашего участка памяти (массива mdata)
// и возвращает содержимое предыдущего участка, то есть наш массив с +1 элементом.
// То есть, мы должны присвоить mdata её return,
// а в аргументах указать участок для которого хотим выделить память
// и количество выделенной памяти.
// То есть, mdata и ++mcount (сразу добавляем 1 к mcount, важно чтобы ++ стояло перед переменной, загугли почему если не знаешь)
// умножить на размер структуры.
// Таким образом, у нас есть массив который содержит все те же элементы,
// но у которого появился еще один элемент с "мусором".
mdata
=
(
struct
stMenuInfo
*
)
realloc
(
mdata
,
++
mcount
*
sizeof
(
struct
stMenuInfo
)
)
;
// Очищаем "мусор".
// Почему mcount - 1? Потому что у нас отсчет не с 1, а с 0 и последний элемент это всегда = количество_меню - 1.
memset
(
&
mdata
[
mcount
-
1
]
,
0
,
sizeof
(
struct
stMenuInfo
)
)
;
mdata
[
mcount
-
1
]
.
mname
=
_strdup
(
mname
)
;
return
mcount
-
1
;
// возвращаем id последнего меню?
}

dimoz
17.06.2016, 00:19
Если я понял тебя правильно.

C++:






struct
stMenuInfo
{
const
char
*
mname
;
struct
stMenuInfo
*
pmenu
;
struct
stMenuInfo
*
cmenu
;
unsigned
int
bcount
;
struct
stButtonInfo
*
btn
;
}
;
struct
stMenuInfo
*
mdata
;
unsigned
int
mcount
=
0
;
unsigned
int
madd
(
const
char
*
mname
)
{
// Есть массив меню и их количество.
// realloc - это функция, которая изменяет количество выделенной памяти
// для нашего участка памяти (массива mdata)
// и возвращает содержимое предыдущего участка, то есть наш массив с +1 элементом.
// То есть, мы должны присвоить mdata её return,
// а в аргументах указать участок для которого хотим выделить память
// и количество выделенной памяти.
// То есть, mdata и ++mcount (сразу добавляем 1 к mcount, важно чтобы ++ стояло перед переменной, загугли почему если не знаешь)
// умножить на размер структуры.
// Таким образом, у нас есть массив который содержит все те же элементы,
// но у которого появился еще один элемент с "мусором".
mdata
=
(
struct
stMenuInfo
*
)
realloc
(
mdata
,
++
mcount
*
sizeof
(
struct
stMenuInfo
)
)
;
// Очищаем "мусор".
// Почему mcount - 1? Потому что у нас отсчет не с 1, а с 0 и последний элемент это всегда = количество_меню - 1.
memset
(
&
mdata
[
mcount
-
1
]
,
0
,
sizeof
(
struct
stMenuInfo
)
)
;
mdata
[
mcount
-
1
]
.
mname
=
_strdup
(
mname
)
;
return
mcount
-
1
;
// возвращаем id последнего меню?
}





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

UPD:

чет рано обрадовался, игра-то вылетает все равно.

если убрать указатели на другие структуры из stMenuInfo, то все работает, но они нужны.

всё ещё в поисках помощи, посоны

AWRage
17.06.2016, 01:05
спасибо, надо учебники уже читать начать, уж больно интересны эти пляски с памятью

UPD:
чет рано обрадовался, игра-то вылетает все равно.
если убрать указатели на другие структуры из stMenuInfo, то все работает, но они нужны.
всё ещё в поисках помощи, посоны


А ты юзаешь их? Или что ты вообще хочешь сделать?

Dark_Knight
17.06.2016, 01:11
Вы пытаетесь вызывать, то что не существует.

dimoz
17.06.2016, 01:23
А ты юзаешь их? Или что ты вообще хочешь сделать?


cmenu, pmenu - уберу (понял, как сделать без этого)

а вот struct stButtonInfo *btn - это инфа о элементах меню. Элементы добавляются точно таким же способом.

AWRage
17.06.2016, 02:38
cmenu, pmenu - уберу (понял, как сделать без этого)
а вот struct stButtonInfo *btn - это инфа о элементах меню. Элементы добавляются точно таким же способом.


Указатели - это лишь указатели на объект, если ты его не создавал, то и обращаться к нему нельзя. Кидай код.

SR_team
17.06.2016, 08:41
когда стреляю из машины пули отправляются не через ID_BULLET_SYNC через какой пакет они отправляются тогда


ты про стрельбу в сторону из окна? там по клавишам синхра

SR_team
17.06.2016, 10:01
да сделал буллит аим хук и подменяю координаты и оффсет на ближайшего игрока когда стреляю из окна буллит не отправляется как резвернуть эти пули куда мне надо


никак, шли свои

AWRage
17.06.2016, 15:26
Как реализована release функция в сампфунксе? Там врятли плагин освобождается в DLL_PROCESS_DETACH, ибо когда я ввожу /q, то сразу весь интерфейс sampfunc пропадает. Мб стоит хук какой на команду /q?

woksonal
21.06.2016, 10:29
ты про стрельбу в сторону из окна? там по клавишам синхра


отправляется bullet когда из окна стреляешь, клавиши отправляются только для звуков и визуал эффектов

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

SR_team
21.06.2016, 10:56
отправляется bullet когда из окна стреляешь, клавиши отправляются только для звуков и визуал эффектов
из танка/базуки итд, наверно, по клавишам и аим синхре создает снаряд/взрыв локально


я лично не смотрел, что из окна летит, но из вертолета, самолета и мотоцикла буллета нет, и скорее всего из машины тоже

woksonal
21.06.2016, 10:56
я из кара смотрел

Vasiliy77
22.06.2016, 16:16
Как можно обработать нажатие клавиш диалога, который я создаю в asi файле? Чтобы при нажатии например левой клавиши "Далее" было одно действие дальше, "Назад" - другое действие.

AWRage
23.06.2016, 00:06
Как называется хук, когда мы заменяет виртуальную таблицу (RakClientInterface или IDirect3DDevice9) на свою (proxyIDirect3DDevice9, как в собейте) и в её методах уже вызываем оригинальные функции? Хотел почитать об этом.

NarutoUA
23.06.2016, 00:31
vtable hook

AWRage
23.06.2016, 02:46
vtable hook


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

AWRage
23.06.2016, 22:17
Что делать если я не могу отловить баг? В определенный момент он срабатывает, а в другой - нет. Вообще, что делать в таких случаях?

SR_team
23.06.2016, 22:35
Что делать если я не могу отловить баг? В определенный момент он срабатывает, а в другой - нет. Вообще, что делать в таких случаях?


вести лог

NarutoUA
23.06.2016, 22:56
Не то это. Там рассказывается об отдельных методах. Вроде это называется патчинг виртуальных таблиц, но я не уверен.


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

AWRage
23.06.2016, 23:34
Откуда тебе знать то ли это или нет? В первых 4х байтах класса лежит указатель на таблицу, меняешь его на свой и всё.


Видимо я не так понял то что гуглил, поздно было да и на английском все. Спасибо,



вести лог


А что логгировать то? Я то нашёл место где это происходит, но в одном случае - все срабатывает, во втором - нет. Буду что-то пробовать еще.

SR_team
23.06.2016, 23:58
Видимо я не так понял то что гуглил, поздно было да и на английском все. Спасибо,

А что логгировать то? Я то нашёл место где это происходит, но в одном случае - все срабатывает, во втором - нет. Буду что-то пробовать еще.


логируй все

AWRage
24.06.2016, 13:47
логируй все


А как проверить, валиден ли указатель? То есть, это указатель на нужный мне объект или на что-то другое.

SR_team
24.06.2016, 13:58
А как проверить, валиден ли указатель? То есть, это указатель на нужный мне объект или на что-то другое.


а ты что его из рандомных участков памяти достаешь?

AWRage
24.06.2016, 14:01
а ты что его из рандомных участков памяти достаешь?


Нет. При создании элемента меню я указываю родителя. В одних элементах родитель валиден, а если обратиться к родителю в других элементах, то игра вылетает. Я не знаю с чем это связано.

SR_team
24.06.2016, 14:13
Нет. При создании элемента меню я указываю родителя. В одних элементах родитель валиден, а если обратиться к родителю в других элементах, то игра вылетает. Я не знаю с чем это связано.


приравнивай родителей у корневого меню к 0 при создание, а потом сравнивай

AWRage
24.06.2016, 17:06
приравнивай родителей у корневого меню к 0 при создание, а потом сравнивай


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

itsLegend
24.06.2016, 21:01
Используй RakLogger.

Никак.

DarkExorcist
26.06.2016, 21:48
как перевести DWORD в char? Пробовал форматировать, но пропадают нули в начале, а мне их нужно сохранить

Gabriel__
26.06.2016, 21:56
Нельзя так сделать. DWORD имеет размер 4 байта, char 1 байт. Если у тебя hex то у тебя пустое место будет заменяться нулями в начале. Не сможешь ты впихнуть 4 байта в 1 байт.

AWRage
26.06.2016, 22:20
как перевести DWORD в char? Пробовал форматировать, но пропадают нули в начале, а мне их нужно сохранить


А что ты хочешь сделать?

SR_team
26.06.2016, 22:44
как перевести DWORD в char? Пробовал форматировать, но пропадают нули в начале, а мне их нужно сохранить


sprintf(szStr, "0x%08X", dwValue);

Dark_Knight
27.06.2016, 13:35
как перевести DWORD в char? Пробовал форматировать, но пропадают нули в начале, а мне их нужно сохранить


%02d, %03d и т.д.

AWRage
27.06.2016, 22:12
Как заставить ID3DXFont рисовать текст с учетом цветовых кодов? Он рисует текст вместо со скобками {FFAA0000}.

Dark_Knight
27.06.2016, 22:15
Собейт в помощь)

AWRage
28.06.2016, 00:13
Собейт в помощь)


Там не ID3DXFont используется.

Dark_Knight
28.06.2016, 00:57
Там не ID3DXFont используется.


D3CFont или как там, все равно юзает ID3DXFont

NarutoUA
29.06.2016, 14:50
D3CFont или как там, все равно юзает ID3DXFont


Нет, в собе CD3DFont и он не юзает ID3DXFont а рисует текст треугольниками что быстрее