You are not logged in.
У меня работает=)
Offline
Мне нуно чтоб тачи ходили по определенным координатам. гворят этими опкодами мона 05D7
07E7..
Offline
Для таких вопросов есть соответствующий форум
http://sannybuilder.com/forums/viewforum.php?id=5
В этой теме обсуждается только CLEO 3
Offline
А я вот что-то забыл. CLEO скриптам можно давать имена потоков опкодом 03A4:?
P.S. вроде вопрос касается клео:D
Last edited by flashTrash (07-06-2008 20:03)
Offline
Можно.
Offline
0ABA: end_custom_thread_named 'BENZIN'Если будут ошибки в новой версии - пишите.
Пишу -
когда доходит до этого опкода - гта са вылетает.
возможно будет работать если эта THREAD будет в том же скрипте, но если в другом - то вылетает
кстати вопрос в тему: допустим, есть два клео скрипта с двумя thread`ами (по одному в каждом).
как их объединить (что нужно в начале общего скрипта написать) чтобы не пришлось ничего переписывать чтобы не запутаться ?
Offline
Удивительно, перепроверил опкод еще раз - у меня работает (в один скрипт добавил 03A4: 'FLOWER', во второй 0ABA: 'FLOWER'. Первый поток прекратился). Покажи свой код.
Народ, у кого-нибудь еще есть проблемы с новым опкодом?
допустим, есть два клео скрипта с двумя thread`ами (по одному в каждом).
как их объединить
задача не ясна. Зачем их объединять?
Last edited by Seemann (08-06-2008 17:50)
Offline
2AlphaOmega.
У меня опкод работает замечательно. Завершает один поток из другого. Напиши, как называется поток, который ты пытаешься завершить? У меня имя потока небыло задано, соответственно имя давалось по названию .cs файла, и 0ABA: прекрасно работает.=)
Добавленно.
Опаздал на 2 минуты:D
Last edited by flashTrash (08-06-2008 17:48)
Offline
перепроверил опкод еще раз - у меня работает. Покажи свой код.
Дело в том, что у меня ДВА СКРИПТА. Я из ПЕРВОГО хочу завершить ВТОРОЙ.
Код завершения - одна строчка как у тебя в цитате, только с именем THREAD которая заана во втором скрипте.
допустим, есть два клео скрипта с двумя thread`ами (по одному в каждом).
как их объединитьзадача не ясна. Зачем их объединять?
Ну если нельзя из одного script1.cs остановить thread второго script2.cs - тогда нужно их объединить чтобы можно было завершить thread....
p.s.: скрипт два - один регулирует траффик по времени суток, а другой - ядерный взрыв после которого в радиусе нескольких километров плотность трафика становится равным нулю..... да вот только первый скрипт мешает второму
Offline
в файле nuclear.cs прописываю где надо
0ABA: end_custom_thread_named 'TRAFFIC'
второй называется traffic.cs
вылетает
Offline
Я создал файл traffic.cs с бесконечным циклом, в котором давались деньги игроку. В другом скрипте вызвал 0ABA: end_custom_thread_named 'TRAFFIC'. Деньги прекратили капать => поток Traffic прекратился.
Проблема скорее всего не в опкоде, а в скриптах. Попробуй проверить на другом скрипте.
Offline
Я создал файл traffic.cs с бесконечным циклом, в котором давались деньги игроку. В другом скрипте вызвал 0ABA: end_custom_thread_named 'TRAFFIC'. Деньги прекратили капать => поток Traffic прекратился.
Приведи скрипт с твоим трафиком - посмотрю как он у тебя задан там поток...
Offline
traffic.cs
{$CLEO} 0000: while true wait 0 0109: player $PLAYER_CHAR money += 1 end
В другом файле
if 0AB0: key_pressed 84 // t then 0ABA: 'TRAFFIC' end
Last edited by Seemann (08-06-2008 18:17)
Offline
Версия CLEO 3.0.950 с тремя новыми опкодами готова для тестирования.
http://cleo.sannybuilder.com/cleo3.rar
Новые опкоды:
0ABD: vehicle 0@ siren_on
проверяет, включена ли сирена (мигалки) на машине 0@
0ABE: vehicle 0@ engine_on
проверяет, запущен ли двигатель у машины 0@
0ABF: set_vehicle 0@ engine_state_to 0
включает/выключает двигатель машины 0@
Для компиляции опкодов нужно добавить в конец SASCM.INI следующие строки:
0ABD=1, vehicle %1d% siren_on 0ABE=1, vehicle %1d% engine_on 0ABF=2,set_vehicle %1d% engine_state_to %2d%
Данное обновление содержит в себе ряд исправлений, связанных с опкодами 0AB1, 0AB2. В частности, теперь можно вызывать одну функцию из другой (раньше такой вызов приводил к "затиранию" значений локальных переменных).
Также в архив включен новый ASI Loader от listener'а.
Качаем, тестируем, отписываемся.
P.S. Кстати, стоит отметить, что CLEO 3 достиг рубежа в 50 рабочих опкодов (+2 зарезервированных). А максимальное число опкодов, которое в принципе можно добавить в CLEO, равно 100.
Last edited by Seemann (20-07-2008 04:27)
Offline
Пока всё супер! Это хорошо, что можно видеть сколько скриптов подключено. А то я их иной раз пересчитываю
Offline
Ответьте мне пожалуйста.
Почему в cleo нельзя использовать глобальные переменные? Хочу уяснить себе это раз и навсегда.
Offline
0ABA: 'TRAFFIC'
Всё. Теперь работает. Прична неработоспособности была (как оказалось) в старой версии клео
Кстати о новой версии - а можно ли убрать снизу надпись версии скрипта и кол-ва загруженных скриптов?
Offline
Ответьте мне пожалуйста.
Почему в cleo нельзя использовать глобальные переменные? Хочу уяснить себе это раз и навсегда.
Когда мы компилируем main.scm вместе со всеми миссиями и скриптами, все глобальные переменные получают свой ID (порядковый номер). Часть из них получает ID всегда один и тот же (например, $PLAYER_CHAR компилируется как $2, $PLAYER_ACTOR - $3 и т.п.). Это справедливо для всех глобальных переменных, которые определены в CustomVariables.ini
Этот порядковый номер означает номер ячейки в памяти игры, где хранится значение переменной. Понятное дело, этот номер должен быть уникальным для каждой переменной. Иными словами, каждая переменная должна быть скомпилирована с уникальным ID.
Все остальные переменные компилируются следующих образом. Если имя переменной не найдено в CustomVariables.ini, то она компилируется с номером, который идет следом за наибольшей использованной переменной в скрипте. Звучит сложновато, поэтому пояcню на примере:
Простой скрипт из 2х строк:
$PLAYER_CHAR = 1 $MYVAR = 1
$PLAYER_CHAR компилируется как $2. Значит, переменная $MYVAR, которая не содержится в CustomVariables.ini и имя которой не числовое, будет скомпилирована как $3.
(на самом деле там будет не $3, потому что $3 зарезервировано для $PLAYER_ACTOR, поэтому $MYVAR получит первое свободное имя - $4
Другой пример
$PLAYER_CHAR = 1 $MYVAR = 1 $100 = 1
Наибольшая переменная в скрипте теперь $100, поэтому $MYVAR станет $101.
Такой механизм позволяет присвоить каждой переменной свое уникальное имя.
В main.scm все новые переменные получают имена при компиляции начиная с $10948, т.к. $10947 наибольшая переменная, использованная в оригинальном main.scm.
Теперь вернемся к CLEO-скриптам. Каждый раз, когда мы компилируем новый скрипт, компилятор не знает ничегошеньки про состояние main.scm и сколько переменных в нем использовалось. Он именует переменные с нуля каждый раз. Это значит, что если ты сделаешь два скрипта, в которых будет:
в одном скрипте
$MYVAR = 1
в другом скрипте
$MYVAR1 = 1
то обе переменные будут скомпилированы как:
$4 = 1
несмотря на то, что имена у них разные. И каждый раз компилятор будет в новом клео-скрипте именовать переменные, начиная с $4. Эффект, думаю, ясен. Переменные будут использовать одну и ту же ячейку памяти и менять значения друг друга. Если ты в одном скрипте запишешь актера в $MYVAR, а в другом в $MYVAR1 = 0, то когда первый скрипт обратится к $MYVAR, он прочитает не актера, а 0, т.к. обе переменные используют 4-ю ячейку памяти.
Другая ситуация - это выход за пределы памяти для глобальных переменных. Например, обычный stripped имеет размер памяти для глобальных переменных в 409 ячеек, поскольку наибольшая использованная переменная $ONMISSION это $409. Предположим, мы создали клео-скрипт:
$ONMISSION = 1 $MYVAR = 0
Как будет скомпилирована переменная $MYVAR, если вы поняли, о чем я говорил выше ? Правильный ответ $411. $ONMISSION это $409, поэтому переменная должна бы стать $410, но этот ID уже зарезервирован для $Help_SprayCan_Shown (см. CustomVariables.ini). Поэтому первый свободный номер это $411.
Вернемся теперь к stripped. Размер памяти-то у него так и остался - 409 (если бы $MYVAR = 0 компилировалась в майне, то память была бы увеличена до 411). Поэтому когда клео-скрипт будет работать с переменной $MYVAR, ее значения будут читаться и писаться за пределами дозволенной области памяти. В худшем случае, такие переменные будут менять код самого main.scm (опкоды и параметры), что неминуемо повлечет вылет.
Offline
Seemann wrote:0ABA: 'TRAFFIC'
Всё. Теперь работает. Прична неработоспособности была (как оказалось) в старой версии клео
Кстати о новой версии - а можно ли убрать снизу надпись версии скрипта и кол-ва загруженных скриптов?
Убрать нельзя. А чем она мешает?
Offline
Спасибо, Seemann. Очень доходчиво) И если я всё правильно поняла, то если main без прохождения миссий, я могу в cleo использовать незадействованные переменные, например, $ACTOR_RYDER. Да?
Offline
Лучше этого не делать. Потому что например у меня в моем майне эта переменная может использоваться
Offline
Ну, мне-то это не грозит. Потому-что main от Seemannа я еще не встречала ) Даже как-то странно...
Но в любом случае я перепроверила бы - задействована переменная или нет. А то ведь у меня теперь такой простор для поля деятельности образовался...)
В общем, как я поняла, пользоваться можно
Offline
Ошибаешься, мой майн поставляется вместе с Sanny Builder и зовется stripped.txt
В общем, как я поняла, пользоваться можно
ну, мое дело предупредить...
Offline
AlphaOmega wrote:Кстати о новой версии - а можно ли убрать снизу надпись версии скрипта и кол-ва загруженных скриптов?
Убрать нельзя. А чем она мешает?
В принципе ни чем, только как-то крупно она. Может просто уменшьить? до размеров системного 6 - 8 пунктов. А то выглядит как 12-14 - крупновато. Бросается в глаза (я просто люблю чтобы было эстетично и красиво).
Offline
@AlphaOmega - надпись слегка уменьшил и сделал ее масштабируемой (т.е. теперь она на всех разрешениях выглядит одинаково). Совсем мелкой ее сделать тоже нельзя, ибо на маленьких игровых разрешениях (640x480, 800x600) надпись становится нечитабельной.
Перезалил архив с CLEO 3 v3.0.950.
Last edited by Seemann (14-06-2008 08:31)
Offline