#4826 11-06-2017 19:35

trashmas
Registered: 12-04-2016
Posts: 41

Re: Один вопрос

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.gxt

3) alt+ctrl+2, вводишь actor radius, выбираешь что хочешь

а вообще лучше для начала справку ВБ прочитать )

Offline

#4827 11-06-2017 19:58

Goldfish
From: Псков
Registered: 21-04-2015
Posts: 177
Website

Offline

#4828 13-06-2017 04:44

mfisto
From: Russia Perm
Registered: 01-02-2008
Posts: 558
Website

Re: Один вопрос

trashmas, убери этот опкод - 0350.


I know everything and nothing...

Offline

#4829 13-06-2017 08:48

Kim
Registered: 07-06-2017
Posts: 51

Re: Один вопрос

trashmas wrote:
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.gxt

3) alt+ctrl+2, вводишь actor radius, выбираешь что хочешь

а вообще лучше для начала справку ВБ прочитать )

Спасибо, я нашёл все отношения, но я не могу убрать полоску здоровья после смерти, как это сделать? И игра ГТА СА

Offline

#4830 13-06-2017 13:39

wmysterio
Registered: 04-03-2011
Posts: 215
Website

Re: Один вопрос

Kim wrote:

Спасибо, я нашёл все отношения, но я не могу убрать полоску здоровья после смерти, как это сделать? И игра ГТА СА

Нужно добавить условие отключения статус-текста:

if
Actor.Dead($YOU_ACTOR)
then
0151: remove_status_text $YOU_STATUS_TEXT
end

Вот есть пример миссии, где это делается, если интересны детали.

Offline

#4831 13-06-2017 14:31

Kim
Registered: 07-06-2017
Posts: 51

Re: Один вопрос

wmysterio wrote:
Kim wrote:

Спасибо, я нашёл все отношения, но я не могу убрать полоску здоровья после смерти, как это сделать? И игра ГТА СА

Нужно добавить условие отключения статус-текста:

if
Actor.Dead($YOU_ACTOR)
then
0151: remove_status_text $YOU_STATUS_TEXT
end

Вот есть пример миссии, где это делается, если интересны детали.

Спасибо, есть ещё один вопрос, даже при использовании опкодов 016C и 016D при смерти игрока игра вылетает, что делать?

Offline

#4832 13-06-2017 18:42

wmysterio
Registered: 04-03-2011
Posts: 215
Website

Re: Один вопрос

Kim wrote:

Спасибо, есть ещё один вопрос, даже при использовании опкодов 016C и 016D при смерти игрока игра вылетает, что делать?

А как вы их используете? Эти опкоды в оригинальном мейне стоят в стартовом потоке 'MAIN' и являются обязательными, чтобы небыло проблем как при аресте/смерти, так и после процесса сохранения. В Cleo их, как правило, не увидишь.

Offline

#4833 13-06-2017 19:07

Kim
Registered: 07-06-2017
Posts: 51

Re: Один вопрос

wmysterio wrote:
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

#4834 13-06-2017 20:40

wmysterio
Registered: 04-03-2011
Posts: 215
Website

Re: Один вопрос

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", а также не рекомендуется в одном скрипте использовать несколько потоков.

Offline

#4835 14-06-2017 07:49

Kim
Registered: 07-06-2017
Posts: 51

Re: Один вопрос

wmysterio wrote:
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

#4836 14-06-2017 09:21

Kim
Registered: 07-06-2017
Posts: 51

Re: Один вопрос

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

Offline

#4837 14-06-2017 12:23

d88
Registered: 15-12-2009
Posts: 254
Website

Re: Один вопрос

Хочу кое-что уточнить. Работаю с Decision Maker, устанавливаю одним педам храброе поведение, а другим - трусливое. Но результат получается обратный. Во всех справках написано, что  DM 3 - храброе поведение, а DM 4 - трусливое, но на практике получается, что наоборот. Например, устанавливаю педу DM 4, и если его ударить, он начинает драться. Если же установить DM 3 - после удара он убегает.
Кто-нибудь ещё с этим сталкивался?

Offline

#4838 14-06-2017 13:39

wmysterio
Registered: 04-03-2011
Posts: 215
Website

Re: Один вопрос

Kim wrote:

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

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

{$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

#4839 14-06-2017 14:07

Kim
Registered: 07-06-2017
Posts: 51

Re: Один вопрос

wmysterio wrote:
Kim wrote:

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

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

{$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

#4840 14-06-2017 14:30

wmysterio
Registered: 04-03-2011
Posts: 215
Website

Re: Один вопрос

Kim wrote:

Я и использую эти шаблоны в справке...Но экран всё равно красный

Покажите ещё код стартера. Может дело в нём. Или лучше киньте сюда оба файла, посмотрим. Не исключаю возможность того, что ошибка может быть в других скриптах.

Offline

#4841 14-06-2017 23:53

trashmas
Registered: 12-04-2016
Posts: 41

Re: Один вопрос

mfisto wrote:

trashmas, убери этот опкод - 0350.

Благодарю, попробую

Offline

#4842 15-06-2017 02:43

mfisto
From: Russia Perm
Registered: 01-02-2008
Posts: 558
Website

Re: Один вопрос

Опкоды 0291 и 0350 с включеными флагами 1 дают такой эффект. У тебя они на вертолете поэтому опкод 0350 лишний и заодно не будут отпрыгивать. По умолчанию эти флаги - 0.


I know everything and nothing...

Offline

#4843 15-06-2017 13:01

Kim
Registered: 07-06-2017
Posts: 51

Re: Один вопрос

wmysterio wrote:
Kim wrote:

Я и использую эти шаблоны в справке...Но экран всё равно красный

Покажите ещё код стартера. Может дело в нём. Или лучше киньте сюда оба файла, посмотрим. Не исключаю возможность того, что ошибка может быть в других скриптах.

Вот это код миссии

{$CLEO .cm}


//-------------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

Вот код стартера

{$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

#4844 15-06-2017 14:05

wmysterio
Registered: 04-03-2011
Posts: 215
Website

Re: Один вопрос

Kim wrote:

Вот это код миссии

Посмотрел я ваш код. Некоторые команды используются совсем нет там, где нужно. Я исправил и прокомментировал некоторые вещи, но пока не проверял. Вот код стартера:

{$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

Вот код миссии:

{$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

Тестируйте. Спрашивайте smile

Last edited by wmysterio (15-06-2017 14:30)

Offline

#4845 15-06-2017 19:24

Kim
Registered: 07-06-2017
Posts: 51

Re: Один вопрос

Вылетает игра просто

Offline

#4846 15-06-2017 19:30

Kim
Registered: 07-06-2017
Posts: 51

Re: Один вопрос

wmysterio wrote:
Kim wrote:

Вот это код миссии

Посмотрел я ваш код. Некоторые команды используются совсем нет там, где нужно. Я исправил и прокомментировал некоторые вещи, но пока не проверял. Вот код стартера:

{$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

Вот код миссии:

{$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

Тестируйте. Спрашивайте smile

Даже загрузка не успевает пройти, вылет

Offline

#4847 15-06-2017 20:59

trashmas
Registered: 12-04-2016
Posts: 41

Re: Один вопрос

mfisto wrote:

Опкоды 0291 и 0350 с включеными флагами 1 дают такой эффект. У тебя они на вертолете поэтому опкод 0350 лишний и заодно не будут отпрыгивать. По умолчанию эти флаги - 0.

ну откуда ж мне это знать  grin

убрал эти опкоды - перестали ложиться вздремнуть по среди боя, спасибо  good

Last edited by trashmas (15-06-2017 21:03)

Offline

#4848 15-06-2017 22:18

wmysterio
Registered: 04-03-2011
Posts: 215
Website

Re: Один вопрос

Kim wrote:

Даже загрузка не успевает пройти, вылет

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

Offline

#4849 16-06-2017 14:35

Kim
Registered: 07-06-2017
Posts: 51

Re: Один вопрос

wmysterio wrote:
Kim wrote:

Даже загрузка не успевает пройти, вылет

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

Всё работает, спасибо за помощь!

Offline

#4850 16-06-2017 17:30

Kim
Registered: 07-06-2017
Posts: 51

Re: Один вопрос

wmysterio wrote:
Kim wrote:

Даже загрузка не успевает пройти, вылет

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

Такой вопрос ещё, надеюсь не затрудняю.
Я назначил актёра идти в определённую точку( Пусть она будет пунктом A) опкодом 05D3, дойдя до точки по середине пути( Пусть будет пункт B), затем актёр просто телепортируется из точки B в точку A, вместо того, чтобы идти до конца

Offline

Board footer

Powered by FluxBB