You are not logged in.
0713: actor 13@ driveby_actor 15@ car 6@ point 0.0 0.0 0.0 radius 5000.0 8 1 firing_rate 100
За что отвечают предпоследние два параметра (8 и 1)? Никак не сооброжу.
А этот scmpath он один чтоли? Если в одном скрипте я его перезапишу, то и в другом скрипте он тоже изменится?
~AquaZ~
Машина просто едет, не обращая внимания на дорогу. Если протаранить, может остановиться.
Мне нужно, чтобы машина проехала через несколько точек-чекпоинтов. Если дать ей команду Car.DriveTo она опять на дорогу сворачивает. А в команде SetDriverBeaviour нельзя указать точку, куда надо ехать) Составлять весь путь машины из множества точек с интервалом ~10 игровых метров тоже не хочется...
Как быть то?
А как заставить машину ехать в определенную точку игнорируя дорогу, т.е. напрямик?
Car.setanimation не подойдет))
Суть скрипта в том, что в северной части карты, западнее заброшенной авиа полосы, появляется ваша собственная зона. Она помечена зеленым человечком на карте. Так вот на вашей зоне ходят туда - сюда ваши охранники зоны, которые будут убивать всех, кто зашел на нее. Всех, как случайных педов/машин, так и созданными какими либо скриптами.
Все работает отлично
// This file was decompiled using sascm.ini published by Seemann (http://sannybuilder.com/files/SASCM.rar) on 13.10.2007
{$VERSION 3.1.0027}
{$CLEO .cs}
//-------------MAIN---------------
wait 1000
marker.CreateIconWithoutSphere(15@, 62, -523.6, 2593.2, 53.5)
:NONAME_5
wait 200
0629: change_integer_stat 181 to 4
01F0: set_max_wanted_level_to 0
actor.StorePos($player_actor, 31@, 32@, 33@)
0509: 3@ = distance_between_XY 31@ 32@ and_XY -523.0 2593.0
if
3@ >= 150.0
then
jump @NONAME_5
end
model.Load(#FAM1)
model.Load(#AK47)
model.Load(#SUPERGT)
038B:
:___0
wait 1
if and
model.Available(#FAM1)
model.Available(#AK47)
model.Available(#SUPERGT)
jf @___0
04E4: unknown_refresh_game_renderer_at -523.6 2593.2
actor.Create(4@, 4, #fam1, -520.2, 2583.0, 53.5)
actor.Create(5@, 4, #fam1, -528.4, 2557.6, 53.5)
actor.Create(6@, 4, #fam1, -520.4, 2603.7, 53.5)
actor.Create(7@, 4, #fam1, -527.9, 2628.4, 53.5)
01B2: give_actor 4@ weapon 30 ammo 9999 // Load the weapon model before using this
01B2: give_actor 5@ weapon 30 ammo 9999 // Load the weapon model before using this
01B2: give_actor 6@ weapon 30 ammo 9999 // Load the weapon model before using this
01B2: give_actor 7@ weapon 30 ammo 9999 // Load the weapon model before using this
actor.SetImmunities(4@, 1, 1, 1, 1, 1)
actor.SetImmunities(5@, 1, 1, 1, 1, 1)
actor.SetImmunities(6@, 1, 1, 1, 1, 1)
actor.SetImmunities(7@, 1, 1, 1, 1, 1)
0446: set_actor 4@ immune_to_headshots 1
0446: set_actor 5@ immune_to_headshots 1
0446: set_actor 6@ immune_to_headshots 1
0446: set_actor 7@ immune_to_headshots 1
actor.Health(4@) = 9999
actor.Health(5@) = 9999
actor.Health(6@) = 9999
actor.Health(7@) = 9999
actor.WeaponAccuracy(4@) = 80
actor.WeaponAccuracy(5@) = 80
actor.WeaponAccuracy(6@) = 80
actor.WeaponAccuracy(7@) = 80
car.Create(8@, #SUPERGT, -538.3, 2594.0, 53.1)
car.SetImmunities(8@, 1, 1,1, 1,1)
car.Health(8@) = 9999
053F: set_car 8@ tires_vulnerability 0
car.Angle(8@) = 290.0
0229: set_car 8@ primary_color_to 1 secondary_color_to 0
actor.Create(9@, 4, #FAM1, 0.0, 0.0, 0.0)
072A: put_actor 9@ into_car 8@ driverseat
054A: set_actor 9@ immune_to_car_headshots 1
actor.SetImmunities(9@, 1, 1, 1, 1, 1)
car.DoorStatus(8@, 2)
actor.Create(10@, 4, #FAM1, 0.0, 0.0, 0.0)
01B2: give_actor 10@ weapon 30 ammo 9999
0464: put_actor 10@ into_turret_on_car 8@ at_car_offset 0.0 -1.8 1.2 position 0 shooting_angle_limit 360.0 with_weapon 30
actor.SetImmunities(10@, 1, 1, 1, 1, 1)
0446: set_actor 10@ immune_to_headshots 1
actor.WeaponAccuracy(10@) = 80
actor.Health(10@) = 9999
actor.Angle(10@) = 290.0
car.SetMaxSpeed(8@, 15.0)
00AE: set_car 8@ traffic_behaviour_to 3
actor.Create(11@, 4, #fam1, -502.1, 2597.7, 52.5)
actor.Create(12@, 4, #fam1, -502.1, 2588.5, 52.5)
actor.Angle(11@) = 270.0
actor.Angle(12@) = 270.0
01B2: give_actor 11@ weapon 30 ammo 9999 // Load the weapon model before using this
01B2: give_actor 12@ weapon 30 ammo 9999 // Load the weapon model before using this
actor.SetImmunities(11@, 1, 1, 1, 1, 1)
actor.SetImmunities(12@, 1, 1, 1, 1, 1)
0446: set_actor 11@ immune_to_headshots 1
0446: set_actor 12@ immune_to_headshots 1
actor.Health(11@) = 9999
actor.Health(12@) = 9999
actor.WeaponAccuracy(11@) = 80
actor.WeaponAccuracy(12@) = 80
actor.LockInCurrentPosition(11@, true)
actor.LockInCurrentPosition(12@, true)
model.Destroy(#AK47)
model.Destroy(#FAM1)
model.Destroy(#SUPERGT)
26@ = 1
14@ = 0
:0_
27@ = 0
07CD: AS_actor 4@ walk_to -520.2 2558.0 53.5 stop_with_angle 270.0 within_radius 1.0
07CD: AS_actor 5@ walk_to -528.4 2583.0 53.5 stop_with_angle 270.0 within_radius 1.0
07CD: AS_actor 6@ walk_to -520.2 2628.0 53.5 stop_with_angle 270.0 within_radius 1.0
07CD: AS_actor 7@ walk_to -528.4 2603.0 53.5 stop_with_angle 270.0 within_radius 1.0
:0
wait 1
jump @w
:00
jump @e
:000
gosub @t
:0000
jump @find
:00000
0208: 1@ = random_float_in_ranges -17.8 17.8
0208: 2@ = random_float_in_ranges -46.5 46.5
1@ += -523.6
2@ += 2593.2
0AE1: 3@ = random_actor_near_point 1@ 2@ 53.5 in_radius 10.0 find_next 0 pass_deads 1 //IF and SET
if or
3@ == false
3@ == -1
3@ == 0
then
jump @0
else
jump @1
end
:1
if or
003B: 3@ == 4@ // (int)
003B: 3@ == 5@ // (int)
003B: 3@ == 6@ // (int)
003B: 3@ == 7@ // (int)
003B: 3@ == 9@ // (int)
003B: 3@ == 10@ // (int)
003B: 3@ == 11@ // (int)
003B: 3@ == 12@ // (int)
then
if
00FE: actor 3@ sphere 0 in_sphere 1@ 2@ 53.5 radius 9.9 9.9 9.9
then
jump @11
else
jump @0
end
:11
0AE1: 3@ = random_actor_near_point 1@ 2@ 53.5 in_radius 10.0 find_next 1 pass_deads 1 //IF and SET
if or
3@ == false
3@ == -1
3@ == 0
then
jump @0
else
if or
003B: 3@ == 4@ // (int)
003B: 3@ == 5@ // (int)
003B: 3@ == 6@ // (int)
003B: 3@ == 7@ // (int)
003B: 3@ == 9@ // (int)
003B: 3@ == 10@ // (int)
003B: 3@ == 11@ // (int)
003B: 3@ == 12@ // (int)
then
jump @0
else
jump @OK
end
end
else
jump @OK
end
:OK
05E2: AS_actor 4@ kill_actor 3@
05E2: AS_actor 5@ kill_actor 3@
05E2: AS_actor 6@ kill_actor 3@
05E2: AS_actor 7@ kill_actor 3@
05E2: AS_actor 10@ kill_actor 3@
:9
wait 1
jump @q
:99
jump @w2
:999
gosub @r
:9999
jump @p
:99999
jump @find2
:999999
jump @9
:q
if or
not actor.Defined(3@)
actor.Dead(3@)
then
:pp
car.DriveTo(8@, -538.3, 2594.0, 53.1)
26@ = 0
jump @0_
else
jump @99
end
:w
actor.StorePos($player_actor, 31@, 32@, 33@)
0509: 33@ = distance_between_XY 31@ 32@ and_XY -523.0 2593.0
if
33@ >= 150.0
then
actor.RemoveReferences(4@)
actor.RemoveReferences(5@)
actor.RemoveReferences(6@)
actor.RemoveReferences(7@)
actor.RemoveReferences(9@)
actor.RemoveReferences(10@)
actor.RemoveReferences(11@)
actor.RemoveReferences(12@)
car.RemoveReferences(8@)
jump @NONAME_5
else
jump @00
end
:e
if
00FE: actor 4@ sphere 0 in_sphere -520.2 2558.0 53.5 radius 2.0 2.0 2.0
then
07CD: AS_actor 4@ walk_to -520.2 2583.0 53.5 stop_with_angle 270.0 within_radius 1.0
end
if
00FE: actor 4@ sphere 0 in_sphere -520.2 2583.0 53.5 radius 2.0 2.0 2.0
then
07CD: AS_actor 4@ walk_to -520.2 2558.0 53.5 stop_with_angle 270.0 within_radius 1.0
end
if
00FE: actor 5@ sphere 0 in_sphere -528.4 2583.0 53.5 radius 2.0 2.0 2.0
then
07CD: AS_actor 5@ walk_to -528.4 2568.0 53.5 stop_with_angle 270.0 within_radius 1.0
end
if
00FE: actor 5@ sphere 0 in_sphere -528.4 2568.0 53.5 radius 2.0 2.0 2.0
then
07CD: AS_actor 5@ walk_to -528.4 2583.0 53.5 stop_with_angle 270.0 within_radius 1.0
end
if
00FE: actor 6@ sphere 0 in_sphere -520.2 2628.0 53.5 radius 2.0 2.0 2.0
then
07CD: AS_actor 6@ walk_to -520.2 2603.0 53.5 stop_with_angle 270.0 within_radius 1.0
end
if
00FE: actor 6@ sphere 0 in_sphere -520.2 2603.0 53.5 radius 2.0 2.0 2.0
then
07CD: AS_actor 6@ walk_to -520.2 2628.0 53.5 stop_with_angle 270.0 within_radius 1.0
end
if
00FE: actor 7@ sphere 0 in_sphere -528.4 2603.0 53.5 radius 2.0 2.0 2.0
then
07CD: AS_actor 7@ walk_to -528.4 2628.0 53.5 stop_with_angle 270.0 within_radius 1.0
end
if
00FE: actor 7@ sphere 0 in_sphere -528.4 2628.0 53.5 radius 2.0 2.0 2.0
then
07CD: AS_actor 7@ walk_to -528.4 2603.0 53.5 stop_with_angle 270.0 within_radius 1.0
end
jump @000
:r
actor.StorePos(3@, 28@, 29@, 30@)
if
01AF: car 8@ sphere 0 in_sphere 28@ 29@ 30@ radius 6.0 6.0 6.0
then
car.SetDriverBehaviour(8@, 0)
05E2: AS_actor 10@ kill_actor 3@
return
else
27@ += 1
if
27@ >= 49 // время через которое машина едет к актеру 3@
then
car.LockInCurrentPosition(8@, false)
car.SetMaxSpeed(8@, 15.0)
car.DriveTo(8@, 28@, 29@, 30@)
27@ = 0
return
else
return
end
end
:t
if
01B0: car 8@ sphere 0 in_sphere -538.3 2594.0 53.1 radius 4.0 4.0 4.0 stopped
then
if
26@ == 0
then
car.PutAt(8@, -538.3, 2594.0, 53.1)
car.SetSpeedInstantly(8@, 0.0)
car.Angle(8@) = 290.0
26@ = 1
return
else
return
end
else
return
end
:find
if
14@ == 1
then
jump @check
end
0AE1: 13@ = random_actor_near_point -495.7 2593.0 53.5 in_radius 18.0 find_next 0 pass_deads 1 //IF and SET
if or
13@ == false
13@ == -1
13@ == 0
then
jump @00000
else
if or
003B: 13@ == 4@ // (int)
003B: 13@ == 5@ // (int)
003B: 13@ == 6@ // (int)
003B: 13@ == 7@ // (int)
003B: 13@ == 9@ // (int)
003B: 13@ == 10@ // (int)
003B: 13@ == 11@ // (int)
003B: 13@ == 12@ // (int)
then
0AE1: 13@ = random_actor_near_point -495.7 2593.0 53.5 in_radius 18.0 find_next 1 pass_deads 1 //IF and SET
if or
003B: 13@ == 4@ // (int)
003B: 13@ == 5@ // (int)
003B: 13@ == 6@ // (int)
003B: 13@ == 7@ // (int)
003B: 13@ == 9@ // (int)
003B: 13@ == 10@ // (int)
003B: 13@ == 11@ // (int)
003B: 13@ == 12@ // (int)
then
0AE1: 13@ = random_actor_near_point -495.7 2593.0 53.5 in_radius 18.0 find_next 1 pass_deads 1 //IF and SET
if or
003B: 13@ == 4@ // (int)
003B: 13@ == 5@ // (int)
003B: 13@ == 6@ // (int)
003B: 13@ == 7@ // (int)
003B: 13@ == 9@ // (int)
003B: 13@ == 10@ // (int)
003B: 13@ == 11@ // (int)
003B: 13@ == 12@ // (int)
then
jump @00000
else
14@ = 1
jump @found
end
else
14@ = 1
jump @found
end
else
14@ = 1
jump @found
end
end
:found
05E2: AS_actor 11@ kill_actor 13@
05E2: AS_actor 12@ kill_actor 13@
jump @00000
:check
if or
not actor.Defined(13@)
actor.Dead(13@)
then
14@ = 0
actor.Angle(11@) = 270.0
actor.Angle(12@) = 270.0
05B9: AS_actor 11@ stay_idle 10 ms
05B9: AS_actor 12@ stay_idle 10 ms
jump @00000
else
jump @o
end
:o
actor.StorePos(13@, 16@, 17@, 18@)
0509: 18@ = distance_between_XY 16@ 17@ and_XY -495.7 2593.0
if
18@ >= 20.0
then
14@ = 0
actor.Angle(11@) = 270.0
actor.Angle(12@) = 270.0
05B9: AS_actor 11@ stay_idle 10 ms
05B9: AS_actor 12@ stay_idle 10 ms
jump @00000
else
jump @00000
end
:p
if
00A3: actor 3@ sphere 0 in_rectangle_cornerA -551.4 2537.6 cornerB -496.4 2649.4
then
jump @99999
else
05B9: AS_actor 10@ stay_idle 10 ms
jump @pp
end
:w2
actor.StorePos($player_actor, 31@, 32@, 33@)
0509: 33@ = distance_between_XY 31@ 32@ and_XY -523.0 2593.0
if
33@ >= 150.0
then
actor.RemoveReferences(4@)
actor.RemoveReferences(5@)
actor.RemoveReferences(6@)
actor.RemoveReferences(7@)
actor.RemoveReferences(9@)
actor.RemoveReferences(10@)
actor.RemoveReferences(11@)
actor.RemoveReferences(12@)
car.RemoveReferences(8@)
jump @NONAME_5
else
jump @999
end
:find2
if
14@ == 1
then
jump @check2
end
0AE1: 13@ = random_actor_near_point -495.7 2593.0 53.5 in_radius 18.0 find_next 0 pass_deads 1 //IF and SET
if or
13@ == false
13@ == -1
13@ == 0
then
jump @999999
else
if or
003B: 13@ == 4@ // (int)
003B: 13@ == 5@ // (int)
003B: 13@ == 6@ // (int)
003B: 13@ == 7@ // (int)
003B: 13@ == 9@ // (int)
003B: 13@ == 10@ // (int)
003B: 13@ == 11@ // (int)
003B: 13@ == 12@ // (int)
then
0AE1: 13@ = random_actor_near_point -495.7 2593.0 53.5 in_radius 18.0 find_next 1 pass_deads 1 //IF and SET
if or
003B: 13@ == 4@ // (int)
003B: 13@ == 5@ // (int)
003B: 13@ == 6@ // (int)
003B: 13@ == 7@ // (int)
003B: 13@ == 9@ // (int)
003B: 13@ == 10@ // (int)
003B: 13@ == 11@ // (int)
003B: 13@ == 12@ // (int)
then
0AE1: 13@ = random_actor_near_point -495.7 2593.0 53.5 in_radius 18.0 find_next 1 pass_deads 1 //IF and SET
if or
003B: 13@ == 4@ // (int)
003B: 13@ == 5@ // (int)
003B: 13@ == 6@ // (int)
003B: 13@ == 7@ // (int)
003B: 13@ == 9@ // (int)
003B: 13@ == 10@ // (int)
003B: 13@ == 11@ // (int)
003B: 13@ == 12@ // (int)
then
jump @999999
else
14@ = 1
jump @found2
end
else
14@ = 1
jump @found2
end
else
14@ = 1
jump @found2
end
end
:found2
05E2: AS_actor 11@ kill_actor 13@
05E2: AS_actor 12@ kill_actor 13@
jump @999999
:check2
if or
not actor.Defined(13@)
actor.Dead(13@)
then
14@ = 0
actor.Angle(11@) = 270.0
actor.Angle(12@) = 270.0
05B9: AS_actor 11@ stay_idle 10 ms
05B9: AS_actor 12@ stay_idle 10 ms
jump @999999
else
jump @o2
end
:o2
actor.StorePos(13@, 16@, 17@, 18@)
0509: 18@ = distance_between_XY 16@ 17@ and_XY -495.7 2593.0
if
18@ >= 20.0
then
14@ = 0
actor.Angle(11@) = 270.0
actor.Angle(12@) = 270.0
05B9: AS_actor 11@ stay_idle 10 ms
05B9: AS_actor 12@ stay_idle 10 ms
jump @999999
else
jump @999999
end
Хехе, так оно и есть)) Блин как я сразу не додумался.. Спасибо большое, буду исправлять))
Хм.. почти всегда вылетает после опкода 0051, т.е. return.
Что могло бы это значить? Нельзя записывать несколько gosub'ов подряд? тогда почему сперва все норм, только на 7-8 круге повтора вылетает? Вложенных госабов нету..
Модели выгружаю. Скм лог говорит, что вылетает все время на разных опкодах. Тот момент, что выбранный актер может исчезнуть, учел.
Принцип работы скрипта:
сперва проверяется расстояние от точки до игрока. Если больше 150, то переход обратно. Если меньше, то:
1.создаются машина и актеры, актеры патрулируют по зоне.
2.Начинает работать цикл, который находит случайных актеров в этой зоне. Если найденный актер - это актер-охранник, то ищется следующий. Если следующего нет - возврат к началу цикла (поиск уже в следующей точке по радиусу) (точка в начале цикла берется случайным образом в пределе нашей зоны)
3.Если чужой актер найден, то все актеры-охранники его атакуют. Машина подъезжает к чужому актеру. ( на ней в турете стоит охранник)
4.Если чужой актер не найден или он умер, то охранники опять патрулируют. Машина возвращается в начальную точку.
5.Параллельно идет проверка еще 2-х циклов: 1-й - это на расстояние (вдруг игрок уже давно уехал оттуда) и 2-й, который отвечает за нахождение чужого актера возле въезда в охраняемую зону.(принцип поиска такой же, только координаты центра окружности для поиска не меняется.)
Найденному чужому актеру флаг уникальности не записывается...
Кстати, у меня есть еще один скрипт, там тоже вылет идет на разных опкодах...
Может игровой памяти нехватает? (всего установлено сриптов - 2 (эти); игра оригинальна)
ну помогите мне пожалуйстаааааа
http://sannybuilder.com/forums/viewtopic.php?id=1107
Помогите мне пожалуйста. Почему мой скрипт нестабилен?
http://sannybuilder.com/forums/viewtopic.php?id=1107
Обновленная версия мода:
http://sannybuilder.com/forums/viewtopi … 593#p13593
Выираю опкодом 0AE1. То, что может исчезнуть, учел. Стоит проверка на not Actor.defined . Вопщем, выложу скрипт в разделе модификации. Скрипт называется "Личная Зона"
А есть у клео скриптов какое-то ограничение на память или что-то вроде того?
Ато есть у меня один скрипт, выбирает случайные авто. так вот после нескольких выборов, примерно гдето на 6-7 раз, игра вылетает. Хотя RemoveReferences использую. С загрузкой и выгрузкой моделей создавемых объектов тоже все нормально... непонимаю почему так.
Может есть какие-нибудь опкоды, забивающие память? Или может дело вовсе не в памяти.
А как убрать блокады на мостах в начале оригинальной игры? Они - это объекты, которые надо удалить? или как
0327: $TEMPVAR_ACTOR_CAR = get_random_car_with_model -1 in_rectangle_cornerA $111 $112 cornerB $114 $115
Этот опкод выбирает случайную машину в зоне из прямоугольника? $111 и $112 — это координаты левого нижнего угла? или правого верхнего?
Здраствуйте. У меня вопросик) (GTA SA)
Я создал машину. У нее есть свой хэндл. Потом я применил опкод, который выбирает случайную машину, рядом с созданной мной. Так вот как проверить, была ли выбрана машина, которую создал я? а не из проезжающих мимо.)
Дайте пожалуйста адрес, люди добрые.
а кстати, этот опкод 0AA6: call_method 0x6D5D70 подойдет для педов? или нет?
Супер. спасибо всем)
Хм, чето сложновато получилось. А после этих двух опкодов хэндл машинки останется?
допустим, я выбрал случайный транспорт, присвоил ему хэндл 1@ . Я должен вот так написать? :
0A97: 1@ = car 1@ struct 0AA6: call_method 0x6D5D70 struct 1@ num_params 1 pop 0 2
После этого я смогу обращаться к моей машинке по хендлу 1@ ?
Если использовать опкоды выбора случайного транспорта возле определенной точки (такие как 0AE2 и 0AB5), то этот транспорт пропадает в далеке, как обычный трафик. Хотя removeReferences не использовались!) пока тачка находится в поле видимости, с ней можно хоть что делать. но стоит ей уехать далеко - и она исчезает.
Как решить проблему? может есть какой-нибудь способ записи машины в память?
Опкоды 0AE1 и 0AE2.
Если первый опкод, использованный в скрипте, имеет параметр find_next 1, то игра вылетает.
Если опкод с параметром find_next 1 уже нашол всех, то следующая такая же команда вызывает вылет.
Если использовать find_next 0, то выбирается один и тотже объект.
Есть ли опкод, который просто выбирает случайный объект? Без записи предыдущего и без зацикливания на одном ?? Или может я не так использую?
Опкоды типа get ... in_sphere просто возвращают ближайший объект к точке.
Вот в этом и есть весь смысл, не хотел я уменьшать их... хотел чтоб город живой был..эх
Спасибо за советы)
Незнаю.... Интересно то, что у меня оригинал игры... без всяких модов..
Нее, скрипты я сам писал. Траффик я не трогал)
Люди, не подскажите, как на полицейской машинке мигалки включать? Если в ней какойлибо актер сидит))
Спасибо)