You are not logged in.
Спасибо за ответы, вроде всё работает.
Voron295 wrote:Странно. Я когда-то тоже использовал стринговые локальные переменные для опкодов анимаций, но всё прекрасно работало. Приведи пример, как ты их используешь.
Я тут поэкспериментировал с переменными, и вот что получилось. У меня там проверка - not Actor.Animation($PLAYER_ACTOR) == 29@v. Т.е. скрипт должен идти дальше только кодга игрок завершит анимацию. Так вот, когда я подставлял переменные 0@v и 1@v, скрипт шёл дальше раньше времени. Когда я подставил 2@v, то всё стало работать как надо. Я проверил мэйн, там использовалась переменная 28@v. С ней тоже работает нормально, так же как и с 29@v. А вот с 30@v получается то же самое, что и с @v и 1@v. Другие значения не проверял.
Следует заметить, что если проверка используется сразу же после воспроизведения этой же анимации, то она не сработает. Нужен разрыв хотя бы в один кадр (wait 0). Как я уже сказал, нельзя использовать эти же переменные для работы с другими типами данных. К примеру, такой код работать не будет:
0@v = "LOWRIDER" 0@ = 25 1@ = 36 04ED: load_animation 0@v
Offline
Вайт там есть, эта проверка у меня в цикле, так что без него там всё равно никак.
Пробовал ставить задерку побольше, сразу после воспроизведения?
Я тоже использовал подобные конструкции, но обычно ставил после воспроизведения задержку в 50-100 мс.
Offline
d88 wrote:Вайт там есть, эта проверка у меня в цикле, так что без него там всё равно никак.
Пробовал ставить задерку побольше, сразу после воспроизведения?
Я тоже использовал подобные конструкции, но обычно ставил после воспроизведения задержку в 50-100 мс.
Поставил на 100. Но вроде и так нормально работало.
Оказалось, что при использовании 29@v не со всеми анимациями проверка срабатывает. Пока заменил на 28@v, стало лучше. Но возможно, ещё выяснится, что и с ней не всё так гладко. Может, действительно не стоит использовать стринговые переменные для кодов с анимациями, но если делать вообще без них, то придётся делать отдельную проверку для каждой анимации, а это будет очень запарно да и просто неудобно.
Кто-нибуль работал с кодами рестарта? Я пытаюсь сделать, чтоб, например, когда игрок погиб или был арестован в пустыне, то он появлялся в том месте, которое я указал опкодами 016C: и 016D:. Это срабатывало только иногда, в основном он появлялся в местах, указанных в мэйне. Я так понимаю, 016E: отменяет рестарт в определённых координатах. Я попробовал применить его ко всем координатам рестартов, которые нашёл в мэйне. Но после этого игрок стал появляться возле полицейского участка в Лас Вентурасе либо возле больницы в том же городе. Можно ли решить эту проблему? Кстати, нашёл ещё опкод 09FF:, но не очень понял, зачем он нужен.
Offline
Оказалось, что при использовании 29@v не со всеми анимациями проверка срабатывает. Пока заменил на 28@v, стало лучше.
Если использовать 29@v, то можно использовать только тексты длиной до 11 символов, так как переменные 32@ и 33@ являются таймерами и изменяют своё значение. "Безопасные" стринговые переменные - от 0@v до 28@v.
Offline
d88 wrote:Оказалось, что при использовании 29@v не со всеми анимациями проверка срабатывает. Пока заменил на 28@v, стало лучше.
Если использовать 29@v, то можно использовать только тексты длиной до 11 символов, так как переменные 32@ и 33@ являются таймерами и изменяют своё значение. "Безопасные" стринговые переменные - от 0@v до 28@v.
Про 0@v и 1@v я уже говорил, что с ними тоже "небезопасно".
А можно узнать, в какую пересенную можно вписать самое большое число символов? Вдруг 28@v таковой не является?
Разве стринговые переменные могут быть таймерами? Они же для текста предназначены.
Offline
Разве стринговые переменные могут быть таймерами? Они же для текста предназначены.
Ты так ничего и не понял. По сути, типов переменных в скриптинге нет. Одну и ту же переменную можно использовать и для целых чисел и для дробных и для текста. Если ты используешь 0@v, значит ты, по сути, используешь 0@. Конечно у тебя 0@v и 1@v не будут "безопасными", если ты будешь записывать в 0@ и 1@ что-либо (целое или дробное число, или хендл какой-нибудь).
Я ведь тебе сказал, что каждая переменная - 4 байта. И целые и дробные числа занимают по 4 байта, поэтому они используют только одну переменную для хранения значения.
Если же ты используешь переменные для хранения текста, то в каждой переменной может поместиться не более 4 символов. Записывая в 0@v текст, к примеру, длиной 15 символов, ты занимаешь переменные 0@, 1@, 2@ и 3@, так как весь текст занимает 15 байтов + 1 байт знака завершения строки (ноль), а в каждой переменной может быть не больше 4 байтов. Всего байтов в 4 переменных - 16. У нас строка как раз занимает эти 16 байтов.
Можно сказать, что 0@v и 0@ - это одно и то же. Если ты запишешь в 0@v = "A", а потом возьмёшь значение из 0@ как целочисленное, то получишь номер ASCII буквы A.
Из этого всего следует, что нужно следить за тем, чтобы переменные, используемые для хранения чисел/хендлов, не пересекались со стринговыми переменными. Использовал 0@v для хранения строки? Не используй 0@, 1@, 2@, 3@ для всего остального.
Offline
Plugin-SDK https://github.com/DK22Pac/plugin-sdk
Discord-сервер по plugin-sdk и программированию в GTA
RU https://discord.gg/QEesDGb
ENG https://discord.gg/zaVqFQv
Offline
Ты так ничего и не понял.
Ну да, мне даже после всего вышесказанного так и не понятно, что же произойдёт, если в 32@v или в 33@v попробовать записать текст.
Новый вопрос - можно ли проверить, что игрока задела пуля неважно от какого оружия? Причём не когда-то раньше, а в данный момент? Проверки анимации не годятся, потому что, к примеру, когда игрок на байке, никакие анимации при попадании не проигрываются.
Offline
Хм, какой-то странный плагиат на этом форуме. Оригинал статьи тут
http://sannybuilder.com/forums/viewtopi … 4124#p4124
Что это за тип gtasbigfoot? Я знаю только одного скриптера из "Russia, Irkutsk" - себя )
edit: там на форуме все мои сообщения накопированы отсюда)
Last edited by Seemann (18-10-2013 19:35)
Offline
Ну да, мне даже после всего вышесказанного так и не понятно, что же произойдёт, если в 32@v или в 33@v попробовать записать текст.
Смотря какого размера текст записать. По сути, с каждым выполнением скриптового движка (после каждого wait) значение 32@ и 33@ изменяется. Как минимум, в них нельзя хранить текст дольше одного кадра. Если использовать их только в текущем кадре (между wait'ами), то в 32@v можно записать 7 символов, а в 33@v - 3 символа. Если записать больше - зайдёшь за пределы памяти локальных переменных. Наверняка вылетит.
Last edited by Voron295 (18-10-2013 20:23)
Offline
Всем доброго времени суток!
Ребята, я пока что только начинаю разбираться с SB, поэтому не ругайтесь за нубские вопросы
Вот в SB есть такой опкод (Vice City)
02D4: car 0@ turn_off_engine
которым можно принудительно заглушить двигатель автомобиля. Вопрос собственно в том, как можно также принудительно завести двигатель, не выходя из автомобиля??
Есть ли для Vice City опкод аналогичный опкоду 0918: для San Andreas?? Или, возможно ли реализовать старт двигателя записью значений в какие либо адреса функций gta-vc.exe (с помощью оп-кода 05DF:) ?? Если да, то подскажите пожалуйста, как найти эти адреса, потому как сам я с IDA пока что "на вы" Заранее спасибо!
Offline
Можно ли скриптом заставить объект вращаться? Я пробовал экспериментировать с анимациями для объектов (для баскетбольного мяча вроде была подходящая), но не получилось. При попытке присвоить анимацию некоторым объектам игра вообще вылетает, а с другими просто ничего не происходит.
И ещё такой вопрос. Можно не указывая определённый ID погоды сделать так, чтобы автоматически установилась именно та солнечная погода, которая должна быть в данной местности?
Offline
05A1: set_object 225@ rotation_velocity_about_an_axis 0.0 151@ 0.0 through_center_of_body 05A2: set_object 82@ rotation_velocity_about_an_axis $TEMPVAR_FLOAT_2 0.0 $TEMPVAR_FLOAT_1 through_center_of_mass
Анимация для объектов работает только для тех объектов, для которых она была сделана (в большинстве случаев). Не каждый объект можно анимировать - только те, которые своей структуре содержат дамми или вообще имеют скелет.
Offline
SASCM.ini не найден Компилятор будет не работать. ЧТо делать ?
Offline
Хочу сделать, чтобы в определенных координатах воспроизводился звук
{$CLEO .cs}
create_thread @Sound
:Sound
03CF: load_wav 11802 as 3
:Sound2
wait 0 ms
if
03D0: wav 3 loaded
jf @Sound2
03D7: set_wav 3 location 316.3344 -1774.5536 4.7667
wait 134000 ms
040D: unload_wav 3
jump @Sound
Написал такой вот скрипт, но после чего игра перестала запускаться. Где я ошибся ?
Offline
чисто в плане логики - зачем выгружать звук и тут же его загружать?
алсо, насколько я помню скриптинг в СА, то ты создал поток и тут же начал его выполнять в создающем потоке, то есть выполняешь свой скрипт одновременно дважды.
Скажи, что нужно исправить
Offline
Написал такой вот скрипт, но после чего игра перестала запускаться. Где я ошибся
Насколько я знаю, CLEO не поддерживает потоки. В этом ошибка.
SASCM.ini не найден Компилятор будет не работать. ЧТо делать ?
Сперва открой SB, а потом открывай файлы (txt или cs). Это баг, я уже о нём отписал в соответствующую тему. Сам вчера с ним столкнулся.
Offline
05A1: set_object 225@ rotation_velocity_about_an_axis 0.0 151@ 0.0 through_center_of_body 05A2: set_object 82@ rotation_velocity_about_an_axis $TEMPVAR_FLOAT_2 0.0 $TEMPVAR_FLOAT_1 through_center_of_massАнимация для объектов работает только для тех объектов, для которых она была сделана (в большинстве случаев). Не каждый объект можно анимировать - только те, которые своей структуре содержат дамми или вообще имеют скелет.
С этими опкодами если сначала задать объекту угол поворота, то при вращении он меняется.
Offline
d88 wrote:С этими опкодами если сначала задать объекту угол поворота, то при вращении он меняется.
Эм... а что тебе именно нужно? Для чего тебе?
Ты Мортал Комбат знаешь? Я делаю мод МК для ГТА. Есть, к примеру, модель стального веера Китаны, так вот я хочу сделать возможность бросать этот объект, но он должен вращаться на лету.
Offline
Есть, к примеру, модель стального веера Китаны, так вот я хочу сделать возможность бросать этот объект, но он должен вращаться на лету.
А чем тебе мешает изменение угла поворота объекта? Как ты себе представляешь вращение объекта без изменения угла поворота объекта?
Нет, есть, конечно, вариант с анимированием объекта... Но это уж если осилишь...
Offline
А чем тебе мешает изменение угла поворота объекта?
Видимо, так и придётся сделать. Просто хотел сначала поискать способ, чтоб вращение было плавным.
Как ты себе представляешь вращение объекта без изменения угла поворота объекта?
Мне казалось, это естественно. С какой стати этот угол поворота меняется? Объект ведь должен просто вращаться вокруг одной из своих осей, а не повернуться одновременно по ещё одной.
Last edited by d88 (16-11-2013 16:14)
Offline
Мне казалось, это естественно. С какой стати этот угол поворота меняется? Объект ведь должен просто вращаться вокруг одной из своих осей, а не повернуться одновременно по ещё одной.
Видимо мы друг-друга не поняли. Ты считаешь, что "угол поворота" - это угол в горизонтальной плоскости (ось Z). Суть в том, что при вращении по оси X (я так понял, именно это тебе нужно) вращение по оси Z на самом деле не происходит. Но функция получения угла Z объекта использует такой метод, который возвращает неправильное значение угла из-за вращения по другой оси (по идее он меняется на угол с разницей в 180 градусов).
Просто хотел сначала поискать способ, чтоб вращение было плавным.
Я так и не понял, почему вращение тем способом, который я указал, не плавное? Что ты имеешь ввиду?
Способ в любом случае есть. Можно даже вручную это делать опкодом 0453, если правильно его использовать.
Offline