Сообщений: 2,303
Тем: 24
Зарегистрирован: Sep 2010
Репутация:
5,617
Setting Initial Points как бы за себя и говорит. Чар тупо должен с 30000 по Z пропрыгать до минимальной точки в -16250 и выполняя TestMove "нащупать" плоскости.
Сообщений: 469
Тем: 55
Зарегистрирован: Feb 2010
Репутация:
3,209
Что пока что "изучил"
PHP код: <?php
int __cdecl SetPoints(int a1, FWorldBuilder *fb)
{
int o; // esi@1
signed int one; // edi@1
int v4; // ebp@1
double zero; // st7@2
int v6; // eax@2
signed int v7; // ecx@2
int i; // edi@5
int v9; // eax@9
int v10; // eax@13
int v11; // edx@13
int _y; // [sp+4h] [bp-64h]@6
int _x; // [sp+8h] [bp-60h]@3
int v15; // [sp+10h] [bp-58h]@2
int v16; // [sp+14h] [bp-54h]@1
int v17; // [sp+18h] [bp-50h]@1
int v18; // [sp+1Ch] [bp-4Ch]@2
FVector CurrentVector; // [sp+20h] [bp-48h]@8
FVector StartVectot; // [sp+2Ch] [bp-3Ch]@9
FCheckResult ChekResult; // [sp+38h] [bp-30h]@9
int v22; // [sp+64h] [bp-4h]@9
o = 0;
one = 1;
j__vcomp_for_static_simple_init(0, 2047, 1, 1, &v17, &v16);
v4 = v17;
if ( v17 <= v16 )
{
zero = 0.0;
v6 = 16 * v17;
v7 = 16;
v15 = 16 * v17;
v18 = 16;
do
{
_x = v6 + *(_DWORD *)dword_208936B4 + 8;
if ( _x >= fb->min_x && _x <= fb->max_x )
{
for ( i = o; i < 2048; ++i )
{
_y = *(_DWORD *)(dword_208936B4 + 8) + 16 * i + 8;
if ( _y >= fb->min_y && _y <= fb->max_y )
{
CurrentVector.X = (double)_x;
CurrentVector.Y = (double)_y;
CurrentVector.Z = 15000.0;
while ( 1 )
{
StartVectot.X = zero;
StartVectot.Y = zero;
StartVectot.Z = -30000.0;
v22 = o;
LOBYTE(v9) = FWorldBuilder::TestMove(fb, &CurrentVector, &StartVectot, &ChekResult);
if ( !v9 )
break;
if ( CurrentVector.Z <= -16200.0 )
goto LABEL_18;
zero = 0.0;
}
omp_set_lock(a1);
if ( sub_201D49C0(dword_208936B4, v4, i, (signed int)CurrentVector.Z / 8, (int)&CurrentVector, 1) )
{
v10 = sub_201D4D00();
if ( *(_DWORD *)(v10 + 4) )
*(_DWORD *)(*(_DWORD *)(v10 + 8) + 36) = v11;
else
*(_DWORD *)(v10 + 4) = v11;
++*(_DWORD *)v10;
*(_DWORD *)(v10 + 8) = v11;
}
omp_unset_lock(a1);
o = 0;
LABEL_18:
zero = 0.0;
}
}
j__vcomp_atomic_add_i4(&fb->unk1, 1);
zero = 0.0;
one = 1;
v7 = v18;
}
v4 += one;
v6 = v7 + v15;
v15 += v7;
}
while ( v4 <= v16 );
}
j__vcomp_for_static_end();
return j__vcomp_barrier();
}
Сообщений: 2,267
Тем: 6
Зарегистрирован: Aug 2009
Репутация:
8,698
За информацию спасибо, но вот интуиция подсказывает не там мы копаемся.
Сообщений: 469
Тем: 55
Зарегистрирован: Feb 2010
Репутация:
3,209
02-26-2012, 12:12 PM
(Сообщение последний раз редактировалось: 02-26-2012, 12:41 PM ALF..)
Похоже что копать надо FWorldBuilder::TestMove
Еще есть интересные функции
UGameEngien::GetSWMapXY
UMasterLevel::GetLevelInfo
CheckWithTerrain
ULevel::MultiLineCheck
Все они вызываются в FWorldBuilder::TestMove
Добавлено через 24 минуты
Или же ошибка тут
PHP код: <?php
int __userpurge sub_201D49C0<eax>(int a1<esi>, int a2, int a3, signed int a4, int a5, int 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 + 4 * 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 ( 1 )
{
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(v15, a5, v6, a6);
else
v16 = 0;
*(_DWORD *)(v16 + 32) = v8;
*(_DWORD *)(v17 + 32) = v16;
++*(_DWORD *)(a1 + 25165844);
++*(_WORD *)(a1 + 2 * v7 + 16777232);
debugf(L"4-x=%d,y=%d,story=%d", a2);
result = v16;
}
return result;
}
}
v13 = (***(int (__stdcall ****)(_DWORD, _DWORD))GMalloc)(44, L"new");
if ( v13 )
v14 = sub_2012B820(v13, a5, v6, a6);
else
v14 = 0;
*(_DWORD *)(v14 + 32) = 0;
*(_DWORD *)(v17 + 32) = v14;
++*(_DWORD *)(a1 + 25165844);
++*(_WORD *)(a1 + 2 * v7 + 16777232);
debugf(L"3-x=%d,y=%d,story=%d", a2);
result = v14;
}
}
else
{
v11 = (***(int (__stdcall ****)(_DWORD, _DWORD))GMalloc)(44, L"new");
v12 = 1;
if ( v11 )
{
result = sub_2012B820(v11, a5, a4, a6);
v12 = 1;
}
else
{
result = 0;
}
*(_DWORD *)(a1 + 4 * v7 + 16) = result;
*(_DWORD *)(result + 32) = v8;
*(_DWORD *)(a1 + 25165844) += v12;
*(_WORD *)(a1 + 2 * v7 + 16777232) += v12;
}
}
else
{
result = (***(int (__stdcall ****)(_DWORD, _DWORD))GMalloc)(44, L"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 + 4 * v7 + 16) = result;
++*(_DWORD *)(a1 + 25165840);
++*(_DWORD *)(a1 + 25165844);
++*(_WORD *)(a1 + 2 * v7 + 16777232);
}
return result;
}
Ибо СИП в этой функции сразу выходит с неё....
После проверки
PHP код: <?php
v8 = *(_DWORD *)(a1 + 4 * v7 + 16);
if ( v8 )
{
то есть у нас v8 = false
А не, v8 у нас может быть в true только когда эта же функция вызывается с FindRich.... в СИПе у нас она всегда фелс, не зависимо от того есть какие то точки или нету.....
Сообщений: 1,672
Тем: 54
Зарегистрирован: Jun 2011
Репутация:
5,074
а какой длл вы тут копаете?
поделитесь мне тоже интересно покопатся
ну и я знаю то что нехотите знать вы
Сообщений: 2,303
Тем: 24
Зарегистрирован: Sep 2010
Репутация:
5,617
Engine.dll функцию FWorldBuilder и все вытекающее из нее
Сообщений: 985
Тем: 8
Зарегистрирован: Jan 2010
Репутация:
6,731
а если в корне уточнить то билд закрытых помещений на квадрате за один раз
Пусть в горле ложка застрянет у того кто писал систему вступления в клан. © Mifesto
Сообщений: 7
Тем: 0
Зарегистрирован: Feb 2012
Репутация:
0
Киньте Engine.dll для ХФ пожалуйста.
Сообщений: 2,267
Тем: 6
Зарегистрирован: Aug 2009
Репутация:
8,698
Linda Написал:Киньте Engine.dll для ХФ пожалуйста. У фьюри портал разве не пашет?
Сообщений: 1,672
Тем: 54
Зарегистрирован: Jun 2011
Репутация:
5,074
ANZO Написал:Engine.dll функцию FWorldBuilder и все вытекающее из нее
интересно сколько бы весил архив со всем енгине длл которые выпустила нцсофт?...........
думаю на каздую версию протокола отдельная ендзин длл. так где то 1500+ дллов имеется в мире
поетому я и спрашиваю какая длл из етих 1500 ковыряется тут
|