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

mc_qwert
Пользователи
31.08.13 14:19
Offline
Ребят нужна помощь, вообщем я пытаюсь сделать бой с 2 и более противниками, мне нужно найти ближаших 5 персов от игрока, и тот что ближе должен атаковать игрока, а остальные выполнять иное действие.
Попытался сделать покат только на 2 персов.
Код
{$VERSION 3.1.0027}
{$CLEO .cs}

//-------------MAIN---------------
thread 'SYS'   

:SYS_11
wait 0   
if   
     Player.Defined($PLAYER_CHAR)
jf @SYS_11   
04C4: store_coords_to 17@ 18@ 19@ from_actor $PLAYER_ACTOR with_offset 0.0 0.0 0.0   
0AE1: 1@ = random_actor_near_point 17@ 18@ 19@  in_radius 10.0 find_next 1 pass_deads 1 //IF and SET   
0AE1: 2@ = random_actor_near_point 17@ 18@ 19@  in_radius 10.0 find_next 1 pass_deads 1 //IF and SET   
04C4: store_coords_to 17@ 18@ 19@ from_actor $PLAYER_ACTOR with_offset 0.0 0.0 0.0
wait 1000
00A0: store_actor 1@ position_to 10@ 11@ 12@
wait 1000
00A0: store_actor 2@ position_to 13@ 14@ 15@
0509: 3@ = distance_between_XY 17@ 18@ and_XY 10@ 11@
0509: 4@ = distance_between_XY 17@ 18@ and_XY 13@ 14@
if
001D:   4@ > 3@ // (int)   
then
marker.CreateAboveActor($ActMark,2@)
marker.SetColor($ActMark,1)
0812: AS_actor 1@ perform_animation "HIT_FIGHTG_LKICK2" IFP_file "FIGHTH" 8.0 loopA 0 lockX 0 lockY 0 lockF 1 time -1 // versionB   
else
marker.CreateAboveActor($ActMark,1@)
marker.SetColor($ActMark,1)
05BE: AS_kill_actor 2@   
wait 3000
end
jump @SYS_11


но игра почему то вылетает....
я знаю что можно сделать поиск персонажей вот так

Код
0AE2: 0@(28@,5i) = random_vehicle_near_point 29@ 30@ 31@ in_radius 100.0 find_next 0 pass_wrecked 1 //IF and SET
 Но я не до конца понимаю, мне придёться постоянно проверять всех 5 персонажней то есть 0@ 1@ 2@ 3@ 4@?
Отредактировал mc_qwert - Суббота, 31.08.13, 14:22

alfazlo
Пользователи
31.08.13 16:10
Offline
Я бы использовал такой вариант, перебираешь всех игроков в радиусе от 0.0 до 20.0 например в циклк с шагом 0.5, первый кого найдет будет ближайшим игроком, потом к нему еще 4 находишь, просто при нахождении ставь счетчик и ++ при нахождении актера а потом если счетчик равен 5 break, можно все и сложне сделать :/

mc_qwert
Пользователи
31.08.13 17:11
Offline
alfazlo, Cпасибо, я тоже подумал об этом, но я не знаю насколько быстро это всё выполниться)
Если есть ещё варианты предлагайте)

Slivkin-Sergey
Модераторы
31.08.13 19:13
Offline
Возможно ли каким-то образом индексировать элементы массива при помощи текста? Например, $SAVE_PICKUPS[MCSKATEPARK]. Было бы очень удобно.

DK22Pac
Модераторы
TOP Скриптер
31.08.13 19:59
Offline
alfazlo, прямой рендеринг при выполнении скриптов невозможен. Я даже делал плагин, который позволяет производить рендер (http://ru-script.3dn.ru/forum/6-88-1). Правда, сейчас он уже не актуален, т.к. я развил эту идею в Plugin SDK (SDK для написания плагинов), больше информации о котором здесь появится позже.

Slivkin-Sergey
Модераторы
31.08.13 21:38
Offline
И ещё:
Код
0605: actor $PLAYER_ACTOR perform_animation "FIGHTKICK_B" IFP "FIGHT_E" framedelta 1.0 loop 0 lockX 0 lockY 0 lockF 0 time -1

Почему работает только при framedelta = 4.0? Я вроде читал на форуме санника, что
Цитата (Voron295)
framedelta нужно переименовать в interpolation. Этот параметр отвечает за плавность перехода в анимацию (и за плавность выхода из анимации или перехода в другую анимацию). Чем больше этот параметр - тем быстрее и заметнее переход. Чем меньше параметр - тем плавнее и красивее. Обычно лучше ставить его в районе 4.0-15.0. Если поставить 10000.0, то актёр моментально примет начальную позу анимации, т.е. вообще без перехода.

Добавлено (31.08.13, 20:00)
---------------------------------------------
Ок, я понял, вопрос снимается. Но остаётся предыдущий.

Добавлено (31.08.13, 20:38)
---------------------------------------------
И ещё: почему-то не срабатывает опкод 0318, в слоте сохранения не написано название "M2NAME":

Код
$SAFEPLACES_TO_GET_DURING_STORYLINE = 0
gosub @STORY_SAFEPL
create_thread @STORY_SAFEPL_CHECK
0362: remove_actor $PLAYER_ACTOR from_car_and_place_at 1835.452 -1372.777 13.5854
Actor.Angle($PLAYER_ACTOR) = 275.7124
Car.Destroy(5@)
Actor.DestroyInstantly(1@)
wait 1000  
02A3: enable_widescreen 0  
fade 1 500  
01E3: show_text_1number_styled GXT 'M_PASS' number 100 time 5000 style 1  // Ї…CC…• ‹‘ЊO‡­E­A!~n~~w~$~1~
0394: play_music 1  
Player.Money($PLAYER_CHAR) += 100
0318: set_latest_mission_passed 'M2NAME'  
$TOTAL_STEVENSON_MISSIONS_PASSED += 1
return

Vital
Модераторы
Скриптер
31.08.13 21:44
Offline
Slivkin-Sergey, 'M2NAME' - это GXT запись, она должна быть создана либо в GXT, либо в .fxt файле (нужен gxthook.cleo). FXT файлы строятся так:
ИМЯ_ЗАПИСИ Текст записи
К примеру:
M2NAME Mission 02
Тогда будет написано Mission 02, когда в опкоде написано M2NAME.
2109: create_special_actor $VITAL in_front_of_computer

Slivkin-Sergey
Модераторы
31.08.13 22:14
Offline
Vital, зачем меня за дурачка держишь? У меня есть GXT запись M2NAME, содержание "Training".

Добавлено (31.08.13, 21:14)
---------------------------------------------
А, всё, я понял почему не отображалось... в лейбле, на который я gosub'ился я изменял используемую GXT таблицу, и забыл после return'а сделать ту, в которой запись M2NAME.


Vital
Модераторы
Скриптер
31.08.13 23:57
Offline
Slivkin-Sergey, дурачком я тебя не считаю, не волнуйся, просто можно всегда не знать каких-то нюансов или забыть их, к примеру, пробел в создании fxt записи. Кстати, попробуй использовать FXT, это гораздо удобнее, не нужно указывать файл, просто сразу запись. Создание GXT записей немного замороченное, потому рекомендую именно .fxt, у меня всегда работало, к тому же можно перевод делать таким образом smile Хоть новое "ПОТРАЧЕНО" написать с нуля.
Отредактировал Vital - Суббота, 31.08.13, 23:58
2109: create_special_actor $VITAL in_front_of_computer

alfazlo
Пользователи
01.09.13 09:20
Offline
Цитата (DK22Pac)
alfazlo, прямой рендеринг при выполнении скриптов невозможен. Я даже делал плагин, который позволяет производить рендер (http://ru-script.3dn.ru/forum/6-88-1). Правда, сейчас он уже не актуален, т.к. я развил эту идею в Plugin SDK (SDK для написания плагинов), больше информации о котором здесь появится позже.
На личном опыте уже стало понятно, я в этих темах немного нуб, но все же когда пытался, создал объект шрифта, вызвал Beginscene и метод Drawtext, рендеринг останавливался просто, но вылетов не было, только свернув / развернув игру опять восстанавливался. Да и при обращении к любым методам объекта выходит ошибка, проверял на ShowCursor для DC, метод выполняется, курсор показывает и все равно 1 - 2 ошибки, ну это мультиплеер. Только я не понимаю почему нельзя рендерить, вообще мне просто нужно нормальный текст, можно как-то заставить выводить gta шрифтами windows не изменяя архивов, или тупо из своей картинки подгружать? Про твой плагин я то знаю, только не люблю плагины ставить, да и хочется видеть исходник перед глазами, что бы знать как работает.

Slivkin-Sergey
Модераторы
04.09.13 12:31
Offline
Цитата (Vital)
Кстати, попробуй использовать FXT, это гораздо удобнее, не нужно указывать файл, просто сразу запись. Создание GXT записей немного замороченное, потому рекомендую именно .fxt, у меня всегда работало, к тому же можно перевод делать таким образом

Ну, FXT для проекта на main'е несолидно smile
А так, спасибо за помощь
И ещё: кто-нибудь видит здесь причину вылета?
Код
//-------------------Mission 3-----------------------

:STEVEN2
thread "STEVEN2"  
gosub @STEVEN2_1
if  
   wasted_or_busted  
  then  
   gosub @STEVEN2_FAILED  
end  
gosub @STEVEN2_CLEANUP
end_thread  

:STEVEN2_1
wait 0
Player.CanMove($PLAYER_CHAR, 0)
02A3: enable_widescreen 1
Actor.PutAt($PLAYER_ACTOR, 1825.2642, -1369.931, 14.4219)
Actor.Angle($PLAYER_ACTOR) = 89.6142
04ED: "DEALER"
repeat
wait 0
until 04EE: "DEALER"
0812: actor $PLAYER_ACTOR perform_animation "DEALER_IDLE" IFP "DEALER" framedelta 4.0 loop 0 lockX 0 lockY 0 lockF 0 time -1
04C4: store_coords_to $TEMPVAR_FLOAT_1 $TEMPVAR_FLOAT_2 $TEMPVAR_FLOAT_3 from_actor $PLAYER_ACTOR with_offset -1.2 -1.5 1.0
Camera.SetPosition($TEMPVAR_FLOAT_1, $TEMPVAR_FLOAT_2, $TEMPVAR_FLOAT_3, 0.0, 0.0, 0.0)
Camera.OnPed($PLAYER_ACTOR, 15, 2)
03DE: set_pedestrians_density_multiplier_to 0.0
fade 1 500
04C4: store_coords_to $TEMPVAR_FLOAT_1 $TEMPVAR_FLOAT_2 $TEMPVAR_FLOAT_3 from_actor $PLAYER_ACTOR with_offset -1.2 4.5 1.0
0460: set_camera_transverse_delay 0.0 time 10000
Camera.SetPosition($TEMPVAR_FLOAT_1, $TEMPVAR_FLOAT_2, $TEMPVAR_FLOAT_3, 0.0, 0.0, 0.0)
Camera.OnPed($PLAYER_ACTOR, 15, 1)
wait 6000
0812: actor $PLAYER_ACTOR perform_animation "DEALER_IDLE_02" IFP "DEALER" framedelta 4.0 loop 0 lockX 0 lockY 0 lockF 1 time -1
00BC: show_text_highpriority GXT 'M3R1' time 4000 flag 1
wait 4000
fade 0 500
wait 500
02A3: enable_widescreen 0
fade 1 500
Player.CanMove($PLAYER_CHAR, 1)
Camera.Restore_WithJumpCut()
$ONMISSION = 0
wait 500
return  

:STEVEN2_FAILED
00BA: text_styled 'M_FAIL' 5000 ms 1 // ~r~MISSION FAILED!  
return  

:STEVEN2_CLEANUP
$ONMISSION = 0 // integer values  
mission_cleanup  
return

Добавлено (01.09.13, 14:09)
---------------------------------------------
Почему-то когда я ставлю в оффсете смещение по Z -1.0, он наоборот показывает на метр выше. И так тоже. Что за бред?

И да: вылетает на моменте, где выводится текст.

Добавлено (04.09.13, 11:31)
---------------------------------------------
Разобрался.

Теперь другой вопрос: что такое framedelta? Я видел довольно много опкодов, с ней связанных, пример:

Код
0079: 271@ += frame_delta_time * 1.0 // (float)
0079: 272@ += frame_delta_time * 1.0 // (float)
0079: 273@ += frame_delta_time * 1.0 // (float)

Взято из ориг. майна, миссия "Мясной бизнес", момент, где чувак в замедленном времени кидает коктейль Молотова.

Vital
Модераторы
Скриптер
04.09.13 19:14
Offline
Slivkin-Sergey, если не ошибаюсь, frame_delta_time как-то связано с FPS (Frames Per Second - кол-во кадров в секунду).
2109: create_special_actor $VITAL in_front_of_computer

Slivkin-Sergey
Модераторы
04.09.13 20:05
Offline
Цитата (Vital)
FPS (Frames Per Second - кол-во кадров в секунду).

Эмм...
---
Vital, ещё она используется в опкодах для воспроизведения анимаций, чем меньше её значение, тем плавнее переход от одной анимации к другой, или от анимации к исходному положению.

manrimods
Пользователи
05.09.13 22:55
Offline
У меня проблема с прогой почему у меня когда я захожу в игру нахожу место сворачиваю игру в sany builder нажимаю редактор координат а у меня все значения по 0 хотя я знаю что я не на 0 остановился в игре. Что делать

wmysterio
Администраторы
Скриптер
06.09.13 09:00
Offline
manrimods, причины могут быть разные, но как вариант - запустить программу в режиме администратора.

blackful
Пользователи
07.09.13 18:51
Offline
ребят, как убрать надпись с главного экрана жёлтым шрифтом внизу слева  "CLEO 3" ? а то очень уж мешает, всю картину портит.
Евгений_Сергеевич

HYPERMUV
Проверенные
07.09.13 19:15
Offline
blackful, думаю с помощью клео ты этого не сделаешь, придётся задейстовать посторонние методы и всё равно наврятли получится
Отредактировал HYPERMUV - Суббота, 07.09.13, 19:16

KiLLeR96
Друзья
Модератор
07.09.13 20:01
Offline
В каком файле находится конфигурация, отвечающая за оружие копов, бандитов, обычных прохожих?

Slivkin-Sergey
Модераторы
20.09.13 11:22
Offline
Как можно изменить цвет гроувских территорий с зелёного на другой?

Добавлено (20.09.13, 10:21)
---------------------------------------------
На первый взгляд довольно нубский вопрос: как заставить актёра спринтовать?..

Добавлено (20.09.13, 10:22)
---------------------------------------------
И ещё какой-то странный опкод нашёл в коде миссии копа:

Код
04BD: set_car 40@ is_part_of_convoy 0

KiLLeR96
Друзья
Модератор
20.09.13 17:59
Offline
Цитата (Slivkin-Sergey)
Код
04BD: set_car 40@ is_part_of_convoy 0

Этот опкод добавляет машины в конвой. Т.е машины, на которые применен этот опкод, будут ехать рядом.

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