[ Новые сообщения · Участники · Правила форума · Поиск · 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)

vKew
Проверенные
19.07.13 22:50
Offline
Как сделать, что бы при входе в машину - игрока не выбрасывало назад (сам не выходил), и чтобы выкинуть ни кто не смог. Нужно включить скрипт по нажатию F3

Yurko_UA
Друзья
19.07.13 23:02
Offline
Два вопроса:
1. По какому принципу построен скрипт "Train Switch" (чтоб на поезде по стрелкам поворачивать).
2. Допустим я создал мотоцикл. Как мне сделать, чтобы он валялся на боку, а не стоял?

Viktor_Kew
Пользователи
20.07.13 15:51
Offline
Допустим у меня есть 10 координат (в объяснении можно указать рандомные) при вводе чита "GOPONT" игрок начинает идти по всем координатам, как только игрок пришел к посоедней точки - начинает идти на начальную и снова делать круг, и так будет до тех пор пока я снова не ввиду "GOPONT"

Yurko_UA
Друзья
21.07.13 10:02
Offline
Короче дела такие:
Пишу миссию, надо в одно место приехать и сфотографировать одного актера(он уже существует),и при условии,что уже сфотографировал, идет что-то дальше. У меня, чтоб проверить, сфоткал, или нет, не срабатывает событие актера №15(актёр сфотографирован?).

Вот не знаю, как лучше сделать.

Помнишь миссию с оригиналки, где надо было пойти на гору Чиллиад, замочить чувака и сфоткать труп? Только я не понял, как вообще там делается проверка. Может, посоветуешь что-то?

Добавлено (21.07.13, 09:02)
---------------------------------------------

Цитата (Yurko_UA)
Два вопроса: 1. По какому принципу построен скрипт "Train Switch" (чтоб на поезде по стрелкам поворачивать). 2. Допустим я создал мотоцикл. Как мне сделать, чтобы он валялся на боку, а не стоял?

wmysterio
Администраторы
Скриптер
21.07.13 12:56
Offline
Цитата (Yurko_UA)
Короче дела такие:Пишу миссию, надо в одно место приехать и сфотографировать одного актера(он уже существует),и при условии,что уже сфотографировал, идет что-то дальше. У меня, чтоб проверить, сфоткал, или нет, не срабатывает событие актера №15(актёр сфотографирован?).

Вот не знаю, как лучше сделать.

Помнишь миссию с оригиналки, где надо было пойти на гору Чиллиад, замочить чувака и сфоткать труп? Только я не понял, как вообще там делается проверка. Может, посоветуешь что-то?
Используй опкод 04C5. Пример:
Код
{$CLEO}
04C4: store_coords_to 1@ 2@ 3@ from_actor $PLAYER_ACTOR with_offset 0.0 20.0 0.0
0376: 18@ = create_random_actor_at 1@ 2@ 3@
model.Load(#CAMERA)
038B: load_requested_models
actor.GiveWeaponAndAmmo($PLAYER_ACTOR,Camera,250)

repeat
wait 0
until 04C5:   actor 18@ photographed
0ACE: show_formatted_text_box "Photo!"

0A93: end_custom_thread
------------------------------------------------------------------
Цитата
Допустим у меня есть 10 координат (в объяснении можно указать рандомные) при
вводе чита "GOPONT" игрок начинает идти по всем координатам, как только
игрок пришел к посоедней точки - начинает идти на начальную и снова
делать круг, и так будет до тех пор пока я снова не ввиду "GOPONT"
Вот следующий код:
Код
{$CLEO}
0000:

while true
      if
      0ADC:   test_cheat "GOPONT"
      then
      0754: define_new_animation_path
      0755: add_animation_path_3D_coord -2699.4812 92.5335 4.3359 animation "NONE" IFP_file "NONE"
      0755: add_animation_path_3D_coord -2712.856 92.3864 4.3359 animation "NONE" IFP_file "NONE"
      0755: add_animation_path_3D_coord -2712.6179 116.1146 4.3359 animation "NONE" IFP_file "NONE"
      0755: add_animation_path_3D_coord -2699.7942 116.9771 4.3359 animation "NONE" IFP_file "NONE"
      0817: assign_actor $PLAYER_ACTOR to_animation_path_with_walk_mode 4 route_mode 3

            repeat
            wait 0
            until 0ADC:   test_cheat "GOPONT"

      0754: define_new_animation_path
      0817: assign_actor $PLAYER_ACTOR to_animation_path_with_walk_mode 0 route_mode 0
      end
wait 0
end
0A93: end_custom_thread
Поменяешь координаты на свои десять

Yurko_UA
Друзья
21.07.13 13:55
Offline
wmysterio, я нашел уже эту проверку. Такое меня сейчас интересует:

Цитата (Yurko_UA)
Два вопроса: 1. По какому принципу построен скрипт "Train Switch" (чтоб на поезде по стрелкам поворачивать). 2. Допустим я создал мотоцикл. Как мне сделать, чтобы он валялся на боку, а не стоял?

wmysterio
Администраторы
Скриптер
21.07.13 18:04
Offline
Цитата (wmysterio)
Допустим у меня есть 10 координат (в объяснении можно указать рандомные) привводе чита "GOPONT" игрок начинает идти по всем координатам, как только
игрок пришел к посоедней точки - начинает идти на начальную и снова
делать круг, и так будет до тех пор пока я снова не ввиду "GOPONT"
Есть ещё такой вариант(игрок будет бежать):
Код
{$CLEO}
0000:

while true
         if
         0ADC:   test_cheat "GOPONT"
         then
         4@ = object.Create(1248, 0.0, 0.0, -1.0)
         0750: set_object 4@ visibility 0
         0382: set_object 4@ collision_detection 0
         0@ = 1
               repeat
                   if
                   0@ == 1
                   then
                   1@ = -2699.3767     
                   2@ = 95.7964
                   3@ = 4.3359
                   object.PutAt(4@, 1@, 2@, 3@)    
                   end
                  
                   if
                   0@ == 2
                   then
                   1@ = -2713.939       
                   2@ = 91.8025
                   3@ = 4.3359
                   object.PutAt(4@, 1@, 2@, 3@)
                   end               

                   if
                   0@ == 3
                   then
                   1@ = -2713.2026         
                   2@ = 128.6485
                   3@ = 4.3359
                   object.PutAt(4@, 1@, 2@, 3@)
                   end    

                   if
                   0@ == 4
                   then
                   1@ = -2713.0886          
                   2@ = 147.8483
                   3@ = 4.3281
                   object.PutAt(4@, 1@, 2@, 3@)
                   end    

                   if
                   0@ == 5
                   then
                   1@ = -2713.1296            
                   2@ = 165.7905
                   3@ = 4.3281
                   object.PutAt(4@, 1@, 2@, 3@)
                   end    

                   if
                   0@ == 6
                   then
                   1@ = -2698.7893              
                   2@ = 165.6518
                   3@ = 4.3281
                   object.PutAt(4@, 1@, 2@, 3@)
                   end

                   if
                   0@ == 7
                   then
                   1@ = -2699.0933              
                   2@ = 131.943
                   3@ = 4.3359
                   object.PutAt(4@, 1@, 2@, 3@)
                   end

                   if
                   0@ == 8
                   then
                   1@ = -2699.1851              
                   2@ = 113.1538    
                   3@ = 4.3359
                   object.PutAt(4@, 1@, 2@, 3@)
                   end

                   { // Для 10 точек
                   if
                   0@ == 9
                   then
                   1@ = X            
                   2@ = Y    
                   3@ = Z
                   object.PutAt(4@, 1@, 2@, 3@)
                   end
                      
                   if
                   0@ == 10
                   then
                   1@ = X            
                   2@ = Y    
                   3@ = Z
                   object.PutAt(4@, 1@, 2@, 3@)
                   end
                   }
                      
                   06E2: AS_actor $PLAYER_ACTOR run_to_object 4@ timelimit 999999999 stop_within_radius 1.0
                   if
                   00EC:   actor $PLAYER_ACTOR sphere 0 near_point 1@ 2@ radius 1.0 1.0
                   then
                   0@ += 1     
                       if
                       0@ > 8
                       // 0@ > 10 // Для 10 точек
                       then
                       0@ = 1
                       end
                   end
               wait 0               
               until 0ADC:   test_cheat "GOPONT"
               Object.Destroy(4@)
               wait 1000
         end
wait 0
end
0A93: end_custom_thread
--------------------------
Yurko_UA, Можно воспользоваться опкодом
Код
0731: set_car 0@ y_angle_to 90.0
Таким образом мы повернём транспорт на бок

vKew
Проверенные
21.07.13 18:09
Offline
Цитата (wmysterio)
Есть ещё такой вариант:1 {$CLEO}
2 0000:
3
4 while true
5         if
6         0ADC:   test_cheat "GOPONT"
7         then
8         4@ = object.Create(1248, 0.0, 0.0, -1.0)
9         0750: set_object 4@ visibility 0
10         0382: set_object 4@ collision_detection 0
11         0@ = 1
12               repeat
13                   if
14                   0@ == 1
15                   then
16                   1@ = -2699.3767
17                   2@ = 95.7964
18                   3@ = 4.3359
19                   object.PutAt(4@, 1@, 2@, 3@)
20                   end
21
22                   if
23                   0@ == 2
24                   then
25                   1@ = -2713.939
26                   2@ = 91.8025
27                   3@ = 4.3359
28                   object.PutAt(4@, 1@, 2@, 3@)
29                   end
30
31                   if
32                   0@ == 3
33                   then
34                   1@ = -2713.2026
35                   2@ = 128.6485
36                   3@ = 4.3359
37                   object.PutAt(4@, 1@, 2@, 3@)
38                   end
39
40                   if
41                   0@ == 4
42                   then
43                   1@ = -2713.0886
44                   2@ = 147.8483
45                   3@ = 4.3281
46                   object.PutAt(4@, 1@, 2@, 3@)
47                   end
48
49                   if
50                   0@ == 5
51                   then
52                   1@ = -2713.1296
53                   2@ = 165.7905
54                   3@ = 4.3281
55                   object.PutAt(4@, 1@, 2@, 3@)
56                   end
57
58                   if
59                   0@ == 6
60                   then
61                   1@ = -2698.7893
62                   2@ = 165.6518
63                   3@ = 4.3281
64                   object.PutAt(4@, 1@, 2@, 3@)
65                   end
66
67                   if
68                   0@ == 7
69                   then
70                   1@ = -2699.0933
71                   2@ = 131.943
72                   3@ = 4.3359
73                   object.PutAt(4@, 1@, 2@, 3@)
74                   end
75
76                   if
77                   0@ == 8
78                   then
79                   1@ = -2699.1851
80                   2@ = 113.1538
81                   3@ = 4.3359
82                   object.PutAt(4@, 1@, 2@, 3@)
83                   end
84
85                   { // Для 10 точек
86                   if
87                   0@ == 9
88                   then
89                   1@ = X
90                   2@ = Y
91                   3@ = Z
92                   object.PutAt(4@, 1@, 2@, 3@)
93                   end
94
95                   if
96                   0@ == 10
97                   then
98                   1@ = X
99                   2@ = Y
100                   3@ = Z
101                   object.PutAt(4@, 1@, 2@, 3@)
102                   end
103                   }
104
105                   06E2: AS_actor $PLAYER_ACTOR run_to_object 4@ timelimit 999999999 stop_within_radius 1.0
106                   if
107                   00EC:   actor $PLAYER_ACTOR sphere 0 near_point 1@ 2@ radius 1.0 1.0
108                   then
109                   0@ += 1
110                       if
111                       0@ > 8
112                       // 0@ > 10 // Для 10 точек
113                       then
114                       0@ = 1
115                       end
116                   end
117               wait 0
118               until 0ADC:   test_cheat "GOPONT"
119               Object.Destroy(4@)
120               wait 1000
121         end
122 wait 0
123 end
124 0A93: end_custom_thread

Оууу ЩЕТ

Мне не нужно actor.Put и т.д. и т.п. Мне нужно чтобы просто игрок ходил туда сюда по координатам и всё, мне для SAMP'a кое что нужно
Отредактировал vKew - Воскресенье, 21.07.13, 18:10

Yurko_UA
Друзья
21.07.13 18:29
Offline
1. Что ето за проверка : «0@ <> 1»
2. Как свести поезд с рельс?

wmysterio
Администраторы
Скриптер
21.07.13 19:32
Offline
Цитата (vKew)
Мне не нужно actor.Put и т.д. и т.п.
Ахах ) Там Object.PutAt. Идея в том, что бы заставить игрока бежать к объекту.
Цитата (vKew)
мне для SAMP'a кое что нужно
Я сделал скрипт для одиночной игры. Будет ли работать в САМПе я не знаю
Цитата (Yurko_UA)
1. Что ето за проверка : «0@ <> 1»
Больше или меньше указанного значения.
Цитата (Yurko_UA)
Как свести поезд с рельс?
Нет ответа у меня. И не только у меня.

vKew
Проверенные
25.07.13 16:41
Offline
Как сделать так, что бы при вводе чита "BOOM", ближайщяя машина взрывалась, но для начала, если в ней сидит кто нибудь, то выкинуть из машины

Yurko_UA
Друзья
26.07.13 13:31
Offline
Цитата (vKew)
Как сделать так, что бы при вводе чита "BOOM", ближайщяя машина взрывалась, но для начала, если в ней сидит кто нибудь, то выкинуть из машины


Код
{$cleo. cs}
0000:
thread 'BOOM'

:BOOM
wait 0
if
player.defined($PLAYER_CHAR)
jf @BOOM_2
if
0ADC: test_cheat 'BOOM'
jf @BOOM
actor.storePos($PLAYER_ACTOR,1@,2@,3@)
if
0AE2: 4@ = random_vehicle_near_point 1@ 2@ 3@ in_radius 20.0 find_next 0 pass_wrecked 1   
jf @BOOM
046C: 5@ = car 4@ driver   
if
actor.defined(5@)
jf @BOOM_1
05CD: AS_actor 5@ exit_car 4@
jump @BOOM_1

:BOOM_1
020B: explode_car 4@   
jump @BOOM

:BOOM_2
0A93: end_custom_thread

Добавлено (26.07.13, 12:31)
---------------------------------------------
А правда, что если после загрузки моделей поставил 


Код
038B: load_requested_models
то проверку 
Код
model.available()
можно не делать?
Отредактировал Yurko_UA - Четверг, 25.07.13, 16:59

wmysterio
Администраторы
Скриптер
26.07.13 17:13
Offline
Цитата (Yurko_UA)
можно не делать?
Да, если верить Vital. Опкод 038B принудительно загружает объявленные выше модели

Vital
Модераторы
Скриптер
28.07.13 18:48
Offline
wmysterio, если верить куче других людей, которые, в свою очередь, говорили это мне smile
У меня даже при использовании модели без задержек после загрузки с этим опкодом ничего не вылетало.
Зато вылетает в VC с этим скриптом:

Код
:Speed
wait 0
if
player.Defined(0)
jf @Speed
if and
not actor.Dead($PLAYER_ACTOR)
actor.Driving($PLAYER_ACTOR)
jf @Speed
while true
     wait 0
     if
     actor.Driving($PLAYER_ACTOR)
     then
     0@ = actor.CurrentCar($PLAYER_ACTOR)
     02E3: 1@ = car 0@ speed
         if
         1@ >= 1.0
         then
         008C: 1@ = float_to_integer 1@
         03F0: text_draw_toggle 1
         0342: set_text_draw_centered 1  
         033F: set_text_draw_letter_width_height 1.0 2.0
         0340: set_text_draw_color 255 255 0 255
         045A: text_draw_1number 75.0 310.0 'NUMBER' 1@   
         end
     else
     break
     end                     
end
jump @Speed
В SA всё работает, а тут вылет... Странно, уже не знаю, что думать.
2109: create_special_actor $VITAL in_front_of_computer

wmysterio
Администраторы
Скриптер
28.07.13 19:14
Offline
Цитата (Vital)
В SA всё работает, а тут вылет...
Ну не надо СА и ВС путать, там разная нумерация опкодов. С сожалению проверить не смогу, так как нет Вайс Сити, но могу посоветовать вместо классов поставить опкоды. Может с ними что-то не так о_0

Vital
Модераторы
Скриптер
28.07.13 19:16
Offline
wmysterio, так опкоды одни и те же, ошибок при компиляции нету, в чём дело, сам не пойму. Попробую что-нибудь предпринять.
Изначально делал для VC. Потом скопировал для SA, проверить, работает ли, всё хорошо было, но в VC всё же всё плохо. Хотя опкоды одинаковые, всё должно работать.
Отредактировал Vital - Воскресенье, 28.07.13, 19:17
2109: create_special_actor $VITAL in_front_of_computer

wmysterio
Администраторы
Скриптер
28.07.13 19:39
Offline
Цитата (Vital)
Хотя опкоды одинаковые, всё должно работать.
Ну если для данного скрипта, то да. Если брать опкоды в целом, то это далеко не так.

Vital
Модераторы
Скриптер
28.07.13 19:53
Offline
wmysterio, в данном скрипте опкоды не вызвали ошибок при переносе из VC в SA. Будем разбираться, если кто-то сможет найти ошибку...
2109: create_special_actor $VITAL in_front_of_computer

wmysterio
Администраторы
Скриптер
28.07.13 19:59
Offline
Vital, воспользуйся scm-log. если он конечно идёт под Cleo для Вайс Сити

Vital
Модераторы
Скриптер
28.07.13 21:06
Offline
wmysterio, лично у меня он не сработал там.
2109: create_special_actor $VITAL in_front_of_computer

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