You are not logged in.
так. новый вопрос. точнее два.
1. машина на большой скорости врезается "носом" во что-нибудь - как узнать:
а) что столкновение было именно носом... тобишь лбом?
б) что скорость была высокой за секунду ДО этого
2. водитель вылетает "из седла" - как заставить сиджея вылететь из машины через лобовое стекло?
скажите где мне найти список клавиш
00E1: key_pressed 0 13
0AB0: key_pressed 0x11
для опкода 00E1 - в справке по санни
для опкода 0AB0 - в любом справочнике программиста - это virtual key codes системные (везде на винде одинаковы)
если поставить ограничитель скорости?
Неа, он всё равно разгоняется и взлетает
Вопрос: а реально с помощью клео, серией точек задать свой путь, и потом к нему привязать самолёт?
взлетает и следует к точке уже в воздухе
а если указать Z координату чуть ниже земли? может тогда не полетит?
Неа. Всё равно. Взлетает
Ну а может оно и не расчитано на самолётов.
Ты же рассказывал что раньше делал.
Чем не подходит 04D2 ???
Тем, что работает через раз: 50% работает так же как драйв_ту, а в 50% взлетает и следует к точке уже в воздухе.
ИМХО так бы:
CTRL+ВВЕРХ - выше
CTRL+ВНИЗ - ниже
ALT+ВВЕРХ - ближе
ALT+ВНИЗ - дальше
а так кул
Всё в твоих руках - меняй 11 на 12 и компиль. Всё же в опенсурсе дано.....
если jump идет на метку сразу после этой команды, он лишний. игра и сама перейдет. эти jump и метки нужно убрать.
Знаю, просто когда писал скрипт, думал, что там может ещё что-то быть.
много лишнего. 0000, wait и метка start совершенно не нужны.
Я просто тут где-то читал, что на первую метку не перескакивает гта. Потому и поставил старт. Кстати иногда (когда забываю писать старт и ноп - игра вылетает сразу после запуска)
while true
Да красивие, только я уже запутался в сложной структуре синтаксиса языка гта, что уже не рискую
В самом скрипте не хватает возможности "стереть" последнюю цифру нажатием Backspace.
Да явообще хотел сделать вызов простым нажатием этих клавишь в нужной последовательности (по принципу ЧИТа, но не дождался ответа об этом и решил сделать "по-старинке"...
и добавить выгрузку модели
Я выгружаю только ссылку на модель. А саму модель - необязательно - ибо при отъезде от неё на определённое расстояние - она исчезает.
...
Блииин, я же говорю про ЗЕМЛЮ. В воздухе получается всё что требуется, а на земле самолёт как камень почти. Пробовал указать куда ехаьть, пробовал заставить пилота туда поехать, но всё заканчивается либо полной остановкой, либо при придании скорости он начинает поворачивать и так до бесконечности
Пилота посадил. Пропеллер крутится, двигатель шумит. Но когда я говорю ему ехать к точке - он чуток сдвигается и затем практически останавливается. Если присвоить ему какую-то скорость, то самолёт начинает движение, а потом плавно тормозит так и не доехав до точки. Если присвоение скорости и/или пути запустить в цикл каждую секунду, то самолёт начинает двигаться по кругу
:go 02C2: car 0@ drive_to 1508.57 1788.499 11.0 04BA: set_car 0@ speed_to 5.0 wait 1000 jump @go
Что ж делать то?
Как заставить самолёт плавно доехать до конкретной точки?
Народ я тут пытаюсь отредактировать скрипт так, чтобы камеру можно было менять только в машине, но ничего не вышло экран стал мерцать и ваще ппц. Помогите пожалуста! И еще сделайте чтобы можно было поворачивать головой в разные стороны...
Не парься и возьми мой скрипт.
В отдельной теме http://sannybuilder.com/forums/viewtopi … 3592#p3592 выложил.
Там есть всё что нужно. Так что смотри и изучай. Или просто юзай
p.s.: скрипт в самом конце темы
От нечего делать написал скрипт, который спаунит нужную машину (по её ID) и сажает сиджея в неё.
Активация по CTRL+O (буква О, а не ноль)
Далее вводим трёхзначный код (от 400 до 611)
Отменить выбор той же кнопкой, как и выход из любого меню.
// siple car spawner by vehicle ID (400 - 612) // by AlphaOmega {$CLEO .cs} //-------------MAIN--------------- :start thread 'SPAWNER' 0000: NOP :new wait 0 0@ = 0 // car id 1@ = 0 // additional value 2@ = 0 // additional value digit :check wait 0 if and 0AB0: key_pressed 0x11 // ctrl 0AB0: key_pressed 0x4F // o not Actor.Driving($PLAYER_ACTOR) jf @check 077E: get_active_interior_to 9@ if 9@ == 0 jf @check 02A3: toggle_widescreen 1 Player.CanMove($PLAYER_CHAR) = False 03BF: set_player $PLAYER_CHAR ignored_by_everyone 1 :menu 01E3: show_text_1number_styled GXT 'NUMBER' number 0@ time 10 style 5 wait 10 if 00E1: player 0 pressed_key 15 jf @input0 jump @end :input0 if 0AB0: key_pressed 0x30 jf @input1 1@ = 0 jump @output :input1 if 0AB0: key_pressed 0x31 jf @input2 1@ = 1 jump @output :input2 if 0AB0: key_pressed 0x32 jf @input3 1@ = 2 jump @output :input3 if 0AB0: key_pressed 0x33 jf @input4 1@ = 3 jump @output :input4 if 0AB0: key_pressed 0x34 jf @input5 1@ = 4 jump @output :input5 if 0AB0: key_pressed 0x35 jf @input6 1@ = 5 jump @output :input6 if 0AB0: key_pressed 0x36 jf @input7 1@ = 6 jump @output :input7 if 0AB0: key_pressed 0x37 jf @input8 1@ = 7 jump @output :input8 if 0AB0: key_pressed 0x38 jf @input9 1@ = 8 jump @output :input9 if 0AB0: key_pressed 0x39 jf @menu 1@ = 9 jump @output :output 2@ += 1 0012: 0@ *= 10 005A: 0@ += 1@ // (int) 01E3: show_text_1number_styled GXT 'NUMBER' number 0@ time 250 style 5 wait 250 if 0039: 2@ == 3 jf @menu jump @ifcan :ifcan if and 0029: 0@ >= 400 002B: 611 >= 0@ jf @end 0247: request_model 0@ 01E3: show_text_1number_styled GXT 'NUMBER' number 0@ time 250 style 5 fade 0 250 wait 250 :loading wait 0 ms if 0 0248: model 0@ available jf @loading 04C4: store_coords_to 3@ 4@ 5@ from_actor $PLAYER_ACTOR with_offset 0.0 0.0 0.0 0172: 7@ = actor $PLAYER_ACTOR Z_angle 00A5: 6@ = create_car 0@ at 3@ 4@ 5@ 0175: set_car 6@ Z_angle_to 7@ 036A: put_actor $PLAYER_ACTOR in_car 6@ 01C3: remove_references_to_car 6@ fade 1 500 jump @end :end Player.CanMove($PLAYER_CHAR) = True 03BF: set_player $PLAYER_CHAR ignored_by_everyone 0 02A3: toggle_widescreen 0 wait 1000 jump @new
Ещё небольшой вопрос. Как скриптом сделать проверку ПОСЕДОВАТЕЛЬНОГО нажатия клавиш? ну типа чтобы можно было свои "команды" запускать на принципе читов - набрал слово или комбинацию цифр - вуа-ля!
Для примера можно взять последовательный набор 7 4 7 цдерживая контроль,...
***
кстати,
0AA5: call 0x0043A0B6 num_params 1 pop 1 #INFERNUS
работает только если указать заранее модель...
а вот если вместо #INFERNUS поставить 0@ с номеом машины - он не компилит
народ, а реально сделать, чтобы по нажатию на кнопку определённую загорались фары автомобиля ТОЛЬКО С ОДНОЙ СТОРОНЫ? Ну что-то типа "поворотников". Мол, нажад на ">" и замигали правый файры, а "<" - - только левые? или нет такого опкода?
@AlphaOmega - Поиграл, в целом хорошо.
<...>
Идея интересная. Надо попробовать. Только вот в чём проблема: когда аттачишь самолёт к пути - онвсегда начинает его с начала. Как его переместить в другую часть пути - не знаю.
Когда создаются много самолётов, они начинают накладывать друг на друга в аэропортах (проходят друг друга насквозь).
Кстати, пытался использовать опкод типа "драйв_кар_ту_ХYZ" и "ротэйт_обжект_фром_А_ту_Z" но самолёты всё равно стоят на месте. Как быть? А то вручную его передвижение (как в конце к ангару) прописывать жутко неудобно и косячно.
Понравилась мне очень идея 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
Создаю миссии с помощью San Andreas Race Mission Creator...
Ну, во-первых, здесь мы всё-таки обсуждаем миссии, созданные в Sanny Builder`е под клео. С твой же программой синтаксис очень похож, но принципы немного отличаются.
Тебе нужно поставить клео и санни, и уже в нём писать миссии.
Кстати в одном из "комплектов" санни в хэлпе есть пример создания простейшей миссии...
Выложи скомпилированный файл.
Выкладываю.
О-па, а я и не видел это. Хотя поиск ничего конкретного не давал.
/offtop/ - когда-то на каком-то тёмно синем сайте видел форум, в которой были ПОДРОБНО описаны основные опкоды (например если создавался маркер, то были показаны картинки, какому ID какой маркер идёт) - не подскажешь, где этот сат сейчас?
В помощь скриптерам написал скрипт отображающий координаты игрока и/или машины.
Возможно многие пользуются другими "примочками" для узнавания координат, но я всё же выложу свой здесь - многим (уж новичкам то точно) может помочь.
Активация по кнопке ~ (ТИЛЬДА).
Выводит на экран X Y Z игрока, а если он в машине - то X Y Z и A (угол) машины.
В качестве бонуса - два припаркованных хантера в аэропорту лас вентурас.
файл COORDINATES.cs
{$VERSION 3.1.0027} {$CLEO .cs} //-------------MAIN--------------- 014B: 20@ = init_parked_car_generator #HUNTER color 0 0 1 alarm 0 door_lock 0 0 10000 at 1550.0 1412.8 15.0 angle -270.0 014B: 22@ = init_parked_car_generator #HUNTER color 0 0 1 alarm 0 door_lock 0 0 10000 at 1550.0 1512.8 15.0 angle -270.0 014C: set_parked_car_generator 20@ cars_to_generate_to 101 014C: set_parked_car_generator 22@ cars_to_generate_to 101 0AA2: 31@ = load_library "CLEO\PLUGINS\GXTHOOK.CLEO" :check wait 0 if 0AB0: key_pressed 192 jf @check jump @type1 :type1 if 80DF: not actor $PLAYER_ACTOR driving jf @type2 04C4: store_coords_to 1@ 2@ 3@ from_actor $PLAYER_ACTOR with_offset 0.0 0.0 0.0 gosub @convert 0308: show_text_6numbers GXT 'COORDS' numbers 7@ 1@ 8@ 2@ 9@ 3@ time 125 flag 5 jump @off :type2 03C0: 4@ = actor $PLAYER_ACTOR car 0407: store_coords_to 1@ 2@ 3@ from_car 4@ with_offset 0.0 0.0 0.0 0174: 10@ = car 4@ Z_angle 0085: 12@ = 3@ 008E: 11@ = float 10@ to_integer 008E: 13@ = float 12@ to_integer 000A: 13@ += 1 gosub @convert 0308: show_text_6numbers GXT 'COORDZ' numbers 7@ 1@ 8@ 2@ 13@ 11@ time 125 flag 5 jump @off :convert wait 125 008E: 4@ = float 1@ to_integer 008E: 5@ = float 2@ to_integer 008E: 6@ = float 3@ to_integer 0085: 7@ = 4@ // (int) 0085: 8@ = 5@ // (int) 0085: 9@ = 6@ // (int) 4@ *= 1000 5@ *= 1000 6@ *= 1000 1@ *= 1000.0 2@ *= 1000.0 3@ *= 1000.0 008E: 1@ = float 1@ to_integer 008E: 2@ = float 2@ to_integer 008E: 3@ = float 3@ to_integer 0062: 1@ -= 4@ // (int) 0062: 2@ -= 5@ // (int) 0062: 3@ -= 6@ // (int) 0095: make 1@ absolute_integer 0095: make 2@ absolute_integer 0095: make 3@ absolute_integer return :off if 0AB0: key_pressed 192 jf @type1 wait 1000 jump @check end_thread
файл COORDINATES.fxt
COORDS ~w~X=~y~~1~.~1~~n~~w~Y=~y~~1~.~1~~n~~w~Z=~y~~1~.~1~ COORDZ ~w~X=~y~~1~.~1~~n~~w~Y=~y~~1~.~1~~n~~w~Z=~y~~1~ ~w~A=~y~~1~
Гы гы... а кто то говорил что не льзя вставить новые картинки (не заменить а вставить!)
Как?
Я пытался TXDworkshop`ом добавлять новые текстуры (в effectsPC.txd) и прописывать их (в effects.fxp), но как только гта доходит до них - её вышибает. Думаю с меню будет так же.
Расскажи как ты "безболезненно" добавил в txd 12 штук текстур... мне б одной-двух хватило б
Видимо никак. Только если менять текстуры. Попробуй еще опкод 057E: set_radar_grey 1
Текстуры поменял, только вот они как буд-то чб прорисовываются.
Пробовал радар_грей - он стал серым - сам радар (карта).
В первом посте, удалось выяснить за что отвечают строчки второй половины кода?
ну так как радар перекрасить в белый и в т.ч. угол атаки самолёта? КЛЕО СКРИПТОМ
ВЫШЛА НОВАЯ ВЕРСИЯ!
Скрипт обновил (см. 1 пост)
К нему же приаттачил скомпилированный скрипт (gtt версию) в паре со скриптом «от первого лица»)
нововведения:
* устранена ошибка размещения на запасных путях
* возможность выбрать начальную станцию
* улучшен интерфейс выбора
* можно переключатся (компилятором) между обычной и gtt версией
* машинист более не выкидывает игрока из кабины
* глобальные переменные заменены на локальные
* др. мелкие. корректировки
32@, 33@ это таймеры. Это локальные переменные особого типа, их значение постоянно увеличивается. Поэтому совсем неразумно использовать их для хранения данных (в данном случае хендла огня и т.п.)
32ой в моём коде нужен только чтобы создать, а не ссылать - и работает он замечательно (если в самолёте летишь, то самолёт как порывом ветра сносит когда сиджей загорается). Меня интересует вот эта чать:
02CF: 25@ = create_fire_at 22@ 23@ 24@ propagation 3 size 5 09E5: create_flash_light_at 22@ 23@ 24@ RGB_mask 16383 16383 16383 radius 10.0 04D5: create_corona_at 22@ 23@ 24@ radius 15.0 type 10 flare 10 RGB 4095 4095 4095
22 23 24 - это x y z положения игрока в данный момент (присваивается чуть выше).....
/offtop/ а нельзя ли в след. версии санни сделать столбец, в котором будет показано какие переменные (от 1 до 33) задействованы в скрипте? а то голову сломить мона пока ищешь свободные
Поэтому упомянул это - чтобы кому надо могли убрать эту строку
лучше наоборот - чтобы те, кому надо, добавили эту строку
Обновил.
Так всё же, что же делать с огнём и вспышкой возле актёра при взрыве всех машин? почему не появляются?
Насчет взрыва всех машин я тебе уже ответил
Спасибо. Код обновил.
Кстати, если написать их в том виде (с повторами и паузой) то получается прикольный эффект разлетания на части.
во время взрыва отключается скрипт TRAFFIC (если есть)
это не лучшая идея, на мой взгляд. скрипт-то у разных людей может быть разным
Поэтому упомянул это - чтобы кому надо могли убрать эту строку
Кстати, в обновлённом коде, после уничтожения всех машин я прописал появление огня и вспышки, но почему-то при тесте ничего не появляется... почему?