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

Slivkin-Sergey
Модераторы
23.05.14 18:33
Offline
Цитата BoPoH ()
Этот буфер по сути - часть скрипта, поэтому он выгружается и загружается вместе со скриптом.

Это значит?..
Цитата BoPoH ()
ставить хук в игровой процесс

Из всего многообразия софта для моддинга ГТАшки в данном случае могу вспомнить лишь RedirectCall из паковского PluginSDK.
Код
inline static void RedirectCall(int address, void *func)
{
int temp = 0xE8;
Patch((void *)address, &temp, 1);
temp = (int)func - ((int)address + 5);
Patch((void *)((int)address + 1), &temp, 4);
}

Или есть какие-то иные способы?

Добавлено (23.05.14, 17:33)
---------------------------------------------
Хотя, даже если и... Постойте. А не проще ли скомплировать dll'ку с асм-вставкой? Из Сишного кода вроде...
*спустя 30 минут*
В общем, я не представляю, как можно внедрить хук в игру из скрипта. А если из библиотеки, то фиг потом вернёшь управление хекс-вставке.
Отредактировал Slivkin-Sergey - Пятница, 23.05.14, 18:35

BoPoH
Друзья
23.05.14 18:48
Offline
Цитата Slivkin-Sergey ()
Это значит?..
Ты спросил, очищается ли эта память. Что означает слово "очищается" в твоём понятии? Память нужно выгружать, а не очищать при завершении приложения. В данном случае, это происходит само, при выгрузке скрипта (т.е. при начале новой игры или загрузке сохранения или же при выходе из игры).

Цитата Slivkin-Sergey ()
В общем, я не представляю, как можно внедрить хук в игру из скрипта. А если из библиотеки, то фиг потом вернёшь управление хекс-вставке.
Ты для начала определись, для чего тебе это нужно, что ты хочешь сделать с ассемблером? Использовать ассемблер не так уж практично в данном случае. Проще выучить C++ и писать плагины.

Добавлено (23.05.14, 17:48)
---------------------------------------------

Цитата Slivkin-Sergey ()
Из всего многообразия софта для моддинга ГТАшки в данном случае могу вспомнить лишь RedirectCall из паковского PluginSDK.
Именно это и есть установка хука - подмена вызова какой-либо функции в игре на вызов своей функции. В своей функции ты самостоятельно вызываешь функцию, которую подменил (чтобы не нарушать работу игры), а затем выполняешь нужные тебе действия.

Slivkin-Sergey
Модераторы
24.05.14 08:53
Offline
Цитата BoPoH ()
Именно это и есть установка хука - подмена вызова какой-либо функции в игре на вызов своей функции. В своей функции ты самостоятельно вызываешь функцию, которую подменил (чтобы не нарушать работу игры), а затем выполняешь нужные тебе действия.

Разве я бы употреблял термин, не осведомившись о его значении?
Цитата BoPoH ()
Ты спросил, очищается ли эта память. Что означает слово "очищается" в твоём понятии?

Я не спрашивал про память, я спрашивал за хекс буфер. Пишется ли значение в сам буфер в файле или исключительно в памяти игры, которая при завершении стирается?
Цитата BoPoH ()
Использовать ассемблер не так уж практично в данном случае. Проще выучить C++ и писать плагины.

Может и проще, но мне плагин не нужен, мне нужен именно ассемблерный код внутри scm, а точнее - внутри внешнего скрипта.
Отредактировал Slivkin-Sergey - Суббота, 24.05.14, 08:54

BoPoH
Друзья
24.05.14 12:12
Offline
Цитата Slivkin-Sergey ()
Я не спрашивал про память, я спрашивал за хекс буфер. Пишется ли значение в сам буфер в файле или исключительно в памяти игры, которая при завершении стирается?
Хекс буфер и память равносильны по своему значению. Игра загружает скрипты в память, а следовательно, хекс буфер тоже, ведь он находится внутри скрипта. Весь скрипт можно считать участком памяти. Когда ты записываешь значение в хекс буфер, ты записываешь его в тот участок памяти, где находится этот хекс буфер. Файл на жёстком диске не изменяется.
Цитата Slivkin-Sergey ()
Разве я бы употреблял термин, не осведомившись о его значении?
Ну, мне показалось, что ты решил уточнить назначение функции redirectCall.

Nikkei
Пользователи
28.05.14 23:14
Offline
Доброго вечера. Вот решил заняться скриптами cleo. И захотелось мне сделать вот что в SAMP`e:
Нажимаешь кнопку, допустим F5 и мне ставятся чекпоинты, как на гонке. Мне нужно так: Сделайте пожалуйста что-то типо гонки, т.е. ты наезжаешь\находишь на чекпоинт, он пропадает и появляется следующий, и так 3-4 чекпоинта. а там я разберуусь,  и сделаю что и куда направить. И чуть описания, что за что отвечает.

wmysterio
Администраторы
Скриптер
29.05.14 01:01
Offline
Цитата Nikkei ()
Доброго вечера. Вот решил заняться скриптами cleo. И захотелось мне сделать вот что в SAMP`e:Нажимаешь кнопку, допустим F5 и мне ставятся чекпоинты, как на гонке. Мне нужно так: Сделайте пожалуйста что-то типо гонки, т.е. ты наезжаешь\находишь на чекпоинт, он пропадает и появляется следующий, и так 3-4 чекпоинта. а там я разберуусь, и сделаю что и куда направить. И чуть описания, что за что отвечает.
Приветствую. Если ставить чекпонты во время игры на сервере SAMP, то чекпоинты будут появляться только на клиентской машине, то есть они будут видны только у вашей ГТА. Если нужно чтобы видили все, то cleo не подходит для такой разработки.

По-поводу "наезжать/находиться на чекпоинте", то в этом уроке написан алгоритм такой такой возможности.

Nikkei
Пользователи
29.05.14 13:48
Offline
Крч мне нужны такие опкоды (с примером если можно)
Что-бы при входе в один чекпоинт создавался другой (дальше я скопирую на сколько мне надо)
Конечный чекпоинт (при входе в него, он пропадает. а на экран выводится (если возможно)  - complete)

Slivkin-Sergey
Модераторы
29.05.14 19:31
Offline
Возможно ли сделать так, чтобы при перезапуске Vice City данные о созданных мной объектах НЕ терялись? Ну или если бы их можно было бы сохранить где-нибудь, а потом достать.

Михан500
Пользователи
29.05.14 21:17
Offline
Как сделать чтобы игрок отлетел в какую-то сторону?

BoPoH
Друзья
29.05.14 21:32
Offline
Цитата Михан500 ()
Как сделать чтобы игрок отлетел в какую-то сторону?

Код
083C: set_actor $PLAYER_ACTOR velocity_in_direction_XYZ 0.0 0.0 0.0

Михан500
Пользователи
29.05.14 22:20
Offline
Спасибо, а вот еще два вопроса:
1)Как сделать что бы бочка летела в сторону игрока.
2)Как сделать что бы игрок отлетал с помощью 083с летел назад всегда
(083C: set_actor $PLAYER_ACTOR velocity_in_direction_XYZ -20.0 0.0 9.0
пойдет?).

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)
---------------------------------------------
И еще один вопрос, как сделать чтобы светофоры горели желтым светом всегда?


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