#26 17-06-2008 19:55

3Doomer
From: КаZан
Registered: 14-05-2008
Posts: 659
Website

Re: [SA | REL] Air Traffic mod - оживление неба и аэропортов

Дайте последнюю версию, очень интересно заценить!


GIMS developer

Offline

#27 22-06-2008 19:08

AlphaOmega
Registered: 02-06-2008
Posts: 98

Re: [SA | REL] Air Traffic mod - оживление неба и аэропортов

Понравилась мне очень идея jayrocc`а и решил я переписать код с нуля, при этом устранив предыдущие баги.
Итак. Сначала преамбула.

МИНУСЫ
1. не поддерживает paintjob`ы (ибо у меня тока один пейнт, а остальные влом вписывать)

ПЛЮСЫ
1. самолёты при посадке останавливаются в конце полосы и не разбиваются
2. самолёты после посадки разворачиваются и начинают новый перелёт (после небольшой паузы)
3. при совершении трёх перелётов самолёт подъезжает к ангару
4. при уничтожении самолёта скрипт автоматически перезапускается
5. шасси выпускаются и убираются

ВИД
Скрипт "поставляется" в виде двух скриптов. Альфы и Омеги. Принцыпы у них одинаковые только последовательность и маршруты разные.

Альфа:
<41> LS(R) - SF
<44> SF - LV
<48> LV - LS(L)

Омега:
<46> LS(L) - LV
<43> LV - SF
<49> SF - LS(L)

Сорок второй маршрут не используется ибо не имеет точки остановки.

итак, вот и скрипты:

файл autopilot_alpha.cs

// rewrited script of airlines
// by AlphaOmega
// [alpha]

{$CLEO .cs}

//-------------MAIN---------------

:start
0000: NOP 

:check
wait 10000

Model.Load(#AT400)
038B: load_requested_models 

:plane
wait 0 
if and
   Model.Available(#AT400)
else_jump @plane

0@ = Car.Create(#AT400, 0.0, 0.0, 500.0)
0175: set_car 0@ Z_angle_to 0.0
08E6: set_plane 0@ landing_gear 0 

/////////////////////////////////////////////////////////////
//0430: put_actor $PLAYER_ACTOR into_car 0@ passenger_seat 0
//0186: 22@ = create_marker_above_car 0@ 
/////////////////////////////////////////////////////////////

1@ = 0
8@ = 41

:nextpath
07C0: load_path 8@

:path
wait 0 
if 
07C1:   path 8@ available 
else_jump @path
054F: clear_car 0@ damage 
05EB: assign_car 0@ to_path 8@
wait 15000

:far
wait 2500
00AA: store_car 0@ position_to 4@ 5@ 6@
if
0031:   6@ >= 50.0
jf @landing
08E6: set_plane 0@ landing_gear 1
jump @far
 
:landing 
08E6: set_plane 0@ landing_gear 0

:nopath
wait 10000
if 
060E:   car 0@ assigned_to_path
jf @changing
jump @nopath

:changing
if 
   not Car.Wrecked(0@)
jf @restart

06C5: release_car 0@ from_path 
0873: release_path 8@
08E6: set_plane 0@ landing_gear 0
0174: 3@ = car 0@ Z_angle
2@ = 0
000A: 1@ += 1

if
0029:   1@ >= 3
jf @rotate
jump @move 
 
:rotate
wait 10
000B: 3@ += 1.0
000A: 2@ += 1
0175: set_car 0@ Z_angle_to 3@

if
0029:   2@ >= 180 
jf @rotate 
wait 5000

jump @next1

:move
2@ = 0
4@ = 2046.304 
5@ = -2492.627 
6@ = 14.0
7@ = 270.0

:drive
wait 5
000A: 2@ += 1
000B: 4@ += 0.127
000B: 5@ += 0.101
000B: 7@ += 0.172
00AB: put_car 0@ at 4@ 5@ 6@
0175: set_car 0@ Z_angle_to 7@
if
0029:   2@ >= 520 
jf @drive  

00AB: put_car 0@ at 2112.690 -2439.955 14.0
0175: set_car 0@ Z_angle_to 0.0
wait 10000
06C5: release_car 0@ from_path 
0873: release_path 8@ 
Car.RemoveReferences(0@)
jump @check
 
:next1
if
0039:   1@ == 1
jf @next2
0006: 8@ = 44
jump @nextpath

:next2
if
0039:   1@ == 2
jf @next3
0006: 8@ = 48
jump @nextpath
 
:next3
1@ = 0
0006: 8@ = 41
jump @nextpath

:restart
06C5: release_car 0@ from_path 
0873: release_path 8@ 
Car.RemoveReferences(0@)
jump @check

файл autopilot_omega.cs

// rewrited script of airlines
// by AlphaOmega
// [omega]

{$CLEO .cs}

//-------------MAIN---------------

:start
0000: NOP 

:check
wait 30000

Model.Load(#AT400)
038B: load_requested_models 

:plane
wait 0 
if and
   Model.Available(#AT400)
else_jump @plane

0@ = Car.Create(#AT400, 0.0, 0.0, 500.0)
0175: set_car 0@ Z_angle_to 0.0
08E6: set_plane 0@ landing_gear 0 

/////////////////////////////////////////////////////////////
//0430: put_actor $PLAYER_ACTOR into_car 0@ passenger_seat 0
//0186: 22@ = create_marker_above_car 0@ 
/////////////////////////////////////////////////////////////

1@ = 0
8@ = 46

:nextpath
07C0: load_path 8@

:path
wait 0 
if 
07C1:   path 8@ available 
else_jump @path
054F: clear_car 0@ damage 
05EB: assign_car 0@ to_path 8@
wait 15000

:far
wait 2500
00AA: store_car 0@ position_to 4@ 5@ 6@
if
0031:   6@ >= 50.0
jf @landing
08E6: set_plane 0@ landing_gear 1
jump @far
 
:landing 
08E6: set_plane 0@ landing_gear 0

:nopath
wait 10000
if 
060E:   car 0@ assigned_to_path
jf @changing
jump @nopath


:changing
if 
   not Car.Wrecked(0@)
jf @restart

06C5: release_car 0@ from_path 
0873: release_path 8@
08E6: set_plane 0@ landing_gear 0
0174: 3@ = car 0@ Z_angle
2@ = 0
000A: 1@ += 1

if
0029:   1@ >= 3
jf @rotate
jump @move 
 
:rotate
wait 10
000B: 3@ += 1.0
000A: 2@ += 1
0175: set_car 0@ Z_angle_to 3@

if
0029:   2@ >= 180 
jf @rotate 
wait 5000

jump @next1

:move

2@ = 0
4@ = 2046.304 
5@ = -2492.627 
6@ = 14.0
7@ = 270.0

:drive
wait 5
000A: 2@ += 1
000B: 4@ += 0.127
000B: 5@ += 0.101
000B: 7@ += 0.172
00AB: put_car 0@ at 4@ 5@ 6@
0175: set_car 0@ Z_angle_to 7@
if
0029:   2@ >= 520 
jf @drive  

00AB: put_car 0@ at 2112.690 -2439.955 14.0
0175: set_car 0@ Z_angle_to 0.0
wait 10000
06C5: release_car 0@ from_path 
0873: release_path 8@ 
Car.RemoveReferences(0@)

jump @check
 
:next1
if
0039:   1@ == 1
jf @next2
0006: 8@ = 43
jump @nextpath

:next2
if
0039:   1@ == 2
jf @next3
0006: 8@ = 49
jump @nextpath
 
:next3
1@ = 0
0006: 8@ = 46
jump @nextpath

:restart
06C5: release_car 0@ from_path 
0873: release_path 8@ 
Car.RemoveReferences(0@)
jump @check

Last edited by AlphaOmega (22-06-2008 19:23)

Offline

#28 22-06-2008 20:52

Seemann
Registered: 07-08-2006
Posts: 2,156

Re: [SA | REL] Air Traffic mod - оживление неба и аэропортов

@AlphaOmega - Поиграл, в целом хорошо. good

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

Я бы предложил немного другую концепцию мода. Сделать скрипт, который был бы шаблоном для управления неким самолетом в переменной 0@. Такой скрипт делал бы основные проверки, работу с путями, посадку, переход на другой путь и т.д. Назовем его AirTraffic.cs.

Еще в начале AirTraffic.cs нужно было бы добавить один блок кода, который создавал бы группу самолетов (5-6 штук) в разных частях штата. Не обязательно делать только AT400, чем хуже шамал или невада? И после этого скрипт рекурсивно вызывал бы самого себя с параметром - хендлом самолета. Т.е.

create_custom_thread "CLEO\AirTraffic.cs" 0@ // первый самолет
create_custom_thread "CLEO\AirTraffic.cs" 1@ // второй самолет
и т.д.

В начале скрипта тебе нужно было бы только проверить переменную 0@ (в которой хранится переданный в поток параметр). Если она равна 0, значит это первый запуск скрипта (автоматический). Тогда ты создаешь группу самолетов и делаешь вызов этого же скрипта для каждого самолета.

Если 0@ не равно 0, значит это ты сам вызвал этот скрипт и в 0@ хранится хендл самолета. Теперь аттачим его к случайному пути (возможно даже где-то в середине, необязательно же стартовать только со взлетной полосы).

Таким образом ты получишь 5-6 работающих потоков в памяти игры, каждый из которых управлял бы своим самолетом, летающим из города в город. Получилось бы здорово, мне кажется.

Еще не забывай помечать модели как более ненужные, командой Model.Destroy


Примерно шаблон скрипта выглядит так:

{$CLEO}

if
    0@ == 0 // проверяем параметр
then
    // это запуск скрипта через CLEO.
    // создаем самолеты и добавляем к ним "мозги"


    0@ = create_car #AT400
    create_custom_thread "CLEO\AirTraffic.cs" 0@

    0@ = create_car #SHAMAL
    create_custom_thread "CLEO\AirTraffic.cs" 0@
    
    0@ = create_car #NEVADA
    create_custom_thread "CLEO\AirTraffic.cs" 0@
    

    // самолеты созданы, у каждого есть скрипт управления, поэтому этот скрипт уже не нужен
    end_custom_thread
    
else


  // есть параметр, значит была создана группа самолетов с "мозгами"

   // здесь мы управляем самолетом, аттачим к пути, проверяем и т.д.
   attach_car 0@ to_path


    while true
        ....
       

        // важно! нужно постоянно проверять состояние самолета
        // если он уничтожен (например, пока разворачивается на полосе)
        // нужно прекратить скрипт
        if
            car 0@ wrecked
        then

            // перед остановкой, скрипт может создать еще один самолет и еще одну копию самого себя
            // чтобы число самолетов не уменьшалось
            //     

           //0@ = create_car #NEVADA
           //create_custom_thread "CLEO\AirTraffic.cs" 0@


            end_custom_thread

        end    
  
    end
    
end

Offline

#29 23-06-2008 09:39

AlphaOmega
Registered: 02-06-2008
Posts: 98

Re: [SA | REL] Air Traffic mod - оживление неба и аэропортов

Seemann wrote:

@AlphaOmega - Поиграл, в целом хорошо. good
<...>

Идея интересная. Надо попробовать. Только вот в чём проблема: когда аттачишь самолёт к пути - онвсегда начинает его с начала. Как его переместить в другую часть пути - не знаю.
Когда создаются много самолётов, они начинают накладывать друг на друга в аэропортах (проходят друг друга насквозь).

Кстати, пытался использовать опкод типа "драйв_кар_ту_ХYZ" и "ротэйт_обжект_фром_А_ту_Z" но самолёты всё равно стоят на месте. Как быть? А то вручную его передвижение (как в конце к ангару) прописывать жутко неудобно и косячно.

Offline

#30 23-06-2008 10:58

Seemann
Registered: 07-08-2006
Posts: 2,156

Re: [SA | REL] Air Traffic mod - оживление неба и аэропортов

Как его переместить в другую часть пути - не знаю

0706: advance_car 108@ further_along_path 1.0

параметр - номер точки пути. 1.0 - переместить к следующей, 2.0 - через одну и т.д.

но самолёты всё равно стоят на месте

нужно детачить его с пути и посадить пилота. серьезно. без водителя в машине опкоды движения машины не работают.

Offline

#31 23-06-2008 13:16

yelmi
Registered: 10-12-2006
Posts: 134
Website

Re: [SA | REL] Air Traffic mod - оживление неба и аэропортов

Seemann wrote:

посадить пилота. серьезно. без водителя в машине опкоды движения машины не работают.

Почему? Работают, но звука двигателя не будет и в самолетах не будет вращаться пропеллер. А двигаться по заданному пути будет, не раз проверял. Делал для ролика движение и посадку самолета, вынужден был сажать в кабину пилота только потому , что не крутился пропеллер.

Offline

#32 28-06-2008 20:26

AlphaOmega
Registered: 02-06-2008
Posts: 98

Re: [SA | REL] Air Traffic mod - оживление неба и аэропортов

Пилота посадил. Пропеллер крутится, двигатель шумит. Но когда я говорю ему ехать к точке - он чуток сдвигается и затем практически останавливается. Если присвоить ему какую-то скорость, то самолёт начинает движение, а потом плавно тормозит так и не доехав до точки. Если присвоение скорости и/или пути запустить в цикл каждую секунду, то самолёт начинает двигаться по кругу

:go
02C2: car 0@ drive_to 1508.57 1788.499 11.0
04BA: set_car 0@ speed_to 5.0
wait 1000
jump @go

Что ж делать то?
Как заставить самолёт плавно доехать до конкретной точки?

Offline

#33 28-06-2008 20:40

Yarik
Registered: 22-02-2008
Posts: 173
Website

Re: [SA | REL] Air Traffic mod - оживление неба и аэропортов

04D2: unknown_RC_car $Plane race_to 1600.0 1200.0 64.0 0.0 0.0 - заставляет настоящий самолёт лететь к заданной точке, 0.0 0.0 - не трогайте.
070F: (unknown) $Plane 0.0 130.0 130.0 - заставляет самолёт лететь под опред.углом(0.0) на опред. высоте (130.0 130.0). Если рассмотреть карту SA, как плоскость,то легко подсчитать угол полёта.
08E6: plane $Plane change_landing_gear 1 - шасси у самолёта выпушенуо, если 1 и не выпущено, если 0, но временами эти команды проглючивают.
084E: flying_vehicle $SamNeLet use_primary_gun 1 - использование самолётом (ГИДРА) ракет.
0841: flying_vehicle $SamNeLet use_secondary_gun 1 - использование пулемёта (ДИЛЛЕР).
0724: flying_vehicle $SamNeLet follow_and_attack_player $PLAYER_CHAR radius 40.0 - самолёт держится на определённом радиусе от игрока и атакует его.
03A2: $Plane 3 - опускает у самолёта закрылки,если ставить меньше,чем 0,то ничего не будет
0745: $Plane - переключение в режим горизонтального полёта (для Гидры)

Offline

#34 28-06-2008 20:59

AlphaOmega
Registered: 02-06-2008
Posts: 98

Re: [SA | REL] Air Traffic mod - оживление неба и аэропортов

Yarik wrote:

...

Блииин, я же говорю про ЗЕМЛЮ. В воздухе получается всё что требуется, а на земле самолёт как камень почти. Пробовал указать куда ехаьть, пробовал заставить пилота туда поехать, но всё заканчивается либо полной остановкой, либо при придании скорости он начинает поворачивать и так до бесконечности sad

Offline

#35 28-06-2008 21:11

Yarik
Registered: 22-02-2008
Posts: 173
Website

Re: [SA | REL] Air Traffic mod - оживление неба и аэропортов

Ну а может оно и не расчитано на самолётовю Чем не подходит 04D2 ???

Offline

#36 29-06-2008 18:03

AlphaOmega
Registered: 02-06-2008
Posts: 98

Re: [SA | REL] Air Traffic mod - оживление неба и аэропортов

Yarik wrote:

Ну а может оно и не расчитано на самолётов.

Ты же рассказывал что раньше делал.

Yarik wrote:

Чем не подходит 04D2 ???

Тем, что работает через раз: 50% работает так же как драйв_ту, а в 50% взлетает и следует к точке уже в воздухе.

Offline

#37 29-06-2008 20:46

Yarik
Registered: 22-02-2008
Posts: 173
Website

Re: [SA | REL] Air Traffic mod - оживление неба и аэропортов

Ты же рассказывал что раньше делал.

Я? не помню такого если честно...я ваще с самолётами почти не работал

взлетает и следует к точке уже в воздухе

а если указать Z координату чуть ниже земли? может тогда не полетит?

Offline

#38 29-06-2008 20:49

AlphaOmega
Registered: 02-06-2008
Posts: 98

Re: [SA | REL] Air Traffic mod - оживление неба и аэропортов

Yarik wrote:

взлетает и следует к точке уже в воздухе

а если указать Z координату чуть ниже земли? может тогда не полетит?

Неа. Всё равно. Взлетает sad

Offline

#39 29-06-2008 21:50

flashTrash
From: Н.Новгород
Registered: 21-02-2007
Posts: 260
Website

Re: [SA | REL] Air Traffic mod - оживление неба и аэропортов

если поставить ограничитель скорости?

Offline

#40 30-06-2008 08:16

AlphaOmega
Registered: 02-06-2008
Posts: 98

Re: [SA | REL] Air Traffic mod - оживление неба и аэропортов

flashTrash wrote:

если поставить ограничитель скорости?

Неа, он всё равно разгоняется и взлетает sad

Вопрос: а реально с помощью клео, серией точек задать свой путь, и потом к нему привязать самолёт?

Offline

Board footer

Powered by FluxBB