#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:

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

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

1
2
3
4
5
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:

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

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

1
2
3
4
5
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 в потоке провала миссии, но теперь в миссии экран тупо красный и ничего не видно, даже карты.

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

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

#4839 14-06-2017 14:07

Kim
Registered: 07-06-2017
Posts: 51

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

wmysterio wrote:
Kim wrote:

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

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

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}


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

#4844 15-06-2017 14:05

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

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

Kim wrote:

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

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

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

Тестируйте. Спрашивайте 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:

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

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

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

Тестируйте. Спрашивайте 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