Другое SAMPFUNCS | API C++

SR_team

like pancake
BH Team
4,707
6,347
Не увидел твой ответ. Крашит :(
ну без переменной some на прямуб подставь значение. К тому же, у тебя в клео коде используется virtual_protect 1, а в C++ коде не юзаешь
C++:
DWORD VP = 0;
VirtualProtect((void*)Адрес, размер_для_тебя_4_байта, 0x01, &VP);

//запись в память

VirtualProtect((void*)Адрес, размер, VP, NULL);
 

AWRage

Активный
642
141
С Vitual Protect крашит еще при загрузке. В остальных случаях текстдравов нет (адрес отвечает за размер текстдравов(?)).
Пробовал так:
C++:
DWORD some = 0x00002042;
*(PDWORD*)0x718D14 = &some;
И так:
Код:
DWORD some = 0x42200000; // 40.0 = 0x42200000 ?
*(PDWORD*)0x718D14 = &some;
И даже так:
Код:
float some = 40.0;
*(PFLOAT*)0x718D14 = &some;
Вот код Легенд'а: https://www.blast.hk/threads/34/page-153#post-81158

code=cleo]{$CLEO}
{$INCLUDE SF}

0001: wait 0 ms
0662: "by legend2360"
0662: "BlastHack - cheating is art"

0AC6: 0@ = label @font_size offset
0A8C: write_memory 0x0718D14 size 4 value 0@ virtual_protect 1 // записываем новый адрес памяти откуда будет читаться значение
// (gta_sa.exe+318D12 - D8 0D 108A8500 - fmul dword ptr [gta_sa.exe+458A10] | gta_sa.exe+458A10 заменяем на адрес "лейбла")
0A8C: write_memory 0x0858A10 size 4 value 100.0 virtual_protect 1 // Меняем позицию радара

while true
wait 0
end

:font_size // standart
hex
00 00 20 42 // 40.0
end[/code]
[
 
Последнее редактирование:

san0

Известный
Друг
411
267
С Vitual Protect крашит еще при загрузке. В остальных случаях текстдравов нет (адрес отвечает за размер текстдравов(?)).
Пробовал так:
C++:
DWORD some = 0x00002042;
*(PDWORD*)0x718D14 = &some;
И так:
Код:
DWORD some = 0x42200000; // 40.0 = 0x42200000 ?
*(PDWORD*)0x718D14 = &some;
И даже так:
Код:
float some = 40.0;
*(PFLOAT*)0x718D14 = &some;
Вот код Легенд'а: https://www.blast.hk/threads/34/page-153#post-81158

CLEO:
{$CLEO}
{$INCLUDE SF}

0001: wait 0 ms
0662: "by legend2360"
0662: "BlastHack - cheating is art"

0AC6: 0@ = label @font_size offset
0A8C: write_memory 0x0718D14 size 4 value 0@ virtual_protect 1 // записываем новый адрес памяти откуда будет читаться значение
// (gta_sa.exe+318D12 - D8 0D 108A8500        - fmul dword ptr [gta_sa.exe+458A10] | gta_sa.exe+458A10 заменяем на адрес "лейбла")
0A8C: write_memory 0x0858A10 size 4 value 100.0 virtual_protect 1 // Меняем позицию радара

while true
   wait 0
end

:font_size // standart
hex
    00 00 20 42 // 40.0
end
По нажатию на нумпад 1 изменяет позиию радара на 100.0
*Внимание на объявление RadarPos.
Код:
#include <windows.h>
#include <string>
#include <assert.h>

#include "SAMPFUNCS_API.h"
#include "game_api\game_api.h"

SAMPFUNCS *SF = new SAMPFUNCS();
float RadarPos = 40.0;

void CALLBACK mainloop()
{
   static bool init = false;
   if (!init)
   {
     if (GAME == nullptr)
       return;
     if (GAME->GetSystemState() != eSystemState::GS_PLAYING_GAME)
       return;
     if (!SF->getSAMP()->IsInitialized())
       return;
     init = true;
   }
   if (SF->getGame()->isKeyPressed(0x61))
   {
     *(DWORD*)(0x0718D14) = (DWORD)&RadarPos;
     *(float*)(0x0858A10) = 100.0;
   }
}

BOOL APIENTRY DllMain(HMODULE hModule, DWORD dwReasonForCall, LPVOID lpReserved)
{
   switch (dwReasonForCall)
   {
   case DLL_PROCESS_ATTACH:
     SF->initPlugin(mainloop, hModule);
     break;
   case DLL_THREAD_ATTACH:
   case DLL_THREAD_DETACH:
   case DLL_PROCESS_DETACH:
     break;
   }
   return TRUE;
}
 
  • Нравится
Реакции: AWRage

AWRage

Активный
642
141
По нажатию на нумпад 1 изменяет позиию радара на 100.0
*Внимание на объявление RadarPos.
Код:
#include <windows.h>
#include <string>
#include <assert.h>

#include "SAMPFUNCS_API.h"
#include "game_api\game_api.h"

SAMPFUNCS *SF = new SAMPFUNCS();
float RadarPos = 40.0;

void CALLBACK mainloop()
{
   static bool init = false;
   if (!init)
   {
     if (GAME == nullptr)
       return;
     if (GAME->GetSystemState() != eSystemState::GS_PLAYING_GAME)
       return;
     if (!SF->getSAMP()->IsInitialized())
       return;
     init = true;
   }
   if (SF->getGame()->isKeyPressed(0x61))
   {
     *(DWORD*)(0x0718D14) = (DWORD)&RadarPos;
     *(float*)(0x0858A10) = 100.0;
   }
}

BOOL APIENTRY DllMain(HMODULE hModule, DWORD dwReasonForCall, LPVOID lpReserved)
{
   switch (dwReasonForCall)
   {
   case DLL_PROCESS_ATTACH:
     SF->initPlugin(mainloop, hModule);
     break;
   case DLL_THREAD_ATTACH:
   case DLL_THREAD_DETACH:
   case DLL_PROCESS_DETACH:
     break;
   }
   return TRUE;
}
Работает. Спасибо! :)
 

AWRage

Активный
642
141
Таймер возможно сделать? Не 0001: wait 5000, а именно таймер.
 

0pc0d3R

Потрачен
550
269
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Таймер возможно сделать? Не 0001: wait 5000, а именно таймер.
создай новый поток и выполняй код оттуда, тогда сможешь юзать Sleep(задержка); без геймфриза, по моему удобнее.