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

или

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

Внимание! От этого момента тема предназначена ещё и для заказов скриптов и миссий. Я это сделал по одной причине - пользователи постоянно путают/или не ищут темы и приводят заказ здесь. Теперь этой путаницы не будет. Здесь можно проводить заказы, но Вы должны указать в начале поста текст "НА ЗАКАЗ". Постарайтесь как можно детальнее объяснить суть скрипта.
Прикрепления: 0248203.png(1Kb) · 9085525.png(0Kb)

Slivkin-Sergey
Модераторы
28.08.13 18:25
Offline
wmysterio. Игрок падает с парашютом. Если расстояние до земли меньше или равно 100, то выполняются следующие действия.

Добавлено (28.08.13, 15:24)
---------------------------------------------
Всё заработало после того как поменял цифры в проверке местами и изменил знаки wacko

Добавлено (28.08.13, 15:57)
---------------------------------------------
Теперь этот уродец в машину не телепортируется:

Добавлено (28.08.13, 17:25)
---------------------------------------------
А, всё нормально, это потому, что актёр в воздухе.
Отредактировал Slivkin-Sergey - Среда, 28.08.13, 18:25

blackful
Пользователи
29.08.13 14:58
Offline
знаю как вставить звук на карту, но только одна проблема, звук проигрывает где-то секунд 7-10 можно ли как нибудь продлить?  чтобы по кругу крутил звук, а то дорожку растягивать через сони вегас как то тупо, тем более и память повышается.
Евгений_Сергеевич

Vital
Друзья
Скриптер
29.08.13 17:44
Offline
blackful, попробуй проигрывать звук в цикле. Если нужно одно условие завершения, то лучше взять repeat, если несколько условий - while true (не забудь break). И не забудь в циклах wait 0. Если хочешь зацикливание, то в цикле ещё создавай цикл repeat, где в until будет проверка на завершение проигрывания звука.
2109: create_special_actor $VITAL in_front_of_computer

blackful
Пользователи
29.08.13 21:12
Offline
Vital, вообщем не понял тебя, у меня такой код:
{$VERSION 3.1.0027}
{$CLEO .cs}

//-------------MAIN---------------
0AAC: 1@ = load_mp3 "AUDIO\SFX\SOUND_001.MP3" 
038B: load_requested_models 
wait 0 

:NONAME_36
wait 0 
if and
   Player.Defined($PLAYER_CHAR)
00FE:   actor $PLAYER_ACTOR sphere 0 in_sphere -2197.62 2399.594 4.969 radius 300.0 300.0 300.0 
else_jump @NONAME_36 
0AAD: set_mp3 1@ perform_action 1 
wait 5000 

:NONAME_105
wait 0 
if 
80FE:   not actor $PLAYER_ACTOR sphere 0 in_sphere 2288.123 -1286.566 24.1094 radius 300.0 300.0 300.0 
else_jump @NONAME_105 
0AAD: set_mp3 1@ perform_action 0 
jump @NONAME_36 

 и куда что вставлять я не знаю ashamed (впервые такое сталкиваюсь)
Евгений_Сергеевич

Vital
Друзья
Скриптер
29.08.13 21:41
Offline
blackful, должно сработать:

Код
{$CLEO}
0000:
while true //1
wait 0
      if //2
      player.Defined(0)
      then
          if
          00FE:   actor $PLAYER_ACTOR sphere 0 in_sphere -2197.62 2399.594 4.969 radius 300.0 300.0 300.0
          then
          1@ = audiostream.Load("AUDIO\SFX\SOUND_001.MP3")
              while 00FE:   actor $PLAYER_ACTOR sphere 0 in_sphere -2197.62 2399.594 4.969 radius 300.0 300.0 300.0
              audiostream.PerformAction(1@,PLAY)
                  repeat
                  wait 0
                  2@ = audiostream.State(1@)
                  until 2@ <> 1
              end
          audiostream.PerformAction(1@,STOP)
          audiostream.Release(1@)               
          end
      end //2
end //1
Отредактировал Vital - Четверг, 29.08.13, 21:42
2109: create_special_actor $VITAL in_front_of_computer

blackful
Пользователи
30.08.13 16:16
Offline
Vital, спасибо, вечерком попробую.
Евгений_Сергеевич

Slivkin-Sergey
Модераторы
30.08.13 22:26
Offline
Как при помощи массивов можно сделать появление актёра в случайных координатах из пресловутого массива?

Vital
Друзья
Скриптер
30.08.13 23:07
Offline
Slivkin-Sergey, очень просто, если надо именно из конкретных точек массива, то делай так:
var
$X : Array 10 of Float
$Y : Array 10 of Float
$Z : Array 10 of Float
end
$X[0] = 1250.5
$Y[0] = 1700.9
$Z[0] = 12.7 // К примеру, такие координаты, для каждого индекса от 0 до 10 ( [0;10) ), а потом
0209: 0@ = random_int 0 9
actor.putat($PLAYER_ACTOR,$X[0@],$Y[0@],$Z[0@])

Но лучше именно PutAt, а не создание в самом начале, а то может быть вылет, я пробовал делать gosub из начала .scm, перед созданием игрока, но был вылет. И не забывай прогружать местность опкодами 04E4 и 03CB.
2109: create_special_actor $VITAL in_front_of_computer

alfazlo
Пользователи
30.08.13 23:40
Offline
Нужна помощь опытных скриптеров, DK22Pac в особенности, т.к. он в графике больше всех смыслит. У меня уже неоднократно проваливаются попытки рендеринга текста, использую, хочу реализовать все через directx. Знаю, что реализация уже есть от D22kpac. Но хотелось бы без asi плагина.
Вообщем сама идея из библиотеки d3dx9_43.dll, которая по умолчанию вроде как есть в корне gta, вызывать функции и сделать рендер текста. Создать объект шрифта получидось, тепрь нужно вызвать метод beginScene? И еще как из виртуальной таблицы методов для объекта шрифта узнать точный аддрес.

Код
if 0AA2: 1@ = load_library "d3dx9.dll"
then
if 0AA4: 2@ = get_proc_address "D3DXCreateFontA" library 1@
then
0AA7: call_function 0x7F9D50 num_params 0 pop 0 3@
0A8D: 3@ = read_memory 0xC97C28 size 4 virtual_protect 0
0AC7: 5@ = var 4@ offset
0AA7: call_function 2@ num_params 12 pop 0 5@ "Arial" 0 0 0 0 0 0 0 0 20 3@ 6@ //CreateFont
end
end
Отредактировал alfazlo - Суббота, 31.08.13, 16:03

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)

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

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