#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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
: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,158

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

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

1
2
3
4
:OXPAHA_28
jump @OXPAHA_35
 
:OXPAHA_35

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

1
2
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