Автор Тема: TraceRay.  (Прочитано 1296 раз)

Оффлайн Jak łaska za praca

  • Прохожий
  • *
  • Сообщений: 58
  • Репутация: +1/-0
  • Как украшение на торт
    • aktel999
    • Просмотр профиля
TraceRay.
« : Август 29, 2014, 11:02:05 pm »
Открыл для себя то что в Maxo Vehicle Loader есть Python скрипты и для них представляться интересные модули.
Но автор скупердяй спрятал исходники у себя и IsDebuggerPresent и ещё что-то что отлаживать получается только в Olly.
Нашел я PyMethodDef
{
      char *m_name = "TraceRay"
      PyObject* m_method = "Python_TraceRay"
      .......
}
Но понять что делает одна часть его кода не понимаю.  Кто скажет как понять то код или как прыгнуть в нужное место в Olly зная адрес пол ученый в IDA?
« Последнее редактирование: Август 29, 2014, 11:04:25 pm от Jak łaska za praca »
Украшаю торты на своих вечеринках, классных вечеринках.

Оффлайн Jak łaska za praca

  • Прохожий
  • *
  • Сообщений: 58
  • Репутация: +1/-0
  • Как украшение на торт
    • aktel999
    • Просмотр профиля
Re: TraceRay.
« Ответ #1 : Сентябрь 02, 2014, 12:29:11 am »
Что такое CEntity и CColPoint?
void Inj()
{
vec3_t start = { 0.0, 0.0, 0.0 };
vec3_t end = { 0.0, 0.0, 1.0 };
char*  sd[50];

        //CWorld::ProcessLineOfSight
int (*func)(vec3_t const *, vec3_t const *, vec3_t const * , char ** , qboolean , qboolean , qboolean , qboolean , qboolean , qboolean , qboolean , qboolean  ) = 0x004D92D0;



int test = func( start, end, start, sd, true, true, true, true, true, true, true, true );
        //test = 1179648
//SDK_InjectFunction( 0x4D92D0, Test );
}
Украшаю торты на своих вечеринках, классных вечеринках.

Оффлайн Sektor

  • Администратор
  • Постоялец
  • *****
  • Сообщений: 514
  • Репутация: +33/-0
    • Просмотр профиля
Re: TraceRay.
« Ответ #2 : Сентябрь 02, 2014, 06:45:23 pm »
CEntity - Это скажем, самый такой базовый класс от которого, наследуются другие классы как CPed, CVehicle.
CColPoint - Скорее всего подразумевает Collision Point, объект который являться частью, коллизий(проверок столкновений).

Оффлайн Jak łaska za praca

  • Прохожий
  • *
  • Сообщений: 58
  • Репутация: +1/-0
  • Как украшение на торт
    • aktel999
    • Просмотр профиля
Re: TraceRay.
« Ответ #3 : Сентябрь 03, 2014, 01:28:48 am »
Описание в функции в SA точно такое же
// Данный скрипт был создан специально для vol-gta.com и libertycity.ru
// Его суть - при нацеливании на пассажира в автообиле, он (пассажир) будет совершать
// определённые дейтсвия. Так, например, обычный гражданин будет пытаться сбежать, а
// человек из криминальных кругов начнет меряться силой с главным героем.
// При написании этого скрипта использовались продвинутые методы работы с кодом,
// что позволило эффективно решить ряд востребованных задач.
// В данном исходнике используются дополнительные файлы,
// подробнее см. http://modsforgta.ucoz.ru/forum/5-71-1

{$CLEO}

0AC6: 20@ = label @temp_sphere offset
0AC6: 21@ = label @temp_line offset

// Здесь происходит запись смещений меток в таблицу выбора поведения педов.
0AC6: 28@ = label @ped_events offset
0085: 0@ = 28@
0A8C: write_memory 0@ size 4 value @event_skip virtual_protect 0 // PLAYER1
0@ += 4
0A8C: write_memory 0@ size 4 value @event_skip virtual_protect 0 // PLAYER2
0@ += 4
0A8C: write_memory 0@ size 4 value @event_skip virtual_protect 0 // PLAYER_NETWORK
0@ += 4
0A8C: write_memory 0@ size 4 value @event_skip virtual_protect 0 // PLAYER_UNUSED
0@ += 4
0A8C: write_memory 0@ size 4 value @event_civmale virtual_protect 0 // CIVMALE
0@ += 4
0A8C: write_memory 0@ size 4 value @event_civfemale virtual_protect 0 // CIVFEMALE
0@ += 4
0A8C: write_memory 0@ size 4 value @event_cop virtual_protect 0 // COP
0@ += 4
0A8C: write_memory 0@ size 4 value @event_gang virtual_protect 0 // GANG1
0@ += 4
0A8C: write_memory 0@ size 4 value @event_gang virtual_protect 0 // GANG2
0@ += 4
0A8C: write_memory 0@ size 4 value @event_gang virtual_protect 0 // GANG3
0@ += 4
0A8C: write_memory 0@ size 4 value @event_gang virtual_protect 0 // GANG4
0@ += 4
0A8C: write_memory 0@ size 4 value @event_gang virtual_protect 0 // GANG5
0@ += 4
0A8C: write_memory 0@ size 4 value @event_gang virtual_protect 0 // GANG6
0@ += 4
0A8C: write_memory 0@ size 4 value @event_gang virtual_protect 0 // GANG7
0@ += 4
0A8C: write_memory 0@ size 4 value @event_gang virtual_protect 0 // GANG8
0@ += 4
0A8C: write_memory 0@ size 4 value @event_gang virtual_protect 0 // GANG9
0@ += 4
0A8C: write_memory 0@ size 4 value @event_gang virtual_protect 0 // GANG10
0@ += 4
0A8C: write_memory 0@ size 4 value @event_civmale virtual_protect 0 // DEALER
0@ += 4
0A8C: write_memory 0@ size 4 value @event_civmale virtual_protect 0 // MEDIC
0@ += 4
0A8C: write_memory 0@ size 4 value @event_civmale virtual_protect 0 // FIREMAN
0@ += 4
0A8C: write_memory 0@ size 4 value @event_gang virtual_protect 0 // CRIMINAL
0@ += 4
0A8C: write_memory 0@ size 4 value @event_civmale virtual_protect 0 // BUM
0@ += 4
0A8C: write_memory 0@ size 4 value @event_civfemale virtual_protect 0 // PROSTITUTE
0@ += 4
0A8C: write_memory 0@ size 4 value @event_skip virtual_protect 0 // SPECIAL
0@ += 4
0A8C: write_memory 0@ size 4 value @event_skip virtual_protect 0 // MISSION1
0@ += 4
0A8C: write_memory 0@ size 4 value @event_skip virtual_protect 0 // MISSION2
0@ += 4
0A8C: write_memory 0@ size 4 value @event_skip virtual_protect 0 // MISSION3
0@ += 4
0A8C: write_memory 0@ size 4 value @event_skip virtual_protect 0 // MISSION4
0@ += 4
0A8C: write_memory 0@ size 4 value @event_skip virtual_protect 0 // MISSION5
0@ += 4
0A8C: write_memory 0@ size 4 value @event_skip virtual_protect 0 // MISSION6
0@ += 4
0A8C: write_memory 0@ size 4 value @event_skip virtual_protect 0 // MISSION7
0@ += 4
0A8C: write_memory 0@ size 4 value @event_skip virtual_protect 0 // MISSION8

// Здесь начинается основной цикл.
{$I inloop}

if or
    not player.Defined($PLAYER_CHAR)
    06B9: cutscene_data_loaded
then
    continue
end

// Проверяем, что игрок использует нужное оружие.
0470: 0@ = actor $PLAYER_ACTOR current_weapon
if or
    0@ < 22
    0@ > 38
then
    continue
end

// Проверяем, что игрок прицеливается.
0A8D: 0@ = read_memory {CCamera > CCam > camMode } 0xB6F1A8 size 2 virtual_protect 0
if and
    0@ <> 8
    0@ <> 51
    0@ <> 53
then
    continue
end

// Нам нужно построить линию прицеливания игрока. Начало этой линий - позиция кости правой руки + оффсет.
// Конец - координаты прицеливания камеры.

// Находим координаты начала линии прицеливания игрока (2@, 3@, 4@).
0A96: 0@ = actor $PLAYER_ACTOR struct
0A8E: 1@ = 0@ + 0x18
0A8D: 1@ = read_memory {CPed > rwObject} 1@ size 4 virtual_protect 0
0AA7: call_function {GetAnimHierarchyFromSkinClump} 0x734A40 num_params 1 pop 1 _clump 1@ _result 1@
if
    1@ <> 0 // Если у скина есть иерархия - получаем координаты кости правой руки и добавляем к ним оффсет.
then
    0AA7: call_function {RpHAnimIDGetIndex} 0x7C51A0 num_params 2 pop 2 _boneId 24 _hierarchy 1@ _result 2@
    1@ += 8
    0A8D: 1@ = read_memory {RpHAnimHierarchy > pMatrixArray} 1@ size 4 virtual_protect 0
    2@ *= 0x40
    005A: 1@ += 2@
    5@ = 1.0
    6@ = 0.0
    7@ = 0.0
    0AA5: call {RwV3dTransformPoint} 0x7EDD60 num_params 3 pop 3 _transformMatrix 1@ _pointIn 5@v _pointOut 2@v
else
    // Если у скина нет иерархии - получаем кординаты скина и добавляем к ним оффсет.
    04C4: store_coords_to 2@ 3@ 4@ from_actor $PLAYER_ACTOR with_offset 0.0 1.5 0.7
end

// Находим координаты конца линии прицеливания игрока (5@, 6@, 7@).
0AA6: call_method {CCamera::Find3rdPersonCamTargetVector} 0x514970 struct 0xB6F028 num_params 6 pop 0 _targetOut 5@v _cameraOut 8@v _z 4@ _y 3@ _x 2@ _range 15.0

// На выходе, получили -
//    2@, 3@, 4@ - начало линии прицеливания игрока
//    5@, 6@, 7@ - конец линии прицеливания игрока

// Применяем код для всех педов.
{$I forallpeds}

if or                                                               
    actor.Dead(ped)
    not actor.Driving(ped)
    04C8: actor ped driving_flying_vehicle
then
    continue
end

0811: 1@ = actor ped used_car
0A97: 1@ = car 1@ struct

// Если у автомобиля "бешенный" водитель - пропускаем его.
0A8E: 11@ = 1@ + 0xC
0A8D: 11@ = read_memory 11@ size 1 virtual_protect 0
if
    11@ == 123
then
    continue
end

0A96: 11@ = actor ped struct

// Проверяем, что игрок целится в этого педа. Для этого создаём сферу, которая будет описывать модель педа.

// Получаем тип транспортного средства
1@ += 0x594
0A8D: 1@ = read_memory {CVehicle > vehicleSubType} 1@ size 4 virtual_protect 0

// Пропускаем воздушный и водный транспорт.
if or
    1@ == 3
    1@ == 4
    1@ == 5
then
    continue
end

// Если пед находится на мотоцикле или велосипеде, создаём сферу для всего педа, иначе - для его головы.
if or
    1@ == 1
    1@ == 9
    1@ == 10
then
    // Пропускаем копа на байке.
    089F: get_actor ped pedtype_to 8@
    if
        8@ == 6
    then
        continue
    end
   
    0AA6: call_method {CPed::GetBonePosition} 0x5E4280 struct 11@ num_params 3 pop 0 _bDynamic true _boneId 1 _point 8@v
    10@ += 0.1
    12@ = 1.0
else
    0AA6: call_method {CPed::GetBonePosition} 0x5E4280 struct 11@ num_params 3 pop 0 _bDynamic true _boneId 4 _point 8@v
    12@ = 0.3
end

// Проверяем, что пед видит игрока.

// Построим трапецию вида для педа (Z), и проверим, что в ней находится игрок.
// Для этого надо проверить каждую из сторон трапеции на пересечение с линией (координаты игрока X ; произвольная точка Y)
// Если мы найдем больше одного пересечения - значит, точка с координатами игрока находится вне трапеции.
// Также, выполним проверку для Z-координат педа и игрока.
//
//              __
//             |Z|
//          B  ---  C
//            /   \
//           /     \
//          /       \
//         /    X    \
//     A  ----/--------  D
//          /
//        /
//      /
//    /
//  Y
//
// Получаем позицию игрока (22@, 23@, 24@)
0AA6: call_method {CPed::GetBonePosition} 0x5E4280 struct 0@ num_params 3 pop 0 _bDynamic true _boneId 1 _point 22@v

// Проверяем, что пед и игрок находятся на одинаковой высоте
0087: 13@ = 24@
0063: 24@ -= 10@
if or
    24@ > 2.0
    24@ < -2.0
then
    continue
end

// Количество пересечений
26@ = 0

// Проверка пересечения отрезков BA и XY
04C4: store_coords_to 13@ 14@ 15@ from_actor ped with_offset 1.0 0.0 0.0   // B
04C4: store_coords_to 15@ 16@ 17@ from_actor ped with_offset 15.0 15.0 0.0 // A
0AA7: call_function {DoesLineSegmentIntersect} 0x49D220 num_params 8 pop 8 _By2 -3000.0 _Bx2 -3000.0 _By1 23@ _Bx1 22@ _Ay2 16@ _Ax2 15@ _Ay1 14@ _Ax1 13@ _result 25@
if
    08B7: test 25@ bit 0
then
    26@++
end

// Проверка пересечения отрезков BC и XY
04C4: store_coords_to 17@ 18@ 19@ from_actor ped with_offset -1.0 0.0 0.0 // C
0AA7: call_function {DoesLineSegmentIntersect} 0x49D220 num_params 8 pop 8 _By2 -3000.0 _Bx2 -3000.0 _By1 23@ _Bx1 22@ _Ay2 18@ _Ax2 17@ _Ay1 14@ _Ax1 13@ _result 25@
if
    08B7: test 25@ bit 0
then
    26@++
end

// Проверка пересечения отрезков CD и XY
04C4: store_coords_to 13@ 14@ 15@ from_actor ped with_offset -15.0 15.0 0.0 // D
0AA7: call_function {DoesLineSegmentIntersect} 0x49D220 num_params 8 pop 8 _By2 -3000.0 _Bx2 -3000.0 _By1 23@ _Bx1 22@ _Ay2 14@ _Ax2 13@ _Ay1 18@ _Ax1 17@ _result 25@
if
    08B7: test 25@ bit 0
then
    26@++
end

// Проверка пересечения отрезков AD и XY
0AA7: call_function {DoesLineSegmentIntersect} 0x49D220 num_params 8 pop 8 _By2 -3000.0 _Bx2 -3000.0 _By1 23@ _Bx1 22@ _Ay2 14@ _Ax2 13@ _Ay1 16@ _Ax1 15@ _result 25@
if
    08B7: test 25@ bit 0
then
    26@++
end

// Если у нас не одно пересечение - игрок вне трапеции.
if
    26@ <> 1
then
    continue
end

// Итак, игрок находится в поле зрения педа.
   
// Создаем сферу и линию.
0AA6: call_method {CColSphere::Set} 0x40FD10 struct 20@ num_params 5 pop 0 _lighting 255 _flags 9 _material 0 _point 8@v _radius 12@
0AA6: call_method {CColLine::Set} 0x40EF50 struct 21@ num_params 2 pop 0 _end 5@v _start 2@v

// Проверяем, что сфера и линия пересекаются.
0AA7: call_function {CCollision::TestLineSphere} 0x417470 num_params 2 pop 2 _sphere 20@ _line 21@ _result 13@
if
    88B7: not test 13@ bit 0
then
    continue
end

// Проверяем, что между игроком и педом нет преград.
// При этом, игнорируем автомобиль педа.
03C0: 1@ = actor ped car
0A97: 1@ = car 1@ struct
0A8C: write_memory {CWorld::pIgnoreEntity} 0xB7CD68 size 4 value 1@ virtual_protect 0
0AA7: call_function {CWorld::ProcessLineOfSight} 0x56BA00 num_params 12 pop 12 0 0 0 0 _objects 1 _peds 0 _vehicles 1 _buildings 1 _pEntity 1@v _colPoint 20@ _end 5@v _start 2@v _result: 13@
0A8C: write_memory {CWorld::pIgnoreEntity} 0xB7CD68 size 4 value 0 virtual_protect 0
if
    08B7: test 13@ bit 0
then
    continue
end

// Выбираем поведение педа, в зависимости от его типа.
089F: get_actor ped pedtype_to 8@
if or
    8@ < 0
    8@ > 31
then
    continue
end

// Если автомобиль "на ходу" - водитель попытается удрать, добавив скорости.
03C0: 1@ = actor ped car
02E3: 1@ = car 1@ speed
if
    1@ > 3.0
then
    gosub @EventDriveAway
else
    8@ *= 4
    005A: 8@ += 28@
    0A8D: 8@ = read_memory 8@ size 4 virtual_protect 0
    // Получаем случайное число (0 - 100 %)
    0209: 1@ = random_int_in_ranges 0 100
    gosub 8@
end

// Если рядом находятся полицейские - игрок получит звезду розыска.
if
    not player.WantedLevel($PLAYER_CHAR) > 0
then
    1@ = false
    if
        0AE1: 2@ = random_actor_near_point 22@ 23@ 24@ in_radius 20.0 find_next 0 pass_deads 1
    then
        repeat
            089F: get_actor 2@ pedtype_to 3@
            if
                3@ == 6
            then
                1@ = true
            end
        until 8AE1: not 2@ = random_actor_near_point 22@ 23@ 24@ in_radius 20.0 find_next 1 pass_deads 1
    end
    if
        1@ == true
    then
        player.WantedLevel($PLAYER_CHAR) = 1
    end
end
   
{$I for_end}

{$I end}

// Здесь находится код поведения различных типов педов.
:event_skip
return

:event_civmale
// Если у педа есть оружие - шансов, что он будет атаковать, больше.
// Проверяем, есть ли у педа оружие.
0AB1: call @HasPedAnyWeapon 1 _ped_struct 11@ _result 4@
if
    4@ == true
then
    // 70% - будет атаковать
    // 15% - будет пытаться уйти на автомобиле
    // 15% - будет пытаться убежать, оставив автомобиль
    if
        1@ < 85
    then
        if
            1@ < 70
        then
            07A5: AS_actor ped attack_actor $PLAYER_ACTOR time -1
        else
            05DD: AS_actor ped flee_from_actor $PLAYER_ACTOR from_origin_radius 100.0 timelimit -1
        end
    else
        gosub @EventDriveAway
    end
else
    // Если нет оружия:
    // 45% - будет пытаться уйти на автомобиле
    // 45% - будет пытаться убежать, оставив автомобиль
    // 10% - будет атаковать
    if
        1@ < 90
    then
        if
            1@ < 45
        then
            05DD: AS_actor ped flee_from_actor $PLAYER_ACTOR from_origin_radius 100.0 timelimit -1
        else
            gosub @EventDriveAway
        end
    else
        07A5: AS_actor ped attack_actor $PLAYER_ACTOR time -1
    end
end
return

:event_civfemale
// Если у педа есть оружие - шансов, что он будет атаковать, больше.
// Проверяем, есть ли у педа оружие.
0AB1: call @HasPedAnyWeapon 1 _ped_struct 11@ _result 4@
if
    4@ == true
then
    // 50% - будет атаковать
    // 25% - будет пытаться уйти на автомобиле
    // 25% - будет пытаться убежать, оставив автомобиль
    if
        1@ < 75
    then
        if
            1@ < 50
        then
            07A5: AS_actor ped attack_actor $PLAYER_ACTOR time -1
        else
            05DD: AS_actor ped flee_from_actor $PLAYER_ACTOR from_origin_radius 100.0 timelimit -1
        end
    else
        gosub @EventDriveAway
    end
else
    // Если нет оружия:
    // 30% - будет пытаться уйти на автомобиле
    // 60% - будет пытаться убежать, оставив автомобиль
    // 10% - будет атаковать
    if
        1@ < 90
    then
        if
            1@ < 60
        then
            05DD: AS_actor ped flee_from_actor $PLAYER_ACTOR from_origin_radius 100.0 timelimit -1
        else
            gosub @EventDriveAway
        end
    else
        07A5: AS_actor ped attack_actor $PLAYER_ACTOR time -1
    end
end
return

:event_cop
if
    not player.WantedLevel($PLAYER_CHAR) > 0
then
    player.WantedLevel($PLAYER_CHAR) = 1
end
return

:event_gang
// Если у педа есть оружие - шансов, что он будет атаковать, больше.
// Проверяем, есть ли у педа оружие.
0AB1: call @HasPedAnyWeapon 1 _ped_struct 11@ _result 4@
if
    4@ == true
then
    // 80% - будет атаковать
    // 20% - будет пытаться уйти на автомобиле
    if
        1@ < 80
    then
        07A5: AS_actor ped attack_actor $PLAYER_ACTOR time -1
    else
        gosub @EventDriveAway
    end
else
    // Если нет оружия:
    // 50% - будет пытаться уйти на автомобиле
    // 15% - будет пытаться убежать, оставив автомобиль
    // 35% - будет атаковать
    if
        1@ < 85
    then
        if
            1@ < 50
        then
            gosub @EventDriveAway
        else
            07A5: AS_actor ped attack_actor $PLAYER_ACTOR time -1
        end
    else
        05DD: AS_actor ped flee_from_actor $PLAYER_ACTOR from_origin_radius 100.0 timelimit -1
    end
end
return

// Проверка, что у педа есть оружие
:HasPedAnyWeapon // 0@ - структура педа
0@ += 0x5A0
for 1@ = 0 to 12
    0A8D: 2@ = read_memory 0@ size 4 virtual_protect 0
    if
        2@ <> 0
    then
        0AB2: ret 1 true
    end
    0@ += 0x1C
end
0AB2: ret 1 false

// Это стандартное поведение педа, автомобиль которого атакуют. Обычно, такой пед начинает удирать на автомобиле.
:EventDriveAway
03C0: 1@ = actor ped car
0A97: 1@ = car 1@ struct
0A8E: 2@ = 1@ + 0xC
0A8C: write_memory 2@ size 1 value 123 virtual_protect 0 // "Помечаем" этот автомобиль
0AA6: call_method {CEventVehicleDamageWeapon::CEventVehicleDamageWeapon} 0x61C2E0 struct 20@ num_params 3 pop 0 _type 31 _ped 0@ _vehicle 1@
0A8C: write_memory 20@ size 4 value 0x86D640 virtual_protect 0
0A8E: 1@ = 11@ + 0x47C
0A8D: 1@ = read_memory {CPed > CPedIntelligence} 1@ size 4 virtual_protect 0
1@ += 0x68
0AA6: call_method {CEventGroup::SetActorEvent} 0x4AB420 struct 1@ num_params 2 pop 0 _type 0 _data 20@
0AA6: call_method {CEventVehicleDamageWeapon::~CEventVehicleDamageWeapon} 0x4B1990 struct 20@ num_params 0 pop 0
return

// Буфер для хранения сферы (CColSphere)
:temp_sphere
hex
    00000000 00000000 00000000 00000000  00000000
end

// Буфер для хранения линии (CColLine)
:temp_line
hex
    00000000 00000000 00000000 00000000  00000000 00000000 00000000 00000000
end

// "Таблица" поведений педов
:ped_events
hex
    00000000 // PLAYER1
    00000000 // PLAYER2
    00000000 // PLAYER_NETWORK
    00000000 // PLAYER_UNUSED
    00000000 // CIVMALE
    00000000 // CIVFEMALE
    00000000 // COP
    00000000 // GANG1
    00000000 // GANG2
    00000000 // GANG3
    00000000 // GANG4
    00000000 // GANG5
    00000000 // GANG6
    00000000 // GANG7
    00000000 // GANG8
    00000000 // GANG9
    00000000 // GANG10
    00000000 // DEALER
    00000000 // MEDIC
    00000000 // FIREMAN
    00000000 // CRIMINAL
    00000000 // BUM
    00000000 // PROSTITUTE
    00000000 // SPECIAL
    00000000 // MISSION1
    00000000 // MISSION2
    00000000 // MISSION3
    00000000 // MISSION4
    00000000 // MISSION5
    00000000 // MISSION6
    00000000 // MISSION7
    00020001 // MISSION8
end
Вот клео скрипт который использует её. Но я напросто их не понимаю.
0AA7: call_function {CWorld::ProcessLineOfSight} 0x56BA00 num_params 12 pop 12 0 0 0 0 _objects 1 _peds 0 _vehicles 1 _buildings 1 _pEntity 1@v _colPoint 20@ _end 5@v _start 2@v

0AA6: call_method {CColSphere::Set} 0x40FD10 struct 20@ num_params 5 pop 0 _lighting 255 _flags 9 _material 0 _point 8@v _radius 12@ ?????
Украшаю торты на своих вечеринках, классных вечеринках.

Оффлайн Jak łaska za praca

  • Прохожий
  • *
  • Сообщений: 58
  • Репутация: +1/-0
  • Как украшение на торт
    • aktel999
    • Просмотр профиля
Re: TraceRay.
« Ответ #4 : Сентябрь 03, 2014, 01:57:25 am »
Стоп у MTA есть работа с ней а он открыт же. да УРА.
« Последнее редактирование: Сентябрь 03, 2014, 06:31:15 am от Jak łaska za praca »
Украшаю торты на своих вечеринках, классных вечеринках.

Оффлайн Sektor

  • Администратор
  • Постоялец
  • *****
  • Сообщений: 514
  • Репутация: +33/-0
    • Просмотр профиля
Re: TraceRay.
« Ответ #5 : Сентябрь 03, 2014, 02:10:39 am »
Да на MTA давно исходники были открыты. Плюс я писал в одном журнале про то, как компилировать данное чудо, журнал называется ПРОграммист 18 выпуск, тем найдете мою статью.

« Последнее редактирование: Сентябрь 03, 2014, 02:14:45 am от Sektor »