#26 Re: Вопросы по скриптингу » Один вопрос » 18-06-2017 17:17

Kim

Помогите, вылетает миссия именно на этом моменте.

wait 0
3@ = Car.Create(#COPCARLA,2226.1223, -1700.0411, 13.7483)
Car.Angle(3@) = 356.8184
4@ = Actor.Create(26,#LAPD1,2225.0308, -1699.5383, 13.7561) 
//05D1: AS_actor 4@ drive_Car 3@ to 2227.1592 -1689.8048 13.9931  speed 15.0  mode 2 model #COPCARLA drivertype 2
05D1: AS_actor 4@ drive_car 3@ to 2227.1592 -1689.8048 13.9931 speed 15.0 0 model #NULL 0
wait 10
7@ = Car.Create(#COPCARLA,2311.0542, -1667.2467, 14.4263)
Car.Angle(7@) = 90.4496
5@ = Actor.Create(26,#LAPD1,2311.0542, -1667.2467, 14.4263)
072A: put_actor 5@ into_car 7@ driverseat
//05D1: AS_actor 5@ drive_Car 7@ to 2297.946 -1667.5282 14.8201  speed 15.0  mode 2 model #COPCARLA drivertype 2
05D1: AS_actor 5@ drive_car 7@ to 2297.946 -1667.5282 14.8201 speed 15.0 0 model #NULL 0
wait 10
8@ = Car.Create(#COPCARLA,2282.3286, -1724.7249, 13.5469)
Car.Angle(8@) = 269.1234
6@ = Actor.Create(26,#LAPD1,2282.3286, -1724.7249, 13.5469)
072A: put_actor 6@ into_car 8@ driverseat
05D1: AS_actor 6@ drive_car 8@ to 2227.1592 -1689.8048 13.9931 speed 15.0 0 model #NULL 0

Модели были загружены и проверены.

#27 Re: Вопросы по скриптингу » Один вопрос » 18-06-2017 08:36

Kim

Какой опкод есть для проверки видит ли игрок определенную зону?

#28 Re: Вопросы по скриптингу » Один вопрос » 18-06-2017 08:17

Kim
trashmas wrote:
Kim wrote:

Хотел спросить, как узнать угол поворота актёра?

юзай поиск опкодов: сервис>инструменты>поиск опкодов...

вводи туда ключевые слова на английском, например 'actor angle'

Я уже нашёл в настройках Ctrl + Shift + E

#29 Re: Вопросы по скриптингу » Один вопрос » 17-06-2017 09:11

Kim
wmysterio wrote:
Kim wrote:

но всё равно телепортируется

Попробуйте использовать опкод

07CD: AS_actor 1@ walk_to  X.X Y.Y Z.Z stop_with_angle 270.0 within_radius 4.0
trashmas wrote:

есть опкод что бы пед смотерл на машину?

Есть. Вот:

05C0: AS_actor 66@ look_at_car 51@ 4000 ms

Хотел спросить, как узнать угол поворота актёра?

#30 Re: Вопросы по скриптингу » Один вопрос » 17-06-2017 09:06

Kim
trashmas wrote:

05F5: AS_actor 1@ goto_point X.X Y.Y Z.Z mode 4 -1 ms

0603: AS_actor 1@ goto X.X Y.Y Z.Z mode 4 timelimit -1 ms

эти 2 попробуй, скорей всего второй должен работать

2 вылетает, а вот зато 1 отлично работает!

#31 Re: Вопросы по скриптингу » Один вопрос » 16-06-2017 19:50

Kim
trashmas wrote:
Kim wrote:

затем актёр просто телепортируется из точки B в точку A, вместо того, чтобы идти до конца

time -1 поставь

05D3: AS_actor 1@ goto_point X.X Y.Y Z.Z mode 4 time -1 ms вот так, но всё равно телепортируется

#32 Re: Вопросы по скриптингу » Один вопрос » 16-06-2017 17:30

Kim
wmysterio wrote:
Kim wrote:

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

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

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

#33 Re: Вопросы по скриптингу » Один вопрос » 16-06-2017 14:35

Kim
wmysterio wrote:
Kim wrote:

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

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

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

#34 Re: Вопросы по скриптингу » Один вопрос » 15-06-2017 19:30

Kim
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

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

#36 Re: Вопросы по скриптингу » Один вопрос » 15-06-2017 13:01

Kim
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

#37 Re: Вопросы по скриптингу » Один вопрос » 14-06-2017 14:07

Kim
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-миссий а также их запуск подробно описано здесь.

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

#38 Re: Вопросы по скриптингу » Один вопрос » 14-06-2017 09:21

Kim

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

#39 Re: Вопросы по скриптингу » Один вопрос » 14-06-2017 07:49

Kim
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 написано, не буду использовать. Ну так почему крашит игра после смерти? Вроде всё есть

#40 Re: Вопросы по скриптингу » Один вопрос » 13-06-2017 19:07

Kim
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'
И потом остальной код, с ним проблем нет

#41 Re: Вопросы по скриптингу » Один вопрос » 13-06-2017 14:31

Kim
wmysterio wrote:
Kim wrote:

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

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

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

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

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

#42 Re: Вопросы по скриптингу » Один вопрос » 13-06-2017 08:48

Kim
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, выбираешь что хочешь

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

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

#43 Re: Вопросы по скриптингу » Один вопрос » 11-06-2017 18:33

Kim

Доброго Времени суток, появился такой вопрос, точнее несколько.
1) Мы создали актёра. Как заставить его идти и атаковать врагов? И как заставить его определять, кто друг, а кого надо убить?
2) Как показать полоску здоровья персонажа?
3) Подскажите опкод для проверки игрока в радиусе.

Board footer

Powered by FluxBB