You are not logged in.
Pages: 1
Вот мой безглючный(?) вариант кода охраны.
В написании части кода "ОХРАНА" во многом мне помогли идеи Capushon-a, за что ему и спасибо
В написании части кода "DAMAGE" идеи Zibatop-a (взяла из кода эффектных аварий), за что ему также спасибо
А также спасибо Seemann, за антиаварийный опкод, Stalker2012, yelmi за опкод обстрела авто.
За возможные глюки прошу вышеупомянутых скриптеров не винить.
Cуть кода: вызов охраны со стандартными функциями("ОХРАНА") + отстрел атакующих авто("DAMAGE").
Буду крайне благодарна за конструктивную критику, советы и предложения
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
Зачем загружать модель еще до начала основной работы?
1 2 3 4 | :OXPAHA_28 jump @OXPAHA_35 :OXPAHA_35 |
jump лишний. Судя по всему, ты сначала вставила while..end, потом декомпилировала код и запостила здесь.
1 2 | jump @OXPAHA end_thread |
end_thread лишний
Offline
Прикольный скрипт. Можно еще добавить:
1) Добавит машине выброс шипов.
2) Если бой затягивается, то на подмогу приезжает грузовик со сватовцами или хантер\гидра прилетает и все превращает в груду хлама!!!
3) Ну а когда совсем плохо можно и танков подогнать и включить режим войны на улицах.
Давно хотел такой скрипт написать да времени нет.
jump лишний. Судя по всему, ты сначала вставила while..end, потом декомпилировала код и запостила здесь.
Вот поэтому я и пишу по-старинке руками весь код, а автоматика мусор оставляет.
Offline
Seemann, спасибо, что откликнулся
На самом деле в коде есть серьезная(?) ошибка.
Например, меня убивают, но охранник стается жив. В этом случае, чтобы вновь вызвать охрану мне надо сесть на любое транспортное средство и выйти из него. Передвигаться на нем не обязательно. Без этой манипуляции охрана не вызывается.
Другой пример. Я жива - охранника убивают. Охранник падает, истекает кровью, кровь высыхает - охранник лежит. В этом случае, чтобы вновь вызвать охранника надо отойти на 150 игровых метров.
Ну как мне избавиться от этой напасти? Где у меня ошибка? Может я не дописала чего? Уже даже не соображу, в каком месте искать и что Ум вообще не умный какой-то
jump лишний. Судя по всему, ты сначала вставила while..end, потом декомпилировала код и запостила здесь.
Ты совершенно прав. Просто пар из мозгов глаза застил
Stalker2012, спасибо за отклик
Добавить машине выброс шипов.
Это у меня идет отдельным скриптом для всех машин. Шипы у меня один дядечка продает. Скрипт в стадии написания. С проверками на целостность и проколы шин пока разбираюсь.
Если бой затягивается, то на подмогу приезжает грузовик со сватовцами...
В другом варианте скрипта я делала привязку к здоровью охранника. Если здоровье меньше, чем 20% приезжает товарищ с более авторитетным оружием. Если и у того со здоровьем не ах - приезжает команда "Ух!"
Offline
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
скрипт зацикливаетса на метке DAMAGE_884, в проверке
Actor.Driving($PLAYER_ACTOR)
else_jump @DAMAGE_884
Вот на этом моменте я и зациклилась. Прямо слепое пятно какое-то Просто напросто не соображу как выйти из этого цикла.
Offline
Svetka:
Вот на этом моменте я и зациклилась. Прямо слепое пятно какое-то
Просто напросто не соображу как выйти из этого цикла.
Это самый примитивный способ(обычно использую для отладки), может кто знает лучше:
через 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
Stalker2012, я зациклилась на:
скрипт зацикливаетса на метке DAMAGE_884, в проверке
Actor.Driving($PLAYER_ACTOR)
else_jump @DAMAGE_884
Вот здесь у меня проблемы.
А против аварий у меня пока неплохо работает опкод:
072F: unknown 5@ 1.0 2000 1 1 1 -1
И к тому же, если охранник выходит из машины - над ним появляется маркер. Так что издали будет на радаре виден.
Сама машина генерируется в 70-ти игровых метрах от местоположения актера.
Offline
Svetka:
И к тому же, если охранник выходит из машины - над ним появляется маркер. Так что издали будет на радаре виден.
Сама машина генерируется в 70-ти игровых метрах от местоположения актера.
Так-то оно так, но у меня все время машина генерится на трассе под мостом рядом с домом CJ и телохранитель начинает ездить в объезд и ждать его приходится долго.
Я уменьшил радиус до 10 метров позади игрока и вроде он стал добиратся быстрее. Вобщем весьма полезный скрипт.
Last edited by Stalker2012 (10-07-2007 12:13)
Offline
Я уменьшил радиус до 10 метров позади игрока и вроде он стал добиратся быстрее.
Ну, да. Это на любителя
Offline
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
2svetka:
Правило Де Моргана не учила? not(not(усл1) or not(усл2)) = усл1&усл2 . Т.е. у тебя переход в случае невыполнения условия выполняется когда актер и игрок умерли. А с if and в случае невыполнения как раз наоборот - либо игрок, либо актер умерли. Но помойму тут все и без ДеМоргана понятно. И в целом код охраны трудно назвать безглючным...
Offline
Спасибо, Nikitos.
И в целом код охраны трудно назвать безглючным...
И это всё?
Была бы признательна за указание на сомнительные моменты.
Offline
Исправила в коде глюк со смертью актеров. Теперь все умирают как положено и охрана вызывается без проблем.
Offline
Выложите плизз декомпилированный файл для клео чтобы его скачать. И скажите как вызвать охрану.
Моды - вот что украшает игру!
Offline
Pages: 1