Найстройка HVH сервера

Deluks

Верховное DNO|
Сообщения
1,853
Реакции
812
Как на hvh сервере, сделать так что-бы работал DoubleTap нормально как на всех других hvh серверах?
Надо установить плагин так что-бы работал DoubleTap нормально как на всех других hvh серверах.


Оффтоп
 

Rolzzandik

Участник
Сообщения
492
Реакции
234
Как на hvh сервере, сделать так что-бы работал DoubleTap нормально как на всех других hvh серверах?
он и так нормально работает в стоке
в тикрейте проблема скорее всего, 64 ставь
 

defron

Участник
Сообщения
342
Реакции
138
В Hooks.hpp в namespace index после void Shutdown(); добавляем inline vfunc_hook prediction_hook;
После constexpr auto LockCursor = 67; добавляем constexpr auto RunCommand = 19;
Далее переходим в Hooks.cpp и после sv_cheats.setup(sv_cheats_con); добавляем prediction_hook.setup(g_Prediction);
А после sv_cheats.hook_index(index::SvCheatsGetBool, hkSvCheatsGetBool); вставляем prediction_hook.hook_index(index::RunCommand, hkRunCommand);
#pragma once

#include <cstdint>

// Created with ReClass.NET by KN4CK3R
#pragma pack(push, 1)

class INetMsg
{
public:
virtual ~INetMsg() = default;

virtual void SetNetChan(void*) = 0;
virtual void SetReliable(bool) = 0;
virtual bool Process() = 0;
virtual bool ReadFromBuffer(void*) = 0;
virtual bool WriteToBuffer(void*) = 0;
virtual bool IsReliable() const = 0;
virtual int GetType() const = 0;
virtual int GetGroup() const = 0;
virtual const char* GetName() const = 0;
virtual void* GetNetChannel() const = 0;
virtual const char* ToString() const = 0;
};
class INetChannel
{
public:

uint8_t pad_0x0000[0x17];
bool m_bShouldDelete;
int m_nOutSequenceNr;
int m_nInSequenceNr;
int m_nOutSequenceNrAck;
int m_nOutReliableState;
int m_nInReliableState;
int m_nChokedPackets;
};

class CClockDriftMgr
{
public:
float m_ClockOffsets[16]; //0x0000
uint32_t m_iCurClockOffset; //0x0044
uint32_t m_nServerTick; //0x0048
uint32_t m_nClientTick; //0x004C
}; //Size: 0x0050

class CClientState {
public:
void ForceFullUpdate() {
*reinterpret_cast<int*>(std::uintptr_t(this) + 0x174) = -1;
}

char pad_0000[148]; //0x0000
INetChannel* m_NetChannel; //0x0094
char pad_0098[8]; //0x0098
uint32_t m_nChallengeNr; //0x00A0
char pad_00A4[100]; //0x00A4
uint32_t m_nSignonState; //0x0108
char pad_010C[8]; //0x010C
float m_flNextCmdTime; //0x0114
uint32_t m_nServerCount; //0x0118
uint32_t m_nCurrentSequence; //0x011C
char pad_0120[84]; //0x0120
uint32_t m_nDeltaTick; //0x0174
bool m_bPaused; //0x0178
char pad_0179[7]; //0x0179
uint32_t m_nViewEntity; //0x0180
uint32_t m_nPlayerSlot; //0x0184
char m_szLevelName[260]; //0x0188
char m_szLevelNameShort[80]; //0x028C
char m_szGroupName[80]; //0x02B4
char pad_02DC[92]; //0x02DC
uint32_t m_nMaxClients; //0x0310
char pad_0314[18820]; //0x0314
float m_flLastServerTickTime; //0x4C98
bool insimulation; //0x4C9C
char pad_4C9D[3]; //0x4C9D
uint32_t oldtickcount; //0x4CA0
float m_tickRemainder; //0x4CA4
float m_frameTime; //0x4CA8
uint32_t m_nLastOutgoingCmd; //0x4CAC
uint32_t m_nChokedCmds; //0x4CB0 new = 4D28
uint32_t last_command_ack; //0x4CB4
uint32_t command_ack; //0x4CB8
uint32_t m_nSoundSequence; //0x4CBC
char pad_4CC0[80]; //0x4CC0
Vector viewangles; //0x4D10
char pad_4D1C[208]; //0x4D1C
}; //Size: 0x4D1C

#pragma pack(pop)

static_assert(FIELD_OFFSET(CClientState, m_NetChannel) == 0x0094, "Wrong struct offset");
static_assert(FIELD_OFFSET(CClientState, m_nCurrentSequence) == 0x011C, "Wrong struct offset");
static_assert(FIELD_OFFSET(CClientState, m_nDeltaTick) == 0x0174, "Wrong struct offset");
#include "predictionsystem.h"

namespace Prediction
{
float m_flOldCurTime;
float m_flOldFrametime;
CMoveData moveData;

int* predictionRandomSeed = NULL;
C_BasePlayer* predictionPlayer = NULL;
void Init() {
predictionRandomSeed = *(int**)(Utils::FindSignature(("client_panorama.dll"), ("8B 0D ? ? ? ? BA ? ? ? ? E8 ? ? ? ? 83 C4 04")) + 2);
predictionPlayer = *reinterpret_cast<C_BasePlayer**>(Utils::FindSignature(("client_panorama.dll"), "89 35 ? ? ? ? F3 0F 10 46") + 2);
}
void StartPrediction(CUserCmd* pCmd, C_BasePlayer* entity) {
*predictionRandomSeed = MD5_PseudoRandom(pCmd->command_number) & 0x7FFFFFFF;
predictionPlayer = entity;

m_flOldCurTime = g_GlobalVars->curtime;
m_flOldFrametime = g_GlobalVars->frametime;

g_GlobalVars->curtime = entity->m_nTickBase() * g_GlobalVars->interval_per_tick;
g_GlobalVars->frametime = g_GlobalVars->interval_per_tick;

Vector oldVelocity = entity->m_vecVelocity();

//Here we're doing CBasePlayer::UpdateButtonState
moveData.m_nButtons = pCmd->buttons;
int buttonsChanged = pCmd->buttons ^ *reinterpret_cast<int*>(uintptr_t(entity) + 0x31E8);
*reinterpret_cast<int*>(uintptr_t(entity) + 0x31DC) = (uintptr_t(entity) + 0x31E8);
*reinterpret_cast<int*>(uintptr_t(entity) + 0x31E8) = pCmd->buttons;
*reinterpret_cast<int*>(uintptr_t(entity) + 0x31E0) = pCmd->buttons & buttonsChanged; //m_afButtonPressed ~ The changed ones still down are "pressed"
*reinterpret_cast<int*>(uintptr_t(entity) + 0x31E4) = buttonsChanged & ~pCmd->buttons; //m_afButtonReleased ~ The ones not down are "released"

g_GameMovement->StartTrackPredictionErrors(entity);

memset(&moveData, 0, sizeof(CMoveData));
g_MoveHelper->SetHost(entity);
g_Prediction->SetupMove(entity, pCmd, g_MoveHelper, &moveData);
g_GameMovement->ProcessMovement(entity, &moveData);
g_Prediction->FinishMove(entity, pCmd, &moveData);

entity->m_vecVelocity() = oldVelocity;
}

void EndPrediction(C_BasePlayer* entity) {
g_GameMovement->FinishTrackPredictionErrors(entity);
g_MoveHelper->SetHost(nullptr);

*predictionRandomSeed = -1;
predictionPlayer = nullptr;

g_GlobalVars->curtime = m_flOldCurTime;
g_GlobalVars->frametime = m_flOldFrametime;
}
}
#pragma once

#include "../options.hpp"

#include "../valve_sdk/csgostructs.hpp"

#include "../helpers/math.hpp"

#include "../helpers/utils.hpp"

#include "../singleton.hpp"

#include "../helpers/input.hpp"


#include <deque>


namespace Prediction

{

void Init();

void StartPrediction(CUserCmd* pCmd, C_BasePlayer* entity);

void Predict();

void EndPrediction(C_BasePlayer* entity);

}
#include <Psapi.h>
#define INRANGE(x,a,b) (x >= a && x <= b)
#define GET_BYTE( x ) (GET_BITS(x[0]) << 4 | GET_BITS(x[1]))
#define GET_BITS( x ) (INRANGE((x&(~0x20)),'A','F') ? ((x&(~0x20)) - 'A' + 0xa) : (INRANGE(x,'0','9') ? x - '0' : 0))
uintptr_t FindSignature(const char* szModule, const char* szSignature)
{
const char* pat = szSignature;
DWORD firstMatch = 0;
DWORD rangeStart = reinterpret_cast<DWORD>(GetModuleHandleA(szModule));
MODULEINFO miModInfo;
GetModuleInformation(GetCurrentProcess(), reinterpret_cast<HMODULE>(rangeStart), &miModInfo, sizeof(MODULEINFO));
DWORD rangeEnd = rangeStart + miModInfo.SizeOfImage;
for (DWORD pCur = rangeStart; pCur < rangeEnd; pCur++)
{
if (!*pat)
return firstMatch;

if (*(PBYTE)pat == '\?' || *(BYTE*)pCur == GET_BYTE(pat))
{
if (!firstMatch)
firstMatch = pCur;

if (!pat[2])
return firstMatch;

if (*(PWORD)pat == '\?\?' || *(PBYTE)pat != '\?')
pat += 3;

else
pat += 2;
}
else
{
pat = szSignature;
firstMatch = 0;
}
}
return NULL;
}
После char ConsoleReadKey(); добавить uintptr_t FindSignature(const char* szModule, const char* szSignature);

Далее идём в Hooks.cpp и после prediction_hook.setup(g_Prediction); добавляем Prediction::Init();
Так, стоп, забыл. После #include "Tickbase.h" добавляем #include "features/predictionsystem.h"(все пути меняете на свои)
Спускаемся в CreateMove и добавляем:
 

Rolzzandik

Участник
Сообщения
492
Реакции
234
@defron, и ты мне еще клоуна ставишь.
Ема ты гений.

Скажи пж, как связаны СУРСЫ ПОД ЧИТ с СЕРВЕРОМ?
 

Тверской Чел

Участник
Сообщения
70
Реакции
6
Как сделать так что-бы при включении сервера сразу писалось нужная команда допустим sv_airaccelerate 100 сама? (без геймоде кфг, я туда писал нечего не изменилось)
 

xtance

Участник
Сообщения
513
Реакции
743
@Sdweer, если ничего не изменилось значит что-то сделано не так ибо совет был в принципе правильный.
Тут подробнее на англ Counter-Strike: Global Offensive Dedicated Servers - Valve Developer Community
Ну если вкратце то надо создать в csgo/cfg файлик gamemode_casual_server.cfg (casual это название режима)
И туда уже напихать команды
Также бывают скрытые переменные, которые не хотят так меняться, тогда перед перед командой надо написать sm_cvar
Ну и офк перезапустить сервер или написать в консоль exec названиеконфига.cfg
 

Тверской Чел

Участник
Сообщения
70
Реакции
6
Как сделать так что-бы при включении сервера сразу писалось нужная команда допустим sv_airaccelerate 100 сама? (без геймоде кфг, я туда писал нечего не изменилось) В СЕРВЕРЕ В САМОМ НЕ ПРОПИСЫВАЯ В КОНСОЛЬ
 

defron

Участник
Сообщения
342
Реакции
138
ser
Как сделать так что-бы при включении сервера сразу писалось нужная команда допустим sv_airaccelerate 100 сама? (без геймоде кфг, я туда писал нечего не изменилось) В СЕРВЕРЕ В САМОМ НЕ ПРОПИСЫВАЯ В КОНСОЛЬ
server.cfg
 

trekken

Участник
Сообщения
497
Реакции
182
Пусть обратиться оффициальным сообщением к вальве с таким текстом "Я хочу поднастроить чит сервер и добавить туда команду sv_airaccelerate 100, подскажите как это делается, вот айпи IP:PORT"
 
Сверху Снизу