Как получить скорость prop_physics*

tonline_kms65_1

Участник
Сообщения
565
Реакции
225
@Черная вдова,
Я Дрона делал для cs-go. Перенес все модели, звуки, текстуры и т.д. Модели пришлось перекомпилировать, переделывать физбоксы, хотбоксы. Сам референс вроде нормально встал.
Я даже видео на своем канале выкладывал, как он там летает.
А здесь кому то делал бабочек плагин
Не понравился мне движек, своими тупыми коллизиями. Тяжел в запуске.
Моя общая оценка этому движку - г.....но полное. Но это моё, личное, мнение.
 

Черная вдова

Участник
Сообщения
2,795
Реакции
670
@Черная вдова,
Я Дрона делал для cs-go. Перенес все модели, звуки, текстуры и т.д. Модели пришлось перекомпилировать, переделывать физбоксы, хотбоксы. Сам референс вроде нормально встал.
Я даже видео на своем канале выкладывал, как он там летает.
А здесь кому то делал бабочек плагин
Не понравился мне движек, своими тупыми коллизиями. Тяжел в запуске.
Моя общая оценка этому движку - г.....но полное. Но это моё, личное, мнение.
Это prop_physics?
 

tonline_kms65_1

Участник
Сообщения
565
Реакции
225
Скорость не постоянна потому что проп скребется об пол и стукается об стенки
А для чего эта скорость нужна тебе? Ты хочешь определить остановку? Я так понимаю, ты им управляешь с клавиатуры?

prop_physics_override
Сделай видос, что бы было понятно чего ты хочешь.
 

Черная вдова

Участник
Сообщения
2,795
Реакции
670
А для чего эта скорость нужна тебе? Ты хочешь определить остановку? Я так понимаю, ты им управляешь с клавиатуры?

prop_physics_override
Сделай видос, что бы было понятно чего ты хочешь.
Я же сказал что это машина
--- Добавлено позже ---
Ну и что ? Это нетпроп, который у целой кучи энтити есть.
да да покажи мне
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,924
  • Команда форума
  • #28
VTable Dumper
Выбираешь свою игру. Если её нет - придётся вручную доставать оффсет. Можно попробовать дропнуть so-файл нужной игры.
Находишь GetSmoothedVelocity у нужной энтити. На примере TF2, и энтити CTFPlayer:
upload_2019-1-26_10-22-45.png


Теперь составляем геймдату:
C-подобный:
"Games"
{
  "tf"
  {
    "Offsets"
    {
      "CTFPlayer::GetSmoothedVelocity"
      {
        "windows"   "139"
        "linux"     "140"
      }
    }
  }
}

Теперь надо посмотреть сигнатуру функции. Тут либо применяем иду, либо смотрим в исходники движка.
Т.к. есть исходники конкретно этой функции, и у TF2 она явно без изменений, составляем код для подготовки SDKCall (за основу взят один из недавних плагинов для TF2):

C-подобный:
#include <sourcemod>

#pragma semicolon 1
#pragma newdecls  required

Handle  g_fnGetSmoothedVelocity;

public APLRes AskPluginLoad2(Handle hMySelf, bool bLate, char[] szError, int iErrMax) {
  if(GetEngineVersion() != Engine_TF2) {
    strcopy(szError, iErrMax, "This plugin only works for Team Fortress 2");
    return APLRes_Failure;
  }

  return APLRes_Success;
}

public void OnPluginStart() {
  // Load SDK configuration.
  Handle hConf = LoadGameConfigFile("TF2_GetSmoothedVelocity");
  if (!hConf) {
    __FuckMe(0);
  }

  // Initialize SDK function (GetSmoothedVelocity).
  StartPrepSDKCall(SDKCall_Player);
  if (!PrepSDKCall_SetFromConf(hConf, SDKConf_Virtual, "CTFPlayer::GetSmoothedVelocity") || !PrepSDKCall_SetReturnInfo(SDKType_Vector, SDKPass_Plain)) {
    CloseHandle(hConf);
    __FuckMe(1);
  }

  // Get function pointer.
  g_fnGetSmoothedVelocity = EndPrepSDKCall();
  CloseHandle(hConf);

  if (!g_fnGetSmoothedVelocity) {
    __FuckMe(1);
  }
}

void __FuckMe(int iReason) {
  char szReason[128];
  switch (iReason) {
    case 0:     strcopy(szReason, sizeof(szReason), "Can't load gamedata file TF2_GetSmoothedVelocity.");
    case 1:     strcopy(szReason, sizeof(szReason), "Can't create SDKCall function for CTFPlayer::GetSmoothedVelocity. Gamedata is incorrect.");
  }

  SetFailState("Can't finish initializing: %s", szReason);
}

void UTIL_GetSmoothedVelocity(int iClient, float[3] flResult) {
  return SDKCall(g_fnGetSmoothedVelocity, iClient, flResult);
}

/**
 * usage:
 * float[3] flSmoothedVelocity;
 * UTIL_GetSmoothedVelocity(iClient, flSmoothedVelocity);
 */
 

tonline_kms65_1

Участник
Сообщения
565
Реакции
225
@Крузяра,
Гайд по созданию своего чита.
Замудренно как. Для какой цели все это? Есть целесообразность? Бред да и только.
Обновят движек и всё по-слетает.
 

Черная вдова

Участник
Сообщения
2,795
Реакции
670
VTable Dumper
Выбираешь свою игру. Если её нет - придётся вручную доставать оффсет. Можно попробовать дропнуть so-файл нужной игры.
Находишь GetSmoothedVelocity у нужной энтити. На примере TF2, и энтити CTFPlayer:
Посмотреть вложение 38336

Теперь составляем геймдату:
C-подобный:
"Games"
{
  "tf"
  {
    "Offsets"
    {
      "CTFPlayer::GetSmoothedVelocity"
      {
        "windows"   "139"
        "linux"     "140"
      }
    }
  }
}

Теперь надо посмотреть сигнатуру функции. Тут либо применяем иду, либо смотрим в исходники движка.
Т.к. есть исходники конкретно этой функции, и у TF2 она явно без изменений, составляем код для подготовки SDKCall (за основу взят один из недавних плагинов для TF2):

C-подобный:
#include <sourcemod>

#pragma semicolon 1
#pragma newdecls  required

Handle  g_fnGetSmoothedVelocity;

public APLRes AskPluginLoad2(Handle hMySelf, bool bLate, char[] szError, int iErrMax) {
  if(GetEngineVersion() != Engine_TF2) {
    strcopy(szError, iErrMax, "This plugin only works for Team Fortress 2");
    return APLRes_Failure;
  }

  return APLRes_Success;
}

public void OnPluginStart() {
  // Load SDK configuration.
  Handle hConf = LoadGameConfigFile("TF2_GetSmoothedVelocity");
  if (!hConf) {
    __FuckMe(0);
  }

  // Initialize SDK function (GetSmoothedVelocity).
  StartPrepSDKCall(SDKCall_Player);
  if (!PrepSDKCall_SetFromConf(hConf, SDKConf_Virtual, "CTFPlayer::GetSmoothedVelocity") || !PrepSDKCall_SetReturnInfo(SDKType_Vector, SDKPass_Plain)) {
    CloseHandle(hConf);
    __FuckMe(1);
  }

  // Get function pointer.
  g_fnGetSmoothedVelocity = EndPrepSDKCall();
  CloseHandle(hConf);

  if (!g_fnGetSmoothedVelocity) {
    __FuckMe(1);
  }
}

void __FuckMe(int iReason) {
  char szReason[128];
  switch (iReason) {
    case 0:     strcopy(szReason, sizeof(szReason), "Can't load gamedata file TF2_GetSmoothedVelocity.");
    case 1:     strcopy(szReason, sizeof(szReason), "Can't create SDKCall function for CTFPlayer::GetSmoothedVelocity. Gamedata is incorrect.");
  }

  SetFailState("Can't finish initializing: %s", szReason);
}

void UTIL_GetSmoothedVelocity(int iClient, float[3] flResult) {
  return SDKCall(g_fnGetSmoothedVelocity, iClient, flResult);
}

/**
 * usage:
 * float[3] flSmoothedVelocity;
 * UTIL_GetSmoothedVelocity(iClient, flSmoothedVelocity);
 */
CS:GO не работает
--- Добавлено позже ---
@Крузяра,
Гайд по созданию своего чита.
Замудренно как. Для какой цели все это? Есть целесообразность? Бред да и только.
Обновят движек и всё по-слетает.
используешь позицию геймдаты который уже есть в sourcemod
вот как с невидимостью на радаре это m_bSpotted (есть в sm) - 4
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,569
Реакции
5,071
вот свежайшие дампы
 

Вложения

  • 26.01.2019_csgo_netprops_datamaps.zip
    488 КБ · Просмотры: 5

Kruzya

Участник
Сообщения
12,970
Реакции
10,924
  • Команда форума
  • #32
Гайд по созданию своего чита.
В каком месте это чит?

Замудренно как. Для какой цели все это?
Человек спросил - я ответил.

Есть целесообразность?
Через вызовы к SDK можно сделать намного больше, чем без них.

Обновят движек и всё по-слетает.
От одной геймдаты, составленной в 2015 году, у меня работало два сервера вплоть до середины в 2018 (потом мне просто надоело это всё). Все в TF2. Движок с тех пор обновлялся, апгрейдился, как и сама игра. А файлы оставались неизменны.
Всего один файл лишь понадобилось с тех пор обновить, но не все.

К тому же, SourceMod, как и MetaMod тоже имеет свойство ломаться с обновлениями игры. Давайте не использовать его, и писать строго на C++ аддоны к движку?
Весь Ваш пост, кроме последнего вопроса и "утверждения", я могу рассмотреть, как набив сообщений.

Оффсета нет или что? Уточняйте.
Вы сейчас похожи на "серверодержателей", которые пишут о проблемах, но не могут сразу назвать игру, перечень плагинов и многое другое. И из них, конечно, приходится вытягивать всё насильно, что раздражает.
 

Черная вдова

Участник
Сообщения
2,795
Реакции
670
Оффсета нет или что? Уточняйте.
Вы сейчас похожи на "серверодержателей", которые пишут о проблемах, но не могут сразу назвать игру, перечень плагинов и многое другое. И из них, конечно, приходится вытягивать всё насильно, что раздражает.
AlliedModders - View Single Post - A vtable dumper that even you can use!
Про игру было несколько не прямых упоминаний
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,924
  • Команда форума
  • #34
Тогда только любым удобным дизассемблером вытягивать, либо претензии к Валвам.
 

Reg1oxeN

Участник
Сообщения
403
Реакции
319
C-подобный:
#include <sourcemod>
#include <sdktools>

Handle g_fnGetVelocity = INVALID_HANDLE;

public void OnPluginStart()
{
    Handle hConfig = LoadGameConfigFile("sdktools.games/engine.csgo");
       
    if(hConfig == INVALID_HANDLE)
        SetFailState("Load Config Fail");
   
   
    StartPrepSDKCall(SDKCall_Entity);
    if (PrepSDKCall_SetFromConf(hConfig, SDKConf_Virtual, "GetVelocity"))
    {
        PrepSDKCall_AddParameter(SDKType_Vector, SDKPass_Plain, 0, VENCODE_FLAG_COPYBACK);
        PrepSDKCall_AddParameter(SDKType_Vector, SDKPass_Plain, 0, VENCODE_FLAG_COPYBACK);
        g_fnGetVelocity = EndPrepSDKCall();
    }
    CloseHandle(hConfig);
   
    if (g_fnGetVelocity == INVALID_HANDLE)
        SetFailState("PrepSDKCall Fail");
}

void GetVelocity(int ent, float[3] vel)
{
    float amp[3];
    SDKCall(g_fnGetVelocity, ent, vel, amp);
}
 

Черная вдова

Участник
Сообщения
2,795
Реакции
670
PrepSDKCall_AddParameter(SDKType_Vector, SDKPass_Plain, 0, VENCODE_FLAG_COPYBACK);
PrepSDKCall_AddParameter(SDKType_Vector, SDKPass_Plain, 0, VENCODE_FLAG_COPYBACK);

А точно так 2 раза надо ?
 

tonline_kms65_1

Участник
Сообщения
565
Реакции
225
@Крузяра,
Мне некогда посты набивать. Вообще некогда на форумах сидеть, завис здесь только из-за своего вопроса, а здесь смотрю - тема интересная. По моему направлению.
Непонятно упрямство Вдовы, не может объяснить, каким образом он управляет этой машиной. Для управления он ведь по любому задает скорость. Как то задает повороты.
Я предполагаю его следующие вопросы:
1. машина уперлась во что-то твердое (отсутствует движение). Если управление с клавиатуры - этот пункт просто не нужен.
2. нужно вывести показания текущей скорости на, к примеру, спидометр, это для визуального эффекта.
3. что-то другое. Это самое интересное, возможно что-то для себя интересное узнаю.
4. упустил еще одно - карта с готовой машиной, двигающейся по пач-трэкам, такое "существо из мира". Но "существом из мира" возможности управлять из sourcepawna нет точно. Этот пункт отпадает.

Заданная скорость, в виде вектора, никак не будет изменяться из-за внешнего воздействия(мира), поэтому все что ты ему советуешь, я думаю, просто бесполезно.
А вот получаемая скорость по мат. формуле будет изменяться, это точно.
И не пойму, почему для изменения скорости нельзя воспользоваться этим GetEntPropVector(ent, Prop_Data, "m_vecVelocity", Speed); 100% работоспособно.
Это не есть скорость в её понимании, это вектор!

Много непонятного, все какое-то мутное.

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

И кстати, выдели этот гайд-урок в отдельную тему. Пригодиться может многим.
 
Последнее редактирование:

Черная вдова

Участник
Сообщения
2,795
Реакции
670
@Крузяра,
Мне некогда посты набивать. Вообще некогда на форумах сидеть, завис здесь только из-за своего вопроса, а здесь смотрю - тема интересная. По моему направлению.
Непонятно упрямство Вдовы, не может объяснить, каким образом он управляет этой машиной. Для управления он ведь по любому задает скорость. Как то задает повороты.
Я предполагаю его следующие вопросы:
1. машина уперлась во что-то твердое (отсутствует движение). Если управление с клавиатуры - этот пункт просто не нужен.
2. нужно вывести показания текущей скорости на, к примеру, спидометр, это для визуального эффекта.
3. что-то другое. Это самое интересное, возможно что-то для себя интересное узнаю.
4. упустил еще одно - карта с готовой машиной, двигающейся по пач-трэкам, такое "существо из мира". Но "существом из мира" возможности управлять из sourcepawna нет точно. Этот пункт отпадает.

Заданная скорость, в виде вектора, никак не будет изменяться из-за внешнего воздействия(мира), поэтому все что ты ему советуешь, я думаю, просто бесполезно.
А вот получаемая скорость по мат. формуле будет изменяться, это точно.
И не пойму, почему для изменения скорости нельзя воспользоваться этим GetEntPropVector(ent, Prop_Data, "m_vecVelocity", Speed); 100% работоспособно.
Это не есть скорость в её понимании, это вектор!

Много непонятного, все какое-то мутное.

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

И кстати, выдели этот гайд-урок в отдельную тему. Пригодиться может многим.
Ты читать будешь какие нибудь мои ответы? Я уже писал что вектор этот и еше один всегда по нулям, зачем ты еше раз пишешь
И я тебе сколько раз говорил что просто хочу машину сделать, какой блин спидометр
Управление самое простое - жмешь вперед машина должна разгонятся вперед как обычная машина в жизни понимаешь? Ауди там или бмв
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,924
  • Команда форума
  • #40
Вот я и не могу понять, для чего нужно получение скорости, тем более в виде вектора.
Как вариант, для скорости машины он берёт за основу скорость игрока. Но это чисто вариант.

И кстати, выдели этот гайд-урок в отдельную тему. Пригодиться может многим.
Сначала его доработать надо. Дописать варианты, например, в случае с CS:GO, когда автоматически оффсеты не вытащить никак, и только ручками в бинаре покопаться.
 
Сверху Снизу