Вопрос Supreme commander forged alliance

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
30 Мар 2020
Сообщения
364
Реакции
24
Не могу понять, как реверсить функу на вызов комманд (ордеров). Я сумел найти ентити лист (которая лежит в классе Sim (Simulation)), и находить сущности CUnit. Я рылся по хрефам, и вроде как нашел что-то что вызывается когда отдаю приказ, но походу это функа на диспатчкомманд а не создать(вызов):

C++:
Expand Collapse Copy
// #STR: "IssueCommand"
int *__thiscall sub_750650(_DWORD *SIM, _DWORD *a2, _DWORD *a3, char flag)
{
  _DWORD *Sim; // ebx
  int *result; // eax
  int EntityID; // eax
  int v7; // ecx
  int entityList; // edi
  _DWORD *Unit; // ebx
  int Army; // edx
  unsigned int commandSource; // eax
  unsigned int v12; // edi
  int IUnit; // eax
  int v14; // ecx
  int v15; // eax
  int entityID; // [esp+14h] [ebp-54h] BYREF
  int *entityPtr; // [esp+18h] [ebp-50h] BYREF
  int EntID; // [esp+2Ch] [ebp-3Ch]
  int *v20; // [esp+30h] [ebp-38h] BYREF
  int *v21; // [esp+34h] [ebp-34h]
  char *v22; // [esp+38h] [ebp-30h]
  char *v23; // [esp+3Ch] [ebp-2Ch]
  char *v24; // [esp+40h] [ebp-28h]
  char *v25; // [esp+44h] [ebp-24h]
  char v26[16]; // [esp+48h] [ebp-20h] BYREF
  char v27; // [esp+58h] [ebp-10h] BYREF
  int v28; // [esp+64h] [ebp-4h]

  Sim = SIM;
  result = (IsValidCommand)(*a3, "IssueCommand");
  if ( result )
  {
    v21 = &v20;
    v20 = &v20;
    v22 = v26;
    v23 = v26;
    v24 = &v27;
    v25 = v26;
    v28 = 0;
    EntityID = (sub_4017B0)();                  // v6 is 0x00100000
    v7 = a2[5] - a2[4];                         // v7 is 0x00000004
    EntID = EntityID;
    if ( EntityID != 0x20 * (a2[2] + (v7 >> 2)) )
    {
      do
      {
        entityList = Sim[609];                  // v8 is 0x151BFB90
        entityID = EntID;                       // v17 is 0x00100000
        GetEntityByID(&entityPtr, entityList, &entityID);
        if ( entityPtr == *(entityList + 4) )
          goto LABEL_13;
        Unit = entityPtr[4];
        if ( !Unit )
          goto LABEL_13;
        Army = Unit[83];
        if ( Army )
        {
          if ( *(Army + 0x1C0) )
            goto LABEL_13;
          commandSource = SIM[587];
          if ( commandSource != 255 )
          {
            v12 = (commandSource >> 5) - *(Army + 0x130);// v12 is 0
            if ( v12 < (*(Army + 0x13C) - *(Army + 0x138)) >> 2
              && ((*(*(Army + 0x138) + 4 * v12) >> (commandSource & 0x1F)) & 1) != 0 )
            {
LABEL_11:
              IUnit = (*(*Unit + 0x10))(Unit);  // is called  (sub ecx,08) will lead to vmt of Unit vmtable
              if ( IUnit )
                (sub_5848A0)(IUnit);
              goto LABEL_13;
            }
          }
        }
        if ( sub_74E4E0(SIM) )
          goto LABEL_11;
LABEL_13:
        Sim = SIM;
        v14 = (sub_4017B0)();                   // v14 is 0x00100020
        v15 = a2[5] - a2[4];
        EntID = v14;
      }
      while ( v14 != 0x20 * (a2[2] + (v15 >> 2)) );
    }
    if ( a3[3] != 31 || sub_74E4E0(Sim) )
    {
      (sub_6F7D40)(Sim, a3, flag); //// чат жпт мне подсказывает что вот эта функа отвечает за реализацию функи, тоесть сервак прислал команду или её данные и её нужно отобразить в игре.
      if ( v22 != v25 )
        sub_AC134D(v22);
      result = v21;
      v20[1] = v21;
      *v21 = v20;
    }
    else
    {
      if ( v22 != v25 )
        sub_AC134D(v22);
      v20[1] = v21;
      result = v20;
      *v21 = v20;
    }
  }
  return result;
}
 
А ты для FaF делаешь чит или для Local?
 
Что за FaF? я для себя делаю просто для экспириинса
 
Назад
Сверху Снизу