#4351 07-10-2013 14:42

Voron295
From: Каушаны
Registered: 06-12-2010
Posts: 425
Website

Re: Один вопрос

RitrS wrote:

А как на счет собейта? Там ведь замедление возможно.

В последних версиях тоже? Тогда не знаю.


Добро всегда побеждает зло. Кто победил, тот и добрый!
userbar.png

Offline

#4352 07-10-2013 18:38

RitrS
From: Downtown
Registered: 11-07-2013
Posts: 62
Website

Re: Один вопрос

Кто подскажет как можно записать в @ урон? Например урон от рук и принимаем урон игроком.

и какие цвета можно использовать и их номера:

0169: set_fade_color 0 0 0

Last edited by RitrS (07-10-2013 18:50)

Offline

#4353 08-10-2013 13:02

Voron295
From: Каушаны
Registered: 06-12-2010
Posts: 425
Website

Re: Один вопрос

RitrS wrote:

и какие цвета можно использовать и их номера:

0169: set_fade_color 0 0 0

Здесь указывается цвет в формате RGB. Т.е. первый параметр - красный цвет, второй - синий, третий - зелёный. Максимум для каждого цвета - 255.
Вот, например, неплохой сайт для получения необходимых параметров RGB - http://www.colorspire.com/rgb-color-wheel/


Добро всегда побеждает зло. Кто победил, тот и добрый!
userbar.png

Offline

#4354 08-10-2013 13:44

RitrS
From: Downtown
Registered: 11-07-2013
Posts: 62
Website

Re: Один вопрос

а что на счет урона? Как мне его записать в @? Мне нужен урон от кулаков, от оружия и урон получаемый игроком.

Offline

#4355 09-10-2013 21:30

Voron295
From: Каушаны
Registered: 06-12-2010
Posts: 425
Website

Re: Один вопрос

RitrS wrote:

а что на счет урона? Как мне его записать в @? Мне нужен урон от кулаков, от оружия и урон получаемый игроком.

Разве что отслеживанием кол-ва ХП. Других вариантов не вижу.


Добро всегда побеждает зло. Кто победил, тот и добрый!
userbar.png

Offline

#4356 10-10-2013 09:17

RitrS
From: Downtown
Registered: 11-07-2013
Posts: 62
Website

Re: Один вопрос

Voron295 wrote:
RitrS wrote:

а что на счет урона? Как мне его записать в @? Мне нужен урон от кулаков, от оружия и урон получаемый игроком.

Разве что отслеживанием кол-ва ХП. Других вариантов не вижу.

а можешь поподробней?

Offline

#4357 10-10-2013 14:31

d88
Registered: 15-12-2009
Posts: 254
Website

Re: Один вопрос

Можно проверить, что координаты находятся вне поля зрения камеры?

Offline

#4358 11-10-2013 04:05

kenking
From: Казахстан
Registered: 28-06-2010
Posts: 253

Re: Один вопрос

d88 wrote:

Можно проверить, что координаты находятся вне поля зрения камеры?

80C2: not sphere_onscreen 1@ 2@ 3@ radius 10.0

Offline

#4359 11-10-2013 13:21

d88
Registered: 15-12-2009
Posts: 254
Website

Re: Один вопрос

kenking wrote:
d88 wrote:

Можно проверить, что координаты находятся вне поля зрения камеры?

80C2: not sphere_onscreen 1@ 2@ 3@ radius 10.0

Спасибо smile

Offline

#4360 11-10-2013 19:21

RitrS
From: Downtown
Registered: 11-07-2013
Posts: 62
Website

Re: Один вопрос

Ну так мне кто то подскажет что мне делать с ХП?

Offline

#4361 12-10-2013 01:36

Den_spb
From: Ленинград
Registered: 23-11-2008
Posts: 941
Website

Re: Один вопрос

Измерить текущие значения здоровья и брони актёра опкодом:

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

#4362 12-10-2013 09:31

RitrS
From: Downtown
Registered: 11-07-2013
Posts: 62
Website

Re: Один вопрос

Так. Понял. Но от каждого оружия разный урон.

Offline

#4363 15-10-2013 13:33

d88
Registered: 15-12-2009
Posts: 254
Website

Re: Один вопрос

Можно ли в cleo использовать глобальные стринговые переменные (v$)? Я пробовал локальные, но они не работают, текст в них не записывался. Но как только я заменил их на глобальные, всё стало работать как надо.

Offline

#4364 15-10-2013 14:26

Voron295
From: Каушаны
Registered: 06-12-2010
Posts: 425
Website

Re: Один вопрос

d88 wrote:

Можно ли в cleo использовать глобальные стринговые переменные (v$)? Я пробовал локальные, но они не работают, текст в них не записывался. Но как только я заменил их на глобальные, всё стало работать как надо.

Локальные тоже прекрасно работают. Синтаксис типа этого - 0@v. Стоит учесть, что стринговая переменная по сути занимает несколько последовательных переменных. В каждой переменной может храниться до 4-ёх символов. Однако текст из тех же 4-ёх символов будет занимать место под 5 символов (т.е. уже 2 переменные), так как нужен ещё и завершающий нуль. Таким образом, максимальный размер текста, хранящегося в стринговой переменной равен 15 символам. Он будет занимать 4 последовательных переменных. Если ты, к примеру, используешь 0@v и запишешь туда текст из 15 символов, то ты не имеешь права использовать переменные 0@ 1@ 2@ 3@ в своём скрипте, после присвоения текста, иначе они перезапишут твой текст.
А вообще, лучше использовать возможности CLEO 4 для работы со строками - выделять память под нужную длину строки и пользоваться функцией format для присвоения текста.


Добро всегда побеждает зло. Кто победил, тот и добрый!
userbar.png

Offline

#4365 15-10-2013 16:23

d88
Registered: 15-12-2009
Posts: 254
Website

Re: Один вопрос

Voron295 wrote:

А вообще, лучше использовать возможности CLEO 4 для работы со строками - выделять память под нужную длину строки и пользоваться функцией format для присвоения текста.

А как именно их использовать? Мне вообще-то стринговые переменные нужны для использования в опкодах с анимацией, соответственно в них будут записаны названия анимаций.
И я спрашивал другое. Может, всё же ничего страшного не случится, если я буду использовать глобальные? Это же гораздо удобнее.

Offline

#4366 15-10-2013 17:02

Den_spb
From: Ленинград
Registered: 23-11-2008
Posts: 941
Website

Re: Один вопрос

А как именно их использовать?

Вбей в поиск опкодов "@v" - получишь все нужные опкоды.
Ещё существуют переменные "@s" - они имеют размер 8 байт, т.е. в 2 раза меньше, чем "@v".
Пример: переменная 0@s занимает в памяти игры место, отведённое под переменные 0@ и 1@.

И я спрашивал другое. Может, всё же ничего страшного не случится, если я буду использовать глобальные? Это же гораздо удобнее.

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

Это же гораздо удобнее.

Чем удобнее?
Если не хватает локальных переменных, то можно хранить данные в hex-буфере.
Если нужны переменные с текстовыми именами, то можно дать имена локальным переменным с помощью конструкции const..end.

Last edited by Den_spb (15-10-2013 17:10)

Offline

#4367 15-10-2013 17:41

Voron295
From: Каушаны
Registered: 06-12-2010
Posts: 425
Website

Re: Один вопрос

d88 wrote:

Мне вообще-то стринговые переменные нужны для использования в опкодах с анимацией, соответственно в них будут записаны названия анимаций.
И я спрашивал другое. Может, всё же ничего страшного не случится, если я буду использовать глобальные? Это же гораздо удобнее.

Не советую использовать стринговые переменные в опкодах анимации. Бывают названия анимаций больше 15 символов.
Вообще глобальные переменные использовать можно, но тогда лучше брать номера побольше (>$9000).


Добро всегда побеждает зло. Кто победил, тот и добрый!
userbar.png

Offline

#4368 15-10-2013 19:51

d88
Registered: 15-12-2009
Posts: 254
Website

Re: Один вопрос

Den_spb wrote:

Чем удобнее?

Мы же о стринговых переменных говорим. Тем и удобнее, что в глобальную можно записать текст длиной больше 4 символов, а в локальные, как оказалось, нельзя.

Voron295 wrote:

Не советую использовать стринговые переменные в опкодах анимации. Бывают названия анимаций больше 15 символов.

Я в данном случае не использую анимации с такими длинными названиями.

Offline

#4369 15-10-2013 20:42

Den_spb
From: Ленинград
Registered: 23-11-2008
Posts: 941
Website

Re: Один вопрос

Тем и удобнее, что в глобальную можно записать текст длиной больше 4 символов, а в локальные, как оказалось, нельзя.

У глобальных и локальных переменных одинаковые размеры.
$, @ - 4 байта
s$, @s - 8 байтов
v$, @v - 16 байтов
Один знак текста кодируется одним байтом.

Last edited by Den_spb (15-10-2013 20:46)

Offline

#4370 16-10-2013 05:40

Voron295
From: Каушаны
Registered: 06-12-2010
Posts: 425
Website

Re: Один вопрос

d88 wrote:

Тем и удобнее, что в глобальную можно записать текст длиной больше 4 символов, а в локальные, как оказалось, нельзя.

В глобальную переменную точно так же можно записать текст длиной 4 символа. А если больше - символы пишутся в следующие переменные, как и в случае с локальными. Суть в том, что глобальные переменные на самом деле не имеют названий и тоже нумеруются, как и локальные. Просто для них были введены имена, чтобы было удобнее с ними работать. К примеру, можно посмотреть соответствие имён и номеров в файле CustomVariables.ini. Когда ты используешь именные переменные в скрипте, то СБ смотрит в этот файл и находит там последний использованный номер и даёт твоей переменной следующий номер. Если в другом скрипте тоже будет использоваться глобальная переменная, то и номер у неё будет тот же. Таким образом, оба скрипта будут использовать одну и ту же переменную под разными именами. Это может вызвать конфликт между скриптами.
Поэтому я тебе и посоветовал использовать номерные глобальные переменные (если уж ты так хочешь их использовать) при чём, брать номера побольше.


Добро всегда побеждает зло. Кто победил, тот и добрый!
userbar.png

Offline

#4371 16-10-2013 13:22

d88
Registered: 15-12-2009
Posts: 254
Website

Re: Один вопрос

Den_spb wrote:

Тем и удобнее, что в глобальную можно записать текст длиной больше 4 символов, а в локальные, как оказалось, нельзя.

У глобальных и локальных переменных одинаковые размеры.
$, @ - 4 байта
s$, @s - 8 байтов
v$, @v - 16 байтов
Один знак текста кодируется одним байтом.

Я просто говорил, что когда я использую в скрипте глобальные стринговые переменные, то всё работает отлично, а когда локальные - ничего не работает. Если дело не в размере, то как тогда это объяснить?

Кстати, насчёт того, почему не рекомендуется использовать глобальные переменные в клео. Теорию я понял. Но были ли у кого-нибудь проблемы на практике? Я когда-то пробовал создать в одном скрипте глобальную переменную а в другом проверить её значение. И ничего не получилось. Кроме того, в клео у меня не получилось работать даже с теми глобальными переменными, которые я сам создал в main.scm.

Offline

#4372 16-10-2013 14:31

d88
Registered: 15-12-2009
Posts: 254
Website

Re: Один вопрос

Появились ещё такие вопросы:
1. Есть проверка, что экран потемнел полностью? Проверка fading срабатывает сразу же, когда он ещё начинает темнеть.
2. Можно ли записать в переменные координаты положения камеры?
3. Как заставить игрока повернуться спиной к камере?

Offline

#4373 16-10-2013 17:01

Den_spb
From: Ленинград
Registered: 23-11-2008
Posts: 941
Website

Re: Один вопрос

2. Можно ли записать в переменные координаты положения камеры?

068D: get_camera_position_to $TEMPVAR_FLOAT_1 $TEMPVAR_FLOAT_2 $TEMPVAR_FLOAT_3

Offline

#4374 16-10-2013 19:00

Voron295
From: Каушаны
Registered: 06-12-2010
Posts: 425
Website

Re: Один вопрос

d88 wrote:

Я просто говорил, что когда я использую в скрипте глобальные стринговые переменные, то всё работает отлично, а когда локальные - ничего не работает. Если дело не в размере, то как тогда это объяснить?

Странно. Я когда-то тоже использовал стринговые локальные переменные для опкодов анимаций, но всё прекрасно работало. Приведи пример, как ты их используешь.

d88 wrote:

Я когда-то пробовал создать в одном скрипте глобальную переменную а в другом проверить её значение. И ничего не получилось. Кроме того, в клео у меня не получилось работать даже с теми глобальными переменными, которые я сам создал в main.scm.

Я уже сказал, что если ты просто назовёшь переменные как хочешь, то они получат какой-нибудь произвольный номер из незанятых (ну, почти). Компилятор не знает, какой номер получила переменная в майне, чтобы потом использовать его в скрипте клео для того же имени. Почитай в справке раздел CLEO 3 Code Library -> FAQ по CLEO 3. Там есть вопрос "Почему в CLEO-скриптах нельзя использовать глобальные переменные? Что тогда использовать?" и подробный ответ на него.

d88 wrote:

Появились ещё такие вопросы:
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@. Я не проверял, но должно работать.


Добро всегда побеждает зло. Кто победил, тот и добрый!
userbar.png

Offline

#4375 17-10-2013 10:27

d88
Registered: 15-12-2009
Posts: 254
Website

Re: Один вопрос

Спасибо за ответы, вроде всё работает.

Voron295 wrote:

Странно. Я когда-то тоже использовал стринговые локальные переменные для опкодов анимаций, но всё прекрасно работало. Приведи пример, как ты их используешь.

Я тут поэкспериментировал с переменными, и вот что получилось. У меня там проверка -   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

Board footer

Powered by FluxBB