Перейти к содержанию

Создаем internal мультихак, на примере CryEngine3 SDK [Spam of animation]


JustHack

1 585 просмотров

 

 

1.thumb.png.5eebdd2c57b7d173efcb983c1dc80bcd.png

 

 

В этой статье, мы с вами создадим функцию для отключения задержки анимации игрока. Это позволит вам выполнять так называемый "Спам Х", "Спам CTRL" и "Движения лягушки", т.е выполнять данные

 

  • движение лечь - встать
  • движение присесть - встать
  • движение вправо-влево (стрейф)
  • движение лежа - в правый бок / левый бок
  • движение лежа - вперед / назад

 

действия без какой-либо задержки.

 

Добавим в наш код новые смещения

Спойлер

#define ICVAR_STANDTOCROUCHDELAY		0xD24
#define ICVAR_STANDTOPRONEDELAY			0xD28
#define ICVAR_CROUCHTOSTANDDELAY		0xD2C
#define ICVAR_CROUCHTOPRONEDELAY		0xD30
#define ICVAR_PRONETOSTANDDELAY			0xD34
#define ICVAR_PRONETOCROUCHDELAY		0xD38

 

 

В итоге, мы имеем такой набор смещений

Спойлер

#define IGAMEFRAMEWORK_GETCLIENTACTOR		0x470

#define ICVAR_OFFS_IDLECHECK			0x168
#define ICVAR_OFFS_LOBBYAFK			0x7B0
#define ICVAR_OFFS_INGAMEAFK			0x5D0
#define ICVAR_OFFS_ENABLEKICK			0x498
#define ICVAR_OFFS_PVEKICK			0x49C
#define ICVAR_OFFS_ADVERTISING			0x90
#define ICVAR_OFFS_PERSONAL_OFFER		0xB4
#define ICVAR_OFFS_CHATENABLED			0xB20
#define ICVAR_OFFS_LOBBYCHATDELAY		0xB28
#define ICVAR_OFFS_INGAMECHATDELAY		0xB30
#define ICVAR_OFFS_GAMETYPE			0x600

#define ICVAR_STANDTOCROUCHDELAY		0xD24
#define ICVAR_STANDTOPRONEDELAY			0xD28
#define ICVAR_CROUCHTOSTANDDELAY		0xD2C
#define ICVAR_CROUCHTOPRONEDELAY		0xD30
#define ICVAR_PRONETOSTANDDELAY			0xD34
#define ICVAR_PRONETOCROUCHDELAY		0xD38

 

 

Добавим в перечисление CvarOffsets новые значения

Спойлер

E_STANDTOCROUCHDELAY	=  ICVAR_STANDTOCROUCHDELAY,
E_STANDTOPRONEDELAY	=  ICVAR_STANDTOPRONEDELAY,
E_CROUCHTOSTANDDELAY	=  ICVAR_CROUCHTOSTANDDELAY,
E_CROUCHTOPRONEDELAY	=  ICVAR_CROUCHTOPRONEDELAY,
E_PRONETOSTANDDELAY	=  ICVAR_PRONETOSTANDDELAY,
E_PRONETOCROUCHDELAY	=  ICVAR_PRONETOCROUCHDELAY,

 

 

Теперь наше перечисление со смещениями, выглядит так

Спойлер

enum eCvarOffsets : DWORD64
{
	E_IDLECHECK			=  ICVAR_OFFS_IDLECHECK,
	E_LOBBYAFK			=  ICVAR_OFFS_LOBBYAFK,
	E_INGAMEAFK			=  ICVAR_OFFS_INGAMEAFK,
	E_ENABLEKICK			=  ICVAR_OFFS_ENABLEKICK,
	E_PVEKICK			=  ICVAR_OFFS_PVEKICK,
	E_ADVERTISING_OFF		=  ICVAR_OFFS_ADVERTISING,
	E_PERSONAL_OFFER		=  ICVAR_OFFS_PERSONAL_OFFER,
	E_CHATENABLED			=  ICVAR_OFFS_CHATENABLED,
	E_LOBBYCHATDELAY		=  ICVAR_OFFS_LOBBYCHATDELAY,
	E_INGAMECHATDELAY		=  ICVAR_OFFS_INGAMECHATDELAY,
	E_GAMETYPE			=  ICVAR_OFFS_GAMETYPE,

	E_STANDTOCROUCHDELAY		=  ICVAR_STANDTOCROUCHDELAY,
	E_STANDTOPRONEDELAY		=  ICVAR_STANDTOPRONEDELAY,
	E_CROUCHTOSTANDDELAY		=  ICVAR_CROUCHTOSTANDDELAY,
	E_CROUCHTOPRONEDELAY		=  ICVAR_CROUCHTOPRONEDELAY,
	E_PRONETOSTANDDELAY		=  ICVAR_PRONETOSTANDDELAY,
	E_PRONETOCROUCHDELAY		=  ICVAR_PRONETOCROUCHDELAY,
};

 

 

Пишем функцию, для отключения задержки анимации игрока

Спойлер

void SpamXandCtlr()
{
	IGameFramework* pGameFramework = IGameFramework::Base(); 
	if (!pGameFramework) return;

	ICvar* pCvar = ICvar::Base();
	if (!pCvar) return;

	IActor* pActor = nullptr;

	if (pGameFramework->GetClientActor(&pActor))
	{
		pCvar->SetValue(eCvarOffsets::E_STANDTOCROUCHDELAY,	FALSE);
		pCvar->SetValue(eCvarOffsets::E_STANDTOPRONEDELAY,	FALSE);
		pCvar->SetValue(eCvarOffsets::E_CROUCHTOSTANDDELAY,	FALSE);
		pCvar->SetValue(eCvarOffsets::E_CROUCHTOPRONEDELAY,	FALSE);
		pCvar->SetValue(eCvarOffsets::E_PRONETOSTANDDELAY,	FALSE);
		pCvar->SetValue(eCvarOffsets::E_PRONETOCROUCHDELAY,	FALSE);
		
	}
}

 

 

Если вам что-то не понятно, не стесняйтесь задавать свои вопросы в ЛС Discord или ниже в комментариях.

 

  • Зачем оно здесь? 1
  • Плюс 2

0 Комментариев


Рекомендуемые комментарии

Комментариев нет

Гость
Эта запись блога заблокирована для комментирования.
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.