You are not logged in.
Доброго Времени суток, появился такой вопрос, точнее несколько.
1) Мы создали актёра. Как заставить его идти и атаковать врагов? И как заставить его определять, кто друг, а кого надо убить?
2) Как показать полоску здоровья персонажа?
3) Подскажите опкод для проверки игрока в радиусе.
игра какая?
1) 077A: set_actor $PlyrSupport acquaintance 4 to_actors_pedtype 4 // see ped.dat
первый флаг - отношение (4 - ненависть, 1 - дружба, остальные не помню)
второй флаг - тип педа (указываешь тот, какой ты указал на созданном актере которого нужно атаковать)
2)
0226: $health = actor $PlyrSupport health
03C4: set_status_text $health type 1 GXT 'SW5_A3'
переменная - хп перса, в кавычках - текст из text/american.gxt
3) alt+ctrl+2, вводишь actor radius, выбираешь что хочешь
а вообще лучше для начала справку ВБ прочитать )
Offline
чувак, вот для таких как ты как раз )
Offline
Kim wrote:Доброго Времени суток, появился такой вопрос, точнее несколько.
1) Мы создали актёра. Как заставить его идти и атаковать врагов? И как заставить его определять, кто друг, а кого надо убить?
2) Как показать полоску здоровья персонажа?
3) Подскажите опкод для проверки игрока в радиусе.игра какая?
1) 077A: set_actor $PlyrSupport acquaintance 4 to_actors_pedtype 4 // see ped.dat
первый флаг - отношение (4 - ненависть, 1 - дружба, остальные не помню)
второй флаг - тип педа (указываешь тот, какой ты указал на созданном актере которого нужно атаковать)2)
0226: $health = actor $PlyrSupport health
03C4: set_status_text $health type 1 GXT 'SW5_A3'
переменная - хп перса, в кавычках - текст из text/american.gxt3) alt+ctrl+2, вводишь actor radius, выбираешь что хочешь
а вообще лучше для начала справку ВБ прочитать )
Спасибо, я нашёл все отношения, но я не могу убрать полоску здоровья после смерти, как это сделать? И игра ГТА СА
Offline
Спасибо, я нашёл все отношения, но я не могу убрать полоску здоровья после смерти, как это сделать? И игра ГТА СА
Нужно добавить условие отключения статус-текста:
1 2 3 4 5 | if Actor.Dead( $YOU_ACTOR ) then 0151: remove_status_text $YOU_STATUS_TEXT end |
Вот есть пример миссии, где это делается, если интересны детали.
Offline
Kim wrote:Спасибо, я нашёл все отношения, но я не могу убрать полоску здоровья после смерти, как это сделать? И игра ГТА СА
Нужно добавить условие отключения статус-текста:
12345if
Actor.Dead(
$YOU_ACTOR
)
then
0151: remove_status_text
$YOU_STATUS_TEXT
end
Вот есть пример миссии, где это делается, если интересны детали.
Спасибо, есть ещё один вопрос, даже при использовании опкодов 016C и 016D при смерти игрока игра вылетает, что делать?
Offline
Спасибо, есть ещё один вопрос, даже при использовании опкодов 016C и 016D при смерти игрока игра вылетает, что делать?
А как вы их используете? Эти опкоды в оригинальном мейне стоят в стартовом потоке 'MAIN' и являются обязательными, чтобы небыло проблем как при аресте/смерти, так и после процесса сохранения. В Cleo их, как правило, не увидишь.
Offline
Kim wrote:Спасибо, есть ещё один вопрос, даже при использовании опкодов 016C и 016D при смерти игрока игра вылетает, что делать?
А как вы их используете? Эти опкоды в оригинальном мейне стоят в стартовом потоке 'MAIN' и являются обязательными, чтобы небыло проблем как при аресте/смерти, так и после процесса сохранения. В Cleo их, как правило, не увидишь.
Без них игра вылетата при смерти, почитал в SB справочнике, поставил, тоже вылетает, вот начало кода
{$CLEO ,cm}
wait 0
016C: restart_if_wasted at 2027.77 -1420.52 15.99 angle 137.0 town_number 0
016D: restart_if_busted_at 1550.68 -1675.49 14.51 angle 90.0 town_number 0
0180: set_on_mission_flag_to $ONMISSION
create_thread @Main
end_thread
:Main
Thread 'Main'
И потом остальной код, с ним проблем нет
Offline
Без них игра вылетата при смерти, почитал в SB справочнике, поставил, тоже вылетает, вот начало кода
{$CLEO ,cm}
wait 0
016C: restart_if_wasted at 2027.77 -1420.52 15.99 angle 137.0 town_number 0
016D: restart_if_busted_at 1550.68 -1675.49 14.51 angle 90.0 town_number 0
0180: set_on_mission_flag_to $ONMISSION
create_thread @Main
end_thread:Main
Thread 'Main'
И потом остальной код, с ним проблем нет
В Cleo нельзя использовать команду "create_thread", а также не рекомендуется в одном скрипте использовать несколько потоков.
Offline
Kim wrote:Без них игра вылетата при смерти, почитал в SB справочнике, поставил, тоже вылетает, вот начало кода
{$CLEO ,cm}
wait 0
016C: restart_if_wasted at 2027.77 -1420.52 15.99 angle 137.0 town_number 0
016D: restart_if_busted_at 1550.68 -1675.49 14.51 angle 90.0 town_number 0
0180: set_on_mission_flag_to $ONMISSION
create_thread @Main
end_thread:Main
Thread 'Main'
И потом остальной код, с ним проблем нетВ Cleo нельзя использовать команду "create_thread", а также не рекомендуется в одном скрипте использовать несколько потоков.
Просто так в справочнике Sanny Builder написано, не буду использовать. Ну так почему крашит игра после смерти? Вроде всё есть
Offline
Я решил проблему с крашем при смерти, оказывается не было mission_cleanup в потоке провала миссии, но теперь в миссии экран тупо красный и ничего не видно, даже карты.
Offline
Хочу кое-что уточнить. Работаю с Decision Maker, устанавливаю одним педам храброе поведение, а другим - трусливое. Но результат получается обратный. Во всех справках написано, что DM 3 - храброе поведение, а DM 4 - трусливое, но на практике получается, что наоборот. Например, устанавливаю педу DM 4, и если его ударить, он начинает драться. Если же установить DM 3 - после удара он убегает.
Кто-нибудь ещё с этим сталкивался?
Offline
Я решил проблему с крашем при смерти, оказывается не было mission_cleanup в потоке провала миссии, но теперь в миссии экран тупо красный и ничего не видно, даже карты.
Используйте шаблоны миссий, которые предложены в справке, чтобы избежать подобных проблем. Вот мой вариант миссий:
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 | {$CLEO .cm} //------------- Mission --------------- :MISSION thread 'MISSION' gosub @MISSION_START if wasted_or_busted jf @MISSION_END gosub @MISSION_FAILED :MISSION_END $ONMISSION = 0 mission_cleanup end_thread :MISSION_START increment_mission_attempts $ONMISSION = 1 // { код миссии } // :MISSION_PASSED // Если миссия успешно пройдена gosub @MISSION_CLEAR return :MISSION_FAILED // Если миссия провалена, игрок умер или арестован gosub @MISSION_CLEAR return :MISSION_CLEAR // Здесь очищаем все использованные ресурсы в миссии. return |
Пример Cleo-миссий а также их запуск подробно описано здесь.
Last edited by wmysterio (14-06-2017 13:46)
Offline
Kim wrote:Я решил проблему с крашем при смерти, оказывается не было mission_cleanup в потоке провала миссии, но теперь в миссии экран тупо красный и ничего не видно, даже карты.
Используйте шаблоны миссий, которые предложены в справке, чтобы избежать подобных проблем. Вот мой вариант миссий:
1234567891011121314151617181920212223242526272829303132333435363738{$CLEO .cm}
//------------- Mission ---------------
:MISSION
thread
'MISSION'
gosub
@MISSION_START
if
wasted_or_busted
jf
@MISSION_END
gosub
@MISSION_FAILED
:MISSION_END
$ONMISSION
=
0
mission_cleanup
end_thread
:MISSION_START
increment_mission_attempts
$ONMISSION
=
1
//
{ код миссии }
//
:MISSION_PASSED
// Если миссия успешно пройдена
gosub
@MISSION_CLEAR
return
:MISSION_FAILED
// Если миссия провалена, игрок умер или арестован
gosub
@MISSION_CLEAR
return
:MISSION_CLEAR
// Здесь очищаем все использованные ресурсы в миссии.
return
Пример Cleo-миссий а также их запуск подробно описано здесь.
Я и использую эти шаблоны в справке...Но экран всё равно красный
Offline
Я и использую эти шаблоны в справке...Но экран всё равно красный
Покажите ещё код стартера. Может дело в нём. Или лучше киньте сюда оба файла, посмотрим. Не исключаю возможность того, что ошибка может быть в других скриптах.
Offline
trashmas, убери этот опкод - 0350.
Благодарю, попробую
Offline
Kim wrote:Я и использую эти шаблоны в справке...Но экран всё равно красный
Покажите ещё код стартера. Может дело в нём. Или лучше киньте сюда оба файла, посмотрим. Не исключаю возможность того, что ошибка может быть в других скриптах.
Вот это код миссии
{$CLEO .cm}
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 | //-------------Mission 0--------------- // Originally: Initial 1 016C: restart_if_wasted at 2027.77 - 1420.52 15.99 angle 137.0 unknown 0 016D: restart_if_busted at 1550.68 - 1675.49 14.51 angle 90.0 unknown 0 0180: set_on_mission_flag_to $ONMISSION :MISSION wait 0 thread 'Army' gosub @MissionStart if wasted_or_busted jf @MissionCleanup gosub @MissionFailed :MissionCleanup wait 0 $ONMISSION = 0 mission_cleanup end_thread :MissionStart wait 0 Model.Load( #M4 ) Model.Load( #ARMY ) Model.Load( #SNIPER ) 038B: load_requested_models wait 0 :Load_Models wait 0 if and Model.Available( #M4 ) Model.Available( #ARMY ) Model.Available( #SNIPER ) jf @Load_Models wait 10 :Create_Army wait 0 // 1@ - Стоит перед CJ Actor.Create( 1@ ,7, #ARMY ,2724.22, -2385.8152, 17.3403) 01B2: give_actor 1@ weapon 31 ammo 99999 // Load the weapon model before using this Marker.CreateAboveActor( 10@ , 1@ ) // 10@ - Значит маркер над 1 актёром, 20 - значит маркер над 2 актёром 0816: set_actor 1@ dont_chase_victim 1 077A: set_actor 1@ acquaintance 4 to_actors_pedtype 0 Marker.SetIconSize( 10@ , 1@ ) 00BC: text_highpriority 'Sw_2' 5000 ms 1 :Actor_Dead_1 wait 0 if Actor.Dead( 1@ ) then Marker.Disable( 10@ ) else jump @Actor_Dead_1 end :Pick_Up wait 0 //Создаём винтовку на один раз 032B: 1@ = create_weapon_pickup #SNIPER 3 100 at 2753.6436 - 2381.7251 17.3403 00BC: text_highpriority 'Sw_3' 5000 ms 1 :Pick_Up_Has_PICuped if 00EC: actor $PLAYER_ACTOR 0 near_point 2753.7183 - 2381.7253 17.3403 radius 0.1 0.1 then 0816: set_actor $PLAYER_ACTOR dont_chase_victim 1 jump @SW_4 else jump @Pick_Up_Has_PICuped end :SW_4 wait 0 Actor.Create( 2@ ,7, #ARMY ,2778.853, -2414.1428, 13.6358) 01B2: give_actor 2@ weapon 31 ammo 99999 // Load the weapon model before using this Marker.CreateAboveActor( 20@ , 2@ ) // 10@ - Значит маркер над 1 актёром, 20 - значит маркер над 2 актёром 077A: set_actor 2@ acquaintance 4 to_actors_pedtype 0 05D3: AS_actor 2@ goto_point 2748.5444 - 2453.3445 13.8623 mode 4 time - 1 ms 00BC: text_highpriority 'Sw_4' 5000 ms 1 :SW_4_end if and not Actor.Dead( 2@ ) 00EC: actor 2@ 0 near_point 2748.5444 - 2453.3445 13.8623 radius 0.1 0.1 then 00BC: text_highpriority 'Sw_5' 5000 ms 1 jump @MissionFailed else if Actor.Dead( 2@ ) then Marker.Disable( 20@ ) jump @MissionPassed end end :MissionPassed wait 0 01E3: show_text_1number_styled GXT 'M_PASSS' number 2000 time 5000 style 1 // MISSION PASSED!~n~~w~$~1~~n~~w~RESPECT + 0998: add_respect 3 Player.Money( $PLAYER_CHAR ) += 100000 0394: play_music 1 mission_cleanup return :MissionFailed wait 0 00BA: show_text_styled GXT 'M_FAIL' time 5000 style 1 // ~r~MISSION FAILED! 014F: stop_timer $TIME 06D6: disable_racing_checkpoint $racing_checkpoint mission_cleanup create_thread @MISSION return |
Вот код стартера
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 | {$CLEO .cs} //----------------STARTER----------------- wait 0 :Starter_Army wait 0 thread 'StartArmy' //СОЗДАНИЕ МАРКЕРА Marker.CreateIconAndSphere( 1@ ,15,2495.2039, -1681.3651, 13.3388) :Starter_Army_45 wait 0 if 0102: actor $PLAYER_ACTOR in_sphere 2495.2039 - 1681.3651 13.3388 radius 2.0 2.0 1.0 sphere 1 stopped_on_foot jf @Starter_Army_45 Marker.Disable( 1@ ) fade 0 1500 Player.CanMove( $PLAYER_CHAR ) = False 00BA: show_text_styled GXT 'SW_1' time 2000 style 2 wait 1500 0A94: start_custom_mission "Army" wait 1000 fade 1 1500 wait 500 Player.CanMove( $PLAYER_CHAR ) = True $ONMISSION = 1 0A93: end_custom_thread |
Offline
Вот это код миссии
Посмотрел я ваш код. Некоторые команды используются совсем нет там, где нужно. Я исправил и прокомментировал некоторые вещи, но пока не проверял. Вот код стартера:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | {$CLEO .cs} :ARMYST thread 'ARMYST' // !!! StartArmy - слишком много символов. Максимум - 7 1@ = Marker.CreateIconAndSphere(15, 2495.2039, -1681.3651, 13.3388) :ARMYST_LOOP wait 0 if and 075C: marker 1@ enabled $ONMISSION == 0 // !!! другие миссии не должны быть запущенными. Всегда проверяйте этот флаг 0102: actor $PLAYER_ACTOR in_sphere 2495.2039 - 1681.3651 13.3388 radius 2.0 2.0 1.0 sphere 0 stopped_on_foot // sphere 1 необязательно, так как сферу генерирует команда CreateIconAndSphere jf @ARMYST_LOOP Marker.Disable( 1@ ) Actor.SetImmunities( $PLAYER_ACTOR , 1, 1, 1, 1, 1) // на всякий случай поставить иммунитеты Player.CanMove( $PLAYER_CHAR ) = False 00BA: show_text_styled GXT 'SW_1' time 2000 style 2 fade 0 1500 wait 1500 0A94: start_custom_mission "Army" 0A93: end_custom_thread |
Вот код миссии:
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 | {$CLEO .cm} //------------- Mission --------------- :ARMY thread 'ARMY' gosub @ARMY_START if wasted_or_busted jf @ARMY_END gosub @ARMY_FAILED :ARMY_END $ONMISSION = 0 mission_cleanup end_thread :ARMY_START increment_mission_attempts $ONMISSION = 1 wait 1500 // на всякий случай { !!! Код миссии ДОЛЖЕН НАЧИНАТЬСЯ ТОЛЬКО ЗДЕСЬ} 016C: restart_if_wasted at 2027.77 - 1420.52 15.99 angle 137.0 unknown 0 // только если этих координаты не прописаны в main.scm. иначе будет дублирование 016D: restart_if_busted at 1550.68 - 1675.49 14.51 angle 90.0 unknown 0 // только если этих координаты не прописаны в main.scm. иначе будет дублирование //0180: set_on_mission_flag_to $ONMISSION !!! НЕ РЕКОМЕНДУЕТСЯ ПЕРЕОПРЕДЕЛТЬ ПЕРЕМЕННУЮ $ONMISSION В НЕ MAIN.SCM Model.Load( #M4 ) Model.Load( #ARMY ) Model.Load( #SNIPER ) 038B: load_requested_models :ARMY_LOAD_MODELS wait 0 if and Model.Available( #M4 ) Model.Available( #ARMY ) Model.Available( #SNIPER ) jf @ARMY_LOAD_MODELS 1@ = Actor.Create(7, #ARMY , 2724.22, -2385.8152, 17.3403) 01B2: give_actor 1@ weapon 31 ammo 99999 10@ = Marker.CreateAboveActor( 1@ ) 0816: set_actor 1@ dont_chase_victim 1 077A: set_actor 1@ acquaintance 4 to_actors_pedtype 0 Marker.SetIconSize( 10@ , 2) // здесь не уместно использовать 1@, так как это ссылка на актёра, а нужно простые числа - 1, 2, 4... Actor.SetImmunities( $PLAYER_ACTOR , 0, 0, 0, 0, 0) // отключаем иммунитеты Player.CanMove( $PLAYER_CHAR ) = True // даём игроку контроль fade 1 1000 wait 1000 00BC: text_highpriority 'Sw_2' 5000 ms //:Actor_Dead_1 //wait 0 //if // Actor.Dead(1@) //then // Marker.Disable(10@) //else // jump @Actor_Dead_1 //end // проще будет сделать так: :ARMY_ACTOR_DEAD_1 wait 0 if Actor.Dead( 1@ ) jf @ARMY_ACTOR_DEAD_1 Marker.Disable( 10@ ) //Создаём винтовку на один раз 032B: 3@ = create_weapon_pickup #SNIPER 3 100 at 2753.6436 - 2381.7251 17.3403 // !!! в метке ARMY_CLEAR мыбудет удалять актёра 1@, лучше переменную не перезаписывать 00BC: text_highpriority 'Sw_3' 5000 ms 1 // :Pick_Up_Has_PICuped //if //00EC: actor $PLAYER_ACTOR 0 near_point 2753.7183 -2381.7253 17.3403 radius 0.1 0.1 // then //0816: set_actor $PLAYER_ACTOR dont_chase_victim 1 //jump @SW_4 // else // jump @Pick_Up_Has_PICuped //end // проще будет сделать так: :ARMY_PICKED_UP wait 0 if Pickup.Picked_up( 3@ ) // проверка: пикап 3@ был взят? jf @ARMY_PICKED_UP 0816: set_actor $PLAYER_ACTOR dont_chase_victim 1 2@ = Actor.Create(7, #ARMY ,2778.853, -2414.1428, 13.6358) 01B2: give_actor 2@ weapon 31 ammo 99999 20@ = Marker.CreateAboveActor( 2@ ) 077A: set_actor 2@ acquaintance 4 to_actors_pedtype 0 05D3: AS_actor 2@ goto_point 2748.5444 - 2453.3445 13.8623 mode 4 time - 1 ms 00BC: text_highpriority 'Sw_4' 5000 ms 1 :ARMY_CHECK_ACTOR wait 0 if Actor.Dead( 2@ ) then Marker.Disable( 20@ ) jump @ARMY_PASSED end if and not Actor.Dead( 2@ ) 00EC: actor 2@ 0 near_point 2748.5444 - 2453.3445 radius 0.4 0.4 // 0.1 - слишком маленький радиус, 13.8623 - не нужно, так как будет передан в радиус X then jump @ARMY_FAILED_AND_TEXT end jump @ARMY_CHECK_ACTOR :ARMY_PASSED gosub @ARMY_CLEAR 01E3: show_text_1number_styled GXT 'M_PASSS' number 100000 time 5000 style 1 // MISSION PASSED!~n~~w~$~1~~n~~w~RESPECT + 0998: add_respect 3 Player.Money( $PLAYER_CHAR ) += 100000 0394: play_music 1 //mission_cleanup // !!! НЕ НАДО ЧИСТИТЬ ВСЁ ЗДЕСЬ return :ARMY_FAILED_AND_TEXT 00BC: text_highpriority 'Sw_5' 5000 ms 1 :ARMY_FAILED gosub @ARMY_CLEAR 00BA: show_text_styled GXT 'M_FAIL' time 5000 style 1 // ~r~MISSION FAILED! //014F: stop_timer $TIME // ? //06D6: disable_racing_checkpoint $racing_checkpoint // ? //mission_cleanup // !!! НЕ НАДО ЧИСТИТЬ ВСЁ ЗДЕСЬ //create_thread @MISSION // !!! НЕЛЬЗЯ ИСПОЛЬЗОВАТЬ В CLEO-МИССИЯХ 0A92: create_custom_thread "MISSION.cs" // лучше так return // все ресурсы удаляем здесь, если они были созданы :ARMY_CLEAR Model.Destroy( #M4 ) // !!! Не забываем выгружать модели после того, как они стали не нужны Model.Destroy( #ARMY ) // !!! Не забываем выгружать модели после того, как они стали не нужны Model.Destroy( #SNIPER ) // !!! Не забываем выгружать модели после того, как они стали не нужны if 056D: actor 0@ defined then Actor.RemoveReferences( 0@ ) Actor.DestroyInstantly( 0@ ) end if 056D: actor 2@ defined then Actor.RemoveReferences( 2@ ) Actor.DestroyInstantly( 2@ ) end if 09D1: pickup 3@ created then Pickup.Destroy( 3@ ) end if 075C: marker 10@ enabled then Marker.Disable( 10@ ) end if 075C: marker 20@ enabled then Marker.Disable( 20@ ) end return |
Тестируйте. Спрашивайте
Last edited by wmysterio (15-06-2017 14:30)
Offline
Вылетает игра просто
Offline
Kim wrote:Вот это код миссии
Посмотрел я ваш код. Некоторые команды используются совсем нет там, где нужно. Я исправил и прокомментировал некоторые вещи, но пока не проверял. Вот код стартера:
12345678910111213141516171819202122{$CLEO .cs}
:ARMYST
thread
'ARMYST'
// !!! StartArmy - слишком много символов. Максимум - 7
1@
= Marker.CreateIconAndSphere(15, 2495.2039, -1681.3651, 13.3388)
:ARMYST_LOOP
wait
0
if
and
075C: marker
1@
enabled
$ONMISSION
==
0
// !!! другие миссии не должны быть запущенными. Всегда проверяйте этот флаг
0102: actor
$PLAYER_ACTOR
in_sphere
2495.2039
-
1681.3651
13.3388
radius
2.0
2.0
1.0
sphere
0
stopped_on_foot
// sphere 1 необязательно, так как сферу генерирует команда CreateIconAndSphere
jf
@ARMYST_LOOP
Marker.Disable(
1@
)
Actor.SetImmunities(
$PLAYER_ACTOR
, 1, 1, 1, 1, 1)
// на всякий случай поставить иммунитеты
Player.CanMove(
$PLAYER_CHAR
) =
False
00BA: show_text_styled GXT
'SW_1'
time
2000
style
2
fade
0
1500
wait
1500
0A94: start_custom_mission
"Army"
0A93: end_custom_thread
Вот код миссии:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173{$CLEO .cm}
//------------- Mission ---------------
:ARMY
thread
'ARMY'
gosub
@ARMY_START
if
wasted_or_busted
jf
@ARMY_END
gosub
@ARMY_FAILED
:ARMY_END
$ONMISSION
=
0
mission_cleanup
end_thread
:ARMY_START
increment_mission_attempts
$ONMISSION
=
1
wait
1500
// на всякий случай
{ !!! Код миссии ДОЛЖЕН НАЧИНАТЬСЯ ТОЛЬКО ЗДЕСЬ}
016C: restart_if_wasted at
2027.77
-
1420.52
15.99
angle
137.0
unknown
0
// только если этих координаты не прописаны в main.scm. иначе будет дублирование
016D: restart_if_busted at
1550.68
-
1675.49
14.51
angle
90.0
unknown
0
// только если этих координаты не прописаны в main.scm. иначе будет дублирование
//0180: set_on_mission_flag_to $ONMISSION !!! НЕ РЕКОМЕНДУЕТСЯ ПЕРЕОПРЕДЕЛТЬ ПЕРЕМЕННУЮ $ONMISSION В НЕ MAIN.SCM
Model.Load(
#M4
)
Model.Load(
#ARMY
)
Model.Load(
#SNIPER
)
038B: load_requested_models
:ARMY_LOAD_MODELS
wait
0
if
and
Model.Available(
#M4
)
Model.Available(
#ARMY
)
Model.Available(
#SNIPER
)
jf
@ARMY_LOAD_MODELS
1@
= Actor.Create(7,
#ARMY
, 2724.22, -2385.8152, 17.3403)
01B2: give_actor
1@
weapon
31
ammo
99999
10@
= Marker.CreateAboveActor(
1@
)
0816: set_actor
1@
dont_chase_victim
1
077A: set_actor
1@
acquaintance
4
to_actors_pedtype
0
Marker.SetIconSize(
10@
, 2)
// здесь не уместно использовать 1@, так как это ссылка на актёра, а нужно простые числа - 1, 2, 4...
Actor.SetImmunities(
$PLAYER_ACTOR
, 0, 0, 0, 0, 0)
// отключаем иммунитеты
Player.CanMove(
$PLAYER_CHAR
) =
True
// даём игроку контроль
fade
1
1000
wait
1000
00BC: text_highpriority
'Sw_2'
5000
ms
//:Actor_Dead_1
//wait 0
//if
// Actor.Dead(1@)
//then
// Marker.Disable(10@)
//else
// jump @Actor_Dead_1
//end
// проще будет сделать так:
:ARMY_ACTOR_DEAD_1
wait
0
if
Actor.Dead(
1@
)
jf
@ARMY_ACTOR_DEAD_1
Marker.Disable(
10@
)
//Создаём винтовку на один раз
032B:
3@
= create_weapon_pickup
#SNIPER
3
100
at
2753.6436
-
2381.7251
17.3403
// !!! в метке ARMY_CLEAR мыбудет удалять актёра 1@, лучше переменную не перезаписывать
00BC: text_highpriority
'Sw_3'
5000
ms
1
// :Pick_Up_Has_PICuped
//if
//00EC: actor $PLAYER_ACTOR 0 near_point 2753.7183 -2381.7253 17.3403 radius 0.1 0.1
// then
//0816: set_actor $PLAYER_ACTOR dont_chase_victim 1
//jump @SW_4
// else
// jump @Pick_Up_Has_PICuped
//end
// проще будет сделать так:
:ARMY_PICKED_UP
wait
0
if
Pickup.Picked_up(
3@
)
// проверка: пикап 3@ был взят?
jf
@ARMY_PICKED_UP
0816: set_actor
$PLAYER_ACTOR
dont_chase_victim
1
2@
= Actor.Create(7,
#ARMY
,2778.853, -2414.1428, 13.6358)
01B2: give_actor
2@
weapon
31
ammo
99999
20@
= Marker.CreateAboveActor(
2@
)
077A: set_actor
2@
acquaintance
4
to_actors_pedtype
0
05D3: AS_actor
2@
goto_point
2748.5444
-
2453.3445
13.8623
mode
4
time -
1
ms
00BC: text_highpriority
'Sw_4'
5000
ms
1
:ARMY_CHECK_ACTOR
wait
0
if
Actor.Dead(
2@
)
then
Marker.Disable(
20@
)
jump
@ARMY_PASSED
end
if
and
not
Actor.Dead(
2@
)
00EC: actor
2@
0
near_point
2748.5444
-
2453.3445
radius
0.4
0.4
// 0.1 - слишком маленький радиус, 13.8623 - не нужно, так как будет передан в радиус X
then
jump
@ARMY_FAILED_AND_TEXT
end
jump
@ARMY_CHECK_ACTOR
:ARMY_PASSED
gosub
@ARMY_CLEAR
01E3: show_text_1number_styled GXT
'M_PASSS'
number
100000
time
5000
style
1
// MISSION PASSED!~n~~w~$~1~~n~~w~RESPECT +
0998: add_respect
3
Player.Money(
$PLAYER_CHAR
) +=
100000
0394: play_music
1
//mission_cleanup // !!! НЕ НАДО ЧИСТИТЬ ВСЁ ЗДЕСЬ
return
:ARMY_FAILED_AND_TEXT
00BC: text_highpriority
'Sw_5'
5000
ms
1
:ARMY_FAILED
gosub
@ARMY_CLEAR
00BA: show_text_styled GXT
'M_FAIL'
time
5000
style
1
// ~r~MISSION FAILED!
//014F: stop_timer $TIME // ?
//06D6: disable_racing_checkpoint $racing_checkpoint // ?
//mission_cleanup // !!! НЕ НАДО ЧИСТИТЬ ВСЁ ЗДЕСЬ
//create_thread @MISSION // !!! НЕЛЬЗЯ ИСПОЛЬЗОВАТЬ В CLEO-МИССИЯХ
0A92: create_custom_thread
"MISSION.cs"
// лучше так
return
// все ресурсы удаляем здесь, если они были созданы
:ARMY_CLEAR
Model.Destroy(
#M4
)
// !!! Не забываем выгружать модели после того, как они стали не нужны
Model.Destroy(
#ARMY
)
// !!! Не забываем выгружать модели после того, как они стали не нужны
Model.Destroy(
#SNIPER
)
// !!! Не забываем выгружать модели после того, как они стали не нужны
if
056D: actor
0@
defined
then
Actor.RemoveReferences(
0@
)
Actor.DestroyInstantly(
0@
)
end
if
056D: actor
2@
defined
then
Actor.RemoveReferences(
2@
)
Actor.DestroyInstantly(
2@
)
end
if
09D1: pickup
3@
created
then
Pickup.Destroy(
3@
)
end
if
075C: marker
10@
enabled
then
Marker.Disable(
10@
)
end
if
075C: marker
20@
enabled
then
Marker.Disable(
20@
)
end
return
Тестируйте. Спрашивайте
Даже загрузка не успевает пройти, вылет
Offline
Опкоды 0291 и 0350 с включеными флагами 1 дают такой эффект. У тебя они на вертолете поэтому опкод 0350 лишний и заодно не будут отпрыгивать. По умолчанию эти флаги - 0.
ну откуда ж мне это знать
убрал эти опкоды - перестали ложиться вздремнуть по среди боя, спасибо
Last edited by trashmas (15-06-2017 21:03)
Offline
Kim wrote:Даже загрузка не успевает пройти, вылет
Проверил у себя - работает. Возможно это у вас какие-то конфликты со скриптами. Вот я скину скомпиллированный код. Проверьте.
Всё работает, спасибо за помощь!
Offline
Kim wrote:Даже загрузка не успевает пройти, вылет
Проверил у себя - работает. Возможно это у вас какие-то конфликты со скриптами. Вот я скину скомпиллированный код. Проверьте.
Такой вопрос ещё, надеюсь не затрудняю.
Я назначил актёра идти в определённую точку( Пусть она будет пунктом A) опкодом 05D3, дойдя до точки по середине пути( Пусть будет пункт B), затем актёр просто телепортируется из точки B в точку A, вместо того, чтобы идти до конца
Offline