[ Новые сообщения · Участники · Правила форума · Поиск · RSS ] |
Форум » Игры серии GTA » GTA San Andreas » Вопросы по скриптингу Sanny Builder (Вы можете получить ответы на вопросы по SB) |
Вопросы по скриптингу Sanny Builder |
Если у вас возник вопрос по скриптингу Sanny Builder, обращайтесь! Мы постараемся решить вашу проблему
![]() УВАЖАЕМЫЕ ПОЛЬЗОВАТЕЛИ! ПРОСЬБА КОД СКРИПТОВ ПОМЕЩАТЬ В КОНСТРУКЦИЮ КОДА: ![]() ![]() Также указывайте полный код скрипта, иначе причина ошибок может быть и не выявлена. Прикрепления: 0248203.png(0.9 Kb) · 9085525.png(0.2 Kb)
|
то результат будет равен нулю, если активен, то в переменную будет записан адрес потока Код {$CLEO} 0ADF: add_dynamic_GXT_entry "_TEST1" text "~1~" 0ADF: add_dynamic_GXT_entry "_TEST2" text "NO" while true wait 0 if 0AAA: 0@ = thread 'PLCHUTE' pointer then 01E4: show_text_1number_lowpriority GXT '_TEST1' number 0@ time 1 flag 1 else 00BC: show_text_highpriority GXT '_TEST2' time 1000 flag 1 end end 0A93: end_custom_thread В связи с этим мне нужно знать, не выполняется ли этот поток сейчас, чтобы не вызывать его два раза. Код DEFINE OBJECTS 0 DEFINE MISSIONS 0 DEFINE EXTERNAL_SCRIPTS 0 DEFINE UNKNOWN_EMPTY_SEGMENT 0 DEFINE UNKNOWN_THREADS_MEMORY 574 //-------------MAIN--------------- var $LABELS: array 3 of integer $THREADNAME: array 3 of string end thread 'MAIN' fade 0 0 0629: change_integer_stat 181 to 4 04E4: refresh_game_renderer_at 2488.562 -1666.864 Camera.SetAtPos(2488.562, -1666.864, 13.3757) $PLAYER_CHAR = Player.Create(0, 2488.562, -1666.864, 12.8757) $PLAYER_ACTOR = Actor.EmulateFromPlayer($PLAYER_CHAR) 07AF: $PLAYER_GROUP = player $PLAYER_CHAR group 0180: set_on_mission_flag_to $ONMISSION // Note: your missions have to use the variable defined here Player.SetClothes($PLAYER_CHAR, "VEST", "VEST", Torso) Player.SetClothes($PLAYER_CHAR, "JEANSDENIM", "JEANS", Legs) Player.SetClothes($PLAYER_CHAR, "SNEAKERBINCBLK", "SNEAKER", Shoes) Player.SetClothes($PLAYER_CHAR, "PLAYER_FACE", "HEAD", Head) Player.Build($PLAYER_CHAR) 0793: save_player_clothes Actor.Angle($PLAYER_ACTOR) = 262.0 Camera.SetBehindPlayer Player.CanMove($PLAYER_CHAR) = True 01B7: release_weather Player.Money($PLAYER_CHAR) += 25000 016C: restart_if_wasted_at 1180.85 -1325.57 12.58 angle 271.4 town_number 0 016D: restart_if_busted_at 1550.68 -1675.49 14.51 angle 90.0 town_number 0 fade 1 1000 wait 1000 03E6: remove_text_box $LABELS[0] = @THREAD_1 $LABELS[1] = @THREAD_2 $LABELS[2] = @THREAD_3 s$THREADNAME[0] = 'THREAD_1' s$THREADNAME[1] = 'THREAD_2' s$THREADNAME[2] = 'THREAD_3' create_thread @RUNNER end_thread :RUNNER thread 'RUNNER' 1@ = 250 while true wait 1@ 0209: 0@ = random_int_in_ranges -1 4 0209: 1@ = random_int_in_ranges 0 5000 if and 0@ > -1 3 > 0@ then 0ACE: show_formatted_text_box "OK" if 0AAA: 2@ = thread $THREADNAME[0@] pointer then 0AD1: show_formatted_text_highpriority "NO" time 1@ else create_thread $LABELS[0@] end end end :THREAD_1 thread 'THREAD_1' 0AD1: show_formatted_text_highpriority "Thread 1 active" time 5000 wait 5000 end_thread :THREAD_2 thread 'THREAD_2' 0AD1: show_formatted_text_highpriority "Thread 2 active" time 4000 wait 4000 end_thread :THREAD_3 thread 'THREAD_3' 0AD1: show_formatted_text_highpriority "Thread 3 active" time 3000 wait 3000 end_thread |
Спасибо большое! Так и поступлю, это самый пока что лучший вариант. Если всё сработает, буду дополнительно делать один секретный проект вместо старого секретного проекта.
![]() Добавлено (21.01.15, 00:13) |
BoPoH, вот поэтому мне нужно, чтобы кто-то, кто разбирается в памяти, мог точно сказать, нужно ли это. Сомнения всё ещё есть, но вот одна вещь: я создал актёра, который не реагирует ни на какие внешние воздействия (не убегает и т.п.), но после destroywithfade он при звуках стрельбы резко начинает убегать, как будто сведения были удалены.
|
Vital, покопавшись пару минут в майне, я понял, что удалять референсы нужно только в том случае, если ты получил хэндл случайного прохожего/машины, которая создана игрой. Когда ты получаешь хендл такого педа, то, судя по всему, игра не станет его удалять, как делает это обычно, если игрок удалился на определённое расстояние. Скриптовый движок вешает на него "пометку", что он используется скриптом и что его не нужно уничтожать. RemoveReferences предназначен для того, чтобы убрать эту самую пометку с педа, что позволяет игре удалить его в дальнейшем. Следовательно, удалять референсы за педами, которых ты создаёшь и удаляешь сам, не нужно.
|
BoPoH, спасибо большое за исследование, стало спокойнее.
![]() |
Всем привет!
Был бы очень благодарен, если бы кто-то создал мод, который заставляет оружие и деньги не летать в воздухе, а лежать на земле, как в реальной жизни. (Подобный мод есть на GTA 3). И еще: очень нужен мод, который ограничит перенос оружия ГГ до трех единиц. (А то СЖ носит целый арсенал!) К примеру можно взять пистолет, автомат и снайперку. Больше ничего не поместится! Или можно взять АК-47, М4 и Миниган. Можно взять Дигл, Кольт и Пистолет с глушаком или нож, цветы и биту. То есть три любых вида оружия. (Но не больше!!!) Жду ответа. Отредактировал SINGER - Четверг, 05.02.15, 21:39
|
Не отображаются буквы в панели. Помогите.
// $PLAYER_ACTOR $PLAYER_GROUP $ONMISSION {$CLEO} 0000: while true //1 wait 0 if //2 player.Defined(0) then if and //3 not actor.Dead($PLAYER_ACTOR) not actor.Driving($PLAYER_ACTOR) 0ADC: test_cheat "PANEL" then player.CanMove(0,0) 0ADF: add_dynamic_GXT_entry "T_ON" text "‹kž." 0ADF: add_dynamic_GXT_entry "TOFF" text "‹¨kž." 08D4: 0@ = create_panel_with_title 'DUMMY' position 250.0 170.0 width 70.0 columns 1 interactive 1 background 1 alignment 1 08DB: set_panel 0@ column 0 header 'DUMMY' data 'T_ON' 'TOFF' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' 'DUMMY' while true //4 wait 0 if or //5 actor.Dead($PLAYER_ACTOR) 0741: actor $PLAYER_ACTOR busted 00E1: player 0 pressed_key 15 then break else if //6 00E1: player 0 pressed_key 16 then 08D7: 1@ = panel 0@ active_row if or 1@ == 0 1@ == 1 then break end end //6 end //5 end //4 08DA: remove_panel 0@ player.CanMove(0,1) end //3 end //2 end //1 |
Цитата Не отображаются буквы в панели. Помогите. |
Ладно, напишу здесь тогда. Чтоб сделать так, что пикапы лежали на земле, надо вырубить функцию вращения, затем пройтись по пулу пикапов и всем поменять уровень Z. Вот и все, и тогда можно будет сделать даже как в IV. Добавить корону к пикапу красную, скажем, а для денег зеленую. И будет неплохо смотреться. Можно будет еще повернуть пикап, чтоб он красиво лежал. НО меня останавливает сделать - это лишь функция вращения, я просто не знаю ее адрес, а не что-то там еще.
А что касается 3 видов оружия, тут лучше делать с помощью плагина, а не CLEO. Плагины я писать не умею, может кто-нибудь поможет товарищу из программистов на сайте, там надо перехватить переключение оружия и сделать только три на выбор. Вынести в ini файл допустим номера оружий в каждой группе, ну и самое вкусное сделать, как у Риосаке в плагине по ношению оружия на теле. Добавлено (19.02.15, 12:39) --------------------------------------------- Так ну вроде нашел. Попытаюсь сделать пикапы как в IV) Добавлено (20.02.15, 09:17) --------------------------------------------- Так ну я сделал пока вот так, цветные кружочки не всегда рисуются, потом исправлю, для нетерпеливых выкладываю -> Код {$CLEO} 0A8C: write_memory 0x00454E80 size 1 value 0xC3 virtual_protect 1 0A8C: write_memory 0x00455720 size 1 value 0xC3 virtual_protect 1 while true wait 0 for 0@ = 0x009788C0 to 0x0097D620 step 0x20 0085: 31@ = 0@ // (int) 31@ += 4 0A8D: 30@ = read_memory 31@ size 4 virtual_protect 0 if 30@ == 0 then continue end 31@ += 0x14 0A8D: 29@ = read_memory 31@ size 2 virtual_protect 0 0AEC: 30@ = object_struct 30@ handle if or 29@ == 321 29@ == 322 29@ == 323 29@ == 324 29@ == 325 29@ == 326 then 0453: set_object 30@ XY_rotation 85.0 -90.0 angle -90.0 1@ = 255 2@ = 0 3@ = 0 jump @0 end if 29@ == 331 then 0453: set_object 30@ XY_rotation 85.0 -90.0 angle -90.0 1@ = 255 2@ = 0 3@ = 0 jump @0 end if or 29@ == 333 29@ == 334 29@ == 335 29@ == 336 29@ == 337 29@ == 338 29@ == 339 29@ == 341 then 0453: set_object 30@ XY_rotation 85.0 -90.0 angle -90.0 1@ = 255 2@ = 0 3@ = 0 jump @0 end if or 29@ == 342 29@ == 343 29@ == 344 then 0453: set_object 30@ XY_rotation -3.0 -90.0 angle -93.0 1@ = 255 2@ = 0 3@ = 0 jump @0 end if or 29@ == 346 29@ == 347 29@ == 348 then 0453: set_object 30@ XY_rotation 85.0 -90.0 angle -90.0 1@ = 255 2@ = 0 3@ = 0 jump @0 end if or 29@ == 349 29@ == 350 29@ == 351 then 0453: set_object 30@ XY_rotation 85.0 -90.0 angle -90.0 1@ = 255 2@ = 0 3@ = 0 jump @0 end if or 29@ == 352 29@ == 353 29@ == 372 then 0453: set_object 30@ XY_rotation 85.0 -90.0 angle -90.0 1@ = 255 2@ = 0 3@ = 0 jump @0 end if or 29@ == 355 29@ == 356 then 0453: set_object 30@ XY_rotation 85.0 -90.0 angle -90.0 1@ = 255 2@ = 0 3@ = 0 jump @0 end if or 29@ == 357 29@ == 358 then 0453: set_object 30@ XY_rotation 85.0 -90.0 angle -90.0 1@ = 255 2@ = 0 3@ = 0 jump @0 end if or 29@ == 359 29@ == 360 29@ == 361 29@ == 362 then 0453: set_object 30@ XY_rotation 85.0 -90.0 angle -90.0 1@ = 255 2@ = 0 3@ = 0 jump @0 end if 29@ == 363 then 0453: set_object 30@ XY_rotation 85.0 -90.0 angle -90.0 1@ = 255 2@ = 0 3@ = 0 jump @0 end if 29@ == 364 then 0453: set_object 30@ XY_rotation 85.0 -90.0 angle -90.0 1@ = 255 2@ = 0 3@ = 0 jump @0 end if or 29@ == 365 29@ == 366 29@ == 367 then 0453: set_object 30@ XY_rotation 85.0 -90.0 angle -90.0 1@ = 255 2@ = 0 3@ = 0 jump @0 end if or 29@ == 368 29@ == 369 29@ == 371 then 0453: set_object 30@ XY_rotation 85.0 -90.0 angle -90.0 1@ = 255 2@ = 0 3@ = 0 jump @0 end if 29@ == #money then 0453: set_object 30@ XY_rotation 0.0 0.0 angle 0.0 1@ = 0 2@ = 255 3@ = 0 jump @0 end 0453: set_object 30@ XY_rotation 90.0 -90.0 angle -90.0 1@ = 0 2@ = 0 3@ = 0 :0 0AA6: call_method 0x4549A0 struct 0@ num_params 1 pop 0 26@v if not Player.Defined($player_char) then continue end if 80FE: not actor $PLAYER_ACTOR sphere 0 in_sphere 26@ 27@ 28@ radius 100.0 100.0 100.0 then continue end 02CE: 25@ = ground_z_at 26@ 27@ 28@ 0063: 25@ -= 28@ // (float) 0097: make 25@ absolute_float if 25@ > 2.0 then continue end 02CE: 28@ = ground_z_at 26@ 27@ 28@ 28@ += 0.125 0AA6: call_method 0x454960 struct 0@ num_params 3 pop 0 28@ 27@ 26@ 016F: create_particle 3 rotation_factor 0.0 size 0.5 intensity 255 flags 1@ 2@ 3@ at 26@ 27@ 28@ end end Я немного исправил скрипт, теперь пикапы появляются всегда. Но кружочек появляется только на земле, надо что-то другое придумать. Отредактировал mfisto - Пятница, 20.02.15, 15:15
|
Странно, пытаюсь скомпилировать в Санни, пишет неизвестная команда Wait. Поставил перед ней 0001:, так теперь ругается на команду jump. У меня Sanny Builder 3.2.2.
И кстати, что нужно удались или исправить, чтобы цветных сфер не было? Просто оружие и деньги, без каких либо сфер? Отредактировал SINGER - Пятница, 20.02.15, 19:38
|
просто убрать опкод 016f
|
Ага, понятно. А что с jump'ом делать. Санька, сволочь, компилировать не хочет!
|
замени опкодом 0002
|
Да, с jump'ом сработало, но теперь требует указать код команды для Player.Defined($player_char).
Добавлено (20.02.15, 21:07) |
8256: not player $PLAYER_CHAR defined
|
Цитата для нетерпеливых выкладываю Возможно стоит пикап, что убирает звезду розыска оставить обычной? |
Ну можно, я просто вообще все пикапы сделал на земле)
|
| |||