Показать сообщение отдельно
Непрочитано 26.02.2012, 12:12   #144
Аватар для ALF.
Герой

По умолчанию Re: Генерация методом buildzone

Похоже что копать надо FWorldBuilder::TestMove

Еще есть интересные функции

UGameEngien::GetSWMapXY
UMasterLevel::GetLevelInfo
CheckWithTerrain
ULevel::MultiLineCheck

Все они вызываются в FWorldBuilder::TestMove

Добавлено через 24 минуты
Или же ошибка тут
PHP код:
int __userpurge sub_201D49C0<eax>(int a1<esi>, int a2int a3signed int a4int a5int a6)
{
  
signed int v6// ebp@1
  
int v7// edi@1
  
int v8// ebx@1
  
int result// eax@2
  
signed int v10// eax@6
  
int v11// eax@7
  
signed int v12// ecx@7
  
int v13// eax@17
  
int v14// ebx@18
  
int v15// eax@21
  
int v16// ebp@22
  
int v17// [sp+28h] [bp+Ch]@13

  
v6 a4;
  
v7 = (a2 << 11) + a3;
  
v8 = *(_DWORD *)(a1 v7 16);
  if ( 
v8 )
  {
    
v10 = *(_WORD *)v8;
    if ( 
v10 >= a4 )
    {
      if ( 
v10 == a4 )
      {
        
debugf(L"x=%d,y=%d,FAIL!!!"a2);
        
result 0;
      }
      else
      {
        while ( 
)
        {
          
v17 v8;
          
v8 = *(_DWORD *)(v8 32);
          if ( !
v8 )
            break;
          if ( 
v6 >= *(_WORD *)v8 )
          {
            if ( *(
_WORD *)v8 == v6 )
            {
              
debugf(L"x=%d,y=%d,FAIL????"a2);
              
result 0;
            }
            else
            {
              
v15 sub_20099B70(44);
              if ( 
v15 )
                
v16 sub_2012B820(v15a5v6a6);
              else
                
v16 0;
              *(
_DWORD *)(v16 32) = v8;
              *(
_DWORD *)(v17 32) = v16;
              ++*(
_DWORD *)(a1 25165844);
              ++*(
_WORD *)(a1 v7 16777232);
              
debugf(L"4-x=%d,y=%d,story=%d"a2);
              
result v16;
            }
            return 
result;
          }
        }
        
v13 = (***(int (__stdcall ****)(_DWORD_DWORD))GMalloc)(44L"new");
        if ( 
v13 )
          
v14 sub_2012B820(v13a5v6a6);
        else
          
v14 0;
        *(
_DWORD *)(v14 32) = 0;
        *(
_DWORD *)(v17 32) = v14;
        ++*(
_DWORD *)(a1 25165844);
        ++*(
_WORD *)(a1 v7 16777232);
        
debugf(L"3-x=%d,y=%d,story=%d"a2);
        
result v14;
      }
    }
    else
    {
      
v11 = (***(int (__stdcall ****)(_DWORD_DWORD))GMalloc)(44L"new");
      
v12 1;
      if ( 
v11 )
      {
        
result sub_2012B820(v11a5a4a6);
        
v12 1;
      }
      else
      {
        
result 0;
      }
      *(
_DWORD *)(a1 v7 16) = result;
      *(
_DWORD *)(result 32) = v8;
      *(
_DWORD *)(a1 25165844) += v12;
      *(
_WORD *)(a1 v7 16777232) += v12;
    }
  }
  else
  {
    
result = (***(int (__stdcall ****)(_DWORD_DWORD))GMalloc)(44L"new");
    if ( 
result )
    {
      *(
_WORD *)result a4;
      *(
_DWORD *)(result 4) = *(_DWORD *)a5;
      *(
_DWORD *)(result 8) = *(_DWORD *)(a5 4);
      *(
_DWORD *)(result 12) = *(_DWORD *)(a5 8);
      *(
_DWORD *)(result 32) = 0;
      *(
_DWORD *)(result 36) = 0;
      *(
_DWORD *)(result 40) = a6;
      *(
_WORD *)(result 22) = 0;
      *(
_WORD *)(result 20) = 0;
      *(
_WORD *)(result 18) = 0;
      *(
_WORD *)(result 16) = 0;
    }
    else
    {
      
result 0;
    }
    *(
_DWORD *)(a1 v7 16) = result;
    ++*(
_DWORD *)(a1 25165840);
    ++*(
_DWORD *)(a1 25165844);
    ++*(
_WORD *)(a1 v7 16777232);
  }
  return 
result;

Ибо СИП в этой функции сразу выходит с неё....
После проверки
PHP код:
 v8 = *(_DWORD *)(a1 v7 16);
  if ( 
v8 )
  { 
то есть у нас v8 = false


А не, v8 у нас может быть в true только когда эта же функция вызывается с FindRich.... в СИПе у нас она всегда фелс, не зависимо от того есть какие то точки или нету.....

Последний раз редактировалось ALF.; 26.02.2012 в 12:41. Причина: Добавлено сообщение
ALF. вне форума Отправить сообщение для ALF. с помощью ICQ Отправить сообщение для ALF. с помощью Skype™