[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 97 из 128«129596979899127128»
Форум » Игры серии 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)

BoPoH
Друзья
29.05.14 23:47
Offline
Цитата Михан500 ()
1)Как сделать что бы бочка летела в сторону игрока.
 
Код
actor.storepos($PLAYER_ACTOR, 1@, 2@, 3@)
object.storepos(0@, 4@, 5@, 6@)
0063: 1@ -= 4@  // (float)
0063: 2@ -= 5@  // (float)
0063: 3@ -= 6@  // (float)
0381: throw_object 0@ velocity_in_direction 1@ 2@ 3@
Ну, этот способ не совсем правильный, я бы сказал. Тут скорость объекта будет зависеть от расстояния между бочкой и игроком. Если нужно контролировать силу броска, то надо разделить вектор на его длину, а затем умножить на необходимый коэффициент.

Цитата Михан500 ()
2)Как сделать что бы игрок отлетал с помощью 083с летел назад всегда (083C: set_actor $PLAYER_ACTOR velocity_in_direction_XYZ -20.0 0.0 9.0
пойдет?).
Во-первых, назад - это ось Y, а не X.
Во-вторых, в общем случае опкод 083C работает относительно глобальной системы отсчёта. Поэтому для игрока "назад" не всегда будет означать отрицательное значение по оси Y в глобальной системе отсчёта. Исходя из своего опыта, могу сказать, что опкод 083C работает довольно странно при разных условиях. Предпочитаю использовать его так:
Код
083C: set_actor $PLAYER_ACTOR velocity_in_direction_XYZ 0.0 0.0 10.0
wait 0
actor.StorePos($PLAYER_ACTOR, 1@, 2@, 3@)
04C4: store_coords_to 4@ 5@ 6@ from_actor $PLAYER_ACTOR with_offset 0.0 -20.0 9.0
0063: 4@ -= 1@  // (float)
0063: 5@ -= 2@  // (float)
0063: 6@ -= 3@  // (float)
083C: set_actor $PLAYER_ACTOR velocity_in_direction_XYZ 4@ 5@ 6@

Так он срабатывает как положено.

Михан500
Пользователи
30.05.14 05:18
Offline
Спасибо, cейчас опробую.

Добавлено (30.05.14, 04:18)
---------------------------------------------
Да, этот оппкод просто так работает странно, я изменял ось X, а он летел либо назад, либо вперед, либо в сторону.


Slivkin-Sergey
Модераторы
30.05.14 18:24
Offline
Так что по моему вопросу? Или это нереально?

BoPoH
Друзья
30.05.14 18:57
Offline
Цитата Slivkin-Sergey ()
Так что по моему вопросу? Или это нереально?
Что подразумевается под "перезапуском"? Полный перезапуск игры? Или начало новой игры через меню? Или загрузка сохранения? Теоретически, можно записать данные в файл. Просто не понятно, в какой момент нужно читать эти данные.

Добавлено (30.05.14, 17:57)
---------------------------------------------

Цитата Михан500 ()
Да, этот оппкод просто так работает странно, я изменял ось X, а он летел либо назад, либо вперед, либо в сторону.
Я же говорю, он работает основываясь на глобальной системе отсчёта, а не локальной для игрока. Поэтому при разных углах разворота игрока, он действует по-разному.

Slivkin-Sergey
Модераторы
30.05.14 19:47
Offline
Цитата BoPoH ()
Полный перезапуск игры?

Именно.
Цитата BoPoH ()
Теоретически, можно записать данные в файл.

Я тоже так думал, пока не осознал, что таких опкодов для ВС просто нет.

Добавлено (30.05.14, 18:47)
---------------------------------------------
Читать данные нужно, конечно, сразу после начала работы скрипта.


BoPoH
Друзья
30.05.14 21:23
Offline
Цитата Slivkin-Sergey ()
Я тоже так думал, пока не осознал, что таких опкодов для ВС просто нет.
Т.е. там есть клео, но в этом клео нет таких опкодов? Круто... А есть там SDK? Чтоб свои плагины для клео писать?

Slivkin-Sergey
Модераторы
30.05.14 23:17
Offline
Там, если не ошибаюсь, ничего нет из СА, кроме работы с памятью и всяческими смещениями и структурами. Ни тебе аудиостримов, ни ини файлов...
Цитата BoPoH ()
А есть там SDK? Чтоб свои плагины для клео писать?

В игре встроенная поддержка аси плагинов, насколько я знаю. Пишешь плагин и помещаещь в папку с игрой, CLEO так и работает. Насчёт SDK точно не уверен, у меня лежит одна папка - CLEO_SDK, и там исходники всех модулей для работы с файлами, про совместимость ничего не сказано. Я однажды попробовал GXTHook на Вайс Сити поставить - вылет, поставил троицу для работы с файлами - ничего вроде, только пользы никакой, что с ними делать, "куда тыкнуть, чтоб заработало"?..

BoPoH
Друзья
31.05.14 00:22
Offline
Нда, никаких там SDK нету, а то, что ты видел - это для SA. А во встроенных возможностях CLEO нету даже работы с модулями (dll). Короче лажа полная. Я не вижу тут вариантов для твоего скрипта. Ну, разве что писать плагин вместо скрипта.

Михан500
Пользователи
31.05.14 23:54
Offline
Нужно сделать так, чтобы игрок, начал притягиваться к другому актеру, с помощью 083C:
У самого сделать не получается.

Добавлено (31.05.14, 22:54)
---------------------------------------------
И еще один вопрос, как сделать чтобы светофоры горели желтым светом всегда?


SanKing
Друзья
01.06.14 13:46
Offline
Цитата Михан500 ()
И еще один вопрос, как сделать чтобы светофоры горели желтым светом всегда?
Это делается через адреса памяти. Я лично не знаю как.

Slivkin-Sergey
Модераторы
05.06.14 15:36
Offline
Блин, ну в упор ничего здесь не вижу... При старте игра просто виснет.
Код
:CURTASK_1
wait 0
if
Player.Defined($PLAYER_CHAR)
jf @CURTASK_1
0A8D: 0@ = read 0xBA67A4 1 0
if
0@ == 1
jf @CURTASK_1
0A8C: write 0x53BF8A 0x2 0x9090 1
0A8C: write 0x53BF96 0x6 0x90 1
0A8C: write 0x58FCC2 0x4 0x90909090 1
0A8C: write 0x58D4BE 0x8 0x90 1
while true
wait 0
03F0: enable_text_draw 1  
0343: set_text_draw_linewidth 300.0
03E4: enable_text_draw_align_right 1  
060D: draw_text_shadow 1 color_RGBA 0 0 0 255  
0340: set_text_draw_RGBA 0 255 0 255
045A: draw_text_1number 60.0 10.10 GXT 'DOLLAR' number 1  //$~1~
end

BoPoH
Друзья
05.06.14 17:13
Offline
Цитата Slivkin-Sergey ()
Блин, ну в упор ничего здесь не вижу... При старте игра просто виснет.
Ну, я не знаю, из-за чего у тебя там виснет... т.к. у меня ничего не виснет с этим скриптом. (я надеюсь, у тебя там в начале скрипта есть опкод 0000, если ты скинул весь код скрипта)
Вопрос в другом - в чём смысл проверки на открытость меню? До того, как ты поставишь нопы, скриптовый движок выполняться не будет.
Сперва нужно поставить нопы, а затем выполнять нужные тебе проверки, связанные с меню.
Отредактировал BoPoH - Четверг, 05.06.14, 17:14

Slivkin-Sergey
Модераторы
05.06.14 20:14
Offline
Цитата BoPoH ()
Вопрос в другом - в чём смысл проверки на открытость меню? До того, как ты поставишь нопы, скриптовый движок выполняться не будет.

В каком смысле "скриптовый движок выполняться не будет"? Вообще никакие скрипты? Или я что-то недопонял?..
Цитата BoPoH ()
(я надеюсь, у тебя там в начале скрипта есть опкод 0000, если ты скинул весь код скрипта)

У меня перед этим кодом только:
Код
:CURTASK
thread 'CURTASK'

Но thread - это ведь кейворд для опкода, так что с этим проблем быть не должно.

Добавлено (05.06.14, 17:33)
---------------------------------------------
Переставил нопы в начало скрипта, результат ещё хуже, теперь, как говорил СтепанГТ, "игра так зависла, что у меня комп форматировался на, ФИГ...". Если нопы после проверки - при нажатии на Win хоть Панель задач выскакивает, можно вырубить процесс, а сейчас пришлось перезагружаться, ибо даже Диспетчер не помог.

Добавлено (05.06.14, 17:43)
---------------------------------------------
Упс, извини, что наговорил тут, я просто ставил тематический тестовый скрипт от пака, а stdvars.txt у меня отродясь не было! Всё работает, но почему-то текст не выводится обыкновенным приоритетным опкодом.

Добавлено (05.06.14, 19:14)
---------------------------------------------
Вот ещё:

Код
if
Player.Defined($PLAYER_CHAR)
jf @CURTASK_1
wait 2500
0A8C: write 0x53BF8A size 2 value 0x9090 vp 1
0A8C: write 0x53BF96 size 6 value 0x90 vp 1
0A8C: write 0x58FCC2 size 4 value 0x90909090 vp 1
0A8C: write 0x58D4BE size 8 value 0x90 vp 1
repeat
wait 0
0A8D: 0@ = read 0xBA67A4 1 0
until 0@ == 1
01E5: show_text_1number_highpriority GXT 'DOLLAR' number 1 time 5000 flag 1
while true
wait 0
03F0: enable_text_draw 1  
03E4: enable_text_draw_align_right 0
060D: draw_text_shadow 1 color_RGBA 0 0 0 255  
0340: set_text_draw_RGBA 255 255 255 170
033E: set_draw_text_position 550.0 400.0 GXT 'TEST'
045A: draw_text_1number 550.0 420.0 GXT 'DOLLAR' number 1 // $~1~
end

Теперь текст выводится, но только когда зайду-выйду в меню 3-5 раз.
Отредактировал Slivkin-Sergey - Четверг, 05.06.14, 18:34

BoPoH
Друзья
06.06.14 15:18
Offline
Цитата Slivkin-Sergey ()
Теперь текст выводится, но только когда зайду-выйду в меню 3-5 раз.
У меня всё нормально выводится, дважды проверил.

Slivkin-Sergey
Модераторы
06.06.14 22:59
Offline
Хм-м, да уж, любит моя ГТАшка повыкидывать фокусы всякие. Буду разбираться...

А пока у меня есть вопрос по коду твоей скм-функции, который ты оставлял несколько постов выше.
Цитата BoPoH ()
:EnableActorsCollision // 0AB1: @EnableActorsCollision 0

Не мог бы ты прокомментировать её строки? В частности, мне непонятны назначения некоторых команд, как, например, 12@ -= 1.

BoPoH
Друзья
07.06.14 00:01
Offline
Цитата Slivkin-Sergey ()
Не мог бы ты прокомментировать её строки? В частности, мне непонятны назначения некоторых команд, как, например, 12@ -= 1.
Изначально в эту переменную я считываю максимальное кол-во педов в пуле. Но, т.к. я использую это значение в условии цикла

Код
for 4@ = 0 to 12@
 то нужно знать об одной важной вещи. В SB цикл for распознаётся таким образом, что цикл продолжает выполняться пока переменная 4@ не станет больше 12@. Если они равны, цикл также выполняется. Учитывая то, что отсчёт мы ведём с нуля, а не с единицы, то последним "ID" педа, который мы проверяем будет равен максимальному кол-ву педов минус один. Если у нас было максимальное кол-во педов 140, то последний ID педа будет 139. Для этого я и отнимаю от максимального кол-ва педов единицу.

Slivkin-Sergey
Модераторы
07.06.14 19:41
Offline
А что насчёт строк
Цитата BoPoH ()
0A8D: 11@ = read_memory 10@ size 4 virtual_protect 0 // CPed Array

Цитата BoPoH ()
10@ += 8

Цитата BoPoH ()
0085: 5@ = 4@
5@ *= 0x7C4
5@ += 0x18
005A: 5@ += 11@
0A8D: 6@ = read_memory 5@ size 4 virtual_protect 0 // RwObject
if
6@ > 0
then
5@ -= 0x18

?

BoPoH
Друзья
07.06.14 23:32
Offline
Я думаю, так будет проще:

Код
:EnableActorsCollision // 0AB1: @EnableActorsCollision 0  
actor.StorePos($PLAYER_ACTOR, 0@, 1@, 2@) // Записываем позицию игрока в 0@, 1@, 2@
0A8D: 10@ = read_memory 0xB74490 size 4 virtual_protect 0 // Читаем в 10@ указатель на пул педов
0A8D: 11@ = read_memory 10@ size 4 virtual_protect 0 // Читаем в 11@ указатель на массив педов
10@ += 8 // Смещение по которому в структуре пула записано максимальное кол-во педов
0A8D: 12@ = read_memory 10@ size 4 virtual_protect 0 // Читаем в 12@ максимальное кол-во педов в пуле
12@ -= 1 // Отнимаем от максимального кол-ва педов единицу
// Нужно для того, чтобы не перейти границу массива

for 4@ = 0 to 12@ // В цикле перебираем всех педов в пуле
       0085: 5@ = 4@  // Записываем в 5@ текущий ID (номер итерации в цикле); делаем это для того, чтобы потом не изменять переменную 4@
       5@ *= 0x7C4 // Умножаем ID на размер структуры педа
       005A: 5@ += 11@ // Теперь складываем указатель на массив педов и смещение, по которому будет находиться пед с указанным ID
      // Сейчас у нас в 5@ находится указатель на педа с ID равному текущей итерации в цикле
       5@ += 0x18 // Прибавляем смещение, по котому записан RwObject педа
       0A8D: 6@ = read_memory 5@ size 4 virtual_protect 0 // Читаем его в переменную 6@
       if  
       6@ > 0 // Если указатель больше нуля, значит пед с таким ID действительно существует
       then  
           5@ -= 0x18 // Отнимаем смещение RwObject, которое мы прибавили ранее, так мы снова получим указатель на педа
           0AEA: 7@ = actor_struct 5@ handle // Получаем скриптовый хендл педа  
           if and  
           87D6: not 7@ == $PLAYER_ACTOR // ставим необходимые проверки  
           80DF: not actor 7@ driving  
           then  
               0619: enable_actor 7@ collision_detection 1 // производим необходимое действие с педом  
           end  
       end  
end  
0AB2: ret 0

В принципе, проверку на существование педа, можно было реализовать по-другому:

Код
005A: 5@ += 11@ // Теперь складываем указатель на массив педов и смещение, по которому будет находиться пед с указанным ID
      // Сейчас у нас в 5@ находится указатель на педа с ID равному текущей итерации в цикле
       0AEA: 7@ = actor_struct 5@ handle // Получаем скриптовый хендл педа
       if  
       actor.Defined(7@) // Проверяем существование педа
       then
           if and  
           87D6: not 7@ == $PLAYER_ACTOR // ставим необходимые проверки  
           80DF: not actor 7@ driving  
           then  
               0619: enable_actor 7@ collision_detection 1 // производим необходимое действие с педом  
           end  
       end

Михан500
Пользователи
10.06.14 20:37
Offline
Необходимо защитить main.scm от декомпилирования, как в dyom v8.1.

BoPoH
Друзья
11.06.14 04:36
Offline
Цитата Михан500 ()
Необходимо защитить main.scm от декомпилирования, как в dyom v8.1.
А то там особо важная информация biggrin
Ребят, любую "защиту" можно сломать. При чём очень просто.
Ну, я не знаю, какая там в диоме "защита" стоит, но можно попробовать подменить хекс-редактором какой-нибудь опкод в майне на несуществующий. Хотя такое легко декомпилируется при включенной опции IGNORE_UNKNOWN...
Лично я когда-то практиковал удаление одного байта в хекс-коде опкода 0000. SB просто зависал при декомпиляции.

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