You are not logged in.
и какие цвета можно использовать и их номера:
0169: set_fade_color 0 0 0
Здесь указывается цвет в формате RGB. Т.е. первый параметр - красный цвет, второй - синий, третий - зелёный. Максимум для каждого цвета - 255.
Вот, например, неплохой сайт для получения необходимых параметров RGB - http://www.colorspire.com/rgb-color-wheel/
Offline
Offline
Offline
Можно проверить, что координаты находятся вне поля зрения камеры?
80C2: not sphere_onscreen 1@ 2@ 3@ radius 10.0
Offline
Измерить текущие значения здоровья и брони актёра опкодом:
0226: 0@ = actor $PLAYER_ACTOR health 04DD: 1@ = actor $PLAYER_ACTOR armour
Через нужное время измерения повторить:
0226: 2@ = actor $PLAYER_ACTOR health 04DD: 3@ = actor $PLAYER_ACTOR armour
Найти разницу в значениях:
0062: 3@ -= 1@ // (int) 0062: 2@ -= 0@ // (int)
Чем выше был урон, тем сильнее уменьшится здоровье и броня.
Offline
Можно ли в cleo использовать глобальные стринговые переменные (v$)? Я пробовал локальные, но они не работают, текст в них не записывался. Но как только я заменил их на глобальные, всё стало работать как надо.
Локальные тоже прекрасно работают. Синтаксис типа этого - 0@v. Стоит учесть, что стринговая переменная по сути занимает несколько последовательных переменных. В каждой переменной может храниться до 4-ёх символов. Однако текст из тех же 4-ёх символов будет занимать место под 5 символов (т.е. уже 2 переменные), так как нужен ещё и завершающий нуль. Таким образом, максимальный размер текста, хранящегося в стринговой переменной равен 15 символам. Он будет занимать 4 последовательных переменных. Если ты, к примеру, используешь 0@v и запишешь туда текст из 15 символов, то ты не имеешь права использовать переменные 0@ 1@ 2@ 3@ в своём скрипте, после присвоения текста, иначе они перезапишут твой текст.
А вообще, лучше использовать возможности CLEO 4 для работы со строками - выделять память под нужную длину строки и пользоваться функцией format для присвоения текста.
Offline
А вообще, лучше использовать возможности CLEO 4 для работы со строками - выделять память под нужную длину строки и пользоваться функцией format для присвоения текста.
А как именно их использовать? Мне вообще-то стринговые переменные нужны для использования в опкодах с анимацией, соответственно в них будут записаны названия анимаций.
И я спрашивал другое. Может, всё же ничего страшного не случится, если я буду использовать глобальные? Это же гораздо удобнее.
Offline
А как именно их использовать?
Вбей в поиск опкодов "@v" - получишь все нужные опкоды.
Ещё существуют переменные "@s" - они имеют размер 8 байт, т.е. в 2 раза меньше, чем "@v".
Пример: переменная 0@s занимает в памяти игры место, отведённое под переменные 0@ и 1@.
И я спрашивал другое. Может, всё же ничего страшного не случится, если я буду использовать глобальные? Это же гораздо удобнее.
Если в игру установлены два или более клео-скриптов, в которых используются глобальные переменные, то они могут конфликтовать друг с другом. Поэтому глобальные переменные использовать в клео-скриптах не стоит - качественный скрипт не должен влиять на работу других скриптов.
Это же гораздо удобнее.
Чем удобнее?
Если не хватает локальных переменных, то можно хранить данные в hex-буфере.
Если нужны переменные с текстовыми именами, то можно дать имена локальным переменным с помощью конструкции const..end.
Last edited by Den_spb (15-10-2013 17:10)
Offline
Мне вообще-то стринговые переменные нужны для использования в опкодах с анимацией, соответственно в них будут записаны названия анимаций.
И я спрашивал другое. Может, всё же ничего страшного не случится, если я буду использовать глобальные? Это же гораздо удобнее.
Не советую использовать стринговые переменные в опкодах анимации. Бывают названия анимаций больше 15 символов.
Вообще глобальные переменные использовать можно, но тогда лучше брать номера побольше (>$9000).
Offline
Чем удобнее?
Мы же о стринговых переменных говорим. Тем и удобнее, что в глобальную можно записать текст длиной больше 4 символов, а в локальные, как оказалось, нельзя.
Не советую использовать стринговые переменные в опкодах анимации. Бывают названия анимаций больше 15 символов.
Я в данном случае не использую анимации с такими длинными названиями.
Offline
Тем и удобнее, что в глобальную можно записать текст длиной больше 4 символов, а в локальные, как оказалось, нельзя.
У глобальных и локальных переменных одинаковые размеры.
$, @ - 4 байта
s$, @s - 8 байтов
v$, @v - 16 байтов
Один знак текста кодируется одним байтом.
Last edited by Den_spb (15-10-2013 20:46)
Offline
Тем и удобнее, что в глобальную можно записать текст длиной больше 4 символов, а в локальные, как оказалось, нельзя.
В глобальную переменную точно так же можно записать текст длиной 4 символа. А если больше - символы пишутся в следующие переменные, как и в случае с локальными. Суть в том, что глобальные переменные на самом деле не имеют названий и тоже нумеруются, как и локальные. Просто для них были введены имена, чтобы было удобнее с ними работать. К примеру, можно посмотреть соответствие имён и номеров в файле CustomVariables.ini. Когда ты используешь именные переменные в скрипте, то СБ смотрит в этот файл и находит там последний использованный номер и даёт твоей переменной следующий номер. Если в другом скрипте тоже будет использоваться глобальная переменная, то и номер у неё будет тот же. Таким образом, оба скрипта будут использовать одну и ту же переменную под разными именами. Это может вызвать конфликт между скриптами.
Поэтому я тебе и посоветовал использовать номерные глобальные переменные (если уж ты так хочешь их использовать) при чём, брать номера побольше.
Offline
Тем и удобнее, что в глобальную можно записать текст длиной больше 4 символов, а в локальные, как оказалось, нельзя.
У глобальных и локальных переменных одинаковые размеры.
$, @ - 4 байта
s$, @s - 8 байтов
v$, @v - 16 байтов
Один знак текста кодируется одним байтом.
Я просто говорил, что когда я использую в скрипте глобальные стринговые переменные, то всё работает отлично, а когда локальные - ничего не работает. Если дело не в размере, то как тогда это объяснить?
Кстати, насчёт того, почему не рекомендуется использовать глобальные переменные в клео. Теорию я понял. Но были ли у кого-нибудь проблемы на практике? Я когда-то пробовал создать в одном скрипте глобальную переменную а в другом проверить её значение. И ничего не получилось. Кроме того, в клео у меня не получилось работать даже с теми глобальными переменными, которые я сам создал в main.scm.
Offline
Появились ещё такие вопросы:
1. Есть проверка, что экран потемнел полностью? Проверка fading срабатывает сразу же, когда он ещё начинает темнеть.
2. Можно ли записать в переменные координаты положения камеры?
3. Как заставить игрока повернуться спиной к камере?
Offline
Я просто говорил, что когда я использую в скрипте глобальные стринговые переменные, то всё работает отлично, а когда локальные - ничего не работает. Если дело не в размере, то как тогда это объяснить?
Странно. Я когда-то тоже использовал стринговые локальные переменные для опкодов анимаций, но всё прекрасно работало. Приведи пример, как ты их используешь.
Я когда-то пробовал создать в одном скрипте глобальную переменную а в другом проверить её значение. И ничего не получилось. Кроме того, в клео у меня не получилось работать даже с теми глобальными переменными, которые я сам создал в main.scm.
Я уже сказал, что если ты просто назовёшь переменные как хочешь, то они получат какой-нибудь произвольный номер из незанятых (ну, почти). Компилятор не знает, какой номер получила переменная в майне, чтобы потом использовать его в скрипте клео для того же имени. Почитай в справке раздел CLEO 3 Code Library -> FAQ по CLEO 3. Там есть вопрос "Почему в CLEO-скриптах нельзя использовать глобальные переменные? Что тогда использовать?" и подробный ответ на него.
Появились ещё такие вопросы:
1. Есть проверка, что экран потемнел полностью? Проверка fading срабатывает сразу же, когда он ещё начинает темнеть.
2. Можно ли записать в переменные координаты положения камеры?
3. Как заставить игрока повернуться спиной к камере?
1)
0A8D: 0@ = read_memory 0xB6FC24 size 4 virtual_protect 0
Когда экран полностью тёмный, значение 0@ будет равно 255. Тип - float.
2) Опкод 068D
3) Если ты о том, как вычислить угол поворота игрока, при котором он будет стоять спиной к камере, то нужно всего лишь вычислить угол камеры:
068D: get_camera_position_to 0@ 1@ 2@ 068E: get_camera_target_point_to 2@ 3@ 4@ 0063: 2@ -= 0@ 0063: 3@ -= 1@ 0604: get_Z_angle_for_point 2@ 3@ store_to 4@
В данном случае, угол запишется в переменную 4@. Я не проверял, но должно работать.
Offline
Спасибо за ответы, вроде всё работает.
Странно. Я когда-то тоже использовал стринговые локальные переменные для опкодов анимаций, но всё прекрасно работало. Приведи пример, как ты их используешь.
Я тут поэкспериментировал с переменными, и вот что получилось. У меня там проверка - not Actor.Animation($PLAYER_ACTOR) == 29@v. Т.е. скрипт должен идти дальше только кодга игрок завершит анимацию. Так вот, когда я подставлял переменные 0@v и 1@v, скрипт шёл дальше раньше времени. Когда я подставил 2@v, то всё стало работать как надо. Я проверил мэйн, там использовалась переменная 28@v. С ней тоже работает нормально, так же как и с 29@v. А вот с 30@v получается то же самое, что и с @v и 1@v. Другие значения не проверял.
Last edited by d88 (17-10-2013 10:29)
Offline