You are not logged in.
Pages: 1
ВНИМАНИЕ!!! новая версия...
МАШИНИСТ.
характеристики:
* выбор станции (6 штук, в т.ч. трамвайное депо)
* выбор направления (по часовой стрелке или против)
* конструктор состава (выбор любой комбинации вагонов)
* поддержка gtt*** моделей
* поддержка выполнения миссий
* активация по CTRL+T (как на улице, так и в помещении)
нововведения:
* устранена ошибка размещения на запасных путях
* возможность выбрать начальную станцию
* улучшен интерфейс выбора
* можно переключатся (компилятором) между обычной и gtt версией
* машинист более не выкидывает игрока из кабины
* глобальные переменные заменены на локальные
* др. мелкие. корректировки
плюсы над оригинальной игрой:
* не надо ждать пока приедет поезд
* можно собрать состав из любых вагонов
* можно покататься на трамвае (в качестве машиниста)
плюсы над исходным скриптом
* отсутствие глюка повторного нажатия
* а так же всё, что указано выше в нововведениях
файл MACHINIST.CS
// advanced train operator script // by AlphaOmega // v2.0 {$CLEO .cs} //-------------MAIN--------------- :start thread 'MACHINIST' 0000: NOP :check wait 0 if and 0AB0: key_pressed 0x11 // ctrl 0AB0: key_pressed 0x54 // t jf @check 02A3: toggle_widescreen 1 Player.CanMove($PLAYER_CHAR) = False 0340: set_text_draw_RGBA 180 180 180 255 033F: set_text_draw_letter_size 0.5 2.5 03E4: enable_text_draw_align_right 0 0341: unknown_text_draw_flag 0 0342: enable_text_draw_centered 0 0343: set_text_draw_linewidth 200.0 0348: enable_text_draw_proportional 1 0345: enable_text_draw_background 0 0343: set_text_draw_linewidth 680.0 08D4: 10@ = create_panel_with_title 'TRAINS' position 50.0 110.0 width 277.0 columns 1 interactive 1 background 1 alignment 1 08DB: set_panel 10@ column 0 header 'DUMMY' data 'TRAINA' 'TRAINB' 'TRAINC' 'TRAIND' 'TRAINE' 'TRAINF' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 090E: set_panel 10@ active_row 0 :routeA wait 0 if 00E1: player 0 pressed_key 15 // return jf @routeZ jump @menuEND :routeZ if 00E1: player 0 pressed_key 16 // select jf @routeA 03E6: remove_text_box 08D7: 11@ = panel 10@ active_row 08DA: remove_panel 10@ 03E6: remove_text_box 00BE: text_clear_all :pathA if 0039: 11@ == 0 jf @pathB 0007: 1@ = -1943.678 0007: 2@ = 137.810 0007: 3@ = 26.0 jump @pathOK :pathB if 0039: 11@ == 1 jf @pathC 0007: 1@ = 1433.51 0007: 2@ = 2632.61 0007: 3@ = 11.0 jump @pathOK :pathC if 0039: 11@ == 2 jf @pathD 0007: 1@ = 2865.93 0007: 2@ = 1290.672 0007: 3@ = 11.0 jump @pathOK :pathD if 0039: 11@ == 3 jf @pathE 0007: 1@ = 1719.752 0007: 2@ = -1954.3 0007: 3@ = 14.0 jump @pathOK :pathE if 0039: 11@ == 4 jf @pathF 0007: 1@ = 817.583 0007: 2@ = -1368.526 0007: 3@ = -2.0 jump @pathOK :pathF 0007: 1@ = -2264.773 0007: 2@ = 527.44 0007: 3@ = 35.280 jump @pathOK :pathOK 06D7: enable_train_traffic 0 select_interior 0 0860: link_actor $PLAYER_ACTOR to_interior 0 04E4: unknown_refresh_game_renderer_at 1@ 2@ Actor.PutAt($PLAYER_ACTOR, 1@, 2@, 3@) 29@ = -381995 &0(29@,1i) = 538 29@ = -381994 :clear0 &0(29@,1i) = 0 29@ += 1 29@ > -381980 jf @clear0 Model.Load(449) // tram Model.Load(537) // freighter Model.Load(536) // freight reverse Model.Load(590) // freight box Model.Load(569) // freight flat Model.Load(538) // streak Model.Load(607) // streak tail Model.Load(606) // streak c alternative Model.Load(570) // streak c 038B: load_requested_models :preLOAD wait 0 if and Model.Available(449) Model.Available(537) Model.Available(536) Model.Available(590) Model.Available(569) Model.Available(538) Model.Available(607) Model.Available(606) Model.Available(570) jf @preLOAD 08D4: 10@ = create_panel_with_title 'TRAINX' position 50.0 110.0 width 210.0 columns 1 interactive 1 background 1 alignment 1 08DB: set_panel 10@ column 0 header 'DUMMY' data 'TRAINY' 'TRAINZ' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 090E: set_panel 10@ active_row 0 wait 500 :directionA wait 0 if 00E1: player 0 pressed_key 15 // return jf @directionZ jump @menuEND :directionZ if 00E1: player 0 pressed_key 16 // select jf @directionA 03E6: remove_text_box 08D7: 11@ = panel 10@ active_row 08DA: remove_panel 10@ 03E6: remove_text_box 00BE: text_clear_all 4@ = 0 // direction if 11@ == 0 jf @ready 4@ = 1 :ready 0006: 9@ = 15 // max carriages count 0006: 6@ = 0 // current carriages count 08D4: 10@ = create_panel_with_title 'TRAINV' position 50.0 110.0 width 155.0 columns 1 interactive 1 background 1 alignment 1 ///////////////////////////////////////////////////// 08DB: set_panel 10@ column 0 header 'DUMMY' data 'TRAIN1' 'DUMMY' 'TRAIN3' 'DUMMY' 'TRAIN5' 'DUMMY' 'TRAIN7' 'TRAIN8' 'TRAIN9' 'DUMMY' 'DUMMY' 'DUMMY' ///////////////////////////////////////////////////// 090E: set_panel 10@ active_row 0 wait 500 :carsA wait 0 if 001D: 9@ > 6@ jf @carsOK 01E3: show_text_1number_styled GXT 'TRAINN' number 6@ time 200 style 5 if 00E1: player 0 pressed_key 15 // cancel (enter) 004D: jump_if_false @carsB jump @carsX :carsB if 00E1: player 0 pressed_key 16 // select (shift) 004D: jump_if_false @carsA 6@ += 1 0089: 30@ = 6@ wait 250 08D7: 11@ = panel 10@ active_row 0085: 29@ = 30@ 29@ -= 381995 if 11@ == 0 jf @carsC &0(29@,1i) = 538 :carsC if 11@ == 1 jf @carsD &0(29@,1i) = 607 :carsD if 11@ == 2 jf @carsE &0(29@,1i) = 570 :carsE if 11@ == 3 jf @carsF &0(29@,1i) = 606 :carsF if 11@ == 4 jf @carsG &0(29@,1i) = 537 :carsG if 11@ == 5 jf @carsH &0(29@,1i) = 536 :carsH if 11@ == 6 jf @carsI &0(29@,1i) = 590 :carsI if 11@ == 7 jf @carsJ &0(29@,1i) = 569 :carsJ if 11@ == 8 jf @carsK &0(29@,1i) = 449 :carsK jump @carsA :carsX if 6@ == 0 jf @carsOK jump @menuEND :carsOK wait 250 0012: 4@ *= -1 06D8: 0@ = create_train_at 1@ 2@ 3@ type 15 direction 4@ 07C7: put_train 0@ at 1@ 2@ 3@ 046C: 5@ = car 0@ driver 009B: destroy_actor 5@ Player.CanMove($PLAYER_CHAR) = True 036A: put_actor $PLAYER_ACTOR in_car 0@ wait 10 06DD: set_train 0@ speed 0.0 06DC: set_train 0@ acc 0.0 015A: restore_camera 09AD: vehicle_camera_mode 1 0373: set_camera_directly_behind_player 08DA: remove_panel 10@ 02A3: toggle_widescreen 0 03E6: remove_text_box 00BE: text_clear_all :clear1 wait 1000 if 8449: not actor $PLAYER_ACTOR in_a_car jf @clear1 29@ = -381995 &0(29@,1i) = 538 29@ = -381994 :clear2 &0(29@,1i) = 0 29@ += 1 29@ > -381980 jf @clear2 Model.Destroy(449) // tram Model.Destroy(537) // freighter Model.Destroy(536) // freight reverse Model.Destroy(590) // freight box Model.Destroy(569) // freight flat Model.Destroy(538) // streak Model.Destroy(607) // streak tail Model.Destroy(606) // streak c alternative Model.Destroy(570) // streak c 07BE: remove_references_to_train 0@ Camera.Restore :menuEND wait 500 Player.CanMove($PLAYER_CHAR) = True 015A: restore_camera 08DA: remove_panel 10@ 06D7: enable_train_traffic 1 02A3: toggle_widescreen 0 03E6: remove_text_box 00BE: text_clear_all wait 2500; jump @check
файл MACHINIST.FXT
TRAINS Train Station TRAINA Cranberry (San Fierro East) TRAINB Yellow Bell (Las Venturas North) TRAINC Linden (Las Venturas East) TRAIND Unity (Los Santos South) TRAINE Market (Los Santos West) TRAINF Tram (San Fierro Central) TRAINX Train Direction TRAINY ~>~ ClockWise TRAINZ ~<~ CouterClockWise TRAINV Train Cars TRAIN1 Electric TRAIN2 Electric tail TRAIN3 Passanger odd TRAIN4 Passanger even TRAIN5 Freighter TRAIN6 Freighter reverse TRAIN7 Passenger car TRAIN8 Goods car TRAIN9 Tram TRAINN ~y~~1~
[small]ещё раз напоминаю, что это НЕ МОДИФИКАЦИЯ старого скрипта, а ПОЛНОСТЬЮ ПЕРЕПИСАННЫЙ скрипт![/small]
Для переключения между обычной и gtt* версиями достаточно заменить одну строку:
для GTT версии (приатаченный cs файл):
///////////////////////////////////////////////////// 08DB: set_panel 10@ column 0 header 'DUMMY' data 'TRAIN1' 'TRAIN2' 'TRAIN3' 'TRAIN4' 'TRAIN5' 'TRAIN6' 'TRAIN7' 'TRAIN8' 'TRAIN9' 'DUMMY' 'DUMMY' 'DUMMY' /////////////////////////////////////////////////////
для обычной версии (приведённый cs скрипт):
///////////////////////////////////////////////////// 08DB: set_panel 10@ column 0 header 'DUMMY' data 'TRAIN1' 'DUMMY' 'TRAIN3' 'DUMMY' 'TRAIN5' 'DUMMY' 'TRAIN7' 'TRAIN8' 'TRAIN9' 'DUMMY' 'DUMMY' 'DUMMY' /////////////////////////////////////////////////////
________________________________
* gtt поезда - это поезда, распространяемый на сайте Grand Theft Trains Club`а - особенность заключается в том, что помимо стандартных моделей поездов, добавляются ещё и особые вариации, например: головной и хвостовой вагон (развёрнутые в разные стороны), чётные и нечётные вагоны (например с пантографом и без), главный и дополнительный тепловоз и т.д...
Last edited by AlphaOmega (15-06-2008 15:04)
Offline
На всякий случай укажу, какие модели используются в GTT.
Красный цвет - Стандартные поезда
Синий цвет - Специальный поезда
Model.Destroy(449) // tram
Model.Destroy(537) // freighter
Model.Destroy(536) // freight reverse
Model.Destroy(590) // freight box
Model.Destroy(569) // freight flat
Model.Destroy(538) // streak
Model.Destroy(607) // streak tail
Model.Destroy(606) // streak c alternative
Model.Destroy(570) // streak c
Ссылок на GTT давать не буду ибо будет рекламой (ищите сами)
Offline
Я уже вижу как минимум один существенный недостаток - глобальные переменные. Все переменные, кроме $PLAYER_CHAR, $PLAYER_ACTOR нужно срочно заменить на локальные.
Ей-богу, я добавлю в санник специальную проверку на глобальные переменные, так что он вообще такие скрипты не будет компилировать.
Offline
Я уже вижу как минимум один существенный недостаток - глобальные переменные.
ААааааааа..... семён, семёныч! ТАК вот почему у меня два скрипта смены камеры друг друга гасят! У обоих используется глобальная переменная $CAM которую я задавал....
Так отсда вопрос: а как задать глобальную переменную ТАК, чтобы она была не из цифр, а из букв? не всмысле string, а всмысле name.. типа $cam и cam@ вместо 123456789@
Offline
Глобальные переменные ($) вообще не рекомендуется использовать в CLEO-скриптах, не важно каким способом их называть. Есть только 2 исключения: 1) это общераспространенные переменные типа $PLAYER_CHAR, $PLAYER_GROUP, $ONMISSION и 2) неиспользуемые переменные типа $30, $56. В любом случае к использованию глобальных переменных нужно подходить очень осторожно, иначе не минуемы различные глюки в игре.
Зато СВОБОДНО, БЕЗ ОГРАНИЧЕНИЙ можно пользоваться локальными переменными. Мало 32-х переменных? Есть масса способов как обойти ограничение (начиная от простой оптимизации, заканчивая использованием scm-функций - 0AB1, 0AB2).
Если неудобно пользоваться локальными переменными из-за их имени (согласен, 1@ не всегда явно выражает смысл переменной), пользуйтесь конструкцией CONST..END Пара строк
const TRAIN_MODEL = 1@ end
позволяет использовать в скрипте слово TRAIN_MODEL, которое на самом деле будет обозначать локальную переменную и компилироваться соответственно. Например,
TRAIN_MODEL = 400 - это в переменную 1@ записали число 400.
И все, больше никаких проблем из-за глобальных переменных.
ЗЫ. Если очень нужно, могу показать пример, как из одного CLEO-скрипта изменить локальную переменную другого.
Offline
исключен «кривой» маршрут harm/docks, летающий в воздухе
так его вообще подключить?
-=YariK=-
http://my-mods.org.ua/
Offline
исключен «кривой» маршрут harm/docks, летающий в воздухе
так его вообще подключить?
Кого подключить? маршрут или мой скрипт?
Offline
Offline
Маршрут
Для этого нужно поезд создать на той рельсе (пути), которая обычно не используется - с тупиком. Тогда поезд встанет на кривой маршрут и полетит по воздуху над аэропортом
Offline
Тоесть просто поставить на одну из координат того пути и он сам поедет по тому же пути?
-=YariK=-
http://my-mods.org.ua/
Offline
Тоесть просто поставить на одну из координат того пути и он сам поедет по тому же пути?
Ну, судя по всему так - ибо в коде создания поезда прописывается лишь координаты, номер поезда и направление (по часовой или против). Так что ставь туда, где есть рельсы и он будет там... правдо в конце пути может вести себя криво... например, проехать сквозь себя
Offline
Хороший скрипт! Мну нравится!:^
Ну и несколько замечаний.:D
Может сделать вариант скрипта со стандартными поездами(и именами в fxt файле. просто не у всех стоят поезда, да и blade на поезд не очень тянет)?
Перед созданием поезда надо очищать зону от других поездов. А то я пришел на вокзал, приехал поезд, я нажал ctrl+t, собрал поезд и.. так пять раз пока не понял, что приехавший стандартный поезд закрывает собой тот, что я собрал. Надеюсь понятно объяснил.=)
Продолжай совершенствовать мод, и удачи!
Offline
правдо в конце пути может вести себя криво... например, проехать сквозь себя
Ну эт я знаю, эт не проблема. Хотелось бы чтобы там было движение постоянное а не самому ставить поезда...как бы тот путь подключить...?
Сорри за офф, эт уже мысли вслух
-=YariK=-
http://my-mods.org.ua/
Offline
Хороший скрипт! Мну нравится!
Это хорошо! хоть кому-то мой труд оказался полезным :-)
Может сделать вариант скрипта со стандартными поездами(и именами в fxt файле. просто не у всех стоят поезда, да и blade на поезд не очень тянет)?
А ты просто вместо тех поездов (у меня они там ниже подписаны) при создании меню поставь 'DUMMY' - пункты будут пустыми и курсор будет проскакивать сквозь них. Ну а в fxt сам пропиши названия как угодно тебе.
Перед созданием поезда надо очищать зону от других поездов. А то я пришел на вокзал, приехал поезд, я нажал ctrl+t, собрал поезд и.. так пять раз пока не понял, что приехавший стандартный поезд закрывает собой тот, что я собрал. Надеюсь понятно объяснил.=)
Да, к сожалению поезд так уничтожить нельзя. Во всяком случае соответствующего опкода не нашёл. А релиз трейн это только чтобы не запоминался твой "набор" вагонов..
Last edited by AlphaOmega (11-06-2008 15:57)
Offline
мдя....
странно всё это - на работе тестировал - поезд создавался именно на том, пути, на котором стоял игрок, а сегодня он как-то не так работает. Решил даже скрипт создать по появлению поезда по ALT+T там, где стоит игрок, но, оказалось, он не создаётся там, а только на одном из заранее "известных" путей... вообщем даже и не знаю как же всё-таки заставить поезд появиться ТОЧНО на том, пути, где ему указано......
Кстати, приаттачиваю скриншоты двух поездов которые у меня стоят (из gtt) - на фотке с электропоездом можно увидеть, что после головного вагона стоит реверстный, а уж только потом пассажирские... а в третьем рисунке каким получается поезд если собрать по одному вагону каждого в списке по очереди
Last edited by AlphaOmega (11-06-2008 17:54)
Offline
Попробуй 07С7 в 1@ 2@ 3@. И ради бога убери глобальные переменные
Offline
ВЫШЛА НОВАЯ ВЕРСИЯ!
Скрипт обновил (см. 1 пост)
К нему же приаттачил скомпилированный скрипт (gtt версию) в паре со скриптом «от первого лица»)
нововведения:
* устранена ошибка размещения на запасных путях
* возможность выбрать начальную станцию
* улучшен интерфейс выбора
* можно переключатся (компилятором) между обычной и gtt версией
* машинист более не выкидывает игрока из кабины
* глобальные переменные заменены на локальные
* др. мелкие. корректировки
Last edited by AlphaOmega (15-06-2008 15:05)
Offline
Pages: 1