[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Форум » Игры серии GTA » GTA San Andreas » Вопросы по скриптингу Sanny Builder (Вы можете получить ответы на вопросы по SB)
Вопросы по скриптингу Sanny Builder
wmysterio
Администраторы
Скриптер
22.11.11 21:52
Offline
Если у вас возник вопрос по скриптингу Sanny Builder, обращайтесь! Мы постараемся решить вашу проблему wink Это ещё не значит, что все прям бросятся решать во чтобы то не стало, но ответ вы сможете вы получить как вариант решения или как невозможность или сложность решения.
УВАЖАЕМЫЕ ПОЛЬЗОВАТЕЛИ! ПРОСЬБА КОД СКРИПТОВ ПОМЕЩАТЬ В КОНСТРУКЦИЮ КОДА:

или

Также указывайте полный код скрипта, иначе причина ошибок может быть и не выявлена.
Прикрепления: 0248203.png(0.9 Kb) · 9085525.png(0.2 Kb)

ed9mkm
Пользователи
18.11.18 16:45
Offline
Делаю такой скрипт. Хотел бы узнать, нет ли ошибок. И возможно ли так сделать, чтобы силовики в одной руке держали щит, а в другой дубинку? Щит у меня заменяет оружие "dildo".

Код
:SWAT
wait 1000
Model.Load(#swat)
Model.Load(#enforcer)
Model.Load(#gun_dildo1)
Model.Load(#nitestick)
038B: load_requested_models

:SWATchek
wait 0
if and
model.available(#swat)
model.available(#enforcer)
model.available(#gun_dildo1)
model.available(#nitestick)
jf @SWATchek

:SWATspawn
wait 0
0@ = Car.Create(#enforcer, 2478.4897, -1658.3586, 12.3348)
1@ = Car.Create(#enforcer, 2498.9456, -1660.1907, 12.355)
2@ = Car.Create(#enforcer, 2487.197, -1661.9705, 13.3359)
Car.Angle(0@) = 90.0
Car.Angle(1@) = 90.0
Car.Angle(2@) = 90.0

060A: create_decision_maker_type 1 store_to 3@

actor.create(3@,6,#swat,2502.9993, -1663.0095, 13.3828)
actor.health(3@) = 2500
actor.armour(3@) = 200
actor.angle(3@) = 180.7714
01B2: give_actor 3@ weapon 10 ammo 1

060A: create_decision_maker_type 1 store_to 4@
actor.create(4@,6,#swat,2498.9341 -1663.793 13.355)
actor.health(4@) = 2500
actor.armour(4@) = 200
actor.angle(4@) = 180.7714191
01B2: give_actor 4@ weapon 10 ammo 1

060A: create_decision_maker_type 1 store_to 5@
actor.create(5@,6,#swat,2506.7007 -1663.5115 13.4078)
actor.health(5@) = 2500
actor.armour(5@) = 200
actor.angle(5@) = 180.7714191150
01B2: give_actor 5@ weapon 3 ammo 1
01B2: give_actor 5@ weapon 10 ammo 1
081A: 5@ 2

060A: create_decision_maker_type 1 store_to 6@
actor.create(6@,6,#swat,2493.8027, -1667.1565, 13.3437)
actor.health(6@) = 2500
actor.armour(6@) = 200
actor.angle(6@) = 180.7714191150185
01B2: give_actor 6@ weapon 3 ammo 1

060A: create_decision_maker_type 1 store_to 7@
actor.create(7@,6,#swat,2500.8625, -1662.9987, 13.3681)
actor.health(7@) = 2500
actor.armour(7@) = 200
actor.angle(7@) = 180.7714191150185165
01B2: give_actor 7@ weapon 3 ammo 1

Model.Destroy(#enforcer)
Model.Destroy(#swat)
Model.Destroy(#gun_dildo1)
Model.Destroy(#nitestick)

0A93: end_custom_thread

Добавлено (18.11.18, 19:21)
---------------------------------------------
И еще пока не пойму, а как сделать, чтобы из одной метки было обращение к предыдущей? Мне нужно, чтобы актер, чьи данные в одной метке, мог атаковать актеров, о которых данные в предыдущей метке.


wmysterio
Администраторы
Скриптер
20.11.18 00:10
Offline
Цитата ed9mkm ()
И возможно ли так сделать, чтобы силовики в одной руке держали щит, а в другой дубинку?
Нельзя. В руках позволено держать только один тип оружия.
Цитата ed9mkm ()
И еще пока не пойму, а как сделать, чтобы из одной метки было обращение к предыдущей? Мне нужно, чтобы актер, чьи данные в одной метке, мог атаковать актеров, о которых данные в предыдущей метке.
Как Вы это себе представляете? Точнее как оно должно по Вашему работать? Данные могут содержаться в переменных, памяти и Hex-блоках. Но точно не в метках ( это числа, которое содержат смещения ).

ed9mkm
Пользователи
20.11.18 00:21
Offline
Цитата wmysterio ()
Как Вы это себе представляете? Точнее как оно должно по Вашему работать? Данные могут содержаться в переменных, памяти и Hex-блоках. Но точно не в метках ( это числа, которое содержат смещения ).

Значит я неправильно выразился. Я имел в виду, что нужно как-то атаковать актера из списка под ":SWATspawn" актером, который под списком из ":Bodyguard". Я начал скриптами заниматься совсем недавно, поэтому могу неправильно называть это. Просто в одном таком блоке актер 0@ - это один, а в другом такой же 0@ - другой. И как сделать, чтобы из другого блока все атаковали кого-то из предыдущего? Конечно, атакующих можно разместить и в одном блоке. Но дело в том, что эти переменные могут быть от 0@ до 33@. Их может не хватить, поэтому и нужны другие блоки, где отсчет снова начинается с нуля.

Цитата wmysterio ()
Нельзя. В руках позволено держать только один тип оружия.

А просто прикрепить щит к левой руке, например, нельзя тоже?

Diago
Пользователи
20.11.18 11:01
Offline
Цитата ed9mkm ()
Значит я неправильно выразился. Я имел в виду, что нужно как-то атаковать актера из списка под ":SWATspawn" актером, который под списком из ":Bodyguard".


Вам сюда:
SCM функции [ru-script.3dn.ru]

Цитата ed9mkm ()
А просто прикрепить щит к левой руке, например, нельзя тоже?

Ну если только графически, изменив текстуру.

wmysterio
Администраторы
Скриптер
20.11.18 14:53
Offline
Цитата ed9mkm ()
А просто прикрепить щит к левой руке, например, нельзя тоже?
Прикрепить можно. Есть опкоды:
Код
070A: AS_actor 358@ attach_to_object 359@ offset 0.0 0.0 0.0 on_bone 6 16 perform_animation "NULL" IFP_file "NULL" time 1
09A0: actor $PLAYER_ACTOR attach_object 26@ with_offset 0.0 0.0 0.0 on_bone 5 16 perform_animation "NULL" IFP_file "NULL" time -1
Само оружие должно быть создано как объект.
Цитата ed9mkm ()
поэтому могу неправильно называть это
Это нормально. Ничего в этом страшного нет.
Цитата ed9mkm ()
Их может не хватить, поэтому и нужны другие блоки, где отсчет снова начинается с нуля.
Если переменных слишком много, то хорошо подойдёт использование SCM-функций и HEX-блока для хранения этих актёров:
Код
{$CLEO}

goto @GET_ACTOR_END
:GET_ACTOR
0AC6: 1@ = label @TEST_TEMP_ARRAY offset
0A90: 0@ = 4 * 0@ // size * index => ped offset
0A8E: 0@ = 1@ + 0@ // array offset + ped offset => actor
0A8D: 0@ = read_memory 0@ size 4 virtual_protect 0 // get
0AB2: ret 1 0@
:GET_ACTOR_END
        
goto @SAVE_ACTOR_END
:SAVE_ACTOR
0AC6: 2@ = label @TEST_TEMP_ARRAY offset
0A90: 3@ = 4 * 0@ // size * index => ped offset
0A8E: 2@ = 2@ + 3@ // array offset + ped offset => actor
0A8C: write_memory 2@ size 4 value 1@ virtual_protect 0 // set
0AB2: ret 0
:SAVE_ACTOR_END

// SCRIPT

:TEST
thread 'test'
Model.Load(#WMYDRUG)
038B: load_requested_models

0@ = Actor.Create( 6, #WMYDRUG, 10.0, 10.0, 0.0 );  
0AB1: call_scm_func @SAVE_ACTOR 2    index 0 actor 0@
0@ = Actor.Create( 6, #WMYDRUG, 15.0, 15.0, 0.0 );  
0AB1: call_scm_func @SAVE_ACTOR 2    index 1 actor 0@  
0@ = Actor.Create( 6, #WMYDRUG, 25.0, 25.0, 0.0 );  
0AB1: call_scm_func @SAVE_ACTOR 2    index 2 actor 0@

Model.Destroy(#WMYDRUG)

wait 2000   

0AB1: call_scm_func @GET_ACTOR 1    index 0 as 0@  
05E2: AS_actor 0@ kill_actor $PLAYER_ACTOR  
0AB1: call_scm_func @GET_ACTOR 1    index 1 as 0@  
05E2: AS_actor 0@ kill_actor $PLAYER_ACTOR
0AB1: call_scm_func @GET_ACTOR 1    index 2 as 0@  
05E2: AS_actor 0@ kill_actor $PLAYER_ACTOR

0A93: end_custom_thread

:TEST_TEMP_ARRAY
hex
00 00 00 00 // actor 0
00 00 00 00 // actor 1
00 00 00 00 // actor 2
end
Как видите, основной поток "TEST" использует только одну переменную 0@.
Цитата ed9mkm ()
Я начал скриптами заниматься совсем недавно
Поэтому приведённый код будет Вам скорее всего непонятным.

ed9mkm
Пользователи
21.11.18 01:32
Offline
Цитата Diago ()
Ну если только графически, изменив текстуру.

Все же возможно прикреплять как объекты.

Цитата wmysterio ()
Поэтому приведённый код будет Вам скорее всего непонятным.

Я в целом уже вроде бы относительно многое научился. Но вчера столкнулся с новой проблемой. Размещаемые актеры почему-то висят в воздухе и находятся часто не совсем там, где я их ставлю. Да и, кроме того, по несколько сплюснуты в одном месте. Код такой у меня сейчас:

Код
// This file was decompiled using SASCM.ini published by GTAG (http://gtag.gtagaming.com/opcode-database) on 14.6.2013
{$CLEO .cs}

//-------------MAIN---------------

:ACTORS
wait 1000
Model.Load(#swat)
Model.Load(#BMOTR1)
Model.Load(#BMOST)
Model.Load(#BMYRI)
Model.Load(#WMYMECH)
038B: load_requested_models

:CARS
wait 0
Model.Load(#enforcer)
Model.Load(#swatvan)
Model.Load(#barracks)
038B: load_requested_models

:GUNS
wait 0
Model.Load(#gun_dildo1)
Model.Load(#nitestick)
Model.Load(#bat)
Model.Load(#teargas)
038B: load_requested_models

:ACTORSchek
wait 0
if and
model.available(#swat)
model.available(#BMOTR1)
model.available(#BMOST)
model.available(#BMYRI)
model.available(#WMYMECH)
jf @ACTORSchek

:CARSchek
wait 0
if and
model.available(#enforcer)
model.available(#swatvan)
model.available(#barracks)
jf @CARSchek

:GUNSchek
wait 0
if and
model.available(#gun_dildo1)
model.available(#nitestick)
model.available(#bat)
model.available(#teargas)
jf @GUNSchek

:MyCars
wait 1000
014B: $Car1 = init_parked_car_generator #enforcer 8 8 0 alarm 100 door_lock 0 0 40000 at 1427.7817 -1739.2125 14.4357 angle 268.8602120
014C: set_parked_car_generator $Car1 cars_to_generate_to 101
014B: $Car2 = init_parked_car_generator #enforcer 8 8 0 alarm 100 door_lock 0 0 40000 at 1414.8116 -1740.8328 14.4266 angle 273.2056120
014C: set_parked_car_generator $Car2 cars_to_generate_to 101
014B: $Car3 = init_parked_car_generator #enforcer 8 8 0 alarm 100 door_lock 0 0 40000 at 1449.8851 -1739.5753 14.4328 angle 273.2056120
014C: set_parked_car_generator $Car3 cars_to_generate_to 101
014B: $Car4 = init_parked_car_generator #enforcer 8 8 0 alarm 100 door_lock 0 0 40000 at 1471.5275 -1738.7214 14.4343 angle 273.0
014C: set_parked_car_generator $Car4 cars_to_generate_to 101
014B: $Car5 = init_parked_car_generator #swatvan 8 8 0 alarm 100 door_lock 0 0 40000 at 1486.5817 -1738.7758 14.43 angle 275.0
014C: set_parked_car_generator $Car5 cars_to_generate_to 101
014B: $Car6 = init_parked_car_generator #barracks 8 8 0 alarm 100 door_lock 0 0 40000 at 1503.2258 -1738.9707 13.7281 angle 271.0
014C: set_parked_car_generator $Car6 cars_to_generate_to 101
014B: $Car7 = init_parked_car_generator #barracks 8 8 0 alarm 100 door_lock 0 0 40000 at 1524.4485 -1739.3302 13.7281 angle 271.0277
014C: set_parked_car_generator $Car7 cars_to_generate_to 101
014B: $Car8 = init_parked_car_generator #barracks 8 8 0 alarm 100 door_lock 0 0 40000 at 1492.6688 -1723.9222 13.7281 angle 271.0277293
014C: set_parked_car_generator $Car8 cars_to_generate_to 101

:SWATspawn
wait 1000
060A: create_decision_maker_type 1 store_to $swat2
actor.create($swat2,6,#swat,1546.1224, -1739.6119, 13.5469)
actor.health($swat2) = 2500
actor.armour($swat2) = 200
actor.angle($swat2) = 12.5334
01B2: give_actor $swat2 weapon 10 ammo 1
077A: set_actor $swat2 acquaintance 4 to_actors_pedtype 0
077A: set_actor $swat2 acquaintance 4 to_actors_pedtype 4

060A: create_decision_maker_type 1 store_to $swat3
actor.create($swat3,6,#swat,1543.488, -1739.9751, 13.5469)
actor.health($swat3) = 2500
actor.armour($swat3) = 200
actor.angle($swat3) = 15.0401
01B2: give_actor $swat3 weapon 10 ammo 1
077A: set_actor $swat3 acquaintance 4 to_actors_pedtype 0
077A: set_actor $swat3 acquaintance 4 to_actors_pedtype 4

060A: create_decision_maker_type 1 store_to $swat4
actor.create($swat4,6,#swat,1542.3385, -1740.1443, 13.5469)
actor.health($swat4) = 2500
actor.armour($swat4) = 200
actor.angle($swat4) = 5.3267
01B2: give_actor $swat4 weapon 10 ammo 1
077A: set_actor $swat4 acquaintance 4 to_actors_pedtype 0
077A: set_actor $swat4 acquaintance 4 to_actors_pedtype 4

060A: create_decision_maker_type 1 store_to $swat5
actor.create($swat5,6,#swat,1540.3568, -1740.4012, 13.5469)
actor.health($swat5) = 2500
actor.armour($swat5) = 200
actor.angle($swat5) = 1.88
01B2: give_actor $swat5 weapon 10 ammo 1
077A: set_actor $swat5 acquaintance 4 to_actors_pedtype 0
077A: set_actor $swat5 acquaintance 4 to_actors_pedtype 4

060A: create_decision_maker_type 1 store_to $swat6
actor.create($swat6,6,#swat,1535.7563, -1741.2471, 13.5469)
actor.health($swat6) = 2500
actor.armour($swat6) = 200
actor.angle($swat6) = 11.9067
01B2: give_actor $swat6 weapon 3 ammo 1
01B2: give_actor $swat6 weapon 10 ammo 1
077A: set_actor $swat6 acquaintance 4 to_actors_pedtype 0
077A: set_actor $swat6 acquaintance 4 to_actors_pedtype 4

060A: create_decision_maker_type 1 store_to $swat7
actor.create($swat7,6,#swat,1531.7697, -1741.2728, 13.5469)
actor.health($swat7) = 2500
actor.armour($swat7) = 200
actor.angle($swat7) = 45.3943
01B2: give_actor $swat7 weapon 3 ammo 1
077A: set_actor $swat7 acquaintance 4 to_actors_pedtype 0
077A: set_actor $swat7 acquaintance 4 to_actors_pedtype 4

060A: create_decision_maker_type 1 store_to $swat8
actor.create($swat8,6,#swat,1530.0813, -1741.1727, 13.5469)
actor.health($swat8) = 2500
actor.armour($swat8) = 200
actor.angle($swat8) = 11.8674
01B2: give_actor $swat8 weapon 3 ammo 1
077A: set_actor $swat8 acquaintance 4 to_actors_pedtype 0
077A: set_actor $swat8 acquaintance 4 to_actors_pedtype 4

060A: create_decision_maker_type 1 store_to $swat9
actor.create($swat9,6,#swat,1524.0126, -1742.1302, 13.5469)
actor.health($swat9) = 2500
actor.armour($swat9) = 200
actor.angle($swat9) = 11.8673
01B2: give_actor $swat9 weapon 3 ammo 1
077A: set_actor $swat9 acquaintance 4 to_actors_pedtype 0
077A: set_actor $swat9 acquaintance 4 to_actors_pedtype 4

060A: create_decision_maker_type 1 store_to $swat10
actor.create($swat10,6,#swat,1521.826, -1741.9323, 13.5469)
actor.health($swat10) = 2500
actor.armour($swat10) = 200
actor.angle($swat10) = 14.6874
01B2: give_actor $swat10 weapon 10 ammo 1
077A: set_actor $swat10 acquaintance 4 to_actors_pedtype 0
077A: set_actor $swat10 acquaintance 4 to_actors_pedtype 4

060A: create_decision_maker_type 1 store_to $swat11
actor.create($swat11,6,#swat,1507.8555, -1746.3865, 13.5469)
actor.health($swat11) = 2500
actor.armour($swat11) = 200
actor.angle($swat11) = 346.8004
01B2: give_actor $swat11 weapon 10 ammo 1
077A: set_actor $swat11 acquaintance 4 to_actors_pedtype 0
077A: set_actor $swat11 acquaintance 4 to_actors_pedtype 4

060A: create_decision_maker_type 1 store_to $swat12
actor.create($swat12,6,#swat,1505.3988, -1745.4271, 13.5469)
actor.health($swat12) = 2500
actor.armour($swat12) = 200
actor.angle($swat12) = 346.8004
01B2: give_actor $swat12 weapon 10 ammo 1
077A: set_actor $swat12 acquaintance 4 to_actors_pedtype 0
077A: set_actor $swat12 acquaintance 4 to_actors_pedtype 4

060A: create_decision_maker_type 1 store_to $swat13
actor.create($swat13,6,#swat,1506.4381, -1748.3094, 13.5469)
actor.health($swat13) = 2500
actor.armour($swat13) = 200
actor.angle($swat13) = 351.8138
01B2: give_actor $swat13 weapon 10 ammo 1
077A: set_actor $swat13 acquaintance 4 to_actors_pedtype 0
077A: set_actor $swat13 acquaintance 4 to_actors_pedtype 4
02E2: set_actor $swat13 weapon_accuracy_to 15
07DD: set_actor $swat13 attack_rate -1

060A: create_decision_maker_type 1 store_to $swat14
actor.create($swat14,6,#swat,1503.7504, -1745.4232, 13.5469)
actor.health($swat14) = 2500
actor.armour($swat14) = 200
actor.angle($swat14) = 322.9869
01B2: give_actor $swat14 weapon 10 ammo 1
077A: set_actor $swat14 acquaintance 4 to_actors_pedtype 0
077A: set_actor $swat14 acquaintance 4 to_actors_pedtype 4
02E2: set_actor $swat14 weapon_accuracy_to 15
07DD: set_actor $swat14 attack_rate -1

:Bodyguards
wait 0
060A: create_decision_maker_type 0 store_to $bodyguard
actor.create($bodyguard,4,#BMOTR1,1509.9307, -1697.3473, 14.0469)
actor.health($bodyguard) = 2500
actor.armour($bodyguard) = 200
actor.angle($bodyguard) = 170.2199
0850: AS_actor $bodyguard follow_actor $PLAYER_ACTOR
01B2: give_actor $bodyguard weapon 5 ammo 1
077A: set_actor $bodyguard acquaintance 1 to_actors_pedtype 0
077A: set_actor $bodyguard acquaintance 4 to_actors_pedtype 6
02E2: set_actor $bodyguard weapon_accuracy_to -1
07DD: set_actor $bodyguard attack_rate -1

060A: create_decision_maker_type 0 store_to $bodyguard2
actor.create($bodyguard2,4,#BMOST,1514.582, -1697.9204, 14.0469)
actor.health($bodyguard2) = 2500
actor.armour($bodyguard2) = 200
actor.angle($bodyguard2) = 191.5267
0850: AS_actor $bodyguard2 follow_actor $PLAYER_ACTOR
01B2: give_actor $bodyguard2 weapon 5 ammo 1
077A: set_actor $bodyguard2 acquaintance 1 to_actors_pedtype 0
077A: set_actor $bodyguard2 acquaintance 4 to_actors_pedtype 6
02E2: set_actor $bodyguard2 weapon_accuracy_to -1
07DD: set_actor $bodyguard2 attack_rate 20

060A: create_decision_maker_type 0 store_to $bodyguard3
actor.create($bodyguard3,4,#BMYRI,1517.6769, -1701.0879, 13.7969)
actor.health($bodyguard3) = 2500
actor.armour($bodyguard3) = 200
actor.angle($bodyguard3) = 205.0001
0850: AS_actor $bodyguard3 follow_actor $PLAYER_ACTOR
01B2: give_actor $bodyguard3 weapon 5 ammo 1
077A: set_actor $bodyguard3 acquaintance 1 to_actors_pedtype 0
077A: set_actor $bodyguard3 acquaintance 4 to_actors_pedtype 6
02E2: set_actor $bodyguard3 weapon_accuracy_to -1
07DD: set_actor $bodyguard3 attack_rate 40

060A: create_decision_maker_type 0 store_to $bodyguard4
actor.create($bodyguard4,4,#WMYMECH,1520.1821, -1697.1514, 13.5469)
actor.health($bodyguard4) = 2500
actor.armour($bodyguard4) = 200
actor.angle($bodyguard4) = 197.1668
0850: AS_actor $bodyguard4 follow_actor $PLAYER_ACTOR
01B2: give_actor $bodyguard4 weapon 17 ammo 10
077A: set_actor $bodyguard4 acquaintance 1 to_actors_pedtype 0
077A: set_actor $bodyguard4 acquaintance 4 to_actors_pedtype 6
02E2: set_actor $bodyguard4 weapon_accuracy_to -1
07DD: set_actor $bodyguard4 attack_rate -1

Model.Destroy(#enforcer)
Model.Destroy(#swat)
Model.Destroy(#BMOTR1)
Model.Destroy(#BMOST)
Model.Destroy(#BMYRI)
Model.Destroy(#WMYMECH)
Model.Destroy(#gun_dildo1)
Model.Destroy(#nitestick)
Model.Destroy(#teargas)
Model.Destroy(#swatvan)
Model.Destroy(#barracks)

0A93: end_custom_thread


Не знаю, в чем ошибка. Некоторые, бывает, и нормально появляются, но большинство висят в воздухе, сплюснуты по несколько. Если их ударить, то спрыгивают, начинают действовать - как бы распаковка происходит.

wmysterio
Администраторы
Скриптер
21.11.18 20:37
Offline
Начну с того, что это
Цитата ed9mkm ()
060A: create_decision_maker_type 1 store_to $swat
не имеет смысла в контексте скрипта. Нужно создать модель поведения и задать актёру, а не записать её в переменную и перезаписать эту переменную актёром ) Вот так лучше:
Код
060A: create_decision_maker_type 1 store_to $decision
$hActor1 = actor.create( type, model, x, y, z )
$hActor2 = actor.create( type, model, x, y, z )
$hActor3 = actor.create( type, model, x, y, z )
$hActor4 = actor.create( type, model, x, y, z )
060B: set_actor $hActor1 decision_maker_to $decision
060B: set_actor $hActor2 decision_maker_to $decision
060B: set_actor $hActor3 decision_maker_to $decision
060B: set_actor $hActor4 decision_maker_to $decision
Во вторых: это
Код
:ACTORS
wait 1000
Model.Load(#swat)
Model.Load(#BMOTR1)
Model.Load(#BMOST)
Model.Load(#BMYRI)
Model.Load(#WMYMECH)
038B: load_requested_models

:CARS
wait 0
Model.Load(#enforcer)
Model.Load(#swatvan)
Model.Load(#barracks)
038B: load_requested_models

:GUNS
wait 0
Model.Load(#gun_dildo1)
Model.Load(#nitestick)
Model.Load(#bat)
Model.Load(#teargas)
038B: load_requested_models

:ACTORSchek
wait 0
if and
model.available(#swat)
model.available(#BMOTR1)
model.available(#BMOST)
model.available(#BMYRI)
model.available(#WMYMECH)
jf @ACTORSchek

:CARSchek
wait 0
if and
model.available(#enforcer)
model.available(#swatvan)
model.available(#barracks)
jf @CARSchek

:GUNSchek
wait 0
if and
model.available(#gun_dildo1)
model.available(#nitestick)
model.available(#bat)
model.available(#teargas)
jf @GUNSchek

:MyCars
wait 1000
можно написать просто так:
Код
:ACTORS
wait 1000
Model.Load(#swat)
Model.Load(#BMOTR1)
Model.Load(#BMOST)
Model.Load(#BMYRI)
Model.Load(#WMYMECH)
Model.Load(#enforcer)
Model.Load(#swatvan)
Model.Load(#barracks)
Model.Load(#gun_dildo1)
Model.Load(#nitestick)
Model.Load(#bat)
Model.Load(#teargas)
038B: load_requested_models

:MyCars
wait 1000
В третьих: опкод 014B не требует загрузки модели, он сам это сделает. В четвёртых: не используйте глобальные переменные в Cleo-скрипте.

Что касается "сплющенности", то здесь толком никто не ответит. Если игра без модов, то проблем не будет. Возможно проблема где-то в других модах.

ed9mkm
Пользователи
21.11.18 20:52
Offline
Цитата wmysterio ()
можно написать просто так:

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

Цитата wmysterio ()
Что касается "сплющенности", то здесь толком никто не ответит. Если игра без модов, то проблем не будет. Возможно проблема где-то в других модах.

Да, моды есть, но я от них не могу отказаться. Благодаря этим модам я играю в соотношении сторон 16:9, без искажений картинки, с 60 fps и улучшенной графикой. Я раньше в DYOM события создавал, с ним не было таких проблем. Но в DYOM меня не устраивают лимиты. Там я могу сделать чуть более 50 участников событий, а если лимиты нарушаются, то другие актеры... не загружаются, вместо них видна лишь свернутая в клочки текстура. Хотя с модами игра должна поддерживать до 140 актеров. Мне интересно, с помощью скриптов CLEO возможно сделать хотя бы 100 участников событий? Также в DYOM мне не хватает и других настроек - а вот в CLEO, как уже вижу, эти настройки можно сделать.

wmysterio
Администраторы
Скриптер
21.11.18 22:01
Offline
Цитата ed9mkm ()
Мне пришлось так разбить на блоки, потому что SB ругался, что должно быть в каждом таком блоке не больше 8 условий.
Если мы используем команду "038B: load_requested_models", то проверки делать не обязательно.
Цитата ed9mkm ()
Да, моды есть, но я от них не могу отказаться
Не все моды влияют модельки, анимации или позиции. На DYOM у меня больше всего подозрений.

Если пытаетесь делать скрипты на CLEO, то на DYOM надо забить. Там совсем другая механика и она будет только путать. Например: "участников событий". Что это значит вообще? В CLEO такого понятия нет. Событий как таковых нет. Есть условия, если я правильно понял о чём идёт речь.

ed9mkm
Пользователи
21.11.18 22:49
Offline
Цитата wmysterio ()
Если мы используем команду "038B: load_requested_models", то проверки делать не обязательно.

Я смотрел разные инструкции и скрипты, и везде видел эту команду, после которой были и проверки.

Цитата wmysterio ()
На DYOM у меня больше всего подозрений.

DYOM может влиять, даже если я загружаю сохраненную игру, не заходя в DYOM? Т.е. если загружаю ту игру, которая сохранена при прохождении.

Цитата wmysterio ()
Например: "участников событий". Что это значит вообще?

Это я так называю актеров, говоря уже о сути своих проектов. Я создавал в DYOM события, которые снимал на видео. Хочу такие же, но только более реалистичные, создавать с помощью скриптов CLEO. Участники событий - это актеры, конечно. Еще их педами называют.

wmysterio
Администраторы
Скриптер
21.11.18 23:58
Offline
Цитата ed9mkm ()
Я смотрел разные инструкции и скрипты, и везде видел эту команду, после которой были и проверки.
Верно. У себя на сайте я тоже рекомендовал их использовать. Чуть позже опытные люди подсказали, что это делать не обязательно. Проверил - так и есть, ни одного вылета или глюков.
Цитата ed9mkm ()
Это я так называю актеров
А, тогда лучше их так и называйте. Будет легче ориентироваться в сути вопроса )
Цитата ed9mkm ()
более реалистичные, создавать с помощью скриптов CLEO
Для роликов очень круто использовать AS паки.

ed9mkm
Пользователи
22.11.18 00:30
Offline
Цитата wmysterio ()
А, тогда лучше их так и называйте. Будет легче ориентироваться в сути вопроса )

Так возможно с помощью CLEO делать где-то 100 актеров? Просто я использовал все возможности DYOM по этому поводу - загружал чуть больше 50 актеров, но при этом было и много обычных актеров, загружаемых стандартно игрой - т.е. обычные прохожие были. Т.е. игра в целом может тянуть их вроде бы до 100, а если использовать мод на повышение лимитов Limit Adjuster, то до 140. У DYOM свои лимиты - если где-то 60 сделать, то начинают вместо актеров грузиться лишь свернутые их текстуры. А игра в то же время без проблем загружает стандартных прохожих.

Цитата wmysterio ()
Для роликов очень круто использовать AS паки.

Спасибо, попробую разобраться в этом.

Добавлено (23.11.18, 07:13)
---------------------------------------------

Цитата wmysterio ()
Что касается "сплющенности", то здесь толком никто не ответит. Если игра без модов, то проблем не будет. Возможно проблема где-то в других модах.

Решил проблему. Просто поставил перед загрузкой актеров "wait 11000". Просто, видимо, игра глючит, когда одновременно разные скрипты выполняются. Я же устанавливал другие скрипты. И когда несколько секунд проходит, то начинает без глюков выгружать актеров.

wmysterio
Администраторы
Скриптер
23.11.18 17:33
Offline
Цитата ed9mkm ()
Просто, видимо, игра глючит, когда одновременно разные скрипты выполняются.
Вряд ли. Если скрипты написаны через жопу, то есть шанс "сплющенности". Какие причины остаётся только гадать. За все годы разработки скриптов, у меня такой проблемы ни разу не было. Возможно в этом "Limit Adjuster" виноват. Я его не использовал, а вот другие с такой проблемой - использовали. Делаю из этого нехороший вывод.
Цитата ed9mkm ()
Так возможно с помощью CLEO делать где-то 100 актеров?
Наверное нет. У меня создаётся максимум 47-48 в лучшем случае. Да и зачем столько их?

ed9mkm
Пользователи
24.11.18 00:39
Offline
Цитата wmysterio ()
Вряд ли. Если скрипты написаны через жопу, то есть шанс "сплющенности". Какие причины остаётся только гадать. За все годы разработки скриптов, у меня такой проблемы ни разу не было. Возможно в этом "Limit Adjuster" виноват. Я его не использовал, а вот другие с такой проблемой - использовали. Делаю из этого нехороший вывод.

Но эта проблема решена и довольно просто.

Цитата wmysterio ()
Наверное нет. У меня создаётся максимум 47-48 в лучшем случае.

У меня даже DYOM больше 50 создавал. Странно. Я видел на некоторых скриншотах и видео более 100 актеров. Толпы были.

Цитата wmysterio ()
Да и зачем столько их?

Тематика моих видео такова, что нужны толпы и как можно больше.

Сегодня некоторые успехи есть. Научился прокладывать пути для машин и актеров. И благодаря "attack_rate -1" теперь другие актеры тоже используют баллончики с краской и огнетушители так же мощно, как и главный герой. В DYOM такого было не сделать, там они только немного брызгали ими.

Добавлено (25.11.18, 01:53)
---------------------------------------------
Я сделал так, что один актер взял в руку бутылку с эффектом фаера. Но пока не получилось реализовать бросание им бутылки.

Код
model.Load(1520)
038B: load_requested_models
object.Create(0@, 1520, 1@, 2@, 3@)
0392: make_object 0@ moveable 1
066E: create_particle "SMOKE_FLARE" attached_to_object 0@ with_offset 0.0 0.0 0.0 rotation 0.0 0.0 0.0 flag 1 handle_as 4@
064C: make_particle 4@ visible
0750: set_object 0@ visibility 0
070A: AS_actor $bg attach_to_object 0@ offset 0.04 0.1 -0.02 on_bone 6 16 perform_animation "NULL" IFP_file "NULL" time 1

wait 5000
0605: actor $bg perform_animation_sequence "ENDCHAT_03" from_file "PED" 4.0 loop 0 0 0 1 -1 ms
wait 200
0381: throw_object 0@ velocity_in_direction 10.0 0.0 4.0


Он руку поднял, но бутылка осталась в руке.

wmysterio
Администраторы
Скриптер
25.11.18 14:43
Offline
Цитата ed9mkm ()
Я видел на некоторых скриншотах и видео более 100 актеров. Толпы были.
Да ладно, кто-то там будет высчитывать их поголовно. Чтобы создать толпу не надо столько актёров. Тем более для видеоролика, где имитация некой толпы не требует создавать сотню педов. Но раз проблема решена, то пусть будет сотня.
Цитата ed9mkm ()
Он руку поднял, но бутылка осталась в руке.
Надо сначала её отцепить, а потом бросать.

ed9mkm
Пользователи
26.11.18 01:13
Offline
Цитата wmysterio ()
Чтобы создать толпу не надо столько актёров. Тем более для видеоролика, где имитация некой толпы не требует создавать сотню педов.

На самом деле оптимально где-то актеров 500 и больше для моей тематики. А сотня - это минимум. DYOM меня не устраивает частично из-за этих ограничений - слишком жалко выглядят эти толпы. Которые толпами трудно назвать. А вот 140 - будет уже получше. Ну и надеюсь, что скриптами получится больше объектов и эффектов разместить, чем DYOM позволяет.

Цитата wmysterio ()
Надо сначала её отцепить, а потом бросать.

Я тоже думал об этом, но пока не знаю, как отцепить.

Добавлено (26.11.18, 07:08)
---------------------------------------------

Код
model.Load(1520)
038B: load_requested_models
object.Create($faer, 1520, 0 0 0)
Object.SetImmunities($faer, 1, 1, 1, 1, 1)
0392: make_object $faer moveable 1
0906: set_object $faer mass_to 2.0 // float
0908: set_object $faer turn_mass_to 5.0 // float
070A: AS_actor $bg attach_to_object $faer offset 0.04 0.1 -0.02 on_bone 6 16 perform_animation "NULL" IFP_file "NULL" time 1
066E: create_particle "SMOKE_FLARE" attached_to_object $faer with_offset 0.0 0.0 0.0 rotation 0.0 0.0 0.0 flag 1 handle_as 4@
064C: make_particle 4@ visible
wait 5000
0682: detach_object $faer 0.0 0.0 0.0 collision_detection 0
0381: throw_object $faer velocity_in_direction 25.0 0.0 5.0
05A7: set_object $faer velocity_in_direction_X 25.0 direction_Y 0.0 direction_Z 5.0
0605: actor $bg perform_animation_sequence "WEAPON_throw" from_file "GRENADE" 4.0 loop 0 0 0 0 -1 ms


Не понимаю, почему он так и не бросает бутылку. В руке держит, эффект прикреплен, рукой взмахивает, проигрывая анимацию бросания. Но бутылка остается в руке.

wmysterio
Администраторы
Скриптер
30.11.18 01:09
Offline
Цитата ed9mkm ()
Не понимаю, почему он так и не бросает бутылку.
Попробуйте открепить через опкод "070B".

DimoP5KR
Пользователи
09.12.18 13:24
Offline
Добрый день многоуважаемый wmysterio! Спасибо за уроки по Cleo!
Я хочу сделать, чтобы после нажатия определенной клавиши менялся дорожный просвет авто (+0xBC = Suspension lower limit)в реальном времени. Но пока одни зависоны получаются.
Для начала, банальный вопрос. Это можно сделать? Или я пытаюсь написать то что нельзя реализовать в игре?
Но ведь адрес памяти найден! Позже прикреплю код!
Спасибо!

wmysterio
Администраторы
Скриптер
09.12.18 16:52
Offline
Цитата DimoP5KR ()
Спасибо за уроки по Cleo!
Не за что.
Цитата DimoP5KR ()
Это можно сделать?
Я не знаю, что такое "дорожный просвет", но знаю как получить к нему доступ. По крайней мере через "handling.cfg". Другими словами изменение коснётся всего транспорта с указанной моделью. Вот я сделал скрипт, где машина заточена как бы под дрифт:
Код
{$CLEO}

goto @SET_SUSPENSION_LOWER_LIMIT_END
:SET_SUSPENSION_LOWER_LIMIT
0A8F: 0@ = 0@ - 400 // CURRENT_CAR_MODEL - MIN_CAR_MODEL
0A90: 0@ = 224 * 0@ // SLOT_SIZE * MODEL_ID
0A8E: 0@ = 0@ + 1@ // OFFSET
0A8E: 0@ = 0xC2B9DC + 0@ // HANDLING_START + OFFSET
0A8C: write_memory 0@ size 4 value 2@ virtual_protect 0
0AB2: ret 0
:SET_SUSPENSION_LOWER_LIMIT_END

:TEST
thread 'TEST'
wait 1000
if
0AA9:   is_game_version_original
then
Model.Load(#CHEETAH)
038B: load_requested_models
04C4: store_coords_to 1@ 2@ 3@ from_actor $PLAYER_ACTOR with_offset 0.0 3.0 3.0
4@ = Actor.Angle($PLAYER_ACTOR)
4@ += 90.0
0@ = Car.Create(#CHEETAH, 1@, 2@, 3@)
car.Angle(0@) = 4@
//072A: put_actor $PLAYER_ACTOR into_car 0@ driverseat
Model.Destroy(#CHEETAH)

0AB1: call_scm_func @SET_SUSPENSION_LOWER_LIMIT 3 model #CHEETAH offset 0x4 value 3000.0    // fMass
0AB1: call_scm_func @SET_SUSPENSION_LOWER_LIMIT 3 model #CHEETAH offset 0xC value 20000.0    // fTurnMass
0AB1: call_scm_func @SET_SUSPENSION_LOWER_LIMIT 3 model #CHEETAH offset 0x7C value 100.0   // fEngineAcceleration
0AB1: call_scm_func @SET_SUSPENSION_LOWER_LIMIT 3 model #CHEETAH offset 0x7C value 100.0    // fEngineInertia
0AB1: call_scm_func @SET_SUSPENSION_LOWER_LIMIT 3 model #CHEETAH offset 0x10 value 90.0   // fDragMult
0AB1: call_scm_func @SET_SUSPENSION_LOWER_LIMIT 3 model #CHEETAH offset 0x98 value 0.1   // fBrakeBias
//0AB1: call_scm_func @SET_SUSPENSION_LOWER_LIMIT 3 model #CHEETAH offset 0xBC value 1.0   // Suspension lower limit
end
0A93: end_custom_thread
Надеюсь, это то что нужно.

DimoP5KR
Пользователи
09.12.18 17:36
Offline
wmysterio, cорри, не разбираюсь в 0AB1.
Написал скрипт для записи параметра Suspension lower limit в ini для проверки. Считывается параметр правильно.
Код
{$CLEO .cs}

//-------------MAIN---------------
0000: NOP
wait 1000

:NONAME_7
wait 0
if
   Player.Defined($PLAYER_CHAR)
else_jump @NONAME_7
jump @NONAME_10

:NONAME_10
wait 0
if and
   Player.Defined($PLAYER_CHAR)
   actor.Driving($PLAYER_ACTOR)
else_jump @NONAME_10
jump @NONAME_11

:NONAME_11
wait 0
0@ = Actor.CurrentCar($PLAYER_ACTOR)
jump @NONAME_12

:NONAME_12
wait 0
0A97: 1@ = car 0@ struct
1@ += 0x384
0A8D: 1@ = read_memory 1@ size 4 virtual_protect 0
1@ += 0xBC
0A8D: 1@ = read_memory 1@ size 4 virtual_protect 0
0AF3: write_float 1@ to_ini_file "modloader\Transport\Cars\Trailers\Add Trailers\hauler\cleo\hauler_test_car.ini" section "test" key "suspension_lower_limit"
0A93: end_custom_thread


Но если попробовать отредактировать его, то игра зависает
Код
0A8C: write_memory 1@ size 4 value 0.1 virtual_protect 0
Отредактировал DimoP5KR - Воскресенье, 09.12.18, 17:37

Форум » Игры серии GTA » GTA San Andreas » Вопросы по скриптингу Sanny Builder (Вы можете получить ответы на вопросы по SB)
Поиск: