#1 08-07-2007 09:00

svetka
Registered: 29-12-2006
Posts: 222

Вот мой безглючный(?) код охраны.

Вот мой безглючный(?) вариант кода охраны.
В написании части кода "ОХРАНА" во многом мне помогли идеи Capushon-a, за что ему и спасибо smile
В написании части кода "DAMAGE" идеи Zibatop-a (взяла из кода эффектных аварий), за что ему также спасибо smile
А также спасибо Seemann, за антиаварийный опкод,  Stalker2012, yelmi за опкод обстрела авто.
За возможные глюки прошу вышеупомянутых скриптеров не винить.
Cуть кода: вызов охраны со стандартными функциями("ОХРАНА") + отстрел атакующих авто("DAMAGE").
Буду крайне благодарна за конструктивную критику, советы и предложения smile

:OXPAHA
   not Model.Available(#CELLPHONE)
else_jump @OXPAHA_35  
Model.Load(#CELLPHONE)
wait 0 
jump @OXPAHA 

:OXPAHA_35
wait 100 
   Player.Defined($PLAYER_CHAR)
else_jump @OXPAHA_35 
if and
   not Actor.Driving($PLAYER_ACTOR)
00E1:   player 0 pressed_key 10 
00E1:   player 0 pressed_key 16 
else_jump @OXPAHA_35 
   Player.Money($PLAYER_CHAR) > 999
else_jump @OXPAHA_1403 
Player.CanMove($PLAYER_CHAR) = False
0729: AS_actor $PLAYER_ACTOR hold_cellphone 1 
wait 2500 
054C: use_GXT_table 'TRU1' 
00BC: show_text_highpriority GXT 'TRU1@01' time 2000 flag 1  // ~z~Подбирайте свой вариант текста!
wait 2100 
054C: use_GXT_table 'TRU1' 
00BB: show_text_lowpriority GXT 'TRU1@02' time 2000 flag 1  // ~z~Подбирайте свой вариант текста!
wait 1500 
0729: AS_actor $PLAYER_ACTOR hold_cellphone 0 
Player.CanMove($PLAYER_CHAR) = True
Model.Destroy(#CELLPHONE)
wait 0 
023C: load_special_actor 'TBONE' as 1 // models 290-299 
Model.Load(#AK47)
Model.Load(#MESA)
038B: load_requested_models 

:OXPAHA_225
wait 100 
if and
   Model.Available(#AK47)
   Model.Available(#MESA)
else_jump @OXPAHA_225 
023D:   special_actor 1 loaded 
else_jump @OXPAHA_225 

:OXPAHA_261
wait 0 
0208: 0@ = random_float_in_ranges -70.0 70.0 
0208: 1@ = random_float_in_ranges -70.0 70.0 
   not Actor.Dead($PLAYER_ACTOR)
else_jump @OXPAHA_1351 
wait 500 
04C4: store_coords 2@ 3@ 4@ from_actor $PLAYER_ACTOR with_offset 0@ 1@ 0 
02C1: store_to 21@ 22@ 23@ car_path_coords_closest_to 2@ 3@ 4@ 
80EC:   not actor $PLAYER_ACTOR 0 near_point 21@ 22@ radius 20.0 20.0 
else_jump @OXPAHA_261 
wait 100 
0395: clear_area 1 at 21@ 22@ 23@ radius 5.0 
04C4: store_coords 10@ 8@ 7@ from_actor $PLAYER_ACTOR with_offset 0.1 0.1 15.37 
5@ = Car.Create(#MESA, 21@, 22@, 23@)
0594: unknown_car 5@ flag 0 
Car.Health(5@) = 3000
0423: set_car 5@ improved_handling_to 1.5 // (float) 
00AE: set_car 5@ traffic_behavior_to 2 
06ED: set_car 5@ paintjob 0 
0229: set_car 5@ primary_color_to 14 secondary_color_to 14 
Car.SetMaxSpeed(5@, 35.0)
072F: unknown 5@ 1.0 2000 1 1 1 -1 
04C4: store_coords 2@ 3@ 4@ from_actor $PLAYER_ACTOR with_offset 0 5.0 0 
0129: 6@ = create_actor_pedtype 19 model #SPECIAL01 in_car 5@ driverseat 
0337: toggle_actor 6@ visibility 64 
0350: toggle_actor 6@ maintain_position_when_attacked 1 
0568: toggle_actor 6@ targetable 1 
0446: toggle_actor 6@ immune_to_headshots 0 
07FE: set_actor 6@ fighting_style_to 16 6 
060B: set_actor 6@ decision_maker_to 65543 
0770: unknown_actor 6@ flag 1 
07DD: set_actor 6@ temper_to 100 // see pedstats.dat 
051B:   actor 6@ damaged_by_car 0 
0526: unknown_actor 6@ flag 1 
0433: toggle_actor 6@ criminal_flag 1 
0982: unknown_actor 6@ flag 1 
01B2: give_actor 6@ weapon 30 ammo 6000 // Load the weapon model before using this 
Actor.WeaponAccuracy(6@) = 100
Actor.Health(6@) = 500
Actor.Armour(6@) = 200
0296: unload_special_actor 1 
Model.Destroy(#AK47)
Actor.StorePos($PLAYER_ACTOR, 2@, 3@, 4@)
Car.DriveTo(5@, 2@, 3@, 4@)

:OXPAHA_726
wait 500 
01C1:   car 5@ stopped 
else_jump @OXPAHA_726 
05CD: AS_actor 6@ exit_car 5@ 
0631: put_actor 6@ in_group $PLAYER_GROUP 
Player.Money($PLAYER_CHAR) += -1000
20@ = Marker.CreateAboveActor(6@)

:OXPAHA_775
wait 0 
0104:   actor 6@ near_actor $PLAYER_ACTOR radius 5.0 5.0 5.0 sphere 0 
else_jump @OXPAHA_775 
Marker.Disable(20@)

:DAMAGE_816
wait 0 
if and
   not Actor.Dead(6@)
   not Actor.Dead($PLAYER_ACTOR)
else_jump @DAMAGE_1295 
wait 0 
0104:   actor 6@ near_actor $PLAYER_ACTOR radius 150.0 150.0 5.0 sphere 0 
else_jump @DAMAGE_1295 

:DAMAGE_884
wait 0 
   Player.Defined($PLAYER_CHAR)
else_jump @DAMAGE_884 
   Actor.Driving($PLAYER_ACTOR)
else_jump @DAMAGE_816
03C0: 9@ = actor $PLAYER_ACTOR car 

:DAMAGE_920
wait 0 
   Actor.Driving($PLAYER_ACTOR)
else_jump @DAMAGE_1269 
0407: store_coords_to 14@ 15@ 16@ from_car 9@ with_offset 10.0 10.0 0 
0407: store_coords_to 17@ 18@ 19@ from_car 9@ with_offset -10.0 0 -3.0 
053E: 8@ = get_random_car_with_actors -1 in_rectangle_cornerA 14@ 15@ cornerB 17@ 18@ 
wait 0 
   Actor.Driving($PLAYER_ACTOR)
else_jump @DAMAGE_1269 
056E:   car 8@ defined 
else_jump @DAMAGE_920 
046C: 7@ = car 8@ driver 
jump @DAMAGE_1050 

:DAMAGE_1050
wait 0 
if and
   Actor.Driving($PLAYER_ACTOR)
056D:   actor 7@ defined 
else_jump @DAMAGE_1269 
0407: store_coords_to $101 $102 $103 from_car 8@ with_offset -10.0 0 -3.0 
0407: store_coords_to $104 $105 $106 from_car 8@ with_offset 10.0 10.0 0 
00A4:   actor $PLAYER_ACTOR sphere 0 in_cube_cornerA $101 $102 $103 cornerB $104 $105 $106 
else_jump @DAMAGE_1269 
0208: 13@ = random_float_in_ranges -10.0 10.0 
0208: 12@ = random_float_in_ranges -10.0 10.0 
0208: 11@ = random_float_in_ranges -10.0 10.0 
wait 0 
080E: get_actor 7@ ped_event_to 10@ 
  10@ == 73 
else_jump @DAMAGE_816 
0713: unknown_action_sequence 6@ -1 8@ 0.0 0.0 0.0 100.0 8 1 90 
jump @DAMAGE_816 

:DAMAGE_1269
wait 0 
Car.RemoveReferences(9@)
Car.RemoveReferences(8@)
Actor.RemoveReferences(7@)
jump @DAMAGE_816 

:DAMAGE_1295
Actor.RemoveReferences(6@)
Car.RemoveReferences(5@)
jump @OXPAHA 

:OXPAHA_1322
wait 250 
   Player.Defined($PLAYER_CHAR)
else_jump @OXPAHA_1322 
   not Actor.Dead(6@)
else_jump @OXPAHA_1379 

:OXPAHA_1351
wait 250 
if or
   Actor.Dead($PLAYER_ACTOR)
   Actor.Dead(6@)
wasted_or_busted 
else_jump @OXPAHA_1351 

:OXPAHA_1379
Actor.RemoveReferences(6@)
Car.RemoveReferences(5@)
wait 6000 
jump @OXPAHA 

:OXPAHA_1403
wait 0 
054C: use_GXT_table 'ZERO2' 
00BC: show_text_highpriority GXT 'IE07' time 1000 flag 1  // ~r~“ BAC HEЂOCTATO4HO ЂEHE†!
jump @OXPAHA

Last edited by svetka (11-07-2007 18:15)

Offline

#2 09-07-2007 17:35

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

Re: Вот мой безглючный(?) код охраны.

Зачем загружать модель еще до начала основной работы?

:OXPAHA_28
jump @OXPAHA_35 

:OXPAHA_35

jump лишний. Судя по всему, ты сначала вставила while..end, потом декомпилировала код и запостила здесь.

jump @OXPAHA 
end_thread

end_thread лишний

Offline

#3 10-07-2007 06:09

Stalker2012
Registered: 11-06-2007
Posts: 27

Re: Вот мой безглючный(?) код охраны.

Прикольный скрипт. Можно еще добавить:
1) Добавит машине выброс шипов.
2) Если бой затягивается, то на подмогу приезжает грузовик со сватовцами или хантер\гидра прилетает и все превращает в груду хлама!!!
3) Ну а когда совсем плохо можно и танков подогнать и включить режим войны на улицах.

Давно хотел такой скрипт написать да времени нет.


Seemann wrote:

jump лишний. Судя по всему, ты сначала вставила while..end, потом декомпилировала код и запостила здесь.

Вот поэтому я и пишу по-старинке руками весь код, а автоматика мусор оставляет.

Offline

#4 10-07-2007 06:49

svetka
Registered: 29-12-2006
Posts: 222

Re: Вот мой безглючный(?) код охраны.

Seemann, спасибо, что откликнулся smile
На самом деле в коде есть серьезная(?) ошибка.
Например, меня убивают, но охранник стается жив. В этом случае, чтобы вновь вызвать охрану мне надо сесть на любое транспортное средство и выйти из него. Передвигаться на нем не обязательно. Без этой манипуляции охрана не вызывается.
Другой пример. Я жива - охранника убивают. Охранник падает, истекает кровью, кровь высыхает - охранник лежит. В этом случае, чтобы вновь вызвать охранника надо отойти на 150 игровых метров.
Ну как мне избавиться от этой напасти? Где у меня ошибка? Может я не дописала чего? Уже даже не соображу, в каком месте искать и что sad Ум вообще не умный какой-то smile

jump лишний. Судя по всему, ты сначала вставила while..end, потом декомпилировала код и запостила здесь.

Ты совершенно прав. Просто пар из мозгов глаза застил smile

Stalker2012, спасибо за отклик smile

Добавить машине выброс шипов.

Это у меня идет отдельным скриптом для всех машин. Шипы у меня один дядечка продает. Скрипт в стадии написания. С проверками на целостность и проколы шин пока разбираюсь.

Если бой затягивается, то на подмогу приезжает грузовик со сватовцами...

В другом варианте скрипта я делала привязку к здоровью охранника. Если здоровье меньше, чем 20% приезжает товарищ с более авторитетным оружием. Если и у того со здоровьем не ах - приезжает команда "Ух!" smile

Offline

#5 10-07-2007 07:35

Stalker2012
Registered: 11-06-2007
Posts: 27

Re: Вот мой безглючный(?) код охраны.

Svetka:

На самом деле в коде есть серьезная(?) ошибка

скрипт зацикливаетса на метке DAMAGE_884, в проверке
Actor.Driving($PLAYER_ACTOR)
else_jump @DAMAGE_884

еще мешает проверка
:OXPAHA_726
01C1:   car 5@ stopped
бывает что машина вообще не добирается до игрока и ищи ее потом не знама где, а скрипт зацикливается.

и самое главное не срабатывает проверка на смерть актеров
if or
   not Actor.Dead(6@)
   not Actor.Dead($PLAYER_ACTOR)

а надо
if and
   not Actor.Dead(6@)
   not Actor.Dead($PLAYER_ACTOR)

Last edited by Stalker2012 (10-07-2007 09:02)

Offline

#6 10-07-2007 09:15

svetka
Registered: 29-12-2006
Posts: 222

Re: Вот мой безглючный(?) код охраны.

Stalker2012 wrote:

скрипт зацикливаетса на метке DAMAGE_884, в проверке
Actor.Driving($PLAYER_ACTOR)
else_jump @DAMAGE_884

Вот на этом моменте я и зациклилась. Прямо слепое пятно какое-то smile Просто напросто не соображу как выйти из этого цикла.

Offline

#7 10-07-2007 10:48

Stalker2012
Registered: 11-06-2007
Posts: 27

Re: Вот мой безглючный(?) код охраны.

Svetka:

Вот на этом моменте я и зациклилась. Прямо слепое пятно какое-то smile Просто напросто не соображу как выйти из этого цикла.

Это самый примитивный способ(обычно использую для отладки), может кто знает лучше:
через 10 сек машина переносится к игроку

..............
$r=0

:OXPAHA_726
wait 500
0513: text_1number_text_box 'number' $r
$r +=1

if or
$r > 20

01C1:   car 5@ stopped
else_jump @OXPAHA_726
04C4: store_coords 25@ 26@ 27@ from_actor $PLAYER_ACTOR with_offset 0 2.0 0
00AB: put_car 5@ at 25@ 26@ 27@
wait 300

05CD: AS_actor 6@ exit_car 5@
0631: put_actor 6@ in_group $PLAYER_GROUP
Player.Money($PLAYER_CHAR) += -1000
20@ = Marker.CreateAboveActor(6@)

:OXPAHA_775
............

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

Last edited by Stalker2012 (10-07-2007 10:48)

Offline

#8 10-07-2007 11:33

svetka
Registered: 29-12-2006
Posts: 222

Re: Вот мой безглючный(?) код охраны.

Stalker2012, я зациклилась на:

скрипт зацикливаетса на метке DAMAGE_884, в проверке
Actor.Driving($PLAYER_ACTOR)
else_jump @DAMAGE_884

Вот здесь у меня проблемы.

А против аварий у меня пока неплохо работает опкод:
072F: unknown 5@ 1.0 2000 1 1 1 -1
И к тому же, если охранник выходит из машины - над ним появляется маркер. Так что издали будет на радаре виден.
Сама машина генерируется в 70-ти игровых метрах от местоположения актера.

Offline

#9 10-07-2007 12:13

Stalker2012
Registered: 11-06-2007
Posts: 27

Re: Вот мой безглючный(?) код охраны.

Svetka:

И к тому же, если охранник выходит из машины - над ним появляется маркер. Так что издали будет на радаре виден.
Сама машина генерируется в 70-ти игровых метрах от местоположения актера.

Так-то оно так, но у меня все время машина генерится на трассе под мостом рядом с домом CJ и телохранитель начинает ездить в объезд и ждать его приходится долго.

Я  уменьшил радиус до 10 метров позади игрока и вроде он стал добиратся быстрее. Вобщем весьма полезный скрипт.

Last edited by Stalker2012 (10-07-2007 12:13)

Offline

#10 10-07-2007 12:25

svetka
Registered: 29-12-2006
Posts: 222

Re: Вот мой безглючный(?) код охраны.

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

Ну, да. Это на любителя smile

Offline

#11 11-07-2007 14:53

svetka
Registered: 29-12-2006
Posts: 222

Re: Вот мой безглючный(?) код охраны.

Stalker2012 wrote:

if or
   not Actor.Dead(6@)
   not Actor.Dead($PLAYER_ACTOR)

а надо
if and
   not Actor.Dead(6@)
   not Actor.Dead($PLAYER_ACTOR)

Вот это я что-то не совсем поняла. Я всегда считала, что if or говорит, что либо, либо. В моем случае, ставя условие таким образом я подразумевала переход или в случае смерти плеера, или охраны.
Но ты, Stalker2012, оказался прав, предложив формулировку условия: if and.
Объясни мне, почему именно так? Совсем я запуталась.

2Seemann:
Опкод
072F: иной раз все же позволяет моей охране застревать. Может я его не туда поставила?

Offline

#12 11-07-2007 16:36

Nikitos
Registered: 16-04-2007
Posts: 3

Re: Вот мой безглючный(?) код охраны.

2svetka:
Правило Де Моргана не учила? not(not(усл1) or not(усл2)) = усл1&усл2 . Т.е. у тебя переход в случае невыполнения условия выполняется когда актер и игрок умерли. А с if and в случае невыполнения как раз наоборот - либо игрок, либо актер умерли. Но помойму тут все и без ДеМоргана понятно. И в целом код охраны трудно назвать безглючным...

Offline

#13 11-07-2007 16:47

svetka
Registered: 29-12-2006
Posts: 222

Re: Вот мой безглючный(?) код охраны.

Спасибо, Nikitos.

И в целом код охраны трудно назвать безглючным...

И это всё? smile
Была бы признательна за указание на сомнительные моменты.

Offline

#14 11-07-2007 18:16

svetka
Registered: 29-12-2006
Posts: 222

Re: Вот мой безглючный(?) код охраны.

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

Offline

#15 25-07-2008 13:40

Admiral
Registered: 26-07-2007
Posts: 35

Re: Вот мой безглючный(?) код охраны.

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


Моды -   вот что украшает игру!

Offline

Board footer

Powered by FluxBB