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

wmysterio
Администраторы
Скриптер
25.06.14 14:07
Offline
Цитата Sweeper ()
Как мне сделать, чтобы с 22-00 по 6-00 их там не было? Как бы рабочее время сделать хочу.
самый простой способ - очистить местность от актёров в той зоне:
Код
:START

//
00BF: 0@ = current_time_hours, 1@ = current_time_minutes
if OR
0@ > 21
6 > 0@
then
0395: clear_area 0 at 681.8004 -474.1063 15.5363 radius 30.0
end
// здесь уже нужно проверить когда нужно создавать актёров заново

jump @START

Sweeper
Проверенные
25.06.14 16:15
Offline
А можно через while?
Код
00BF: 0@ = current_time_hours
while 0@>21 and 0@<6
0605: actor 203@ perform_animation "IDLE_CHAT" IFP "PED" framedelta 4.0 loop 1 lockX 0 lockY 0 lockF 0 time -1    
0967: actor 203@ move_mouth -1 ms
wait 800
0605: actor 204@ perform_animation "IDLE_CHAT" IFP "PED" framedelta 4.0 loop 1 lockX 0 lockY 0 lockF 0 time -1    
0967: actor 204@ move_mouth -1 ms
wait 700
0605: actor 205@ perform_animation "IDLE_CHAT" IFP "PED" framedelta 4.0 loop 1 lockX 0 lockY 0 lockF 0 time -1    
0967: actor 205@ move_mouth -1 ms
      if and
          actor.dead(203@)
          actor.dead(204@)
          actor.dead(205@)
      then
          break
      end
end
// действия, если актеры мертвы

А если я вставлю ещё код, чтобы актеры ходили, это тоже будет зацикливаться?
И как прекратить анимацию, которую делает актер?
Отредактировал Sweeper - Среда, 25.06.14, 16:32

BoPoH
Друзья
25.06.14 20:55
Offline
Цитата Sweeper ()
А если я вставлю ещё код, чтобы актеры ходили, это тоже будет зацикливаться?

Да.
Цитата Sweeper ()
И как прекратить анимацию, которую делает актер?

Возможно, подойдёт опкод:
Код
0687: clear_actor $PLAYER_ACTOR task

Sweeper
Проверенные
26.06.14 13:05
Offline
А можно сделать локальные переменные больше 33@? Я в мейне видел, а в скрипте почему-то нельзя.

Yurko_UA
Друзья
26.06.14 15:27
Offline
Как в клео-скрипте проверить, сфотографировал ли ГГ машину/обьект?

Добавлено (26.06.14, 14:27)
---------------------------------------------

Цитата Sweeper ()
А можно сделать локальные переменные больше 33@? Я в мейне видел, а в скрипте почему-то нельзя.
В клео-миссиях/мэйновских миссиях можно вроде от 0 до 1024 (32, 33 таймеры).
В клео-скриптах только 0 - 33 (32, 33 таймеры)
В клео-скриптах под мобильную версию СА можно 0 - 41 (40, 41 - таймеры).

А в тройке только до 16-ти.

Slivkin-Sergey
Модераторы
26.06.14 18:23
Offline
Цитата Yurko_UA ()
Как в клео-скрипте проверить, сфотографировал ли ГГ машину/обьект?

Поищи по слову photographed, найдёшь пару опкодов.
---
У меня проблема. Есть скрипт:
Код
{$CLEO}
0000:
repeat
wait 0
until 0AB0: 80
04ED: "EXAMPLE"
wait 500
0812: AS_actor $PLAYER_ACTOR perform_animation "ABSEIL" IFP_file "EXAMPLE" 4.0 loopA 0 lockX 0 lockY 0 lockF 1 time -1 // versionB
wait 15000
0A93:

И есть файл example.ifp (скопированный ped.ifp в той же папке). Заголовок в Anim Manager'е сменил. При нажатии на кнопку не вылетает, но и анимация не воспроизводится почему-то.

Добавлено (26.06.14, 17:19)
---------------------------------------------
А если пытаюсь добавить .ифп файл в гта3.имг, то после нажатия вылетает.

Добавлено (26.06.14, 17:23)
---------------------------------------------
А вот такой скрипт:

Код
{$CLEO}
0000:
repeat
wait 0
until 0AB0: 80
04ED: "EXAMPLE"
repeat
wait 0
until 04EE: "EXAMPLE"
Player.Money($PLAYER_CHAR) += 100000
0A93:

вызывает зависание и исключение по адресу 2196.

wmysterio
Администраторы
Скриптер
26.06.14 19:22
Offline
Цитата Sweeper ()
И как прекратить анимацию, которую делает актер?
Можно заставить выполнять ту же анимацию, но указав время - 0:
Код
0605: actor 204@ perform_animation "IDLE_CHAT" IFP "PED" framedelta 4.0 loop 0 lockX 0 lockY 0 lockF 0 time 0
Другой метод - переместить актёра на 1 единицу вверх и заставить упасть тем самым.
Цитата Yurko_UA ()
Как в клео-скрипте проверить, сфотографировал ли ГГ машину/обьект?
Код
0833:   object 107@ photographed
На транспорт пока не нашел.
Цитата Slivkin-Sergey ()
А если пытаюсь добавить .ифп файл в гта3.имг, то после нажатия вылетает.
если ifp в img-архиве, то нужно ещё и загружать анимацию. Также нужно следить, чтобы анимации имели разные имена(были уникальные)

BoPoH
Друзья
26.06.14 20:48
Offline
Цитата wmysterio ()
Можно заставить выполнять ту же анимацию, но указав время

Повторное воспроизведение анимации не работает, если эта анимация уже воспроизводится, насколько мне известно.
Цитата wmysterio ()
Другой метод - переместить актёра на 1 единицу вверх и заставить упасть тем самым.

Только при условии использования опкода 0605. Другие версии воспроизведения анимации не реагируют на это.
Цитата wmysterio ()
На транспорт пока не нашел.

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

wmysterio
Администраторы
Скриптер
26.06.14 21:28
Offline
Цитата BoPoH ()
Повторное воспроизведение анимации не работает, если эта анимация уже воспроизводится, насколько мне известно.
Я был не прав, когда говорил, что нужно устанавливать 0. Нужно указывать в time 1, чтобы прекратить анимацию. Также нужно во все параметры после фрейм-дельты все параметры установить на 0.

Я делал тесты:
Код
{$CLEO }
wait 3000
0812: AS_actor $PLAYER_ACTOR perform_animation "IDLE_chat" IFP "PED" framedelta 4.0 loopA 0 lockX 0 lockY 0 lockF 0 time 6670  // versionB
wait 1500
0812: AS_actor $PLAYER_ACTOR perform_animation "IDLE_chat" IFP "PED" framedelta 4.0 loopA 0 lockX 0 lockY 0 lockF 0 time 1  // versionB
0A93: end_custom_thread
Срабатывало для опкодов 0812, 0A1A и 0605.

Также работает и
Код
0687: clear_actor $PLAYER_ACTOR task
Так что есть 2 варианта решения, которые в 99.9% прекращают воспроизведение анимации.
Цитата BoPoH ()
Можно, наверное, прикрепить к машине какой-нибудь объект и сделать его невидимым, а затем применить тот же опкод, для прикреплённого объекта.
Хорошее решение. Нужно потестить.

Sweeper
Проверенные
27.06.14 12:59
Offline

Игра работает секунд 5-7 потом вылетает, что тут не так может быть?

Slivkin-Sergey
Модераторы
27.06.14 14:49
Offline
Метка внутри высокоуровневой конструкции?.. Оригинально.

Sweeper
Проверенные
27.06.14 15:56
Offline
Цитата Slivkin-Sergey ()
Метка внутри высокоуровневой конструкции?.. Оригинально.
Я же не профи в скриптинге.

wmysterio
Администраторы
Скриптер
27.06.14 17:42
Offline
Цитата Slivkin-Sergey ()
Оригинально.
Это практичная вещь. Правда в данном случаи это лишнее.

Sweeper
Проверенные
27.06.14 19:16
Offline
Может, вы мне скажете что делать? happy

wmysterio
Администраторы
Скриптер
28.06.14 00:17
Offline
Цитата Sweeper ()
Может, вы мне скажете что делать?
Переработать код. Как минимум здесь ошибка в проверке:
Код
car.Destroy(30@)
Это не проверка, а процедура уничтожения транспорта. Если использовать опкод в цикле, то первый раз машина удалится а во второй итерации будет вылет, так как транспорт уже удалён. Используйте:
Код
0119:   car 30@ wrecked // проверка: транспорт повреждён

Код должен примерно таков быть:

Sweeper
Проверенные
28.06.14 13:34
Offline

Код
if or  
0@ > 22  
0@ < 6  
actor.Dead(10@)  
actor.Dead(11@)  
actor.Dead(12@)  
actor.Dead(13@)  
actor.Dead(14@)  
actor.Dead(15@)  
0119:   car 30@ wrecked  
then

Здесь максимум 8 условий, а у тебя 9.

Михан500
Пользователи
28.06.14 17:54
Offline
У меня тут небольшая проблема, у меня есть актер, и мне нужно вычислить и занести в переменную актера, которого он атаковал, который получил от него урон.Идеи есть?

wmysterio
Администраторы
Скриптер
28.06.14 18:09
Offline
Цитата Sweeper ()
Здесь максимум 8 условий, а у тебя 9.
тогда разбей их на части
Код
if or  
  0@ > 22  
  0@ < 6  
then    
  jump @4istim  
  end
if or
  actor.Dead(10@)  
  actor.Dead(11@)  
  actor.Dead(12@)  
  actor.Dead(13@)  
  actor.Dead(14@)  
  actor.Dead(15@)  
  0119:   car 30@ wrecked  
  then    
  jump @4istim  
  end

Михан500
Пользователи
09.07.14 12:12
Offline
Как сделать что бы пикап не подбирался?

BoPoH
Друзья
09.07.14 16:30
Offline
Цитата Михан500 ()
Как сделать что бы пикап не подбирался?

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

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