You are not logged in.
Pages: 1
Вот написал скрипт, который заставляет нанятых братков, которым не хватило места в вашей машине, садиться в другую машину и ехать за вами. Правда это пока первая версия, она рассчитана только если в вашей машине и в машине братков по 4 места.
Вроде всё работает, но иногда почему-то случаются вылеты. Кто-нибудь может понять почему?
Вот скрипт
0000: NOP :NONAME_2 wait 0 if Player.Defined($PLAYER_CHAR) else_jump @NONAME_2 wait 0 if 0449: actor $PLAYER_ACTOR in_a_car else_jump @NONAME_2 Actor.RemoveReferences(1@) Actor.RemoveReferences(2@) Actor.RemoveReferences(3@) Actor.RemoveReferences(4@) wait 100 092B: 1@ = group $PLAYER_GROUP member 3 if 056D: actor 1@ defined else_jump @NONAME_2 jump @NONAME_99 :NONAME_99 wait 10 Actor.StorePos(1@, 5@, 6@, 7@) 073E: get_car_in_sphere 5@ 6@ 7@ radius 50.0 model -1 handle_as 20@ wait 0 if not 20@ == -1 else_jump @NONAME_2 wait 0 if 056D: actor 1@ defined else_jump @NONAME_2 06C9: remove_actor 1@ from_group 05CB: AS_actor 1@ enter_car 20@ as_driver 100000 ms 092B: 2@ = group $PLAYER_GROUP member 4 092B: 3@ = group $PLAYER_GROUP member 5 092B: 4@ = group $PLAYER_GROUP member 6 if 056D: actor 2@ defined else_jump @NONAME_262 06C9: remove_actor 2@ from_group 05CA: AS_actor 2@ enter_car 20@ passenger_seat 0 20000 ms :NONAME_262 wait 0 if 056D: actor 3@ defined else_jump @NONAME_300 06C9: remove_actor 3@ from_group 05CA: AS_actor 3@ enter_car 20@ passenger_seat 1 20000 ms :NONAME_300 wait 0 if 056D: actor 4@ defined else_jump @NONAME_338 06C9: remove_actor 4@ from_group 05CA: AS_actor 4@ enter_car 20@ passenger_seat 2 20000 ms :NONAME_338 wait 0 if 056D: actor 1@ defined else_jump @NONAME_420 wait 0 if not Actor.Dead(1@) else_jump @NONAME_420 wait 0 if 0449: actor 1@ in_a_car else_jump @NONAME_338 29@ = Marker.CreateAboveCar(20@) 07E0: set_marker 29@ type_to 1 jump @NONAME_420 :NONAME_420 wait 0 if 056E: car 20@ defined else_jump @NONAME_682 wait 0 if 0449: actor $PLAYER_ACTOR in_a_car else_jump @NONAME_682 wait 0 03C0: 5@ = actor $PLAYER_ACTOR car 07F8: car 20@ follow_car 5@ radius 15.0 0423: set_car 20@ improved_handling_to 1000.0 // (float) Car.SetMaxSpeed(20@, 300.0) :NONAME_505 wait 100 if 056E: car 20@ defined else_jump @NONAME_682 wait 100 if not Actor.InCar($PLAYER_ACTOR, 5@) else_jump @NONAME_505 jump @NONAME_555 :NONAME_555 wait 0 if 056D: actor 1@ defined else_jump @NONAME_710 wait 100 if or 856E: not car 20@ defined 8449: not actor 1@ in_a_car Actor.Dead(1@) else_jump @NONAME_612 jump @NONAME_657 :NONAME_612 wait 100 if or not Player.Defined($PLAYER_CHAR) 8204: not actor $PLAYER_ACTOR near_car 20@ radius 80.0 80.0 flag 0 in_car else_jump @NONAME_505 :NONAME_657 wait 100 if 056E: car 20@ defined else_jump @NONAME_505 Marker.Disable(29@) :NONAME_682 wait 0 if 056D: actor 1@ defined else_jump @NONAME_710 0631: put_actor 1@ in_group $PLAYER_GROUP :NONAME_710 wait 0 if 056D: actor 2@ defined else_jump @NONAME_738 0631: put_actor 2@ in_group $PLAYER_GROUP :NONAME_738 wait 0 if 056D: actor 3@ defined else_jump @NONAME_766 0631: put_actor 3@ in_group $PLAYER_GROUP :NONAME_766 wait 0 if 056D: actor 4@ defined else_jump @NONAME_794 0631: put_actor 4@ in_group $PLAYER_GROUP :NONAME_794 wait 100 Car.RemoveReferences(5@) Car.RemoveReferences(20@) jump @NONAME_2
Вообще когда работаешь с транспортом, взятым из игры, а не созданным скриптом, часто вылетает из-за того, что этот транспорт исчезает когда выходит из поля зрения. Но здесь вроде я сделал достаточно проверок на существовании машины и актёров.
Offline
Вообще когда работаешь с транспортом, взятым из игры, а не созданным скриптом, часто вылетает из-за того, что этот транспорт исчезает когда выходит из поля зрения.
Не важно, создан транспорт скриптом, или "пойман" из стандартного траффика - его существование не будет зависеть от положения игрока, до тех пор, пока не будет удален из переменной или уничтожен.
Но здесь вроде я сделал достаточно проверок на существовании машины и актёров.
Да видимо не все. Без причины игра вылетать не станет. Вот в начале, например, актёры ещё не существуют, а ты уже удаляешь сведения о них.
Offline
Не важно, создан транспорт скриптом, или "пойман" из стандартного траффика - его существование не будет зависеть от положения игрока, до тех пор, пока не будет удален из переменной или уничтожен.
Не, я просто заметил, что транспорт взят из трафика, то он пропадает при первой возможности.
Да видимо не все. Без причины игра вылетать не станет. Вот в начале, например, актёры ещё не существуют, а ты уже удаляешь сведения о них.
Нет, тут всё в порядке, это нормально. Если бы вылетало из-за этого, то скрипт бы вообще не работал. А если ты считаешь что проверок недостаточно, так пожалуйста найди где не хватает.
Offline
Нет, тут всё в порядке, это нормально. Если бы вылетало из-за этого, то скрипт бы вообще не работал.
Не факт. Вылеты - коварная вещь, могут возникать там, где их меньше всего ждут. Попробуй везде добавлять проверки, прежде чем выполнять какое-то действие. Много времени это занять не должно, и скрипту не повредит, зато убережешься от вылетов.
А вообще лучше сначала попытаться определить причину ошибки, а потом уже её исправлять. Можно применить scm log или другие способы (см. тему Один вопрос, стр.72)
Last edited by Den_spb (04-01-2010 08:56)
Offline
Offline
Pages: 1